淺析YOLO, YOLO-v2和YOLO-v3

經(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)如下圖颖杏。


yolo-feature.png

可以看出,這個(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è)部分:


yolo-loss.png

其中,其中i表示第i個(gè)方格蒲犬,j表示該方格預(yù)測出的第j個(gè)方框朱监。1_{i}^{obj}表示物體obj的實(shí)際方框與第i個(gè)方格有對應(yīng)關(guān)系,即obj的中心落在第i個(gè)方格中暖哨;1_{ij}^{obj}表示物體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)重炕柔。論文中有\lambda_{coord}=5,\lambda_{noobj}=5酌泰。

一些細(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è)方格的位置是c_x, c_y, p_w, p_h超埋,預(yù)測回歸的值是t_x, t_y, t_w, t_h搏讶,那么實(shí)際的方框位置如下佳鳖。這種方式將map提高了5%霍殴。

    yolov2-box.png

  • 把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)如下圖所示。


darknet-19.png

修改成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.png

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).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寻馏,隨后出現(xiàn)的幾起案子棋弥,更是在濱河造成了極大的恐慌,老刑警劉巖操软,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘁锯,死亡現(xiàn)場離奇詭異,居然都是意外死亡聂薪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門蝗羊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藏澳,“玉大人,你說我怎么就攤上這事耀找∠栌疲” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵野芒,是天一觀的道長蓄愁。 經(jīng)常有香客問我,道長狞悲,這世上最難降的妖魔是什么撮抓? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮摇锋,結(jié)果婚禮上丹拯,老公的妹妹穿的比我還像新娘。我一直安慰自己荸恕,他們只是感情好乖酬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著融求,像睡著了一般咬像。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上生宛,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天县昂,我揣著相機(jī)與錄音,去河邊找鬼茅糜。 笑死七芭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔑赘。 我是一名探鬼主播狸驳,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼预明,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耙箍?” 一聲冷哼從身側(cè)響起撰糠,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辩昆,沒想到半個(gè)月后阅酪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汁针,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年术辐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片施无。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辉词,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猾骡,到底是詐尸還是另有隱情瑞躺,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布兴想,位于F島的核電站幢哨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嫂便。R本人自食惡果不足惜捞镰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顽悼。 院中可真熱鬧曼振,春花似錦、人聲如沸蔚龙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽木羹。三九已至甲雅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坑填,已是汗流浹背抛人。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脐瑰,地道東北人妖枚。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像苍在,于是被迫代替她去往敵國和親绝页。 傳聞我的和親對象是個(gè)殘疾皇子荠商,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容