目标检测视频笔记
文章目錄
- 一、目標檢測是什么
- 二、RCNN
- 三、SPPnet
- 四、Fast R-CNN
- 五、Faster R-CNN
- 六、R-FCN
- 七、YOLO v1
- 八、YOLO v2
- 九、YOLO v3
一、目標檢測是什么
最小外接矩形,也就是最后要回歸的目標,也要打上一個標簽,且希望和實際情況越接近越好。
實例分割要顯示每一個像素屬于誰,更加復雜。
YOLO之前的模型都是兩個步驟:
- 提取一些可能有目標的區域
- 識別區域中的是什么類別
二、RCNN
輸入一張圖像 →\to→ 利用特定方法生成大約2k個框,這些框包括所有可能成為候選框的區域(形狀都不同,只是保證其是個矩形) →\to→ 將框進行統一尺度 →\to→ 進行一些數據增強 →\to→ CNN 特征提取(從某一層出來的特征保留) →\to→ 送入SVM 進行分類,送入回歸進行b-box的回歸。
先對分類模型進行預訓練,之后將SS生成的所有的一塊一塊的區域對模型微調,21、201(包含1個背景)是用到不同數據集,里邊類別的多少就不同。
預訓練后需要修改的:
- 目標函數 loss
- softmax的1000個輸出,改成N+1個輸出(檢測的類別數)
- 正樣本(N類):所有類別中,框和GT的IoU>=0.5的看成正樣本
- 負樣本(1類)):背景/沒有框完整的,IoU<0.5
底層的特征是越通用的,越往上是越專用的,如果數據量小的話就只訓練下面綠色的就可以,如果數據集較大的話,就訓練下面兩個模塊即可。
在M’的基礎上,第七層是全連接層,將這個4096維的特征拿出來送入SVM中,使用的SVM是二分類器,正樣本是某一類,負樣本是除該類以外的所有類(包括背景)。
SVM訓練完之后,可能會出現負樣本概率也大于0.5,將這些收集起來,重新訓練一下。
在fine-tuning之后的模型的第五層上訓練回歸模型,回歸的目標是把SS滑出來的框和真實框(G)做一個回歸,每一類單獨回歸,也就是SS 回歸得到的貓的框(P)和貓的真實框做回歸,每一類訓練一個回歸模型。
P 的要求:SS 選出來的框和 GT 框的 IoU >0.6,
輸入的是第五層輸出的特征,而不是坐標,輸出是SS和GT的差值。
目標函數是最大化,定義了一個回歸的模型,就是P和G平方差最小。
評價有兩重精度:
- 某個類的平均精度:AP,PR 曲線下的面積,即 P 對 R 的積分。
- 所有類的平均精度求和/類別數,即所有類的平均精度的平均值。
AP: 單個類別的效果
當把上面的第一條線當做閾值,上面的都當做飛機,下面的都不當做飛機,則此時準確率很高,召回率不高,當把第二條線當做閾值時,準確率降低,召回率變高。這就是 PR 曲線。PR 曲線下的面積就是綜合考慮 P 和 R 得到的結果。
mAP: 所有類別的效果的均值
三、SPPnet
RCNN:先對框中內容進行裁剪或拉伸,再進行卷積
SPPnet:先對整幅圖像進行卷積,再進行SPP 操作
對輸入進行4x4/2x2/1x1的最大池化,即所有的小區域都可以被劃分成相同大小的像素級聯,方便全連接層。
為什么可以先卷積,后 SS:因為卷積后特征的相對位置不變,即可以先卷積,然后在找到對應的框,提取特征圖特征。
fine-tuning過程也有差別:預訓練 →\to→ SPP 處理 →\to→ 使用 SPP 特征來微調全連接層,不能微調卷積層,其他的過程和 RCNN 一樣。
SPP :特征提取時間很大的變短了,但仍然是分類和回歸分別訓練,但不能微調卷積層參數(感受野太大,效率太低等)。
四、Fast R-CNN
R-CNN 和 SPP 都是訓練兩個頭,而 Fast R-CNN 實現了多任務損失,取消了 SPP 模塊,使得所有層的參數都可以fine-tuning。
首先:全圖做卷積,提取region proposal
其次:把第五層的卷積輸出,和 region proposal 送入RoI pooling層
再次:把分類和回歸頭使用一個損失函數進行訓練
RoI pooling:RoI pooling 是取了一個較細尺度的劃分,來進行最大池化,再傳入全連接層。
反向傳播的不同:
紅色的框是區域建議的框,綠色的框是人工標注的 GT ,回歸問題就是將紅色的框映射為綠色的框。
exp永遠為正,用于保證訓練完之后的值不會變成負的。
多任務損失:分類+回歸損失
分類損失:u是類別,p是概率分布,分類正確時,pu=1,-logpu接近于0,pu分類錯誤時,pu=0.2,-logpu會較大,即分到u上的概率要盡可能的大。
回歸損失:當物體類別為背景時,就不存在回歸問題了,故要先應用指示函數
smooth_L1:當x非常大的情況,相當于是離群點,會使得這批數據回歸出現問題,故讓離群點的影響小一點,即x較大時,讓輸出為 |x|-0.5,而不用平方。
batch:圖片數量為2,每個圖片中的 RoI 為64,此時 batch size 為128。
物體和背景的平衡:物體占1/4,背景占3/4。希望兩者數據量平均點,樣本量偏的太厲害會有問題,因為正向樣本較少。
全連接層數據量大,故其采用了 SVD,將其分解為兩個矩陣,也就是將全連接模型進行壓縮,然后在重現出來,總的權重數量減少,加速運算。
Fast RCNN的速度和性能都很好:
Fast R-CNN 的局限:
五、Faster R-CNN
RPN:量少質優
輸入的圖像經過卷積獲得第五層卷積特征 →\to→ 3x3的卷積核 →\to→ 得到256維的卷積層 →\to→ 對256維的特征圖分別進行兩個不同的 1x1的卷積過程 →\to→ 一路進行分類,得到 2k 個得分(是物體/不是物體,k一般為9,也就是18,1x1x256x18),另一路進行回歸,得到4k個參數(r/c/w/h) →\to→ 將兩者結合起來
候選框來源:
尺度:表示原始圖像上的物體
縱橫比:1:1,1:2,2:1
在候選框基礎上,再做分類和回歸。
損失函數:
訓練:
- 先訓練 RPN ,輸出候選區域
- 將候選區域給到 Fast R-CNN 里邊去,初始化仍然是 Imagenet 的參數
- 將第二步訓練好的權重,作為第三層卷積層的初始化,固定住卷積層的參數,微調RPN自己的參數,也就是 RPN 此時給出的建議可能會比之前的那個更好點。
- 固定卷積層,微調剩余層。
R-CNN 系列總結:
RoI-wise:基于RoI層所衍生的一些東西
CNN 的全卷積化趨勢,因為全連接層參數太多。
CNN 一開始是用于分類的,所以對分類的性能是挺好的,即便是目標物體位置改變,卷積之后輸入全連接層,也對分類結果影響不大。
但對于定位網絡,全連接層是將整個圖像的特征進行列向量話,肯定會對位置產生一定的影響,所以不希望回歸網絡最后是全連接網絡。
六、R-FCN
R-CNN:一旦有個框,就要卷積一遍
SPPnet:先卷積,再找框,框又要單獨的一個個過子網絡,再做全連接
R-FCN:全卷積網絡
變換敏感性:
- 引入位置敏感分值圖,score map(核心)
- 分值圖上做的一個位置敏感池化處理(縱向的若干層,變成橫向位置上的差異)
主干網絡:resnet-101
卷積之后,一個分支輸入RPN,另一個分支就是位置敏感分值圖,黃色是找A類的特征,綠色的是找B類的特征,等等等,無論物體在哪個問題,只要哪個層是用來判斷該物體的層,就能夠檢測出來那個物體,縱向的綜合起來,然后投票,就能得到其是哪一類。
每一個片都代表C個物體的類+1個背景的類,每個類別都有k^2個score map,之后疊加起來,最后才用上 RoI。
七、YOLO v1
YOLO v1 最多能識別九千個類別
之前的工作似乎都是做兩件事,一件是分類,一件是定位,YOLO 是把所有的問題都當做回歸問題來解決。
每一個圖化成7x7的塊,判斷哪個塊屬于哪一類。
resize:讓網絡能夠找到較小的物體
網絡結構:
輸入 →\to→ GoogLeNet(簡化成20層) →\to→ 卷積和全連接層(fully connection) →\to→ reshape →\to→ 輸出最終結果,三維數據塊7x7x30(前兩維是劃分的塊,第三維是)
輸入的維度:上采樣的圖片
輸出的維度:7x7x30
B:2(兩個b-box)
5:位置(四個值)和置信度
C:20個目標類別
兩個b-box,一個寬的,一個窄的。
公式:confidence=Pr(object)*IoU
Pr:是一個目標的概率
IoU:GT的框和預測的b-box的IoU
30個值:
前10個:兩個框,每個框預測5個值(定位和置信度),全都是歸一化的
后20個:針對每個類別的概率(Pr(class|object)),已知是目標的情況下,是哪一個類別的概率。
測試階段:
藍色框:首先判斷定位定的準不準,平方在括號外邊,都是坐標的協調系數,沒有改兩者的協調系數。
紅色框:1——指示函數,是目標是1,不是目標是0,之后置信度相減
黃色的框置信度肯定很高,綠色的框和黃色框重合度較大,所以將重合度大于一定閾值的剔除。
判斷類別:
98個box:7x7x2
C:b-box里邊是否還有目標的置信度,做一個閾值處理,之后做NMS
NMS:不考慮具體是什么類別,先考慮重合且分數沒有他高的框去掉。
優點:
一共只有98個候選框,故檢測物體的速度快;
不是目標而判斷成目標的情況較少;
能學到更加抽象的特征。
缺點:
精度低;
定位較差;
小物體檢測不好,因為一個柵格只預測2個物體,再經過NMS,可能就只能預測一個物體。
八、YOLO v2
在 YOLO v1上做了7個改變:
- BN
- 高精度分類器,v1中使用的預訓練好的模型是基于256x256訓練得來的,v2中使用高精度圖像來預訓練,能夠更好的發現小目標
- 添加了 anchor ,v1用了兩個,多了anchor能夠使得召回率明顯提升
- 使用 k-means 方法來訓練了 b-box,找到更合適的b-box的寬高比,有5類是比較明顯的,故選擇了5個b-box,這些b-box各自是不同的尺寸,瘦高型的較多。
將 Imagenet 和 coco 結合起來了,一共9000個分類。
九、YOLO v3
- 損失函數改變,sofrmax只能輸出最大的,Logistic loss 可以多分類,有得分。
- V3使用了3個anchor,分層級的變成了9個
scale1預測大尺度目標,scale2預測中間尺度目標,scale3預測小尺度的目標。
總結
- 上一篇: 小爱音箱怎么开机
- 下一篇: 【目标检测_概述】recent adva