溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

YOLOv2檢測過程的Tensorflow實(shí)現(xiàn)是怎樣的

發(fā)布時(shí)間:2021-11-15 17:16:05 來源:億速云 閱讀:138 作者:柒染 欄目:大數(shù)據(jù)

YOLOv2檢測過程的Tensorflow實(shí)現(xiàn)是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

一、全部代碼解讀如下:

1、model_darknet19.py:yolo2網(wǎng)絡(luò)模型——darknet19。

YOLOv2采用了一個(gè)新的基礎(chǔ)模型(特征提取器),稱為Darknet-19,包括19個(gè)卷積層和5個(gè)maxpooling層,如下圖。Darknet-19與VGG16模型設(shè)計(jì)原則是一致的,主要采用3*3卷積,采用2*2的maxpooling層之后,特征圖維度降低2倍,而同時(shí)將特征圖的channles增加兩倍。

YOLOv2檢測過程的Tensorflow實(shí)現(xiàn)是怎樣的

主要特點(diǎn)有:

(1)去掉了全連接層fc

·這樣大大減少了網(wǎng)絡(luò)的參數(shù),個(gè)人理解這是yolo2可以增加每個(gè)cell產(chǎn)生邊界框以及每個(gè)邊界框能夠單獨(dú)的對應(yīng)一組類別概率的原因。

·并且,網(wǎng)絡(luò)下采樣是32倍,這樣也使得網(wǎng)絡(luò)可以接收任意尺寸的圖片,所以yolo2有了Multi-Scale Training多尺度訓(xùn)練的改進(jìn):輸入圖片resize到不同的尺寸(論文中選用320,352...,608十個(gè)尺寸,下采樣32倍對應(yīng)10*10~19*19的特征圖)。每訓(xùn)練10個(gè)epoch,將圖片resize到另一個(gè)不同的尺寸再訓(xùn)練。這樣一個(gè)模型可以適應(yīng)不同的輸入圖片尺寸,輸入圖像大(608*608)精度高速度稍慢、輸入圖片小(320*320)精度稍低速度快,增加了模型對不同尺寸圖片輸入的魯棒性。

(2)在每個(gè)卷積層后面都加入一個(gè)BN層并不再使用droput

·這樣提升模型收斂速度,而且可以起到一定正則化效果,降低模型的過擬合。

(3)采用跨層連接Fine-Grained Features

·YOLOv2的輸入圖片大小為416*416,經(jīng)過5次maxpooling(下采樣32倍)之后得到13*13大小的特征圖,并以此特征圖采用卷積做預(yù)測。這樣會導(dǎo)致小的目標(biāo)物體經(jīng)過5層maxpooling之后特征基本沒有了。所以yolo2引入passthrough層:前面的特征圖維度是后面的特征圖的2倍,passthrough層抽取前面層的每個(gè)2*2的局部區(qū)域,然后將其轉(zhuǎn)化為channel維度,對于26*26*512的特征圖,經(jīng)passthrough層處理之后就變成了13*13*2048的新特征圖,這樣就可以與后面的13*13*1024特征圖連接在一起形成13*13*3072大小的特征圖,然后在此特征圖基礎(chǔ)上卷積做預(yù)測。作者在后期的實(shí)現(xiàn)中借鑒了ResNet網(wǎng)絡(luò),不是直接對高分辨特征圖處理,而是增加了一個(gè)中間卷積層,先采用64個(gè)1*1卷積核進(jìn)行卷積,然后再進(jìn)行passthrough處理,這樣26*26*512的特征圖得到13*13*256的特征圖。這算是實(shí)現(xiàn)上的一個(gè)小細(xì)節(jié)。

2、decode.py:解碼darknet19網(wǎng)絡(luò)得到的參數(shù).

YOLOv2檢測過程的Tensorflow實(shí)現(xiàn)是怎樣的

3、utils.py:功能函數(shù),包含:預(yù)處理輸入圖片、篩選邊界框NMS、繪制篩選后的邊界框。

這里著重介紹NMS中IOU計(jì)算方式:yolo2中計(jì)算IOU只考慮形狀,先將anchor與ground truth的中心點(diǎn)都偏移到同一位置(cell左上角),然后計(jì)算出對應(yīng)的IOU值。

IOU計(jì)算難點(diǎn)在于計(jì)算交集大?。菏紫纫袛嗍欠裼薪患?,然后再計(jì)算IOU。計(jì)算時(shí)候有一個(gè)trick,只計(jì)算交集部分的左上角和右下角坐標(biāo)即可,通過取max和min計(jì)算:

YOLOv2檢測過程的Tensorflow實(shí)現(xiàn)是怎樣的

4、Main.py:YOLO_v2主函數(shù)

對應(yīng)程序有三個(gè)步驟:

(1)輸入圖片進(jìn)入darknet19網(wǎng)絡(luò)得到特征圖,并進(jìn)行解碼得到:xmin xmax表示的邊界框、置信度、類別概率

(2)篩選解碼后的回歸邊界框——NMS

(3)繪制篩選后的邊界框

運(yùn)行環(huán)境:

Python3 + Tensorflow1.5 + OpenCV-python3.3.1 + Numpy1.13
windows和ubuntu環(huán)境都可以

準(zhǔn)備工作:

請?jiān)趛olo2檢測模型下載模型,并放到y(tǒng)olo2_model文件夾下

https://pan.baidu.com/s/1ZeT5HerjQxyUZ_L9d3X52w

文件說明:

1、model_darknet19.py:yolo2網(wǎng)絡(luò)模型——darknet19
2、decode.py:解碼darknet19網(wǎng)絡(luò)得到的參數(shù)
3、utils.py:功能函數(shù),包含:預(yù)處理輸入圖片、篩選邊界框NMS、繪制篩選后的邊界框
4、config.py:配置文件,包含anchor尺寸、coco數(shù)據(jù)集的80個(gè)classes類別名稱
5、Main.py:YOLO_v2主函數(shù),對應(yīng)程序有三個(gè)步驟:
(1)輸入圖片進(jìn)入darknet19網(wǎng)絡(luò)得到特征圖,并進(jìn)行解碼得到:xmin xmax表示的邊界框、置信度、類別概率
(2)篩選解碼后的回歸邊界框——NMS
(3)繪制篩選后的邊界框
6、Loss.py:Yolo_v2 Loss損失函數(shù)(train時(shí)候用,預(yù)測時(shí)候沒有調(diào)用此程序)
(1)IOU值最大的那個(gè)anchor與ground truth匹配,對應(yīng)的預(yù)測框用來預(yù)測這個(gè)ground truth:計(jì)算xywh、置信度c(目標(biāo)值為1)、類別概率p誤差。
(2)IOU小于某閾值的anchor對應(yīng)的預(yù)測框:只計(jì)算置信度c(目標(biāo)值為0)誤差。
(3)剩下IOU大于某閾值但不是max的anchor對應(yīng)的預(yù)測框:丟棄,不計(jì)算任何誤差。
7、yolo2_data文件夾:包含待檢測輸入圖片car.jpg、檢測后的輸出圖片detection.jpg、coco數(shù)據(jù)集80個(gè)類別名稱coco_classes.txt

運(yùn)行Main.py即可得到效果圖:

1、car.jpg:輸入的待檢測圖片

YOLOv2檢測過程的Tensorflow實(shí)現(xiàn)是怎樣的


2、detected.jpg:檢測結(jié)果可視化


YOLOv2檢測過程的Tensorflow實(shí)現(xiàn)是怎樣的

可以看到,跟yolo1對比,yolo2引入anchor后檢測精度有了提升(car和person的類別置信度高了許多),并且每個(gè)邊界框?qū)?yīng)一組類別概率解決了yolo1中多個(gè)目標(biāo)中心點(diǎn)落在同一個(gè)cell只能檢測一個(gè)物體的問題(左側(cè)兩個(gè)person都檢測出來了)。相比yolo1還是有一定提升的。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI