1、計(jì)算機(jī)視覺
1.1什么是計(jì)算機(jī)視覺
計(jì)算機(jī)視覺是一門研究如何使機(jī)器“看”的科學(xué)慨亲。更進(jìn)一步說混槐,就是指用攝影機(jī)和電腦代替人眼對(duì)目標(biāo)進(jìn)行識(shí)別、跟蹤和測量等視覺動(dòng)作歼跟,并進(jìn)一步做圖像處理和媳,使計(jì)算機(jī)處理后的圖像更適合人眼觀察或儀器檢測。
作為一個(gè)科學(xué)學(xué)科哈街,計(jì)算機(jī)視覺研究相關(guān)的理論和技術(shù)留瞳,試圖建立能夠從圖像或者多維數(shù)據(jù)中獲取“信息”的人工智能系統(tǒng)
1.2計(jì)算機(jī)視覺的應(yīng)用
計(jì)算機(jī)視覺現(xiàn)在已經(jīng)被應(yīng)用于多種領(lǐng)域中,是人工智能目前最火的領(lǐng)域之一
> 無人駕駛
> 無人安防
> 人臉識(shí)別
> 文字識(shí)別
> 車牌識(shí)別
> 以圖搜圖
> VR/AR
> 3D重構(gòu)
> 醫(yī)學(xué)圖像分析
> 無人機(jī)
> 其它
1.3圖像和視頻
> 圖像
一張圖片包含了:維數(shù)骚秦、高度她倘、寬度璧微、深度、通道數(shù)硬梁、顏色格式前硫、數(shù)據(jù)首地址、結(jié)束地址靶溜、數(shù)據(jù)量等等
> 視頻
原始視頻=圖片序列开瞭,視頻中的每張有序圖片稱為“幀(frame)”。壓縮后的視頻會(huì)采取各種算法減少數(shù)據(jù)的容量
> 具體解釋
圖像的深度指的是存儲(chǔ)每一個(gè)像素所用到的位數(shù)罩息,當(dāng)每個(gè)像素存儲(chǔ)所需要的容量越大的話嗤详,則深度越深,顏色越豐富
圖像使用的壓縮格式以及編碼決定了圖像的大小
灰度圖單通道瓷炮、RGB是四通道葱色、16位圖兩通道等等
對(duì)視頻分析時(shí),先要了解視頻的結(jié)構(gòu)和特點(diǎn)娘香。如果碼率和幀率很低苍狰,很多算法是不work的
IPB,一種視頻壓縮算法烘绽,即壓縮后只存三種幀淋昭,I幀(關(guān)鍵幀,圖片的完整保留安接,最重要)翔忽、P幀(這一幀與上一關(guān)鍵幀之間的差別)、B幀(雙向差別幀盏檐,與上一個(gè)關(guān)鍵幀的差別和于下一幀的差別)
現(xiàn)在更多不是用硬盤讀取了歇式,而是用網(wǎng)絡(luò)存儲(chǔ),所以現(xiàn)在都是用網(wǎng)絡(luò)攝像頭了
碼率:單位時(shí)間的數(shù)據(jù)傳輸數(shù)胡野;也就是采樣率材失,單位時(shí)間的采樣個(gè)數(shù)
幀率:每秒多少幀
分辨率:圖像質(zhì)量
1.4 計(jì)算機(jī)視覺與其它學(xué)科的關(guān)系
> 計(jì)算機(jī)視覺、機(jī)器視覺和圖像處理的區(qū)別
> 三者都涉及了圖像的處理
> 計(jì)算機(jī)視覺偏軟件處理硫豆,一般和應(yīng)用場景相關(guān)
> 機(jī)器視覺更多涉及硬件的結(jié)合龙巨,包括機(jī)器人、工業(yè)級(jí)的攝像機(jī)够庙、工業(yè)檢測
> 圖像處理更多是對(duì)圖進(jìn)行轉(zhuǎn)換恭应、變形
2、硬件環(huán)境與軟件環(huán)境
2.1 CPU versus GPU
> 性能(低延時(shí)性)耘眨、吞吐量:CPU是低延時(shí)性,低吞吐量境肾;GPU是高吞吐量剔难,高延時(shí)性
> GPU的Cache小胆屿,其是通過高并發(fā)多線程的方式來搞吞吐的處理簡單計(jì)算,所以用來處理圖片十分方便偶宫。因?yàn)樘幚韴D片是將圖片分成很多小塊非迹,然后分別對(duì)每一塊進(jìn)行處理
> 由于計(jì)算機(jī)視覺涉及大量的矩陣運(yùn)算,所以使用GPU纯趋,通過它高并發(fā)的特點(diǎn)能大大的提高運(yùn)行速度
2.2 Open Source Frameworks
2.2.1計(jì)算機(jī)視覺開源算法庫
> OpenCV
OpenCV作為計(jì)算機(jī)視覺的一個(gè)開源軟件庫已經(jīng)存在了很多年了憎兽,其輕量且高效,是由一系列的C函數(shù)和少量C++類構(gòu)成吵冒。OpenCV提供了Python纯命、Ruby、MatLab等語言的接口痹栖,實(shí)現(xiàn)了圖像處理以及計(jì)算機(jī)視覺方面的許多通用算法亿汞。
2.2.2深度學(xué)習(xí)開源框架
> TensorFlow (Google)
> PyTorch (Facebook)
> Caffe2 (Facebook)
> CNTK (Microsoft)
> MXNet (Amazon)
> Paddle (Baidu)
……
1)現(xiàn)狀分析
計(jì)算機(jī)視覺領(lǐng)域的很多應(yīng)用都是基于深度學(xué)習(xí)算法的,應(yīng)該說深度學(xué)習(xí)算法在準(zhǔn)確性方向已經(jīng)全面超過了以前的經(jīng)典機(jī)器學(xué)習(xí)算法揪阿,所以要想對(duì)CV有深度的理解疗我,了解目前這些主流的深度學(xué)習(xí)開源框架就十分有必要了。
上邊列舉的是目前熱度比較高的深度學(xué)習(xí)框架南捂,而且在每個(gè)開源框架后邊的括號(hào)中吴裤,我標(biāo)示出了目前該框架主要是由哪些公司在負(fù)責(zé)運(yùn)營∧缃。可以看出麦牺,每款框架其實(shí)都有著大廠在后邊支撐著的。這第一保證了開源社區(qū)的活躍性矿瘦,其次也確保了這些框架都是在實(shí)際業(yè)務(wù)場景中被使用著的枕面。
下邊我將對(duì)其中兩款框架進(jìn)行簡單的介紹
2)TensorFlow介紹
TensorFlow是Google在2015年開源的一款深度學(xué)習(xí)框架,目前已經(jīng)成為了最火的深度學(xué)習(xí)框架之一缚去。
相比于其它的深度學(xué)習(xí)框架潮秘,TensorFlow構(gòu)建的神經(jīng)網(wǎng)絡(luò)是靜態(tài)的,這代表著用戶必須在程序一開始就將神經(jīng)網(wǎng)絡(luò)構(gòu)建好易结,而不能(或者說很麻煩)根據(jù)反饋動(dòng)態(tài)調(diào)整網(wǎng)絡(luò)枕荞。這是被很多開發(fā)者所詬病的地方,但是也有不少人認(rèn)為這種方式的網(wǎng)絡(luò)能更好的適應(yīng)Google自家的TPU處理器搞动。
因?yàn)橛蠫oogle背書躏精,哪怕TensorFlow有著令人詬病的靜態(tài)網(wǎng)絡(luò)結(jié)構(gòu),它也成為了最火的深度學(xué)習(xí)開源框架鹦肿。這使得有很多的新的組件和功能包被開發(fā)者們不斷的開發(fā)出來矗烛,比如Keras,TFLearn箩溃,TensorLayer等
3)PyTorch介紹
PyTorch的前身是Torch瞭吃,而Torch主要是基于Lua這個(gè)小眾編程語言編寫的碌嘀,這導(dǎo)致Torch常年問津人數(shù)稀少。在經(jīng)過Facebook的AI研究團(tuán)隊(duì)的重新編寫后歪架,PyTorch因?yàn)槠鋬?yōu)雅的設(shè)計(jì)重新進(jìn)入人們的視野股冗,并成為最熱門的深度學(xué)習(xí)開源框架之一。
相對(duì)于TensorFlow的靜態(tài)網(wǎng)絡(luò)結(jié)構(gòu)和蚪,PyTorch構(gòu)建的網(wǎng)絡(luò)是動(dòng)態(tài)的止状,這使得PyTorch能在RNN動(dòng)態(tài)時(shí)間長度輸出的問題上有更好的表現(xiàn)。
2.2.3圖像識(shí)別開源框架
> OpenFace(人臉識(shí)別)
OpenFace是在深度學(xué)習(xí)開源框架torch上實(shí)現(xiàn)的基于python語言的人臉識(shí)別開源框架攒霹,其使用的算法是基于CVPR 2015的文章:FaceNet: A Unified Embeddingfor Face Recognition and Clustering
OpenFace還使用了Dlib模型庫來實(shí)現(xiàn)了對(duì)人臉的檢測怯疤,并使用了OpenCV庫來對(duì)圖像數(shù)據(jù)進(jìn)行處理。
通過實(shí)際使用剔蹋,發(fā)現(xiàn)對(duì)人臉的檢測還是可以基本進(jìn)行使用的
> DarkNet - YOLO(物體檢測)
YOLO是一名叫做JosephChet Redmon的大神與他的幾個(gè)小伙伴做的一個(gè)開源實(shí)時(shí)物體檢測系統(tǒng)旅薄。Joseph的幾個(gè)小伙伴來自于華盛頓大學(xué)以及伯克利大學(xué)等知名院校。
YOLO是基于他們開發(fā)的Darknet(基于c語言的神經(jīng)網(wǎng)絡(luò)開源框架)上的一個(gè)應(yīng)用系統(tǒng)泣崩,不同于前置檢測系統(tǒng)將一副圖像的不同位置以及維度分別進(jìn)行分類預(yù)測少梁,YOLO將整幅圖像輸入進(jìn)單一的神經(jīng)網(wǎng)絡(luò)進(jìn)行分類預(yù)測。這使得YOLO相對(duì)于其它的物體檢測網(wǎng)絡(luò)更加的快速矫付。
YOLO開源框架也使用了OpenCV庫來對(duì)圖像進(jìn)行了處理凯沪,這也側(cè)面說明了OpenCV在計(jì)算機(jī)視覺領(lǐng)域上的重要性。
筆者也實(shí)際進(jìn)行了測試买优,發(fā)現(xiàn)在個(gè)別類別上妨马,識(shí)別效果出眾。
3杀赢、配套的深度神經(jīng)網(wǎng)絡(luò)類型
在介紹了計(jì)算機(jī)視覺的背景以及軟硬件環(huán)境之后烘跺,我們?cè)谶@一節(jié)好好的介紹一下計(jì)算機(jī)視覺領(lǐng)域用到的各種網(wǎng)絡(luò)結(jié)構(gòu)
3.1卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks)
1)卷積神經(jīng)網(wǎng)絡(luò)基本介紹
卷積神經(jīng)網(wǎng)絡(luò),也稱CNN脂崔,是圖像識(shí)別滤淳、音頻識(shí)別領(lǐng)域的一個(gè)重要的算法。
卷積神經(jīng)網(wǎng)絡(luò)的工作原理簡單來說就是利用多個(gè)卷積核(過濾器filter)來對(duì)輸入的矩陣(圖像)進(jìn)行抽象砌左,最后輸出抽象出來的分類的過程脖咐。
上圖是一個(gè)簡單的卷積神經(jīng)網(wǎng)絡(luò)計(jì)算過程,通過對(duì)輸入的車輛圖片進(jìn)行不斷的卷積汇歹、激活和池化操作屁擅,最終輸出一個(gè)正確的分類。
2)常用的卷積神經(jīng)網(wǎng)絡(luò)模型
隨著卷積神經(jīng)網(wǎng)絡(luò)的發(fā)明产弹,各種各樣的卷積神經(jīng)網(wǎng)絡(luò)模型被不斷的提出派歌,圖像分類、預(yù)測的準(zhǔn)確率也在不斷的提升。下邊硝皂,我將對(duì)在ImageNet競賽中的歷年冠軍模型進(jìn)行相應(yīng)的介紹常挚,幫助大家理解這些卷積神經(jīng)網(wǎng)絡(luò)的特點(diǎn)作谭。
AlexNet
AlexNet是2012年ImageNet比賽的冠軍稽物,相對(duì)于前幾年的網(wǎng)絡(luò),其準(zhǔn)確率有了很大的提升折欠。
通過上邊AlexNet的具體網(wǎng)絡(luò)架構(gòu)贝或,我們可以看出,相對(duì)于之前的淺層網(wǎng)絡(luò)锐秦,AlexNet首先加深了網(wǎng)絡(luò)的深度咪奖,并使用了多個(gè)卷積層來對(duì)圖像數(shù)據(jù)進(jìn)行了抽象,最終使用了三個(gè)全連接層輸出了包含1000個(gè)類別的分類結(jié)果酱床。
VGGNet
相對(duì)于AlexNet羊赵,VGGNet的網(wǎng)絡(luò)架構(gòu)更深,而且分類效果也更好扇谣。形成這樣結(jié)果的原因在于昧捷,VGGNet使用了更小的filter來代替大的filter。具體的VGGNet網(wǎng)絡(luò)結(jié)構(gòu)請(qǐng)參見下圖
在介紹VGGNet前罐寨,讓我們先看看一個(gè)簡單的數(shù)學(xué)公式:3x3x3 = 27 < 7x7 = 49
通過這個(gè)公式我們可以知道靡挥,三個(gè)3x3的卷積層的參數(shù)數(shù)目其實(shí)比一個(gè)單一的7x7的卷積層要少的多。那么使用多個(gè)更小的卷積核代替一個(gè)大的卷積核能使得網(wǎng)絡(luò)架構(gòu)更深鸯绿,并且需要計(jì)算的參數(shù)更少跋破。
這么做的背后邏輯在于一個(gè)這樣的認(rèn)知:神經(jīng)網(wǎng)絡(luò)的作用其實(shí)是對(duì)輸入數(shù)據(jù)的抽象,這個(gè)抽象過程使得輸入和期望的輸出形成一種映射關(guān)系瓶蝴。
那么更深的網(wǎng)絡(luò)結(jié)構(gòu)就能形成更加非線性的映射關(guān)系毒返,而這種非線性的映射往往能更好的對(duì)輸入數(shù)據(jù)進(jìn)行抽象。
GoogleNet
看過“盜夢空間”的人應(yīng)該對(duì)夢境的嵌套概念不陌生吧舷手,在越深層的夢境中拧簸,時(shí)間過的越慢、造夢師越難分清夢境與現(xiàn)實(shí)聚霜,但是造夢師卻能越接近做夢者的真正的內(nèi)心狡恬,并對(duì)做夢者的思維進(jìn)行影響。
于此概念類似蝎宇,Google的工程師們引入了Inception(盜夢空間電影的英文名)結(jié)構(gòu)弟劲,即在神經(jīng)網(wǎng)絡(luò)中加入另一層的神經(jīng)網(wǎng)絡(luò),并成功的構(gòu)建了GoogleNet網(wǎng)絡(luò)結(jié)構(gòu)姥芥,這種嵌套的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)使得預(yù)測的效果得到了顯著的提高兔乞。GoogleNet的網(wǎng)絡(luò)結(jié)構(gòu)請(qǐng)參見下圖
GoogleNet網(wǎng)絡(luò)結(jié)構(gòu)背后的設(shè)計(jì)思路是這樣的,通過每個(gè)Inception模型,神經(jīng)網(wǎng)絡(luò)對(duì)輸入進(jìn)行了不同粒度的特征轉(zhuǎn)換(分別是1x1庸追、3x3霍骄、5x5和3x3pooling)。這樣子輸出的特征數(shù)據(jù)更加完整淡溯,丟失的信息更少读整,這使得原始數(shù)據(jù)能傳遞到網(wǎng)絡(luò)的更深層。
ResNet
在介紹ImageNet競賽的冠軍模型ResNet之前咱娶,我們先思考一個(gè)問題米间,那就是既然網(wǎng)絡(luò)越深,分類預(yù)測效果越好膘侮,我們?yōu)槭裁床槐M可能深的設(shè)計(jì)我們的網(wǎng)絡(luò)架構(gòu)呢屈糊?
實(shí)際上,已經(jīng)有人做過這方面的測試了琼了,得出的結(jié)果如下:
從圖中可以看出逻锐,神經(jīng)網(wǎng)絡(luò)達(dá)到一定深度后,其深度越深雕薪,其錯(cuò)誤率反而越大昧诱。這是因?yàn)樯窠?jīng)網(wǎng)絡(luò)是通過比較神經(jīng)網(wǎng)絡(luò)的輸出與真實(shí)輸出之間的差別(loss)來對(duì)網(wǎng)絡(luò)中的各種參數(shù)進(jìn)行調(diào)整的,可是當(dāng)深度過深時(shí)蹦哼,這些差別(loss)傳遞到網(wǎng)絡(luò)前端時(shí)造成的變化就已經(jīng)不足了鳄哭。這就形成了一種稱為“梯度消失”的現(xiàn)象,使得神經(jīng)網(wǎng)絡(luò)并不能通過不斷訓(xùn)練提高精度了纲熏。
如何解決這個(gè)問題呢妆丘?一個(gè)直觀的想法就是想辦法讓數(shù)據(jù)的傳遞盡可能的遠(yuǎn)。ResNet就是根據(jù)這種思想構(gòu)建出來的
通過上邊具體架構(gòu)圖我們可以看出局劲,ResNet通過將輸入引入一個(gè)個(gè)的ResidualBlock使得輸入信息的衰減比例得到緩解勺拣,并形成了驚人的152層網(wǎng)絡(luò)結(jié)構(gòu),獲得了很好的結(jié)果鱼填。
3.2循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks)
3.2.1循環(huán)神經(jīng)網(wǎng)絡(luò)基本介紹
不同于卷積神經(jīng)網(wǎng)絡(luò)每一層的神經(jīng)元之間沒有關(guān)聯(lián)药有,循環(huán)神經(jīng)網(wǎng)絡(luò)引入了定向循環(huán),能夠處理那些輸入之間前后關(guān)聯(lián)的問題苹丸。即RNN隱藏層中的每個(gè)節(jié)點(diǎn)的輸出不僅與輸入有關(guān)愤惰,而且還與之前狀態(tài)的輸出有關(guān)。具體情況如下圖所示:
3.2.2常用的循環(huán)神經(jīng)網(wǎng)絡(luò)模型
長短記憶神經(jīng)網(wǎng)絡(luò)-LSTM
RNN顯著的魅力是將以前的信息連接到當(dāng)前任務(wù)的這種思路赘理,根據(jù)這種思路宦言,在理論上,RNN絕對(duì)有能力處理“長依賴”問題商模〉焱可在實(shí)踐中蜘澜,RNN似乎無法學(xué)習(xí)到這些特征。
幸運(yùn)的是响疚,LSTM沒有這個(gè)問題鄙信。
長短記憶神經(jīng)網(wǎng)絡(luò)——通常稱作LSTM,是一種特殊的RNN忿晕,能夠?qū)W習(xí)長的依賴關(guān)系装诡。他們由Hochreiter&Schmidhuber引入,并被許多人進(jìn)行了改進(jìn)和普及杏糙。他們?cè)诟鞣N各樣的問題上工作的非常好慎王,現(xiàn)在被廣泛使用。
由上圖可以看到宏侍,相對(duì)于常規(guī)的RNN網(wǎng)絡(luò),LSTM的結(jié)構(gòu)復(fù)雜了許多蜀漆。這里邊的關(guān)鍵是LSTM引入了細(xì)胞狀態(tài)(上圖中最上端的那條水平線即是細(xì)胞狀態(tài))谅河,細(xì)胞的狀態(tài)類似于輸送帶,細(xì)胞的狀態(tài)在整個(gè)鏈上運(yùn)行确丢,只有一些小的線性操作作用其上绷耍,信息很容易保持不變的流過整個(gè)鏈。
LSTM通過三個(gè)門:遺忘門(forgetgate)鲜侥、輸入門(input gate)褂始、輸出門(output gate)來對(duì)數(shù)據(jù)的抽象過程進(jìn)行管理。其中遺忘門負(fù)責(zé)決定對(duì)前一細(xì)胞狀態(tài)的遺忘程度描函;輸入門決定將多少新的輸入信息注入細(xì)胞狀態(tài)中崎苗;輸出門決定將多少新的輸入信息注入到輸出中。
LSTM獨(dú)特的網(wǎng)絡(luò)結(jié)構(gòu)很好的幫助了深層神經(jīng)網(wǎng)絡(luò)對(duì)長距離的信息的理解和保存
GRU
GRU是另一個(gè)很有效的RNN神經(jīng)網(wǎng)絡(luò)舀寓,與LSTM不同的地方在于其將忘記門與輸入門組合成一個(gè)單一的“更新門”胆数,混合了細(xì)胞狀態(tài)c和隱藏狀態(tài)h,使得最終的模型比LSTM模型要簡單
4互墓、檢測與分割
在介紹了計(jì)算機(jī)視覺的基本概念和深度學(xué)習(xí)的基本框架和算法之后必尼,我們來看看在具體實(shí)踐中都有哪些研究方向,在每個(gè)研究方向中我們又該如何進(jìn)行解決和處理篡撵。
4.1語義分割(Semantic segmentation)
語義分割的目標(biāo)是在像素級(jí)別上對(duì)圖片進(jìn)行分類判莉,即輸入一張圖片,我們要輸出一張同樣大小的圖片育谬,然后在圖片的每塊位置都要標(biāo)注出其所屬的分類(具體理解請(qǐng)參照上圖)
那么如何做呢券盅?很簡單,既然知道了輸入和輸出是什么斑司,我們只需要在輸入和輸出之間填充上神經(jīng)網(wǎng)絡(luò)不就行了渗饮!
當(dāng)然實(shí)際的設(shè)計(jì)過程中并不會(huì)簡單的將不同深度的神經(jīng)網(wǎng)絡(luò)堆疊進(jìn)黑盒中來盲目的進(jìn)行計(jì)算但汞。
回到語義分割的具體場景,一個(gè)直觀的思路是通過設(shè)計(jì)一個(gè)卷積神經(jīng)網(wǎng)絡(luò)互站,對(duì)圖片的每個(gè)像素進(jìn)行預(yù)測私蕾。但是這種方式有個(gè)問題,那就是計(jì)算開銷巨大胡桃,針對(duì)這個(gè)問題踩叭,我們可以通過降維操作將原始數(shù)據(jù)縮小,然后再進(jìn)行卷積預(yù)測翠胰,并在最后將輸出升維到原始尺寸容贝。具體的網(wǎng)絡(luò)結(jié)構(gòu)如下所示:
4.2圖像分類與定位(Classification + Localization)
圖像分類與定位的目標(biāo)是識(shí)別出圖片中包含的物體,并將該物體在圖片中框出來之景,即輸入一張圖片斤富,我們要輸出該圖片所屬的物體分類,并輸出該物體在圖片中的位置锻狗。
這個(gè)場景相對(duì)于4.1語義分割來說满力,輸出要少了不少,仿照之前的思路轻纪,我們的目標(biāo)應(yīng)該是構(gòu)造一個(gè)神經(jīng)網(wǎng)絡(luò)油额,輸入為一個(gè)圖片,輸出為圖片分類以及分類物體的坐標(biāo)位置(四個(gè)值:x刻帚、y潦嘶、方框?qū)挾葁、方框高度h)崇众,具體的網(wǎng)絡(luò)結(jié)構(gòu)如下:
于此類似掂僵,如果我們將模型目標(biāo)改成“識(shí)別出圖片中的人的位置,并將人的骨骼點(diǎn)標(biāo)注出來”校摩,我們?cè)撊绾卧O(shè)計(jì)神經(jīng)網(wǎng)絡(luò)呢蚜退?
很簡單覆致,將輸出的五元組(圖片分類栽渴、x芥备、y、w坤塞、h)改成15元組即可(是否有人標(biāo)簽冯勉、左手坐標(biāo)、右手坐標(biāo)摹芙、左手肘坐標(biāo)灼狰、右手肘坐標(biāo)、…浮禾、頭坐標(biāo))
4.3物體檢測(Object detection)
在4.2圖像分類與定位中交胚,模型的目標(biāo)是對(duì)一個(gè)圖片整體進(jìn)行分類份汗,輸出只是一個(gè)物體的位置。而在本節(jié)物體檢測中蝴簇,模型的目標(biāo)是輸出圖片中包含的所有物體類別以及每個(gè)物體的具體位置杯活。
換句話說,物體檢測模型的輸入為一張圖片A熬词,輸出為檢測出的一系列物體以及定位:a(label, location), b(label, location), … , n(label, location)
這個(gè)場景的不同點(diǎn)在于我們需要設(shè)計(jì)出一個(gè)模型旁钧,使得我們能輸出不定數(shù)量的輸出。如何做呢互拾?有以下兩個(gè)思路
1)先通過一個(gè)選擇算法歪今,對(duì)每張圖片分別進(jìn)行預(yù)計(jì)算,確定每張圖片的輸出個(gè)數(shù)(可能的物體數(shù)量)
Region Proposal算法能快速的從一張圖片中選取出可能包含物體的區(qū)域颜矿,在單一CPU上能在幾秒內(nèi)檢測出1000個(gè)可能包含物體的區(qū)域
R-CNN算法在Region Proposal算法的基礎(chǔ)上對(duì)每個(gè)識(shí)別出來的Regions of Interest(ROI)進(jìn)行分類預(yù)測
Fast R-CNN:R-CNN有個(gè)問題就是要對(duì)每個(gè)ROI訓(xùn)練一個(gè)卷積神經(jīng)網(wǎng)絡(luò)分類器寄猩,這樣子太耗資源了,fast-r-cnn在此基礎(chǔ)上進(jìn)行了改進(jìn)或衡,將卷積層前移先將圖片抽象成特征矩陣焦影,并在此矩陣上進(jìn)行Region Proposal,極大的提高了效率
Faster R-CNN:在Fast R-CNN的基礎(chǔ)上封断,F(xiàn)aster R-CNN又做了進(jìn)一步的優(yōu)化,其將Region Proposal算法進(jìn)行了替換舶担。使用一個(gè)專門的神經(jīng)網(wǎng)絡(luò)來負(fù)責(zé)對(duì)可能的Region區(qū)域進(jìn)行篩選
2)用一種通用的規(guī)則坡疼,將每張圖片的輸出個(gè)數(shù)預(yù)先確定下來(定死每張圖片的輸出個(gè)數(shù))
YOLO/SSD:與其用專門的算法將圖片中可能的物體區(qū)域識(shí)別出來進(jìn)行預(yù)測,不如將圖片平均分割衣陶,然后對(duì)每個(gè)分割區(qū)域以不同的粒度來進(jìn)行框選作為一個(gè)可疑包含物體的區(qū)域柄瑰。這種方法能省去區(qū)域識(shí)別的資源開銷,提高效率
4.4實(shí)體分割(Instance Segmentation)
實(shí)體分割是在4.3物體檢測的基礎(chǔ)上的進(jìn)一步細(xì)化的場景剪况,其不僅要把物體識(shí)別出來教沾,而且要對(duì)物體的輪廓進(jìn)行識(shí)別。其輸入是一張圖片译断,輸出為可能的物體以及其像素級(jí)別的坐標(biāo)點(diǎn)授翻。
那么我們其實(shí)可以將該任務(wù)分成兩步:1)物體檢測;2)對(duì)檢測出的物體進(jìn)行輪廓識(shí)別
Mask R-CNN:該算法是在Faster R-CNN的基礎(chǔ)上設(shè)計(jì)的實(shí)體分割算法孙咪,效果很好堪唐。2017年Kaiming He最新的Mask-R-CNN算法也被選為ICCV 2017最佳論文。Mask-RCNN大體框架還是Faster-RCNN的框架翎蹈,可以說在基礎(chǔ)特征網(wǎng)絡(luò)之后又加入了全連接的分割子網(wǎng)淮菠,由原來的兩個(gè)任務(wù)(分類+回歸)變?yōu)榱巳齻€(gè)任務(wù)(分類+回歸+分割)