检测系列--YOLO系列
開頭語:RCNN系列,需要區域候選框,即便最后是多任務損失函數,但回歸和分類各是一塊是很明顯的,而yolo要把分類問題轉換成回歸,這樣的話就全是回歸。
一.yolo v1
1,介紹,此時輸入size要一致448*448
2,框架,googlenet作為主干網絡,但注意經過了一些改進,并沒有用到多通路做法
3,紅色箭頭是經改進的googlenet出來的,改進地方在于沒有用googlenet多通路做法,而是1x1降維,3x3卷積提取,1x1升維
其中7x7是網格的劃分,通道數30=(B*5+C),B是每個網格負責預測的目標個數,5是坐標+置信度,C是類別,每個bound box對應5個參數,B是用來確認是目標還是背景,與C的 每一類概率相乘來確認是哪一類,這里要注意的就是每個box共享一個分類的score.候選框篩選到7*7*B,大大減少了候選框,同時也減少與gt試錯的機會.
4,一個格子只預測兩個bounding box
5,x,y,w,h要歸一化到1
這里的回歸四個值主要是中心點x,y(注意相對于格點)和 長寬
圖片寬為wi,高為hi,box中心點(相對于格點)為(x,y),寬高比例為(wb,hb),col,row代表格點的列數和行數,S代表劃分的行列數,預測的box中心點(相對于大圖)為(xc,yc)
先看預測階段,在逆推回訓練階段就好理解了:
預測階段:
box相對于格點的中心點為:(wi/S)*x,(hi/S)*y
格點相對于大圖的坐標為col*(wi/S),row*(hi/S)
故box相對于大圖的中心點為:xc= (wi/S)*x+col*(wi/S), yc =?(hi/S)*y+row*(hi/S)
訓練階段,也就是要回歸box相對于格點的偏移量也就是求x,y
故x =xc*(S/wi) - col,y?=yc*(S/hi) - row,
回歸寬高就好理解了,回歸w= wb/wi,h = hb/hi.
6.目標×屬于每一類的概率得到最大可能性是哪一類
7.loss函數
此時還是比較粗暴,全部采用l2 loss.
上面做法存在的問題是:
1.8維的定位Loss和20維的分類Loss同等重要是不合理的;
2.如果一個網絡沒有物體,那么loss就由沒有物體占主導,會將網絡的box置信度push到0,導致網絡不穩定。
解決辦法:
1.對8維的定位Loss給予更大的權重;
2.對沒有物體的box的置信度loss給更小的權重;
為了解決不同大小box造成的偏移loss是一樣的,將box的width和height取平方根代替原本的height和width。小box的橫軸值較小,發生偏移時,反應到y軸上相比大box要大。
8,NMS踢掉剩余的框
9,yolo策略
10,yolo v1效果,因為用到全連接,丟失空間信息故容易產生定位錯誤
二.yolo v2
其也稱為yolo9000.
1,加入bn。
2,取5個anchor boxes
3.每個box都有預測的坐標和類別
4.多尺度訓練
每10個Batch,網絡會隨機地選擇一個新的圖片尺寸,由于使用了下采樣參數是32,所以不同的尺寸大小也選擇為32的倍數{320,352…..608},最小320*320,最大608*608,網絡會自動改變尺寸,并繼續訓練的過程。
三.yolo v3
backbone采用去除全連接的darknet53,經過5次Res模塊后,得到的特征圖是608->304->152->76->38->19大小。
每個ResX包含1+2*x個卷積層,故包含1+(1+2*1)+(1+2*2)+(1+2*8)+(1+2*8)+(1+2*4)=52,
1.anchor由yolov2的5個變為9個;
2.不再使用Softmax進行分類,對每一類使用二分類,分類損失也使用二值交叉熵;
3.采用FPN, 其中包含三個特征圖尺度,分別下采樣32x,16x,8x,每個特征圖上設置三種大小的anchors,對應大、中、小,每一個尺度的特征圖上可以得到 N × N × [3 ? (4 + 1 + 80)] 的結果,分別是N x N個 gird cell ,3種尺度的anchors,x、y、w、h、confidence、80類;
4.由yolov2的darknet-19升級為darknet-53.
四.yolov4
這篇文章寫的很詳細很全。
- Backbone:CSPDarknet53
- Neck:SPP,PAN
- Head:YOLOv3
與yolov3差異:
1.CBM:采用的而是Mish激活函數,可看出分類上還是會漲點;
f(x) = x?tanh(?(x)),?(x) = ln(1+e^x)
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mish? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???(x)與relu
2.CSPX:由卷積和X個Res unit模塊concate組成,其借鑒的是CSPNet的思想,主要是從網絡結構設計的角度解決推理中計算量大的問題,采用CSP模塊先將基礎層的特征映射劃分為兩部分,然后通過跨階段層次結構將它們合并,在減少了計算量的同時可以保證準確率,每個CSPX包括5+2*x個卷積層;
3.SPP:多尺度最大池化;
4.卷積層采用dropblock,類似cutout,只不過cutout作用于輸入層數據,而dropblock作用于網絡的每一個特征圖,將某個局部區域刪除丟棄,比dropout力度大;
5.采用PAN結構
其實就是在FPN輸出在增加下采樣。融合FPN的語義特征和特征金字塔的位置特征。
6.ciou loss
參考我之前寫的這篇文章
參考:
https://zhuanlan.zhihu.com/p/136382095
https://zhuanlan.zhihu.com/p/143747206
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的检测系列--YOLO系列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Python 快速入门》一千个程序员有
- 下一篇: C++多态讲解以及常见面试题