深度学习03-CNN 应用
說明:本系列是七月算法深度學習課程的學習筆記
文章目錄
- 1 概述
- 2 圖片識別+定位
- 3 物體監測
- 3.1 選擇性搜索
- 3.2 R-CNN
- 3.3 Fast R-CNN
- 3.4 Faster R-CNN
- 4 語義分割
- 4.1 滑窗處理
- 4.2全卷積神經網絡
- 5 代碼
1 概述
CNN主要任務包含物體識別+定位、物體識別、圖像分割。
圖片識別:圖片分類,假設圖片中是一個主要對象。
圖片識別+定位:可以用矩形框,畫出圖片中的物體。
物體識別:實際情況中一個圖片是包含多個對象的。用矩形框標出所有物體。
圖像分割:在物體識別的基礎上,檢測出物體邊緣。
2 圖片識別+定位
圖片識別:輸入:圖片;輸出:類別標簽;評價標準:準確率
圖片定位:輸入:圖片;輸出:物體邊界框(x,y,w,h);評價標準:交并準則
(x,y)是左上角的點,w是寬度,h是高度
交并準則:兩個矩形交的面積/兩個矩形并的面積,值需要>=0.5才可以用
圖片識別是分類問題,使用交叉熵損失。
圖片定位是回歸類問題,使用 L2 distance (歐氏距離)損失函數。
圖片分類問題是在知名模型上fine-tune。
在知名模型的尾部,可以接在全連接層之后,也可以接在全連接層之前。分類問題加一個分類頭,定義一個交叉熵損失函數;回歸類問題接一個回歸頭,定義一個歐式距離損失函數。
思路1:看做回歸問題
能否對物體做進一步定位?
例如定位貓的2只眼睛,2只耳朵,1個鼻子。上一個問題中是一個物體,有4個數字。現在的問題有5個物體,那就會有20個數字。預估一個長度為20的向量。這里的前提是:物體的結構是相同的。遇到只有一只貓的眼睛就出錯了。
進一步可以識別人的姿勢。類似火柴拼成的人。每個關鍵是一個坐標,做一個回歸。論文:Toshev and Szegedy,“DeepPose: Human Pose Estimation via Deep Neural Networks”, CVPR 2014
思路2:圖窗+識別與整合
取不同大小的框,
讓框出現在不同的位置
對取得的內容做分類判定得分,
對取得的內容做回歸(框)判定得分,
按照得分高低對結果框做抽取和合并。
克服問題:參數多,計算慢
1 用卷積核替換全連接層:參數可復用。
感知眼。卷積層不同位置的點相當于只能看到第一層的不同區域。
這樣就不用上面方法中把不同位置的圖片摳出來,送到神經網絡做計算。
2 降低參數量
論文:Sermanet et al,“ntegrated Recognition,Localization and Detection using Convolutional Networks”,ICLR2014
3 物體監測
其實不知道有多個物體
在上面的步驟中有滑窗,每次滑窗,做一次類別識別,判斷是否是一種動物,也可以。
問題:框的位置不同,大小不同,比例不同,導致計算量大
解決方法1:邊緣策略
3.1 選擇性搜索
類似于聚類,基于同樣的物體像素基本相同,自下而上融合成區域。
將區域擴展為框。
論文:Uijilings et al,“Selective Search for Object Recognition”,IJCV 2013
框的選擇算法如下表。
3.2 R-CNN
步驟1:輸入層是圖片,用候選框選擇算法選擇大概2000個候選框,對每個候選框縮放為同樣的尺寸,作為入參,交給卷積層。
在一個知名模型上做fine-tune。根據自己的模型修改參數。例如有20個分類,再加一個背景分類,表示不屬于任何類型。
步驟2:用圖框候選算法選擇圖框,摳出圖框。縮放為同樣的尺寸。這一步是在CPU上計算的。
步驟3:卷積層,學習參數和特征
以上一步的圖框作為輸入,用CNN做前向運算,取第5個池化層做特征,將特征保存到硬盤上。
步驟4:做SVM分類
將上面的特征用SVM做分類。
步驟5:bbox regression
將上面的特征做回歸,與標準答案相比。判斷候選框是不是要上下左右移動。
論文:Girschick et al, “Rich feature hierarchies for accurate object detection and semantic segmentation”, CVPR 2014
3.3 Fast R-CNN
1 2000個候選框過神經網絡抽取特征,花費時間多。
利用卷積層的透視眼,實現共享圖窗計算,從而加速。
不再分為2000個子圖,而是利用卷積層的透視眼,某一層卷積層的一個點是可以對應到原圖的一部分區域的,通過共享參數的方式減少計算量。
2 做成端對端的系統
3 不同大小的圖怎么接全連接層
RIP Region of Interest Pooling方式處理
如果得到的矩陣大小是500x300,但是最后想要的結果是100x100,先把圖片分成很多個格子,使用max-pool做池化,變成想要的大小。
一般來說候選框不會小于目標大小。
3.4 Faster R-CNN
Region Proposal(候選圖窗)一定要另外獨立做嗎?
候選圖窗選擇是在CPU上做的。
region proposal network
選擇中心點為中心滑窗 3x3,1:2,2:1,1:1,按照這樣的比例,選擇候選圖窗。
選擇中心點的方法是超參數,自己選擇。可以是將原始圖片分為幾個區塊,以每個區塊的中心作為中心。
論文:Ren et al, “Faster R-CNN: Towards Real-Time Object
Detection with Region Proposal Networks”, NIPS 2015
one-stage vs two-stage
faster-rnn是兩段式的。第一階段先找到候選框,第二階段判斷候選框內有沒有物體以及邊界情況
yolo/ssd是一段式的。把原圖畫成不同的格子,以格子中心點為中心,取不同比例的框,通過神經網絡獲得值:(dx,dy,dy,dw,confidence)以及class。前面4個是微調參數,confidence表示是否是物體,class表示是哪種物體。
4 語義分割
語義分割是對每個像素做分類。4.1 滑窗處理
參數多
4.2全卷積神經網絡
CxHxW C是類別的數量
輸入是 3xHxW,輸出是HxW,輸出每個像素的分類
HxW可能很大。
訓練數據是把邊框標出來。
先做下采樣,再做上采樣。
怎么做上采樣?
專業名稱transpose convolution。
例如一個2x2的區域,步長是2,那輸出就是4x4,每次增加1列。
例如粉色區域=3,步長=2,pad=1,一個格子擴為9個格子。每個格子填充3a(a為系數)。
例如藍色區域=2,系數為b,那么藍色框線內每個單元格都為2b。兩次交叉的3個方格值=3a+2b。
逆卷積就是這樣不斷還原。
5 代碼
tensorFlow object detection https://github.com/tensorflow/models/tree/master/research/object_detection
可以使用TensorFlow做物體識別,從install開始。
faster-rnn https://github.com/rbgirshick/py-faster-rcnn
發現物體檢測那塊其實寫的云里霧里,找了一篇博客寫的不錯,記錄下來。
最后總結一下各大算法的步驟:
RCNN
1.在圖像中確定約1000-2000個候選框 (使用選擇性搜索Selective Search)
2.每個候選框內圖像塊縮放至相同大小,并輸入到CNN內進行特征提取
3.對候選框中提取出的特征,使用分類器判別是否屬于一個特定類
4.對于屬于某一類別的候選框,用回歸器進一步調整其位置
Fast R-CNN
1.在圖像中確定約1000-2000個候選框 (使用選擇性搜索Selective Search)
2.對整張圖片輸進CNN,得到feature map
3.找到每個候選框在feature map上的映射patch,將此patch作為每個候選框的卷積特征輸入到SPP layer和之后的層
4.對候選框中提取出的特征,使用分類器判別是否屬于一個特定類
5.對于屬于某一類別的候選框,用回歸器進一步調整其位置
Faster R-CNN
1.對整張圖片輸進CNN,得到feature map
2.卷積特征輸入到RPN,得到候選框的特征信息
3.對候選框中提取出的特征,使用分類器判別是否屬于一個特定類
4.對于屬于某一類別的候選框,用回歸器進一步調整其位置
(CSDN博主「丿回到火星去」的原創文章,原文鏈接:https://blog.csdn.net/H_hei/article/details/87298097)
總結
以上是生活随笔為你收集整理的深度学习03-CNN 应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微型计算机原理聂伟荣,微型计算机原理与应
- 下一篇: 属性类:Properties