OpenVINO 101:從圖像識(shí)別到視頻識(shí)別(上)
筆者:梁羽
本文引用地址:http://www.ex-cimer.com/article/202109/428499.htm計(jì)算機(jī)視覺(CV)是人工智能研究的熱點(diǎn)方向之一,其核心在于如何讓機(jī)器“看見”和“理解”——通過算法從照片、視頻等媒介中提取高層次信息并加以利用。
隨著全球計(jì)算能力和數(shù)據(jù)量的雙增長,計(jì)算機(jī)視覺取得了長足的進(jìn)展,在自動(dòng)駕駛、智能安防、體育運(yùn)動(dòng)(如記錄分析運(yùn)動(dòng)員跑姿就使用了AI助力的人體姿勢估計(jì))等領(lǐng)域遍地開花。
運(yùn)動(dòng)生物力學(xué)專家分析蘇炳添訓(xùn)練時(shí)的跑姿
英特爾3DAT技術(shù)1(三維運(yùn)動(dòng)員跟蹤),基于OpenVINO框架開發(fā)
一般來說,常見的計(jì)算機(jī)視覺任務(wù)基于靜止的單幀圖像進(jìn)行,主要采用機(jī)器學(xué)習(xí)和深度學(xué)習(xí)兩類方法。
在GPU算力足以支持復(fù)雜神經(jīng)網(wǎng)絡(luò)之前,機(jī)器學(xué)習(xí)方法一度是計(jì)算機(jī)視覺領(lǐng)域的金標(biāo)準(zhǔn),作為代表的有用于圖像分類的支持向量機(jī)(SVM)、用于特征提取的Bag-of-Features模型(SIFT、MSER等)、用于人臉識(shí)別的Viola-Jones算法等。這些經(jīng)典算法大多在開源計(jì)算機(jī)視覺庫OpenCV中有實(shí)現(xiàn),可以參考網(wǎng)上的入門資料(比如這篇【OpenCV+Python計(jì)算機(jī)視覺導(dǎo)學(xué)】2)進(jìn)行學(xué)習(xí),在此不再展開。
而后,以2015年為界,神經(jīng)網(wǎng)絡(luò)在ImageNet圖片分類比賽中超越人類水平3,拉開了深度學(xué)習(xí)在計(jì)算機(jī)視覺領(lǐng)域大量應(yīng)用的序幕?;谏疃葘W(xué)習(xí)的圖片識(shí)別以卷積神經(jīng)網(wǎng)絡(luò)(CNN)進(jìn)行特征提取、多層感知機(jī)(MLP)進(jìn)行分類,并在其上衍生出了注意力機(jī)制、FPN、Transformer、NAS等新架構(gòu)和研究方法,在計(jì)算機(jī)視覺任務(wù)的準(zhǔn)確度、運(yùn)行速度和泛用性上都有很大提升。
使用深度學(xué)習(xí)進(jìn)行對(duì)象檢測/對(duì)象跟蹤
設(shè)備算力的增長也帶來了另一個(gè)好處,計(jì)算機(jī)視覺學(xué)者們得以將目標(biāo)從圖片轉(zhuǎn)向視頻,讓算法端到端地捕捉視頻每一幀之間的關(guān)系。通過單幀圖像,算法能知道某一瞬間的情況(場景里有哪些物體、戶外是晴天還是雨天),而基于視頻的識(shí)別能夠挖掘出更多信息,例如讓計(jì)算機(jī)理解一段時(shí)間內(nèi)發(fā)生的事件:
圖片識(shí)別:“場景里有兩個(gè)運(yùn)動(dòng)員?!?/em>
視頻識(shí)別:“場景里的兩個(gè)運(yùn)動(dòng)員正在打羽毛球?!?/em>
在開始介紹視頻相關(guān)的算法前,我們將先從圖像識(shí)別開始,對(duì)基于深度學(xué)習(xí)的計(jì)算機(jī)視覺有些概念上的認(rèn)識(shí)。
主流圖像識(shí)別算法
典型的圖像分類網(wǎng)絡(luò)(VGG-16)
眾多圖像識(shí)別算法中,圖片分類任務(wù)最基礎(chǔ)也最重要:通過為圖片分類任務(wù)訓(xùn)練神經(jīng)網(wǎng)絡(luò),可以得到在其他任務(wù)也能使用的主干網(wǎng)絡(luò)(base network/backbone network)。主干網(wǎng)絡(luò)負(fù)責(zé)從圖像中抽取出高層的抽象特征,基于這些抽象特征可實(shí)現(xiàn)分類、檢測、分割等任務(wù)。如上圖架構(gòu)中輸出224*224*64的卷積層到輸出14*14*512的卷積層就是一種主干網(wǎng)絡(luò)(VGG-16)。
對(duì)神經(jīng)網(wǎng)絡(luò)算法進(jìn)行選型,一般考慮兩組指標(biāo):準(zhǔn)確率,以及網(wǎng)絡(luò)的參數(shù)量(params)和浮點(diǎn)運(yùn)算次數(shù)(FLOPs)。準(zhǔn)確率是量化算法本身效果的指標(biāo),而浮點(diǎn)運(yùn)算次數(shù)和參數(shù)量可以被用來衡量模型的復(fù)雜度,前者描述了神經(jīng)網(wǎng)絡(luò)需要的計(jì)算能力,后者描述了運(yùn)行神經(jīng)網(wǎng)絡(luò)需要的內(nèi)存大小(也表明了部署模型需要的硬盤空間/網(wǎng)絡(luò)帶寬)。
在終端設(shè)備部署神經(jīng)網(wǎng)絡(luò)時(shí),不同類型的設(shè)備(桌面GPU/桌面CPU/Movidus等專用VPU/樹莓派等ARM架構(gòu)設(shè)備)對(duì)復(fù)雜度有不同的要求。對(duì)于嵌入式設(shè)備部署,如一些人臉識(shí)別和智慧安防類應(yīng)用,就應(yīng)選擇盡可能輕量的模型來達(dá)到實(shí)時(shí)處理的目標(biāo)。其他情況下,就需要因地制宜地在模型準(zhǔn)確度和復(fù)雜度中取得平衡,挑選最適合自己應(yīng)用的算法模型。
實(shí)際使用中,我們都希望使用運(yùn)算量盡可能小、而準(zhǔn)確度盡可能高的神經(jīng)網(wǎng)絡(luò)。為了實(shí)現(xiàn)這堪稱刁難的需求,深度學(xué)習(xí)學(xué)家們使用了網(wǎng)絡(luò)架構(gòu)搜索(NAS)技術(shù)來自動(dòng)化地進(jìn)行神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)。
圖片分類
常用的主干網(wǎng)絡(luò)模型
(左圖為ImageNet Top-1準(zhǔn)確率,右圖為模型準(zhǔn)確率/浮點(diǎn)運(yùn)算數(shù)對(duì)比)
具體到圖像識(shí)別分類任務(wù)所使用的主干網(wǎng)絡(luò)來看,作為結(jié)果之一,Google提出了EfficientNet?,一個(gè)對(duì)網(wǎng)絡(luò)準(zhǔn)確度和模型復(fù)雜度進(jìn)行聯(lián)合優(yōu)化的神經(jīng)網(wǎng)絡(luò)家族。
EfficientNet的模型參數(shù)量-準(zhǔn)確率對(duì)比
當(dāng)然,網(wǎng)絡(luò)設(shè)計(jì)只是第一步,真正要用起來還有訓(xùn)練、優(yōu)化部署等步驟。一般來說,神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)的訓(xùn)練是最為繁瑣的,其中涉及到遠(yuǎn)遠(yuǎn)大于部署階段的計(jì)算能力、大型數(shù)據(jù)集和超參數(shù)調(diào)優(yōu),因此對(duì)于通用目的的神經(jīng)網(wǎng)絡(luò),采用公開的預(yù)訓(xùn)練模型是最常見的做法。
對(duì)于OpenVINO框架來說,預(yù)訓(xùn)練模型和神經(jīng)網(wǎng)絡(luò)的優(yōu)化器都已經(jīng)集成在框架中一起提供,前文提到的EfficientNet和其他主干網(wǎng)絡(luò)的都可以從GitHub上的官方模型庫下載得到。
對(duì)象檢測
目標(biāo)檢測模型基于主干網(wǎng)絡(luò)提取的特征來進(jìn)行識(shí)別,而根據(jù)識(shí)別和分類物體的內(nèi)部實(shí)現(xiàn)來說,主流對(duì)象檢測網(wǎng)絡(luò)可以分成Anchor-based的兩階段檢測器和單階段檢測器,以及Anchor-Free的目標(biāo)檢測器。
Faster-RCNN(Anchor-based二階段檢測器代表)
Faster-RCNN模型架構(gòu)圖
兩階段檢測器由候選區(qū)域網(wǎng)絡(luò)(RPN)和分類器構(gòu)成。候選區(qū)域網(wǎng)絡(luò)基于主干網(wǎng)絡(luò)生成的特征,在圖片中劃分出潛在的感興趣區(qū)域(RoI),并將這些其余和先前得到的特征一并送進(jìn)分類器,得到每個(gè)候選框的具體分類。
Faster-RCNN以模型的復(fù)雜度作為代價(jià),換來了相對(duì)較高的識(shí)別準(zhǔn)確度。其處理一張圖片需要約200ms(5FPS),離實(shí)時(shí)處理還是有一些距離。
SSD/YOLO(Anchor-based一階段檢測器代表)
YOLO v3模型架構(gòu)圖
以YOLO v3為例,輸入的圖片會(huì)先被劃分為數(shù)個(gè)單元格,每個(gè)單元格上會(huì)預(yù)測出一些識(shí)別框和對(duì)應(yīng)的分類。在訓(xùn)練時(shí),YOLO v3會(huì)根據(jù)訓(xùn)練集中檢測框的大小和位置做預(yù)先學(xué)習(xí),尋找出最常見的檢測框位置,并根據(jù)這些線索來劃分單元格。
與Faster-RCNN等二階段檢測器不同,YOLO和SSD會(huì)同時(shí)進(jìn)行候選框和目標(biāo)分類的預(yù)測,從而節(jié)省了性能開銷。一般較小的YOLO模型都可以在30ms內(nèi)處理完成一張圖片,達(dá)到實(shí)時(shí)速度。
Anchor-free檢測器
DETR模型架構(gòu)圖
無論是Anchor-based還是Anchor-free方法,目標(biāo)檢測器想要解決的核心問題都是如何預(yù)測檢測框和類別。這一類的檢測器代表有CenterNet等基于點(diǎn)的方法、FCOS等利用FPN進(jìn)行多尺度預(yù)測的模型,以及上圖DETR等基于Transformer的模型。
因?yàn)榫W(wǎng)絡(luò)結(jié)構(gòu)簡單,Anchor-free對(duì)于工業(yè)應(yīng)用會(huì)更加友好,而且其網(wǎng)絡(luò)架構(gòu)上和實(shí)例分割等任務(wù)更接近,有實(shí)現(xiàn)多功能的潛力。
小結(jié)
在這篇文章中,筆者簡單介紹了圖像識(shí)別,以及用深度學(xué)習(xí)進(jìn)行計(jì)算機(jī)視覺任務(wù)的相關(guān)內(nèi)容。圖像識(shí)別的相關(guān)示例可以參考這篇【OpenVINO開發(fā)實(shí)戰(zhàn)課程】中的錄播教程進(jìn)行學(xué)習(xí),注冊(cè)eepw賬號(hào)后即可獲取~
下篇中,我們會(huì)關(guān)注視頻理解的相關(guān)算法,以及逐步教學(xué)如何使用OpenVINO進(jìn)行視頻識(shí)別,一定要關(guān)注哦!
參考資料
[1]騰訊網(wǎng),2021/3/17報(bào)道,《擺脫傳統(tǒng)監(jiān)測手段,英特爾3DAT成體育訓(xùn)練數(shù)據(jù)分析“神器”》,https://new.qq.com/rain/a/20210317A03E6J00
[2]EEPW論壇,作者zhuzhaokun1987,【原創(chuàng)】【AI人工智能系列】OpenCV+Python計(jì)算機(jī)視覺導(dǎo)學(xué)——目錄匯總(點(diǎn)擊目錄可跳轉(zhuǎn)對(duì)應(yīng)章節(jié),長期更新),http://forum.eepw.com.cn/thread/337725/1
[3]微軟亞洲研究院(MSRA)在2015年發(fā)表的工作,作者何愷明等,Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification,https://arxiv.org/pdf/1502.01852.pdf
[4]Google于2019年發(fā)表在ICML上的工作,作者M(jìn)ingxing Tan等,EfficientNet:Rethinking Model Scaling for Convolutional Neural Networks,https://arxiv.org/pdf/1905.11946v5.pdf
評(píng)論