深度學習之目標檢測與目標識別
一 目標識別分類及應用場景
目前可以將現有的基於深度學習的目標檢測與識別演算法大致分為以下三大類:
① 基於區域建議的目標檢測與識別演算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;
② 基於迴歸的目標檢測與識別演算法,如YOLO, SSD;
③ 基於搜尋的目標檢測與識別演算法,如基於視覺注意的AttentionNet,基於強化學習的演算法.
目前, 目標識別主要有以下幾個應用場景:
① 安全領域:指紋識別、人臉識別等,代表專案如Face++、依圖科技、深醒科技等。
② 軍事領域:地形勘察、飛行物識別等,代表專案全悉科技。
③ 交通領域:車牌號識別、無人駕駛、交通標誌識別等,代表專案縱目科技、TuSimple(圖森科技)、馭勢科技等。
④ 醫療領域:心電圖、B超、健康管理、營養學等,代表專案智影醫療、圖瑪深維等。
⑤ 生活領域:智慧家居、購物、智慧測膚等,代表專案Yi+、木薯科技、肌祕等。
具體可參考這裡:從影像識別多樣化的應用場景,看計算機視覺的未來價值
二 基於區域建議的目標識別的演算法
1. R-CNN
1.1 基本工作流程:
1) 接收一個影像, 使用Selective Search選擇大約2000個從上到下的類無關的候選區域(proposal)
2) 將提取出來的候選區域轉換為統一大小的圖片(拉昇/壓縮等方法), 使用CNN模型提取每一個候選區域的固定長度的特徵.
3) 使用特定類別的線性SVM分類器對每一個候選區域進行分類.
4) Bounding Box迴歸.
1.2 訓練 (使用AlexNet, 要求輸入為227*227大小的影像)
1) 預訓練. 預訓練CNN(邊界框標籤不可用於該資料).
2) 特徵領域的微調. 使用基於CNN的SGD的訓練,對模型進行微調.在這裡選擇學習率為預訓練的1/10, 保證微調不破壞初始化.
3) 將所有候選區域與真實框重疊(IoU)大於等於0.5的作為該框類的正例,其餘的作為負例.再進行SVM分類.
------這個表明了訓練過程是需要Grounding Truth(標定框)的, 是有監督的過程.
注意: 在預訓練和微調中使用的CNN網路引數的共享,並且提取的特徵數目為(類別N+背景1)個.
1.3 預測
預測的過程和訓練基本相同,不同的是:
1) 預測的過程沒有初始給定的標定框(Grounding Truth).
2) Bounding Box迴歸.
其實簡單來說, 預測的過程就是根據在訓練過程中找到的CNN迴歸值與所要預測的Grounding Truth之間的關係, 反向推導Grounding Truth的位置.
1.4 R-CNN的優劣分析及小結
1) R-CNN較之於傳統方法的主要優勢:
① 使用了Select Search進行proposal的選擇, 極大地減少了proposal的數量.(百萬級別~2000左右)
② 深度學習提取特徵來代替人為設計, 較大地提高了精度和效率.
③ 使用了Bounding Box迴歸, 進一步提高了檢測的精度.
2) R-CNN的不足之處:
① 訓練分為了多個步驟. 包括Select Search進行proposal的選擇, CNN的模型訓練(模型的預訓練和微調), SVM的分類, Bounding Box迴歸等, 整個過程需要的時間過長.
② 由於當時的歷史等各個因素的影響, 使用了SVM進行多類別分類,要訓練多個分類器, 訓練時間較長
③ 測試時間長,由於每張圖片要處理大量的目標候選框
3) 小結
雖然R-CNN仍然存在很多的問題, 但是它打破了傳統的目標識別的方式, 基於深度神經網路的目標識別技術也由此發展起來了.
2. SPP Net
為了後面介紹Fast R-CNN, 這裡我們簡要介紹下SPP Net的相關內容.
SPP Net具有兩個特點:
① 結合金字塔的思想, 實現了實現了CNNs的多尺寸輸入. 解決了因為CNNs對輸入的格式要求而進行的預處理(如crop,warp等)操作造成的資料資訊的丟失問題.
② 只對原圖進行一次卷積操作.
2.1 SPP Net的金字塔池化
如上圖所示, 輸入圖片經過多個卷積層操作, 再將輸出的feature map輸入到SPP Net池化層, 最後將池化後的特徵輸入全連線層.
下面針對上圖來說說SPP Net池化層的思想.可以參見這裡.
我們使用三層的金字塔池化層pooling,分別設定圖片切分成多少塊,論文中設定的分別是(1,4,16),然後按照層次對這個特徵圖feature A進行分別處理(用程式碼實現就是for(1,2,3層)),也就是在第一層對這個特徵圖feature A整個特徵圖進行池化(池化又分為:最大池化,平均池化,隨機池化),論文中使用的是最大池化,得到1個特徵。
第二層先將這個特徵圖feature A切分為4個(20,30)的小的特徵圖,然後使用對應的大小的池化核對其進行池化得到4個特徵,
第三層先將這個特徵圖feature A切分為16個(10,15)的小的特徵圖,然後使用對應大小的池化核對其進行池化得到16個特徵.
最後將這1+4+16=21個特徵輸入到全連線層,進行權重計算. 當然了,這個層數是可以隨意設定的,以及這個圖片劃分也是可以隨意的,只要效果好同時最後能組合成我們需要的特徵個數即可.
2.2 SPP Net的一次卷積
由於R-CNN先獲取proposal,再進行resize,最後輸入CNN卷積, 這樣做效率很低. SPP Net針對這一缺點, 提出了只進行一次原圖的卷積操, 得到feature map , 然後找到每一個proposal在feature map上對應的patch, 將這個patch作為每個proposal的卷積特徵輸入到SPP Net中,進行後續運算. 速度提升百倍.
3. Fast R-CNN
Fast R-CNN主要作用是實現了對R-CNN的加速, 它在R-CNN的基礎上主要有以下幾個方面的改進:
① 借鑑了SPP Net的思路, 提出了簡化版的ROI池化層(沒有使用金字塔), 同時加入了候選框對映的功能, 使得網路能夠進行反向傳播, 解決了SPP的整體網路訓練的問題.
② 多工Loss層. 1) 使用了softmax代替SVM進行多分類. 2) SmoothL1Loss取代了 Bounding Box迴歸.
3.1 基本工作流程
1) 接收一個影像, 使用Selective Search選擇大約2000個從上到下的類無關的候選區域(proposal).
2) 對整張圖片進行卷積操作提取特徵, 得到feature map.
3) 找到每個候選框在feature map中的對映patch. 將patch作為每個候選框的特徵輸入到ROI池化層及後面的層.
4) 將提取出的候選框的特徵輸入到softmax分類器中進行分類.==>替換了R-CNN的SVM分類.
5) 使用SmoothL1Loss迴歸的方法對於候選框進一步調整位置.
3.2 Fast R-CNN的優點及其不足之處
1) 優點
融合了R-CNN和SPP Net的精髓, 並且引入了多工損失函式 ,極大地特高了演算法的效率, 使得整個網路的訓練和測試變得較為簡單(相對R-CNN而言).
2) 不足
沒有對Selective Search進行候選區域(region proposal)的選擇進行改進, 仍然不能實現真正意義上的edge-to-edge(端到端)的訓練和測試.
4. Faster R-CNN
Faster R-CNN和Faste R-CNN的不同點主要是使用RPN網路進行region proposal的選擇, 並且將RPN網路合併到CNN網路中, 真正地實現了端到端的目標檢測.這也是 Faster R-CNN的里程碑式的貢獻.
Faster R-CNN的網路拓撲圖如下圖所示.
4.1 基本工作流程
1. 對整張圖片輸進CNN網路,得到feature map.
2. 卷積特徵輸入到RPN,得到候選框的特徵資訊.
3. 對候選框中提取出的特徵,使用分類器判別是否屬於一個特定類.
4. 對於屬於某一特徵的候選框,用迴歸器進一步調整其位置.
4.2 RPN
用於提取region proposal的神經網路叫做Region Proposal Network(簡稱RPN).
RPN網路的特點在於通過滑動視窗的方式實現候選框的提取,每個滑動視窗位置生成9個候選視窗(不同尺度、不同寬高), 提取對應9個候選視窗(anchor)的特徵,用於目標分類和邊框迴歸,與FastRCNN類似。目標分類只需要區分候選框內特徵為前景或者背景。
1) 候選框的選取依據:
① 對於IoU大於等於0.7的標記為前景樣本, 低於0.3的樣本標記為後景樣本.
② 丟棄①中所有的邊界樣本
對於每一個位置,通過兩個全連線層(目標分類+邊框迴歸)對每個候選框(anchor)進行判斷,並且結合概率值進行捨棄(僅保留約300個anchor),沒有顯式地提取任何候選視窗,完全使用網路自身完成判斷和修正。
2) 損失函式
同時使用兩種損失函式:
a. 分類的誤差.
b. 前景樣本的視窗位置的偏差.
3) 模型訓練
從模型訓練的角度來看,通過使用共享特徵交替訓練的方式,達到接近實時的效能,交替訓練方式描述為:
1)根據現有網路初始化權值w,訓練RPN;
2)用RPN提取訓練集上的候選區域,用候選區域訓練FastRCNN,更新權值w;
3)重複1、2,直到收斂.
4.3 Faster R-CNN的優點及其不足之處
1) 優點
Faster R-CNN將我們一直以來的目標檢測的幾個過程(預選框生成, CNN特徵提取, SVM/softmax/CNN預選框分類,y 預選框位置微調)完全被統一到同一個網路中去, 從真正意義上實現了從端到端的訓練和測試.
2) 不足
預先獲取預選區域,再對預選區域進行分類, 仍然具有較大的運算量, 還是沒有實現真正意義上的實時檢測的要求.
三 小結
本節介紹基於region proposal的目標檢測與識別演算法, 從最初的R-CNN, fast R-CNN, 直到最後的faster R-CNN, 逐步實現了端到端的目標識別和檢測的網路.網路訓練和測試的效率也有了一個較大的提升.可以說基於region proposal的R-CNN系列目標檢測與識別演算法是當前目標最主要的一個分支。
下一章我們將講述第二類--基於迴歸的目標檢測與識別演算法.
相關文章
- 深度學習之目標檢測深度學習
- 52 個深度學習目標檢測模型深度學習模型
- 深度學習之影像目標檢測速覽深度學習
- 深度學習與CV教程(13) | 目標檢測 (SSD,YOLO系列)深度學習YOLO
- 目標檢測之SSD
- 目標檢測演算法學習演算法
- 目標檢測
- 深度學習目標檢測(object detection)系列(六)YOLO2深度學習ObjectYOLO
- 深度學習目標檢測(object detection)系列(五) R-FCN深度學習Object
- 深度學習目標檢測(object detection)系列(一) R-CNN深度學習ObjectCNN
- 深度學習“吃雞外掛”——目標檢測 SSD 實驗深度學習
- 目標檢測之YOLO系列YOLO
- Pytorch 目標檢測學習 Day 2PyTorch
- 基於OpenCV和YOLOv3深度學習的目標檢測OpenCVYOLO深度學習
- 深度學習目標檢測(object detection)系列(四) Faster R-CNN深度學習ObjectASTCNN
- 九、目標檢測
- 深度學習與CV教程(12) | 目標檢測 (兩階段,R-CNN系列)深度學習CNN
- 目標檢測之RetinaNetNaN
- [AI開發]目標檢測之素材標註AI
- 深度學習 + OpenCV,Python實現實時視訊目標檢測深度學習OpenCVPython
- 學習目標
- 基於深度學習的機器人目標識別和跟蹤深度學習機器人
- 目標檢測面面觀
- 目標檢測綜述
- 28-目標檢測
- 運動目標檢測與跟蹤
- 《基於深度學習的目標檢測綜述》論文獲發表深度學習
- 基於深度學習的計算機視覺應用之目標檢測深度學習計算機視覺
- 目標檢測---教你利用yolov5訓練自己的目標檢測模型YOLO模型
- 目標檢測網路之 YOLOv3YOLO
- 目標檢測模型的評價標準-AP與mAP模型
- 深度剖析目標檢測演算法YOLOV4演算法YOLO
- SSD 目標檢測 Keras 版Keras
- 目標檢測發展方向
- 【目標檢測】R-CNNCNN
- OpenCV----實現目標識別與分割OpenCV
- SimpleDet:一套簡單通用的目標檢測與物體識別框架框架
- 目標檢測:二維碼檢測方案