經(jīng)典的目標(biāo)檢測網(wǎng)絡(luò)RCNN系列分為兩步,目標(biāo)proposal和目標(biāo)分類就漾。而Faster-RCNN中把目標(biāo)proposal和目標(biāo)分類作為一個(gè)網(wǎng)絡(luò)的兩個(gè)分支分別輸出呐能,大大縮短了計(jì)算時(shí)間。而Yolo系列則把這兩個(gè)分支都省了抑堡,只用一個(gè)網(wǎng)絡(luò)同時(shí)輸出目標(biāo)的位置和分類摆出。
YOLO
輸入:一張圖片
輸出:把每張圖片分成SxS個(gè)方格,對每個(gè)方格首妖,輸出一個(gè)B*5+C維的數(shù)組偎漫。其中B是該方格預(yù)測方框的數(shù)目,包含(x,y,w,h,s)有缆,s表示方框的置信度象踊,C表示需要預(yù)測的類別數(shù)。
在YOLO中棚壁,S=7, B=2杯矩,PASCAL VOC有20類,所以C=20袖外,B*5+C=30史隆。
YOLO網(wǎng)絡(luò)結(jié)構(gòu)主要分為兩個(gè)部分,第一部分是特征提取網(wǎng)絡(luò)在刺,主要是為了提取物體的通用特征逆害,一般在ImageNet上進(jìn)行預(yù)訓(xùn)練;第二部分是后處理網(wǎng)絡(luò)蚣驼,目的是回歸出待檢測物體的坐標(biāo)和類別。
網(wǎng)絡(luò)結(jié)構(gòu)
第一個(gè)版本的YOLO的特征提取網(wǎng)絡(luò)有24個(gè)卷積層和2個(gè)全連接層相艇。網(wǎng)絡(luò)結(jié)構(gòu)如下圖颖杏。
可以看出,這個(gè)網(wǎng)絡(luò)中主要采用了1x1卷積后跟著3x3卷積的方式坛芽。
特征提取網(wǎng)絡(luò)采用了前20個(gè)卷積層留储,加一個(gè)avg-pooling層和一個(gè)全連接層翼抠,對ImageNet2012進(jìn)行分類,top-5正確率為88%获讳,輸入分辨率為224x224阴颖。
檢測時(shí),將輸入分辨率改為448x448丐膝,因?yàn)榫W(wǎng)絡(luò)結(jié)構(gòu)是全卷積的量愧,所以輸入分辨率可以改變,整個(gè)網(wǎng)絡(luò)輸出為7x7x30維的tensor帅矗。
損失函數(shù)
接下來要重點(diǎn)將一下這個(gè)損失函數(shù)偎肃。
用網(wǎng)絡(luò)直接回歸物體的坐標(biāo)是很難的,這里對要回歸的物體的坐標(biāo)進(jìn)行了一些轉(zhuǎn)化浑此。物體方框的長w和寬h分別除以圖片的長和寬累颂;x和y坐標(biāo)分別表示對應(yīng)方格坐標(biāo)的偏移,分別除以方格的長和寬凛俱;它們都在0到1之間紊馏。
損失函數(shù)分為多個(gè)部分:
其中,其中i表示第i個(gè)方格蒲犬,j表示該方格預(yù)測出的第j個(gè)方框朱监。表示物體obj的實(shí)際方框與第i個(gè)方格有對應(yīng)關(guān)系,即obj的中心落在第i個(gè)方格中暖哨;表示物體obj的實(shí)際方框與第i個(gè)方格預(yù)測的第j個(gè)方框有對應(yīng)關(guān)系赌朋,即obj的中心落在第i個(gè)方格中,并與它的第j個(gè)預(yù)測方框的IOU最大篇裁。
可以看到損失函數(shù)包括5個(gè)部分沛慢。第一部分是x,y坐標(biāo);第二部分是w,h达布,采用根號(hào)使得小方框size變化的損失比大方框size變化的損失大团甲;第三部分是方框置信度損失,回歸目標(biāo)是預(yù)測方框與實(shí)際方框的IOU值黍聂;前三部分都只在預(yù)測方框和實(shí)際方框有對應(yīng)關(guān)系時(shí)才計(jì)算loss躺苦;第四部分是沒有對應(yīng)物體的方框置信度損失,實(shí)際的置信度都是0产还;第五部分是分類損失匹厘,當(dāng)方格與物體有對應(yīng)關(guān)系時(shí),才計(jì)算分類損失脐区。
因?yàn)樵趫D片中很多方格都不包含物體愈诚,使得方格預(yù)測方框的置信分?jǐn)?shù)趨于0。所以對包含物體的方格加大權(quán)重,對不包含物體的方格減小權(quán)重炕柔。論文中有酌泰。
一些細(xì)節(jié)
- 最后一層激活函數(shù)使用線性激活函數(shù),其它層使用Leaky-Relu函數(shù)匕累。
- 如果開始使用高學(xué)習(xí)率會(huì)不穩(wěn)定陵刹。先從0.001到0.01,然后0.01訓(xùn)練75個(gè)epoch欢嘿,接著0.001訓(xùn)練30個(gè)epoch衰琐,最后0.0001訓(xùn)練30個(gè)epoch。
- nms僅增加了2.3%的map际插。
缺點(diǎn)和比較
- 每個(gè)方格只能預(yù)測一類物體碘耳,對于小目標(biāo)檢測很難。
- 在損失函數(shù)中框弛,對小物體變化的置信度和大物體變化的置信度懲罰相同辛辨,實(shí)際小物體變化應(yīng)該加大懲罰。
- YOLO在2007+2012上訓(xùn)練瑟枫,map為63.4%斗搞,45fps。
- Faster R-CNN ZF在2007+2012上訓(xùn)練慷妙,map為62.1%僻焚,18fps。
- YOLO比Faster R-CNN有更多的位置錯(cuò)誤膝擂。
YOLO-v2
YOLO-v2在YOLO-v1的版本上做了一些改進(jìn)虑啤。
添加了BN層,map提高了2%架馋。
用448x448的輸入分辨率在ImageNet上進(jìn)行參數(shù)微調(diào)狞山,map提高了4%。
把全連接層取消叉寂,使用anchor boxes來預(yù)測目標(biāo)方框萍启;使用anchor boxes的話就把分類置信度和空間位置分離了,所以對每個(gè)預(yù)測方框都可以回歸一個(gè)方框置信度和分類置信度屏鳍。不用anchor box時(shí)map是69.5%勘纯,召回率是81%,使用了之后map是69.2%召回率是88%钓瞭。
用k-means來選擇好的方框先驗(yàn)驳遵。
-
對于每個(gè)方格,預(yù)測5個(gè)方框山涡。假設(shè)方格的位置是超埋,預(yù)測回歸的值是搏讶,那么實(shí)際的方框位置如下佳鳖。這種方式將map提高了5%霍殴。
把26x26x512的feature-map,相鄰特征分到不同的channel中系吩,因此得到13x13x2048的feature-map来庭,與后面層進(jìn)行concat,使得map提高了1%穿挨。
多scale的訓(xùn)練月弛,因?yàn)榫W(wǎng)絡(luò)為全卷積層,所以同樣的網(wǎng)絡(luò)可以預(yù)測不同分辨率的輸入科盛,每10個(gè)batch隨機(jī)選擇一個(gè)新的image size帽衙。
新的分類網(wǎng)絡(luò)Darknet-19
主要利用了NIN的思想。有19個(gè)卷積層和5個(gè)maxpooling層贞绵,實(shí)現(xiàn)了72.9%的top-1正確率和91.2%的top-5正確率厉萝。在448x448的分辨率上,實(shí)現(xiàn)了76.5%的top-1正確率榨崩,和93.3%的top-5正確率谴垫。網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。
修改成detection網(wǎng)絡(luò)時(shí)母蛛,刪除了最后的卷積層翩剪,添加了3個(gè)3x3x1024的卷積層,和一個(gè)1x1x125的卷積層彩郊,在最后的3x3x512層和導(dǎo)數(shù)第二層之間添加了一個(gè)paththrough進(jìn)行特征concat前弯。
開始學(xué)習(xí)率是0.001,在60和90個(gè)epoch時(shí)乘以0.1秫逝。
比較
- YOLOv2分辨率544x544在VOC2007+2012上訓(xùn)練恕出,map為78.6%,40fps筷登。
- SSD500在VOC2007+2012上訓(xùn)練剃根,map為76.8%,19fps前方。
分類和檢測聯(lián)合訓(xùn)練
另外狈醉,YOLO-v2利用WordTree,將分類和檢測任務(wù)進(jìn)行聯(lián)合訓(xùn)練惠险,對于沒有方框標(biāo)注的物體也能預(yù)測出其方框苗傅,能夠?qū)υ~典中9000個(gè)概念進(jìn)行預(yù)測。YOLO-v2也叫做YOLO9000班巩。
YOLO-v3
YOLO-v3在YOLO-v2的基礎(chǔ)上進(jìn)行了一些改進(jìn)渣慕。
- 用logistic regression對方框置信度進(jìn)行回歸嘶炭,對先驗(yàn)與實(shí)際方框IOU大于0.5的作為正例,與SSD不同的是逊桦,若有多個(gè)先驗(yàn)滿足目標(biāo)眨猎,只取一個(gè)IOU最大的先驗(yàn)。
- 對每個(gè)類別獨(dú)立地使用logistic regression强经,用二分類交叉熵?fù)p失作為類別損失睡陪,可以很好地處理多標(biāo)簽任務(wù)。
- 利用多個(gè)scale進(jìn)行預(yù)測匿情,實(shí)際使用3個(gè)不同的scale兰迫。將前兩層的feature-map進(jìn)行上采樣,與開始的feature-map進(jìn)行concat起來炬称,加一些卷積層汁果,然后進(jìn)行預(yù)測。
新的特征提取網(wǎng)絡(luò)Darkent-53
Darknet-53和Resnet-152正確率相同玲躯,但速度是2倍据德。
比較
- 在IOU=0.5這個(gè)標(biāo)準(zhǔn)下,YOLO-v3非常強(qiáng)府蔗;能夠預(yù)測出小物體晋控。
- YOLOv3-320, map-50為51.5%,時(shí)間是22ms姓赤。
- RetinaNet-50-500赡译,map-50為50.9,時(shí)間是73ms不铆。
嘗試過的方法
- 使用線性激活函數(shù)回歸x,y偏移蝌焚,相對于方框長和寬的比例(YOLOv3中采用的是相對于方格的比例);這種方法降低了模型穩(wěn)定性誓斥,并且效果不好只洒;
- 使用線性激活函數(shù)直接預(yù)測x,y偏移,而不是logistic regression劳坑,導(dǎo)致map下降毕谴;
- 使用Focal Loss,map下降了2個(gè)點(diǎn)距芬;
- 用兩個(gè)閾值涝开,IOU在0.3-0.7之間的忽略,小于0.3的作為負(fù)例框仔。
總的來說舀武,我覺得,YOLO的發(fā)展完全展現(xiàn)了汲取眾家之長的力量离斩。還是要多看paper银舱,以上瘪匿。
參考文獻(xiàn):
[1] Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
[2] Redmon J, Farhadi A. YOLO9000: better, faster, stronger[J]. arXiv preprint, 2017.
[3] Redmon, Joseph, and Ali Farhadi. "Yolov3: An incremental improvement." arXiv preprint arXiv:1804.02767 (2018).