-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
yolov5數(shù)據(jù)集劃分比例(yolo數(shù)據(jù)集大?。?/h1>
發(fā)布時(shí)間:2023-04-22 06:31:14
稿源:
創(chuàng)意嶺 閱讀:
53
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于yolov5數(shù)據(jù)集劃分比例的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、淺談Yolo
學(xué)號(hào):20021210654
姓名:潘文欣
原文鏈接: https://blog.csdn.net/xiaohu2022/article/details/79211732
https://blog.csdn.net/qq_30815237/article/details/91949543
【嵌牛導(dǎo)讀】
當(dāng)我們談起計(jì)算機(jī)視覺(jué)時(shí),首先想到的就是圖像分類,沒(méi)錯(cuò),圖像分類是計(jì)算機(jī)視覺(jué)最基本的任務(wù)之一,但是在圖像分類的基礎(chǔ)上,還有更復(fù)雜和有意思的任務(wù),如目標(biāo)檢測(cè),物體定位,圖像分割等。其中目標(biāo)檢測(cè)是一件比較實(shí)際的且具有挑戰(zhàn)性的計(jì)算機(jī)視覺(jué)任務(wù),其可以看成圖像分類與定位的結(jié)合,給定一張圖片,目標(biāo)檢測(cè)系統(tǒng)要能夠識(shí)別出圖片的目標(biāo)并給出其位置,由于圖片中目標(biāo)數(shù)是不定的,且要給出目標(biāo)的精確位置,目標(biāo)檢測(cè)相比分類任務(wù)更復(fù)雜。
近幾年來(lái),目標(biāo)檢測(cè)算法取得了很大的突破。比較流行的算法可以分為兩類,一類是基于Region Proposal的R-CNN系算法(R-CNN,F(xiàn)ast R-CNN, Faster R-CNN),它們是two-stage的,需要先使用啟發(fā)式方法(selective search)或者CNN網(wǎng)絡(luò)(RPN)產(chǎn)生Region Proposal,然后再在Region Proposal上做分類與回歸。而另一類是Yolo,SSD這類one-stage算法,其僅僅使用一個(gè)CNN網(wǎng)絡(luò)直接預(yù)測(cè)不同目標(biāo)的類別與位置。第一類方法是準(zhǔn)確度高一些,但是速度慢,但是第二類算法是速度快,但是準(zhǔn)確性要低一些。
【嵌牛鼻子】 計(jì)算機(jī)視覺(jué) 目標(biāo)檢測(cè) YOLO算法
【嵌牛正文】
目標(biāo)檢測(cè)算法有很多,本文介紹的是Yolo算法,其全稱是You Only Look Once: Unified, Real-Time Object Detection,其中,You Only Look Once說(shuō)的是只需要一次CNN運(yùn)算,Unified指的是這是一個(gè)統(tǒng)一的框架,提供end-to-end的預(yù)測(cè),而Real-Time體現(xiàn)是Yolo算法速度快。
如下圖是YOLO的檢測(cè)系統(tǒng),整體來(lái)看,首先將輸入圖片resize到448x448,然后送入CNN網(wǎng)絡(luò),最后處理網(wǎng)絡(luò)預(yù)測(cè)結(jié)果得到檢測(cè)的目標(biāo)。相比R-CNN算法,其是一個(gè)統(tǒng)一的框架,其速度更快,而且Yolo的訓(xùn)練過(guò)程也是end-to-end的。
具體來(lái)說(shuō),Yolo的CNN網(wǎng)絡(luò)將輸入的圖片分割成S S網(wǎng)格,,然后每個(gè)單元格負(fù)責(zé)去檢測(cè)那些中心點(diǎn)落在該格子內(nèi)的目標(biāo),如下圖,可以看到狗這個(gè)目標(biāo)的中心落在左下角一個(gè)單元格內(nèi),那么該單元格負(fù)責(zé)預(yù)測(cè)這個(gè)狗。每個(gè)單元格會(huì)預(yù)測(cè)B個(gè)邊界框(bounding box)以及邊界框的置信度(confidence score)。所謂置信度其實(shí)包含兩個(gè)方面,一是這個(gè)邊界框含有目標(biāo)的可能性大小,二是這個(gè)邊界框的準(zhǔn)確度。前者記為Pr(object),當(dāng)該邊界框是背景時(shí)(即不包含目標(biāo)),此時(shí)Pr(object)=0。而當(dāng)該邊界框包含目標(biāo)時(shí),Pr(object)=1。邊界框的準(zhǔn)確度可以用預(yù)測(cè)框與實(shí)際框(ground truth)的IOU(intersection over union,交并比)來(lái)表征,記為 。因此置信度可以定義為Pr(object)∗ 。很多人可能將Yolo的置信度看成邊界框是否含有目標(biāo)的概率,但是其實(shí)它是兩個(gè)因子的乘積,預(yù)測(cè)框的準(zhǔn)確度也反映在里面。邊界框的大小與位置可以用4個(gè)值來(lái)表征:(x,y,w,h),其中(x,y)是邊界框的中心坐標(biāo),而w和h是邊界框的寬與高。還有一點(diǎn)要注意,中心坐標(biāo)的預(yù)測(cè)值(x,y)是相對(duì)于每個(gè)單元格左上角坐標(biāo)點(diǎn)的偏移值,并且單位是相對(duì)于單元格大小的,單元格的坐標(biāo)定義如圖6所示。而邊界框的w和h預(yù)測(cè)值是相對(duì)于整個(gè)圖片的寬與高的比例,這樣理論上4個(gè)元素的大小應(yīng)該在[0,1]范圍。這樣,每個(gè)邊界框的預(yù)測(cè)值實(shí)際上包含5個(gè)元素:(x,y,w,h,c),其中前4個(gè)表征邊界框的大小與位置,而最后一個(gè)值是置信度。
還有分類問(wèn)題,對(duì)于每一個(gè)單元格其還要給出預(yù)測(cè)出C個(gè)類別概率值,其表征的是由該單元格負(fù)責(zé)預(yù)測(cè)的邊界框其目標(biāo)屬于各個(gè)類別的概率。但是這些概率值其實(shí)是在各個(gè)邊界框置信度下的條件概率,即 。值得注意的是,不管一個(gè)單元格預(yù)測(cè)多少個(gè)邊界框,其只預(yù)測(cè)一組類別概率值,這是Yolo算法的一個(gè)缺點(diǎn),在后來(lái)的改進(jìn)版本中,Yolo9000是把類別概率預(yù)測(cè)值與邊界框是綁定在一起的。同時(shí),我們可以計(jì)算出各個(gè)邊界框類別置信度(class-specific confidence scores): 。邊界框類別置信度表征的是該邊界框中目標(biāo)屬于各個(gè)類別的可能性大小以及邊界框匹配目標(biāo)的好壞。后面會(huì)說(shuō),一般會(huì)根據(jù)類別置信度來(lái)過(guò)濾網(wǎng)絡(luò)的預(yù)測(cè)框。
總結(jié)一下,每個(gè)單元格需要預(yù)測(cè)(B∗5+C)個(gè)值。如果將輸入圖片劃分為S×S網(wǎng)格,那么最終預(yù)測(cè)值為S×S×(B∗5+C)大小的張量。整個(gè)模型的預(yù)測(cè)值結(jié)構(gòu)如下圖所示。對(duì)于PASCAL VOC數(shù)據(jù),其共有20個(gè)類別,如果使用S=7,B=2,那么最終的預(yù)測(cè)結(jié)果就是7×7×30大小的張量。在下面的網(wǎng)絡(luò)結(jié)構(gòu)中我們會(huì)詳細(xì)講述每個(gè)單元格的預(yù)測(cè)值的分布位置。
Yolo采用卷積網(wǎng)絡(luò)來(lái)提取特征,然后使用全連接層來(lái)得到預(yù)測(cè)值。網(wǎng)絡(luò)結(jié)構(gòu)參考GooLeNet模型,包含24個(gè)卷積層和2個(gè)全連接層,如下圖所示。對(duì)于卷積層,主要使用1x1卷積來(lái)做channle reduction,然后緊跟3x3卷積。對(duì)于卷積層和全連接層,采用Leaky ReLU激活函數(shù)。但是最后一層卻采用線性激活函數(shù)。
可以看到網(wǎng)絡(luò)的最后輸出為7×7×30大小的張量。這和前面的討論是一致的。對(duì)于每一個(gè)單元格,前20個(gè)元素是類別概率值,然后2個(gè)元素是邊界框置信度,兩者相乘可以得到類別置信度,最后8個(gè)元素是邊界框的(x,y,w,h)。
在訓(xùn)練之前,先在ImageNet上進(jìn)行了預(yù)訓(xùn)練,其預(yù)訓(xùn)練的分類模型采用圖8中前20個(gè)卷積層,然后添加一個(gè)average-pool層和全連接層。預(yù)訓(xùn)練之后,在預(yù)訓(xùn)練得到的20層卷積層之上加上隨機(jī)初始化的4個(gè)卷積層和2個(gè)全連接層。由于檢測(cè)任務(wù)一般需要更高清的圖片,所以將網(wǎng)絡(luò)的輸入從224x224增加到了448x448。整個(gè)網(wǎng)絡(luò)的流程如下圖所示:
下面是訓(xùn)練損失函數(shù)的分析,Yolo算法將目標(biāo)檢測(cè)看成回歸問(wèn)題,所以采用的是均方差損失函數(shù)。但是對(duì)不同的部分采用了不同的權(quán)重值。首先區(qū)分定位誤差和分類誤差。對(duì)于定位誤差,即邊界框坐標(biāo)預(yù)測(cè)誤差,采用較大的權(quán)重 。然后其區(qū)分不包含目標(biāo)的邊界框與含有目標(biāo)的邊界框的置信度,對(duì)于前者,采用較小的權(quán)重值 。其它權(quán)重值均設(shè)為1。然后采用均方誤差,其同等對(duì)待大小不同的邊界框,但是實(shí)際上較小的邊界框的坐標(biāo)誤差應(yīng)該要比較大的邊界框要更敏感。為了保證這一點(diǎn),將網(wǎng)絡(luò)的邊界框的寬與高預(yù)測(cè)改為對(duì)其平方根的預(yù)測(cè),即預(yù)測(cè)值變?yōu)? 。
另外一點(diǎn)時(shí),由于每個(gè)單元格預(yù)測(cè)多個(gè)邊界框。但是其對(duì)應(yīng)類別只有一個(gè)。那么在訓(xùn)練時(shí),如果該單元格內(nèi)確實(shí)存在目標(biāo),那么只選擇與ground truth的IOU最大的那個(gè)邊界框來(lái)負(fù)責(zé)預(yù)測(cè)該目標(biāo),而其它邊界框認(rèn)為不存在目標(biāo)。這樣設(shè)置的一個(gè)結(jié)果將會(huì)使一個(gè)單元格對(duì)應(yīng)的邊界框更加專業(yè)化,其可以分別適用不同大小,不同高寬比的目標(biāo),從而提升模型性能。大家可能會(huì)想如果一個(gè)單元格內(nèi)存在多個(gè)目標(biāo)怎么辦,其實(shí)這時(shí)候Yolo算法就只能選擇其中一個(gè)來(lái)訓(xùn)練,這也是Yolo算法的缺點(diǎn)之一。要注意的一點(diǎn)時(shí),對(duì)于不存在對(duì)應(yīng)目標(biāo)的邊界框,其誤差項(xiàng)就是只有置信度,左標(biāo)項(xiàng)誤差是沒(méi)法計(jì)算的。而只有當(dāng)一個(gè)單元格內(nèi)確實(shí)存在目標(biāo)時(shí),才計(jì)算分類誤差項(xiàng),否則該項(xiàng)也是無(wú)法計(jì)算的。
綜上討論,最終的損失函數(shù)計(jì)算如下:
其中第一項(xiàng)是邊界框中心坐標(biāo)的誤差項(xiàng), 指的是第ii個(gè)單元格存在目標(biāo),且該單元格中的第j個(gè)邊界框負(fù)責(zé)預(yù)測(cè)該目標(biāo)。第二項(xiàng)是邊界框的高與寬的誤差項(xiàng)。第三項(xiàng)是包含目標(biāo)的邊界框的置信度誤差項(xiàng)。第四項(xiàng)是不包含目標(biāo)的邊界框的置信度誤差項(xiàng)。而最后一項(xiàng)是包含目標(biāo)的單元格的分類誤差項(xiàng), 指的是第i個(gè)單元格存在目標(biāo)。
NMS算法(非極大值抑制算法):選擇得分(Confidence Score)最高的作為輸出,與該輸出重疊的 去掉,不斷重復(fù)這一過(guò)程直到所有備選處理完。
YOLO的NMS算法中, Confidence Score的值如下: , 。 代表著某個(gè)對(duì)象 存在于第j個(gè)邊界框的可能性。每個(gè)網(wǎng)格有:20個(gè)對(duì)象的概率*2個(gè)邊界框的置信度,共40個(gè)得分。49個(gè)網(wǎng)格共1960個(gè)得分。對(duì)每種對(duì)象分別進(jìn)行NMS,那么每種對(duì)象有1960/20=98個(gè)得分。
YOLO算法的NMS步驟如下:
1)設(shè)置一個(gè)Score的閾值,低于該閾值的候選對(duì)象排除掉(將該Score設(shè)為0)
2)遍歷每一個(gè)對(duì)象類別
2.1)遍歷該對(duì)象的98個(gè)得分
2.1.1)找到Score最大的那個(gè)對(duì)象及其邊界框,添加到輸出列表
2.1.2)對(duì)每個(gè)Score不為0的候選對(duì)象,計(jì)算其與上面2.1.1輸出對(duì)象的邊界框的IOU
2.1.3)根據(jù)預(yù)先設(shè)置的IOU閾值,所有高于該閾值(重疊度較高)的候選對(duì)象排除掉(將Score設(shè)為0)
2.1.4)如果所有邊界框要么在輸出列表中,要么Score=0,則該對(duì)象類別的NMS完成,返回步驟2處理下一種對(duì)象
3)輸出列表即為預(yù)測(cè)的對(duì)象
這篇長(zhǎng)文詳細(xì)介紹了Yolo算法的原理及實(shí)現(xiàn),當(dāng)然Yolo-v1還是有很多問(wèn)題的,所以后續(xù)可以讀讀Yolo9000算法,看看其如何改進(jìn)的。
二、YOLOv5 detect 推理測(cè)試(沒(méi)有檢測(cè)框)
Nvidia RTX 3060
Ubuntu 16.04
CUDA 11.1
cuDNN 8.2.0
torch 1.10.1+cu111
torchvision 0.11.2+cu111
YOLOv5搭建及訓(xùn)練自己的數(shù)據(jù)集,請(qǐng)參考另一篇文章: https://www.jianshu.com/p/b3fa74f6c27b
訓(xùn)練完畢會(huì)得到 best.pt 和 last.pt 的權(quán)重文件,權(quán)重文件在 /run/train/exp/weights 下
以YOLOv5 v6.0版本為例,先使用原始權(quán)重文件及項(xiàng)目提供的原始圖片進(jìn)行detect推理一下,可以修改detect.py文件
可以先使用命令查看一下正確指令
然后,使用命令
運(yùn)行結(jié)果將被保存在 /run/detect文件夾下
detect結(jié)果如下:
detect結(jié)果除了有標(biāo)注的圖片外,還有一個(gè)文件夾記錄檢測(cè)框的信息:
可以根據(jù)上述自行修改,對(duì)自己的項(xiàng)目進(jìn)行detect。
我在detect的時(shí)候,一直沒(méi)有檢測(cè)框,找了一天bug,原來(lái)是命令寫錯(cuò)了,兩行心酸淚==
一定按照 python detect.py -h 寫,不然對(duì)圖片不做任何修改
三、目標(biāo)檢測(cè)算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3)
深度學(xué)習(xí)目前已經(jīng)應(yīng)用到了各個(gè)領(lǐng)域,應(yīng)用場(chǎng)景大體分為三類:物體識(shí)別,目標(biāo)檢測(cè),自然語(yǔ)言處理。 目標(biāo)檢測(cè)可以理解為是物體識(shí)別和物體定位的綜合 ,不僅僅要識(shí)別出物體屬于哪個(gè)分類,更重要的是得到物體在圖片中的具體位置。
2014年R-CNN算法被提出,基本奠定了two-stage方式在目標(biāo)檢測(cè)領(lǐng)域的應(yīng)用。它的算法結(jié)構(gòu)如下圖
算法步驟如下:
R-CNN較傳統(tǒng)的目標(biāo)檢測(cè)算法獲得了50%的性能提升,在使用VGG-16模型作為物體識(shí)別模型情況下,在voc2007數(shù)據(jù)集上可以取得66%的準(zhǔn)確率,已經(jīng)算還不錯(cuò)的一個(gè)成績(jī)了。其最大的問(wèn)題是速度很慢,內(nèi)存占用量很大,主要原因有兩個(gè)
針對(duì)R-CNN的部分問(wèn)題,2015年微軟提出了Fast R-CNN算法,它主要優(yōu)化了兩個(gè)問(wèn)題。
R-CNN和fast R-CNN均存在一個(gè)問(wèn)題,那就是 由選擇性搜索來(lái)生成候選框,這個(gè)算法很慢 。而且R-CNN中生成的2000個(gè)左右的候選框全部需要經(jīng)過(guò)一次卷積神經(jīng)網(wǎng)絡(luò),也就是需要經(jīng)過(guò)2000次左右的CNN網(wǎng)絡(luò),這個(gè)是十分耗時(shí)的(fast R-CNN已經(jīng)做了改進(jìn),只需要對(duì)整圖經(jīng)過(guò)一次CNN網(wǎng)絡(luò))。這也是導(dǎo)致這兩個(gè)算法檢測(cè)速度較慢的最主要原因。
faster R-CNN 針對(duì)這個(gè)問(wèn)題, 提出了RPN網(wǎng)絡(luò)來(lái)進(jìn)行候選框的獲取,從而擺脫了選擇性搜索算法,也只需要一次卷積層操作,從而大大提高了識(shí)別速度 。這個(gè)算法十分復(fù)雜,我們會(huì)詳細(xì)分析。它的基本結(jié)構(gòu)如下圖
主要分為四個(gè)步驟:
使用VGG-16卷積模型的網(wǎng)絡(luò)結(jié)構(gòu):
卷積層采用的VGG-16模型,先將PxQ的原始圖片,縮放裁剪為MxN的圖片,然后經(jīng)過(guò)13個(gè)conv-relu層,其中會(huì)穿插4個(gè)max-pooling層。所有的卷積的kernel都是3x3的,padding為1,stride為1。pooling層kernel為2x2, padding為0,stride為2。
MxN的圖片,經(jīng)過(guò)卷積層后,變?yōu)榱?M/16) x (N/16)的feature map了。
faster R-CNN拋棄了R-CNN中的選擇性搜索(selective search)方法,使用RPN層來(lái)生成候選框,能極大的提升候選框的生成速度。RPN層先經(jīng)過(guò)3x3的卷積運(yùn)算,然后分為兩路。一路用來(lái)判斷候選框是前景還是背景,它先reshape成一維向量,然后softmax來(lái)判斷是前景還是背景,然后reshape恢復(fù)為二維feature map。另一路用來(lái)確定候選框的位置,通過(guò)bounding box regression實(shí)現(xiàn),后面再詳細(xì)講。兩路計(jì)算結(jié)束后,挑選出前景候選框(因?yàn)槲矬w在前景中),并利用計(jì)算得到的候選框位置,得到我們感興趣的特征子圖proposal。
卷積層提取原始圖像信息,得到了256個(gè)feature map,經(jīng)過(guò)RPN層的3x3卷積后,仍然為256個(gè)feature map。但是每個(gè)點(diǎn)融合了周圍3x3的空間信息。對(duì)每個(gè)feature map上的一個(gè)點(diǎn),生成k個(gè)anchor(k默認(rèn)為9)。anchor分為前景和背景兩類(我們先不去管它具體是飛機(jī)還是汽車,只用區(qū)分它是前景還是背景即可)。anchor有[x,y,w,h]四個(gè)坐標(biāo)偏移量,x,y表示中心點(diǎn)坐標(biāo),w和h表示寬度和高度。這樣,對(duì)于feature map上的每個(gè)點(diǎn),就得到了k個(gè)大小形狀各不相同的選區(qū)region。
對(duì)于生成的anchors,我們首先要判斷它是前景還是背景。由于感興趣的物體位于前景中,故經(jīng)過(guò)這一步之后,我們就可以舍棄背景anchors了。大部分的anchors都是屬于背景,故這一步可以篩選掉很多無(wú)用的anchor,從而減少全連接層的計(jì)算量。
對(duì)于經(jīng)過(guò)了3x3的卷積后得到的256個(gè)feature map,先經(jīng)過(guò)1x1的卷積,變換為18個(gè)feature map。然后reshape為一維向量,經(jīng)過(guò)softmax判斷是前景還是背景。此處reshape的唯一作用就是讓數(shù)據(jù)可以進(jìn)行softmax計(jì)算。然后輸出識(shí)別得到的前景anchors。
另一路用來(lái)確定候選框的位置,也就是anchors的[x,y,w,h]坐標(biāo)值。如下圖所示,紅色代表我們當(dāng)前的選區(qū),綠色代表真實(shí)的選區(qū)。雖然我們當(dāng)前的選取能夠大概框選出飛機(jī),但離綠色的真實(shí)位置和形狀還是有很大差別,故需要對(duì)生成的anchors進(jìn)行調(diào)整。這個(gè)過(guò)程我們稱為bounding box regression。
假設(shè)紅色框的坐標(biāo)為[x,y,w,h], 綠色框,也就是目標(biāo)框的坐標(biāo)為[Gx, Gy,Gw,Gh], 我們要建立一個(gè)變換,使得[x,y,w,h]能夠變?yōu)閇Gx, Gy,Gw,Gh]。最簡(jiǎn)單的思路是,先做平移,使得中心點(diǎn)接近,然后進(jìn)行縮放,使得w和h接近。如下:
我們要學(xué)習(xí)的就是dx dy dw dh這四個(gè)變換。由于是線性變換,我們可以用線性回歸來(lái)建模。設(shè)定loss和優(yōu)化方法后,就可以利用深度學(xué)習(xí)進(jìn)行訓(xùn)練,并得到模型了。對(duì)于空間位置loss,我們一般采用均方差算法,而不是交叉熵(交叉熵使用在分類預(yù)測(cè)中)。優(yōu)化方法可以采用自適應(yīng)梯度下降算法Adam。
得到了前景anchors,并確定了他們的位置和形狀后,我們就可以輸出前景的特征子圖proposal了。步驟如下:
1,得到前景anchors和他們的[x y w h]坐標(biāo)。
2,按照anchors為前景的不同概率,從大到小排序,選取前pre_nms_topN個(gè)anchors,比如前6000個(gè)
3,剔除非常小的anchors。
4,通過(guò)NMS非極大值抑制,從anchors中找出置信度較高的。這個(gè)主要是為了解決選取交疊問(wèn)題。首先計(jì)算每一個(gè)選區(qū)面積,然后根據(jù)他們?cè)趕oftmax中的score(也就是是否為前景的概率)進(jìn)行排序,將score最大的選區(qū)放入隊(duì)列中。接下來(lái),計(jì)算其余選區(qū)與當(dāng)前最大score選區(qū)的IOU(IOU為兩box交集面積除以兩box并集面積,它衡量了兩個(gè)box之間重疊程度)。去除IOU大于設(shè)定閾值的選區(qū)。這樣就解決了選區(qū)重疊問(wèn)題。
5,選取前post_nms_topN個(gè)結(jié)果作為最終選區(qū)proposal進(jìn)行輸出,比如300個(gè)。
經(jīng)過(guò)這一步之后,物體定位應(yīng)該就基本結(jié)束了,剩下的就是物體識(shí)別了。
和fast R-CNN中類似,這一層主要解決之前得到的proposal大小形狀各不相同,導(dǎo)致沒(méi)法做全連接。全連接計(jì)算只能對(duì)確定的shape進(jìn)行運(yùn)算,故必須使proposal大小形狀變?yōu)橄嗤?。通過(guò)裁剪和縮放的手段,可以解決這個(gè)問(wèn)題,但會(huì)帶來(lái)信息丟失和圖片形變問(wèn)題。我們使用ROI pooling可以有效的解決這個(gè)問(wèn)題。
ROI pooling中,如果目標(biāo)輸出為MxN,則在水平和豎直方向上,將輸入proposal劃分為MxN份,每一份取最大值,從而得到MxN的輸出特征圖。
ROI Pooling層后的特征圖,通過(guò)全連接層與softmax,就可以計(jì)算屬于哪個(gè)具體類別,比如人,狗,飛機(jī),并可以得到cls_prob概率向量。同時(shí)再次利用bounding box regression精細(xì)調(diào)整proposal位置,得到bbox_pred,用于回歸更加精確的目標(biāo)檢測(cè)框。
這樣就完成了faster R-CNN的整個(gè)過(guò)程了。算法還是相當(dāng)復(fù)雜的,對(duì)于每個(gè)細(xì)節(jié)需要反復(fù)理解。faster R-CNN使用resNet101模型作為卷積層,在voc2012數(shù)據(jù)集上可以達(dá)到83.8%的準(zhǔn)確率,超過(guò)yolo ssd和yoloV2。其最大的問(wèn)題是速度偏慢,每秒只能處理5幀,達(dá)不到實(shí)時(shí)性要求。
針對(duì)于two-stage目標(biāo)檢測(cè)算法普遍存在的運(yùn)算速度慢的缺點(diǎn), yolo創(chuàng)造性的提出了one-stage。也就是將物體分類和物體定位在一個(gè)步驟中完成。 yolo直接在輸出層回歸bounding box的位置和bounding box所屬類別,從而實(shí)現(xiàn)one-stage。通過(guò)這種方式, yolo可實(shí)現(xiàn)45幀每秒的運(yùn)算速度,完全能滿足實(shí)時(shí)性要求 (達(dá)到24幀每秒,人眼就認(rèn)為是連續(xù)的)。它的網(wǎng)絡(luò)結(jié)構(gòu)如下圖:
主要分為三個(gè)部分:卷積層,目標(biāo)檢測(cè)層,NMS篩選層。
采用Google inceptionV1網(wǎng)絡(luò),對(duì)應(yīng)到上圖中的第一個(gè)階段,共20層。這一層主要是進(jìn)行特征提取,從而提高模型泛化能力。但作者對(duì)inceptionV1進(jìn)行了改造,他沒(méi)有使用inception module結(jié)構(gòu),而是用一個(gè)1x1的卷積,并聯(lián)一個(gè)3x3的卷積來(lái)替代。(可以認(rèn)為只使用了inception module中的一個(gè)分支,應(yīng)該是為了簡(jiǎn)化網(wǎng)絡(luò)結(jié)構(gòu))
先經(jīng)過(guò)4個(gè)卷積層和2個(gè)全連接層,最后生成7x7x30的輸出。先經(jīng)過(guò)4個(gè)卷積層的目的是為了提高模型泛化能力。yolo將一副448x448的原圖分割成了7x7個(gè)網(wǎng)格,每個(gè)網(wǎng)格要預(yù)測(cè)兩個(gè)bounding box的坐標(biāo)(x,y,w,h)和box內(nèi)包含物體的置信度confidence,以及物體屬于20類別中每一類的概率(yolo的訓(xùn)練數(shù)據(jù)為voc2012,它是一個(gè)20分類的數(shù)據(jù)集)。所以一個(gè)網(wǎng)格對(duì)應(yīng)的參數(shù)為(4x2+2+20) = 30。如下圖
其中前一項(xiàng)表示有無(wú)人工標(biāo)記的物體落入了網(wǎng)格內(nèi),如果有則為1,否則為0。第二項(xiàng)代表bounding box和真實(shí)標(biāo)記的box之間的重合度。它等于兩個(gè)box面積交集,除以面積并集。值越大則box越接近真實(shí)位置。
分類信息: yolo的目標(biāo)訓(xùn)練集為voc2012,它是一個(gè)20分類的目標(biāo)檢測(cè)數(shù)據(jù)集 。常用目標(biāo)檢測(cè)數(shù)據(jù)集如下表:
| Name | # Images (trainval) | # Classes | Last updated |
| --------------- | ------------------- | --------- | ------------ |
| ImageNet | 450k | 200 | 2015 |
| COCO | 120K | 90 | 2014 |
| Pascal VOC | 12k | 20 | 2012 |
| Oxford-IIIT Pet | 7K | 37 | 2012 |
| KITTI Vision | 7K | 3 | |
每個(gè)網(wǎng)格還需要預(yù)測(cè)它屬于20分類中每一個(gè)類別的概率。分類信息是針對(duì)每個(gè)網(wǎng)格的,而不是bounding box。故只需要20個(gè),而不是40個(gè)。而confidence則是針對(duì)bounding box的,它只表示box內(nèi)是否有物體,而不需要預(yù)測(cè)物體是20分類中的哪一個(gè),故只需要2個(gè)參數(shù)。雖然分類信息和confidence都是概率,但表達(dá)含義完全不同。
篩選層是為了在多個(gè)結(jié)果中(多個(gè)bounding box)篩選出最合適的幾個(gè),這個(gè)方法和faster R-CNN 中基本相同。都是先過(guò)濾掉score低于閾值的box,對(duì)剩下的box進(jìn)行NMS非極大值抑制,去除掉重疊度比較高的box(NMS具體算法可以回顧上面faster R-CNN小節(jié))。這樣就得到了最終的最合適的幾個(gè)box和他們的類別。
yolo的損失函數(shù)包含三部分,位置誤差,confidence誤差,分類誤差。具體公式如下:
誤差均采用了均方差算法,其實(shí)我認(rèn)為,位置誤差應(yīng)該采用均方差算法,而分類誤差應(yīng)該采用交叉熵。由于物體位置只有4個(gè)參數(shù),而類別有20個(gè)參數(shù),他們的累加和不同。如果賦予相同的權(quán)重,顯然不合理。故yolo中位置誤差權(quán)重為5,類別誤差權(quán)重為1。由于我們不是特別關(guān)心不包含物體的bounding box,故賦予不包含物體的box的置信度confidence誤差的權(quán)重為0.5,包含物體的權(quán)重則為1。
Faster R-CNN準(zhǔn)確率mAP較高,漏檢率recall較低,但速度較慢。而yolo則相反,速度快,但準(zhǔn)確率和漏檢率不盡人意。SSD綜合了他們的優(yōu)缺點(diǎn),對(duì)輸入300x300的圖像,在voc2007數(shù)據(jù)集上test,能夠達(dá)到58 幀每秒( Titan X 的 GPU ),72.1%的mAP。
SSD網(wǎng)絡(luò)結(jié)構(gòu)如下圖:
和yolo一樣,也分為三部分:卷積層,目標(biāo)檢測(cè)層和NMS篩選層
SSD論文采用了VGG16的基礎(chǔ)網(wǎng)絡(luò),其實(shí)這也是幾乎所有目標(biāo)檢測(cè)神經(jīng)網(wǎng)絡(luò)的慣用方法。先用一個(gè)CNN網(wǎng)絡(luò)來(lái)提取特征,然后再進(jìn)行后續(xù)的目標(biāo)定位和目標(biāo)分類識(shí)別。
這一層由5個(gè)卷積層和一個(gè)平均池化層組成。去掉了最后的全連接層。SSD認(rèn)為目標(biāo)檢測(cè)中的物體,只與周圍信息相關(guān),它的感受野不是全局的,故沒(méi)必要也不應(yīng)該做全連接。SSD的特點(diǎn)如下。
每一個(gè)卷積層,都會(huì)輸出不同大小感受野的feature map。在這些不同尺度的feature map上,進(jìn)行目標(biāo)位置和類別的訓(xùn)練和預(yù)測(cè),從而達(dá)到 多尺度檢測(cè) 的目的,可以克服yolo對(duì)于寬高比不常見(jiàn)的物體,識(shí)別準(zhǔn)確率較低的問(wèn)題。而yolo中,只在最后一個(gè)卷積層上做目標(biāo)位置和類別的訓(xùn)練和預(yù)測(cè)。這是SSD相對(duì)于yolo能提高準(zhǔn)確率的一個(gè)關(guān)鍵所在。
如上所示,在每個(gè)卷積層上都會(huì)進(jìn)行目標(biāo)檢測(cè)和分類,最后由NMS進(jìn)行篩選,輸出最終的結(jié)果。多尺度f(wàn)eature map上做目標(biāo)檢測(cè),就相當(dāng)于多了很多寬高比例的bounding box,可以大大提高泛化能力。
和faster R-CNN相似,SSD也提出了anchor的概念。卷積輸出的feature map,每個(gè)點(diǎn)對(duì)應(yīng)為原圖的一個(gè)區(qū)域的中心點(diǎn)。以這個(gè)點(diǎn)為中心,構(gòu)造出6個(gè)寬高比例不同,大小不同的anchor(SSD中稱為default box)。每個(gè)anchor對(duì)應(yīng)4個(gè)位置參數(shù)(x,y,w,h)和21個(gè)類別概率(voc訓(xùn)練集為20分類問(wèn)題,在加上anchor是否為背景,共21分類)。如下圖所示:
另外,在訓(xùn)練階段,SSD將正負(fù)樣本比例定位1:3。訓(xùn)練集給定了輸入圖像以及每個(gè)物體的真實(shí)區(qū)域(ground true box),將default box和真實(shí)box最接近的選為正樣本。然后在剩下的default box中選擇任意一個(gè)與真實(shí)box IOU大于0.5的,作為正樣本。而其他的則作為負(fù)樣本。由于絕大部分的box為負(fù)樣本,會(huì)導(dǎo)致正負(fù)失衡,故根據(jù)每個(gè)box類別概率排序,使正負(fù)比例保持在1:3。SSD認(rèn)為這個(gè)策略提高了4%的準(zhǔn)確率
另外,SSD采用了數(shù)據(jù)增強(qiáng)。生成與目標(biāo)物體真實(shí)box間IOU為0.1 0.3 0.5 0.7 0.9的patch,隨機(jī)選取這些patch參與訓(xùn)練,并對(duì)他們進(jìn)行隨機(jī)水平翻轉(zhuǎn)等操作。SSD認(rèn)為這個(gè)策略提高了8.8%的準(zhǔn)確率。
和yolo的篩選層基本一致,同樣先過(guò)濾掉類別概率低于閾值的default box,再采用NMS非極大值抑制,篩掉重疊度較高的。只不過(guò)SSD綜合了各個(gè)不同feature map上的目標(biāo)檢測(cè)輸出的default box。
SSD基本已經(jīng)可以滿足我們手機(jī)端上實(shí)時(shí)物體檢測(cè)需求了,TensorFlow在Android上的目標(biāo)檢測(cè)官方模型ssd_mobilenet_v1_android_export.pb,就是通過(guò)SSD算法實(shí)現(xiàn)的。它的基礎(chǔ)卷積網(wǎng)絡(luò)采用的是mobileNet,適合在終端上部署和運(yùn)行。
針對(duì)yolo準(zhǔn)確率不高,容易漏檢,對(duì)長(zhǎng)寬比不常見(jiàn)物體效果差等問(wèn)題,結(jié)合SSD的特點(diǎn),提出了yoloV2。它主要還是采用了yolo的網(wǎng)絡(luò)結(jié)構(gòu),在其基礎(chǔ)上做了一些優(yōu)化和改進(jìn),如下
網(wǎng)絡(luò)采用DarkNet-19:19層,里面包含了大量3x3卷積,同時(shí)借鑒inceptionV1,加入1x1卷積核全局平均池化層。結(jié)構(gòu)如下
yolo和yoloV2只能識(shí)別20類物體,為了優(yōu)化這個(gè)問(wèn)題,提出了yolo9000,可以識(shí)別9000類物體。它在yoloV2基礎(chǔ)上,進(jìn)行了imageNet和coco的聯(lián)合訓(xùn)練。這種方式充分利用imageNet可以識(shí)別1000類物體和coco可以進(jìn)行目標(biāo)位置檢測(cè)的優(yōu)點(diǎn)。當(dāng)使用imageNet訓(xùn)練時(shí),只更新物體分類相關(guān)的參數(shù)。而使用coco時(shí),則更新全部所有參數(shù)。
YOLOv3可以說(shuō)出來(lái)直接吊打一切圖像檢測(cè)算法。比同期的DSSD(反卷積SSD), FPN(feature pyramid networks)準(zhǔn)確率更高或相仿,速度是其1/3.。
YOLOv3的改動(dòng)主要有如下幾點(diǎn):
不過(guò)如果要求更精準(zhǔn)的預(yù)測(cè)邊框,采用COCO AP做評(píng)估標(biāo)準(zhǔn)的話,YOLO3在精確率上的表現(xiàn)就弱了一些。如下圖所示。
當(dāng)前目標(biāo)檢測(cè)模型算法也是層出不窮。在two-stage領(lǐng)域, 2017年Facebook提出了mask R-CNN 。CMU也提出了A-Fast-RCNN 算法,將對(duì)抗學(xué)習(xí)引入到目標(biāo)檢測(cè)領(lǐng)域。Face++也提出了Light-Head R-CNN,主要探討了 R-CNN 如何在物體檢測(cè)中平衡精確度和速度。
one-stage領(lǐng)域也是百花齊放,2017年首爾大學(xué)提出 R-SSD 算法,主要解決小尺寸物體檢測(cè)效果差的問(wèn)題。清華大學(xué)提出了 RON 算法,結(jié)合 two stage 名的方法和 one stage 方法的優(yōu)勢(shì),更加關(guān)注多尺度對(duì)象定位和負(fù)空間樣本挖掘問(wèn)題。
目標(biāo)檢測(cè)領(lǐng)域的深度學(xué)習(xí)算法,需要進(jìn)行目標(biāo)定位和物體識(shí)別,算法相對(duì)來(lái)說(shuō)還是很復(fù)雜的。當(dāng)前各種新算法也是層不出窮,但模型之間有很強(qiáng)的延續(xù)性,大部分模型算法都是借鑒了前人的思想,站在巨人的肩膀上。我們需要知道經(jīng)典模型的特點(diǎn),這些tricks是為了解決什么問(wèn)題,以及為什么解決了這些問(wèn)題。這樣才能舉一反三,萬(wàn)變不離其宗。綜合下來(lái),目標(biāo)檢測(cè)領(lǐng)域主要的難點(diǎn)如下:
一文讀懂目標(biāo)檢測(cè)AI算法:R-CNN,faster R-CNN,yolo,SSD,yoloV2
從YOLOv1到v3的進(jìn)化之路
SSD-Tensorflow超詳細(xì)解析【一】:加載模型對(duì)圖片進(jìn)行測(cè)試 https://blog.csdn.net/k87974/article/details/80606407
YOLO https://pjreddie.com/darknet/yolo/ https://github.com/pjreddie/darknet
C#項(xiàng)目參考:https://github.com/AlturosDestinations/Alturos.Yolo
項(xiàng)目實(shí)踐貼個(gè)圖。
四、yolov5ds使用了什么神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)。
當(dāng)下YOLO最新的卷積神經(jīng)網(wǎng)絡(luò)YOLOv5是完全基于PyTorch實(shí)現(xiàn)的,現(xiàn)版本的YOLOv5每個(gè)圖像的推理時(shí)間最快0.007秒,即每秒140幀(FPS),但YOLOv5的權(quán)重文件大小只有YOLOv4的1/9。
以上就是關(guān)于yolov5數(shù)據(jù)集劃分比例相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
國(guó)內(nèi)如何打開(kāi)youtube(國(guó)內(nèi)如何打開(kāi)推特)
youtube注冊(cè)中國(guó)號(hào)碼無(wú)法驗(yàn)證(youtube中國(guó)號(hào)碼不能驗(yàn)證)
無(wú)錫住宅景觀設(shè)計(jì)公司(無(wú)錫住宅景觀設(shè)計(jì)公司有哪些)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于yolov5數(shù)據(jù)集劃分比例的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、淺談Yolo
學(xué)號(hào):20021210654
姓名:潘文欣
原文鏈接: https://blog.csdn.net/xiaohu2022/article/details/79211732
https://blog.csdn.net/qq_30815237/article/details/91949543
【嵌牛導(dǎo)讀】
當(dāng)我們談起計(jì)算機(jī)視覺(jué)時(shí),首先想到的就是圖像分類,沒(méi)錯(cuò),圖像分類是計(jì)算機(jī)視覺(jué)最基本的任務(wù)之一,但是在圖像分類的基礎(chǔ)上,還有更復(fù)雜和有意思的任務(wù),如目標(biāo)檢測(cè),物體定位,圖像分割等。其中目標(biāo)檢測(cè)是一件比較實(shí)際的且具有挑戰(zhàn)性的計(jì)算機(jī)視覺(jué)任務(wù),其可以看成圖像分類與定位的結(jié)合,給定一張圖片,目標(biāo)檢測(cè)系統(tǒng)要能夠識(shí)別出圖片的目標(biāo)并給出其位置,由于圖片中目標(biāo)數(shù)是不定的,且要給出目標(biāo)的精確位置,目標(biāo)檢測(cè)相比分類任務(wù)更復(fù)雜。
近幾年來(lái),目標(biāo)檢測(cè)算法取得了很大的突破。比較流行的算法可以分為兩類,一類是基于Region Proposal的R-CNN系算法(R-CNN,F(xiàn)ast R-CNN, Faster R-CNN),它們是two-stage的,需要先使用啟發(fā)式方法(selective search)或者CNN網(wǎng)絡(luò)(RPN)產(chǎn)生Region Proposal,然后再在Region Proposal上做分類與回歸。而另一類是Yolo,SSD這類one-stage算法,其僅僅使用一個(gè)CNN網(wǎng)絡(luò)直接預(yù)測(cè)不同目標(biāo)的類別與位置。第一類方法是準(zhǔn)確度高一些,但是速度慢,但是第二類算法是速度快,但是準(zhǔn)確性要低一些。
【嵌牛鼻子】 計(jì)算機(jī)視覺(jué) 目標(biāo)檢測(cè) YOLO算法
【嵌牛正文】
目標(biāo)檢測(cè)算法有很多,本文介紹的是Yolo算法,其全稱是You Only Look Once: Unified, Real-Time Object Detection,其中,You Only Look Once說(shuō)的是只需要一次CNN運(yùn)算,Unified指的是這是一個(gè)統(tǒng)一的框架,提供end-to-end的預(yù)測(cè),而Real-Time體現(xiàn)是Yolo算法速度快。
如下圖是YOLO的檢測(cè)系統(tǒng),整體來(lái)看,首先將輸入圖片resize到448x448,然后送入CNN網(wǎng)絡(luò),最后處理網(wǎng)絡(luò)預(yù)測(cè)結(jié)果得到檢測(cè)的目標(biāo)。相比R-CNN算法,其是一個(gè)統(tǒng)一的框架,其速度更快,而且Yolo的訓(xùn)練過(guò)程也是end-to-end的。
具體來(lái)說(shuō),Yolo的CNN網(wǎng)絡(luò)將輸入的圖片分割成S S網(wǎng)格,,然后每個(gè)單元格負(fù)責(zé)去檢測(cè)那些中心點(diǎn)落在該格子內(nèi)的目標(biāo),如下圖,可以看到狗這個(gè)目標(biāo)的中心落在左下角一個(gè)單元格內(nèi),那么該單元格負(fù)責(zé)預(yù)測(cè)這個(gè)狗。每個(gè)單元格會(huì)預(yù)測(cè)B個(gè)邊界框(bounding box)以及邊界框的置信度(confidence score)。所謂置信度其實(shí)包含兩個(gè)方面,一是這個(gè)邊界框含有目標(biāo)的可能性大小,二是這個(gè)邊界框的準(zhǔn)確度。前者記為Pr(object),當(dāng)該邊界框是背景時(shí)(即不包含目標(biāo)),此時(shí)Pr(object)=0。而當(dāng)該邊界框包含目標(biāo)時(shí),Pr(object)=1。邊界框的準(zhǔn)確度可以用預(yù)測(cè)框與實(shí)際框(ground truth)的IOU(intersection over union,交并比)來(lái)表征,記為 。因此置信度可以定義為Pr(object)∗ 。很多人可能將Yolo的置信度看成邊界框是否含有目標(biāo)的概率,但是其實(shí)它是兩個(gè)因子的乘積,預(yù)測(cè)框的準(zhǔn)確度也反映在里面。邊界框的大小與位置可以用4個(gè)值來(lái)表征:(x,y,w,h),其中(x,y)是邊界框的中心坐標(biāo),而w和h是邊界框的寬與高。還有一點(diǎn)要注意,中心坐標(biāo)的預(yù)測(cè)值(x,y)是相對(duì)于每個(gè)單元格左上角坐標(biāo)點(diǎn)的偏移值,并且單位是相對(duì)于單元格大小的,單元格的坐標(biāo)定義如圖6所示。而邊界框的w和h預(yù)測(cè)值是相對(duì)于整個(gè)圖片的寬與高的比例,這樣理論上4個(gè)元素的大小應(yīng)該在[0,1]范圍。這樣,每個(gè)邊界框的預(yù)測(cè)值實(shí)際上包含5個(gè)元素:(x,y,w,h,c),其中前4個(gè)表征邊界框的大小與位置,而最后一個(gè)值是置信度。
還有分類問(wèn)題,對(duì)于每一個(gè)單元格其還要給出預(yù)測(cè)出C個(gè)類別概率值,其表征的是由該單元格負(fù)責(zé)預(yù)測(cè)的邊界框其目標(biāo)屬于各個(gè)類別的概率。但是這些概率值其實(shí)是在各個(gè)邊界框置信度下的條件概率,即 。值得注意的是,不管一個(gè)單元格預(yù)測(cè)多少個(gè)邊界框,其只預(yù)測(cè)一組類別概率值,這是Yolo算法的一個(gè)缺點(diǎn),在后來(lái)的改進(jìn)版本中,Yolo9000是把類別概率預(yù)測(cè)值與邊界框是綁定在一起的。同時(shí),我們可以計(jì)算出各個(gè)邊界框類別置信度(class-specific confidence scores): 。邊界框類別置信度表征的是該邊界框中目標(biāo)屬于各個(gè)類別的可能性大小以及邊界框匹配目標(biāo)的好壞。后面會(huì)說(shuō),一般會(huì)根據(jù)類別置信度來(lái)過(guò)濾網(wǎng)絡(luò)的預(yù)測(cè)框。
總結(jié)一下,每個(gè)單元格需要預(yù)測(cè)(B∗5+C)個(gè)值。如果將輸入圖片劃分為S×S網(wǎng)格,那么最終預(yù)測(cè)值為S×S×(B∗5+C)大小的張量。整個(gè)模型的預(yù)測(cè)值結(jié)構(gòu)如下圖所示。對(duì)于PASCAL VOC數(shù)據(jù),其共有20個(gè)類別,如果使用S=7,B=2,那么最終的預(yù)測(cè)結(jié)果就是7×7×30大小的張量。在下面的網(wǎng)絡(luò)結(jié)構(gòu)中我們會(huì)詳細(xì)講述每個(gè)單元格的預(yù)測(cè)值的分布位置。
Yolo采用卷積網(wǎng)絡(luò)來(lái)提取特征,然后使用全連接層來(lái)得到預(yù)測(cè)值。網(wǎng)絡(luò)結(jié)構(gòu)參考GooLeNet模型,包含24個(gè)卷積層和2個(gè)全連接層,如下圖所示。對(duì)于卷積層,主要使用1x1卷積來(lái)做channle reduction,然后緊跟3x3卷積。對(duì)于卷積層和全連接層,采用Leaky ReLU激活函數(shù)。但是最后一層卻采用線性激活函數(shù)。
可以看到網(wǎng)絡(luò)的最后輸出為7×7×30大小的張量。這和前面的討論是一致的。對(duì)于每一個(gè)單元格,前20個(gè)元素是類別概率值,然后2個(gè)元素是邊界框置信度,兩者相乘可以得到類別置信度,最后8個(gè)元素是邊界框的(x,y,w,h)。
在訓(xùn)練之前,先在ImageNet上進(jìn)行了預(yù)訓(xùn)練,其預(yù)訓(xùn)練的分類模型采用圖8中前20個(gè)卷積層,然后添加一個(gè)average-pool層和全連接層。預(yù)訓(xùn)練之后,在預(yù)訓(xùn)練得到的20層卷積層之上加上隨機(jī)初始化的4個(gè)卷積層和2個(gè)全連接層。由于檢測(cè)任務(wù)一般需要更高清的圖片,所以將網(wǎng)絡(luò)的輸入從224x224增加到了448x448。整個(gè)網(wǎng)絡(luò)的流程如下圖所示:
下面是訓(xùn)練損失函數(shù)的分析,Yolo算法將目標(biāo)檢測(cè)看成回歸問(wèn)題,所以采用的是均方差損失函數(shù)。但是對(duì)不同的部分采用了不同的權(quán)重值。首先區(qū)分定位誤差和分類誤差。對(duì)于定位誤差,即邊界框坐標(biāo)預(yù)測(cè)誤差,采用較大的權(quán)重 。然后其區(qū)分不包含目標(biāo)的邊界框與含有目標(biāo)的邊界框的置信度,對(duì)于前者,采用較小的權(quán)重值 。其它權(quán)重值均設(shè)為1。然后采用均方誤差,其同等對(duì)待大小不同的邊界框,但是實(shí)際上較小的邊界框的坐標(biāo)誤差應(yīng)該要比較大的邊界框要更敏感。為了保證這一點(diǎn),將網(wǎng)絡(luò)的邊界框的寬與高預(yù)測(cè)改為對(duì)其平方根的預(yù)測(cè),即預(yù)測(cè)值變?yōu)? 。
另外一點(diǎn)時(shí),由于每個(gè)單元格預(yù)測(cè)多個(gè)邊界框。但是其對(duì)應(yīng)類別只有一個(gè)。那么在訓(xùn)練時(shí),如果該單元格內(nèi)確實(shí)存在目標(biāo),那么只選擇與ground truth的IOU最大的那個(gè)邊界框來(lái)負(fù)責(zé)預(yù)測(cè)該目標(biāo),而其它邊界框認(rèn)為不存在目標(biāo)。這樣設(shè)置的一個(gè)結(jié)果將會(huì)使一個(gè)單元格對(duì)應(yīng)的邊界框更加專業(yè)化,其可以分別適用不同大小,不同高寬比的目標(biāo),從而提升模型性能。大家可能會(huì)想如果一個(gè)單元格內(nèi)存在多個(gè)目標(biāo)怎么辦,其實(shí)這時(shí)候Yolo算法就只能選擇其中一個(gè)來(lái)訓(xùn)練,這也是Yolo算法的缺點(diǎn)之一。要注意的一點(diǎn)時(shí),對(duì)于不存在對(duì)應(yīng)目標(biāo)的邊界框,其誤差項(xiàng)就是只有置信度,左標(biāo)項(xiàng)誤差是沒(méi)法計(jì)算的。而只有當(dāng)一個(gè)單元格內(nèi)確實(shí)存在目標(biāo)時(shí),才計(jì)算分類誤差項(xiàng),否則該項(xiàng)也是無(wú)法計(jì)算的。
綜上討論,最終的損失函數(shù)計(jì)算如下:
其中第一項(xiàng)是邊界框中心坐標(biāo)的誤差項(xiàng), 指的是第ii個(gè)單元格存在目標(biāo),且該單元格中的第j個(gè)邊界框負(fù)責(zé)預(yù)測(cè)該目標(biāo)。第二項(xiàng)是邊界框的高與寬的誤差項(xiàng)。第三項(xiàng)是包含目標(biāo)的邊界框的置信度誤差項(xiàng)。第四項(xiàng)是不包含目標(biāo)的邊界框的置信度誤差項(xiàng)。而最后一項(xiàng)是包含目標(biāo)的單元格的分類誤差項(xiàng), 指的是第i個(gè)單元格存在目標(biāo)。
NMS算法(非極大值抑制算法):選擇得分(Confidence Score)最高的作為輸出,與該輸出重疊的 去掉,不斷重復(fù)這一過(guò)程直到所有備選處理完。
YOLO的NMS算法中, Confidence Score的值如下: , 。 代表著某個(gè)對(duì)象 存在于第j個(gè)邊界框的可能性。每個(gè)網(wǎng)格有:20個(gè)對(duì)象的概率*2個(gè)邊界框的置信度,共40個(gè)得分。49個(gè)網(wǎng)格共1960個(gè)得分。對(duì)每種對(duì)象分別進(jìn)行NMS,那么每種對(duì)象有1960/20=98個(gè)得分。
YOLO算法的NMS步驟如下:
1)設(shè)置一個(gè)Score的閾值,低于該閾值的候選對(duì)象排除掉(將該Score設(shè)為0)
2)遍歷每一個(gè)對(duì)象類別
2.1)遍歷該對(duì)象的98個(gè)得分
2.1.1)找到Score最大的那個(gè)對(duì)象及其邊界框,添加到輸出列表
2.1.2)對(duì)每個(gè)Score不為0的候選對(duì)象,計(jì)算其與上面2.1.1輸出對(duì)象的邊界框的IOU
2.1.3)根據(jù)預(yù)先設(shè)置的IOU閾值,所有高于該閾值(重疊度較高)的候選對(duì)象排除掉(將Score設(shè)為0)
2.1.4)如果所有邊界框要么在輸出列表中,要么Score=0,則該對(duì)象類別的NMS完成,返回步驟2處理下一種對(duì)象
3)輸出列表即為預(yù)測(cè)的對(duì)象
這篇長(zhǎng)文詳細(xì)介紹了Yolo算法的原理及實(shí)現(xiàn),當(dāng)然Yolo-v1還是有很多問(wèn)題的,所以后續(xù)可以讀讀Yolo9000算法,看看其如何改進(jìn)的。
二、YOLOv5 detect 推理測(cè)試(沒(méi)有檢測(cè)框)
Nvidia RTX 3060
Ubuntu 16.04
CUDA 11.1
cuDNN 8.2.0
torch 1.10.1+cu111
torchvision 0.11.2+cu111
YOLOv5搭建及訓(xùn)練自己的數(shù)據(jù)集,請(qǐng)參考另一篇文章: https://www.jianshu.com/p/b3fa74f6c27b
訓(xùn)練完畢會(huì)得到 best.pt 和 last.pt 的權(quán)重文件,權(quán)重文件在 /run/train/exp/weights 下
以YOLOv5 v6.0版本為例,先使用原始權(quán)重文件及項(xiàng)目提供的原始圖片進(jìn)行detect推理一下,可以修改detect.py文件
可以先使用命令查看一下正確指令
然后,使用命令
運(yùn)行結(jié)果將被保存在 /run/detect文件夾下
detect結(jié)果如下:
detect結(jié)果除了有標(biāo)注的圖片外,還有一個(gè)文件夾記錄檢測(cè)框的信息:
可以根據(jù)上述自行修改,對(duì)自己的項(xiàng)目進(jìn)行detect。
我在detect的時(shí)候,一直沒(méi)有檢測(cè)框,找了一天bug,原來(lái)是命令寫錯(cuò)了,兩行心酸淚==
一定按照 python detect.py -h 寫,不然對(duì)圖片不做任何修改
三、目標(biāo)檢測(cè)算法(R-CNN,fast R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3)
深度學(xué)習(xí)目前已經(jīng)應(yīng)用到了各個(gè)領(lǐng)域,應(yīng)用場(chǎng)景大體分為三類:物體識(shí)別,目標(biāo)檢測(cè),自然語(yǔ)言處理。 目標(biāo)檢測(cè)可以理解為是物體識(shí)別和物體定位的綜合 ,不僅僅要識(shí)別出物體屬于哪個(gè)分類,更重要的是得到物體在圖片中的具體位置。
2014年R-CNN算法被提出,基本奠定了two-stage方式在目標(biāo)檢測(cè)領(lǐng)域的應(yīng)用。它的算法結(jié)構(gòu)如下圖
算法步驟如下:
R-CNN較傳統(tǒng)的目標(biāo)檢測(cè)算法獲得了50%的性能提升,在使用VGG-16模型作為物體識(shí)別模型情況下,在voc2007數(shù)據(jù)集上可以取得66%的準(zhǔn)確率,已經(jīng)算還不錯(cuò)的一個(gè)成績(jī)了。其最大的問(wèn)題是速度很慢,內(nèi)存占用量很大,主要原因有兩個(gè)
針對(duì)R-CNN的部分問(wèn)題,2015年微軟提出了Fast R-CNN算法,它主要優(yōu)化了兩個(gè)問(wèn)題。
R-CNN和fast R-CNN均存在一個(gè)問(wèn)題,那就是 由選擇性搜索來(lái)生成候選框,這個(gè)算法很慢 。而且R-CNN中生成的2000個(gè)左右的候選框全部需要經(jīng)過(guò)一次卷積神經(jīng)網(wǎng)絡(luò),也就是需要經(jīng)過(guò)2000次左右的CNN網(wǎng)絡(luò),這個(gè)是十分耗時(shí)的(fast R-CNN已經(jīng)做了改進(jìn),只需要對(duì)整圖經(jīng)過(guò)一次CNN網(wǎng)絡(luò))。這也是導(dǎo)致這兩個(gè)算法檢測(cè)速度較慢的最主要原因。
faster R-CNN 針對(duì)這個(gè)問(wèn)題, 提出了RPN網(wǎng)絡(luò)來(lái)進(jìn)行候選框的獲取,從而擺脫了選擇性搜索算法,也只需要一次卷積層操作,從而大大提高了識(shí)別速度 。這個(gè)算法十分復(fù)雜,我們會(huì)詳細(xì)分析。它的基本結(jié)構(gòu)如下圖
主要分為四個(gè)步驟:
使用VGG-16卷積模型的網(wǎng)絡(luò)結(jié)構(gòu):
卷積層采用的VGG-16模型,先將PxQ的原始圖片,縮放裁剪為MxN的圖片,然后經(jīng)過(guò)13個(gè)conv-relu層,其中會(huì)穿插4個(gè)max-pooling層。所有的卷積的kernel都是3x3的,padding為1,stride為1。pooling層kernel為2x2, padding為0,stride為2。
MxN的圖片,經(jīng)過(guò)卷積層后,變?yōu)榱?M/16) x (N/16)的feature map了。
faster R-CNN拋棄了R-CNN中的選擇性搜索(selective search)方法,使用RPN層來(lái)生成候選框,能極大的提升候選框的生成速度。RPN層先經(jīng)過(guò)3x3的卷積運(yùn)算,然后分為兩路。一路用來(lái)判斷候選框是前景還是背景,它先reshape成一維向量,然后softmax來(lái)判斷是前景還是背景,然后reshape恢復(fù)為二維feature map。另一路用來(lái)確定候選框的位置,通過(guò)bounding box regression實(shí)現(xiàn),后面再詳細(xì)講。兩路計(jì)算結(jié)束后,挑選出前景候選框(因?yàn)槲矬w在前景中),并利用計(jì)算得到的候選框位置,得到我們感興趣的特征子圖proposal。
卷積層提取原始圖像信息,得到了256個(gè)feature map,經(jīng)過(guò)RPN層的3x3卷積后,仍然為256個(gè)feature map。但是每個(gè)點(diǎn)融合了周圍3x3的空間信息。對(duì)每個(gè)feature map上的一個(gè)點(diǎn),生成k個(gè)anchor(k默認(rèn)為9)。anchor分為前景和背景兩類(我們先不去管它具體是飛機(jī)還是汽車,只用區(qū)分它是前景還是背景即可)。anchor有[x,y,w,h]四個(gè)坐標(biāo)偏移量,x,y表示中心點(diǎn)坐標(biāo),w和h表示寬度和高度。這樣,對(duì)于feature map上的每個(gè)點(diǎn),就得到了k個(gè)大小形狀各不相同的選區(qū)region。
對(duì)于生成的anchors,我們首先要判斷它是前景還是背景。由于感興趣的物體位于前景中,故經(jīng)過(guò)這一步之后,我們就可以舍棄背景anchors了。大部分的anchors都是屬于背景,故這一步可以篩選掉很多無(wú)用的anchor,從而減少全連接層的計(jì)算量。
對(duì)于經(jīng)過(guò)了3x3的卷積后得到的256個(gè)feature map,先經(jīng)過(guò)1x1的卷積,變換為18個(gè)feature map。然后reshape為一維向量,經(jīng)過(guò)softmax判斷是前景還是背景。此處reshape的唯一作用就是讓數(shù)據(jù)可以進(jìn)行softmax計(jì)算。然后輸出識(shí)別得到的前景anchors。
另一路用來(lái)確定候選框的位置,也就是anchors的[x,y,w,h]坐標(biāo)值。如下圖所示,紅色代表我們當(dāng)前的選區(qū),綠色代表真實(shí)的選區(qū)。雖然我們當(dāng)前的選取能夠大概框選出飛機(jī),但離綠色的真實(shí)位置和形狀還是有很大差別,故需要對(duì)生成的anchors進(jìn)行調(diào)整。這個(gè)過(guò)程我們稱為bounding box regression。
假設(shè)紅色框的坐標(biāo)為[x,y,w,h], 綠色框,也就是目標(biāo)框的坐標(biāo)為[Gx, Gy,Gw,Gh], 我們要建立一個(gè)變換,使得[x,y,w,h]能夠變?yōu)閇Gx, Gy,Gw,Gh]。最簡(jiǎn)單的思路是,先做平移,使得中心點(diǎn)接近,然后進(jìn)行縮放,使得w和h接近。如下:
我們要學(xué)習(xí)的就是dx dy dw dh這四個(gè)變換。由于是線性變換,我們可以用線性回歸來(lái)建模。設(shè)定loss和優(yōu)化方法后,就可以利用深度學(xué)習(xí)進(jìn)行訓(xùn)練,并得到模型了。對(duì)于空間位置loss,我們一般采用均方差算法,而不是交叉熵(交叉熵使用在分類預(yù)測(cè)中)。優(yōu)化方法可以采用自適應(yīng)梯度下降算法Adam。
得到了前景anchors,并確定了他們的位置和形狀后,我們就可以輸出前景的特征子圖proposal了。步驟如下:
1,得到前景anchors和他們的[x y w h]坐標(biāo)。
2,按照anchors為前景的不同概率,從大到小排序,選取前pre_nms_topN個(gè)anchors,比如前6000個(gè)
3,剔除非常小的anchors。
4,通過(guò)NMS非極大值抑制,從anchors中找出置信度較高的。這個(gè)主要是為了解決選取交疊問(wèn)題。首先計(jì)算每一個(gè)選區(qū)面積,然后根據(jù)他們?cè)趕oftmax中的score(也就是是否為前景的概率)進(jìn)行排序,將score最大的選區(qū)放入隊(duì)列中。接下來(lái),計(jì)算其余選區(qū)與當(dāng)前最大score選區(qū)的IOU(IOU為兩box交集面積除以兩box并集面積,它衡量了兩個(gè)box之間重疊程度)。去除IOU大于設(shè)定閾值的選區(qū)。這樣就解決了選區(qū)重疊問(wèn)題。
5,選取前post_nms_topN個(gè)結(jié)果作為最終選區(qū)proposal進(jìn)行輸出,比如300個(gè)。
經(jīng)過(guò)這一步之后,物體定位應(yīng)該就基本結(jié)束了,剩下的就是物體識(shí)別了。
和fast R-CNN中類似,這一層主要解決之前得到的proposal大小形狀各不相同,導(dǎo)致沒(méi)法做全連接。全連接計(jì)算只能對(duì)確定的shape進(jìn)行運(yùn)算,故必須使proposal大小形狀變?yōu)橄嗤?。通過(guò)裁剪和縮放的手段,可以解決這個(gè)問(wèn)題,但會(huì)帶來(lái)信息丟失和圖片形變問(wèn)題。我們使用ROI pooling可以有效的解決這個(gè)問(wèn)題。
ROI pooling中,如果目標(biāo)輸出為MxN,則在水平和豎直方向上,將輸入proposal劃分為MxN份,每一份取最大值,從而得到MxN的輸出特征圖。
ROI Pooling層后的特征圖,通過(guò)全連接層與softmax,就可以計(jì)算屬于哪個(gè)具體類別,比如人,狗,飛機(jī),并可以得到cls_prob概率向量。同時(shí)再次利用bounding box regression精細(xì)調(diào)整proposal位置,得到bbox_pred,用于回歸更加精確的目標(biāo)檢測(cè)框。
這樣就完成了faster R-CNN的整個(gè)過(guò)程了。算法還是相當(dāng)復(fù)雜的,對(duì)于每個(gè)細(xì)節(jié)需要反復(fù)理解。faster R-CNN使用resNet101模型作為卷積層,在voc2012數(shù)據(jù)集上可以達(dá)到83.8%的準(zhǔn)確率,超過(guò)yolo ssd和yoloV2。其最大的問(wèn)題是速度偏慢,每秒只能處理5幀,達(dá)不到實(shí)時(shí)性要求。
針對(duì)于two-stage目標(biāo)檢測(cè)算法普遍存在的運(yùn)算速度慢的缺點(diǎn), yolo創(chuàng)造性的提出了one-stage。也就是將物體分類和物體定位在一個(gè)步驟中完成。 yolo直接在輸出層回歸bounding box的位置和bounding box所屬類別,從而實(shí)現(xiàn)one-stage。通過(guò)這種方式, yolo可實(shí)現(xiàn)45幀每秒的運(yùn)算速度,完全能滿足實(shí)時(shí)性要求 (達(dá)到24幀每秒,人眼就認(rèn)為是連續(xù)的)。它的網(wǎng)絡(luò)結(jié)構(gòu)如下圖:
主要分為三個(gè)部分:卷積層,目標(biāo)檢測(cè)層,NMS篩選層。
采用Google inceptionV1網(wǎng)絡(luò),對(duì)應(yīng)到上圖中的第一個(gè)階段,共20層。這一層主要是進(jìn)行特征提取,從而提高模型泛化能力。但作者對(duì)inceptionV1進(jìn)行了改造,他沒(méi)有使用inception module結(jié)構(gòu),而是用一個(gè)1x1的卷積,并聯(lián)一個(gè)3x3的卷積來(lái)替代。(可以認(rèn)為只使用了inception module中的一個(gè)分支,應(yīng)該是為了簡(jiǎn)化網(wǎng)絡(luò)結(jié)構(gòu))
先經(jīng)過(guò)4個(gè)卷積層和2個(gè)全連接層,最后生成7x7x30的輸出。先經(jīng)過(guò)4個(gè)卷積層的目的是為了提高模型泛化能力。yolo將一副448x448的原圖分割成了7x7個(gè)網(wǎng)格,每個(gè)網(wǎng)格要預(yù)測(cè)兩個(gè)bounding box的坐標(biāo)(x,y,w,h)和box內(nèi)包含物體的置信度confidence,以及物體屬于20類別中每一類的概率(yolo的訓(xùn)練數(shù)據(jù)為voc2012,它是一個(gè)20分類的數(shù)據(jù)集)。所以一個(gè)網(wǎng)格對(duì)應(yīng)的參數(shù)為(4x2+2+20) = 30。如下圖
其中前一項(xiàng)表示有無(wú)人工標(biāo)記的物體落入了網(wǎng)格內(nèi),如果有則為1,否則為0。第二項(xiàng)代表bounding box和真實(shí)標(biāo)記的box之間的重合度。它等于兩個(gè)box面積交集,除以面積并集。值越大則box越接近真實(shí)位置。
分類信息: yolo的目標(biāo)訓(xùn)練集為voc2012,它是一個(gè)20分類的目標(biāo)檢測(cè)數(shù)據(jù)集 。常用目標(biāo)檢測(cè)數(shù)據(jù)集如下表:
| Name | # Images (trainval) | # Classes | Last updated |
| --------------- | ------------------- | --------- | ------------ |
| ImageNet | 450k | 200 | 2015 |
| COCO | 120K | 90 | 2014 |
| Pascal VOC | 12k | 20 | 2012 |
| Oxford-IIIT Pet | 7K | 37 | 2012 |
| KITTI Vision | 7K | 3 | |
每個(gè)網(wǎng)格還需要預(yù)測(cè)它屬于20分類中每一個(gè)類別的概率。分類信息是針對(duì)每個(gè)網(wǎng)格的,而不是bounding box。故只需要20個(gè),而不是40個(gè)。而confidence則是針對(duì)bounding box的,它只表示box內(nèi)是否有物體,而不需要預(yù)測(cè)物體是20分類中的哪一個(gè),故只需要2個(gè)參數(shù)。雖然分類信息和confidence都是概率,但表達(dá)含義完全不同。
篩選層是為了在多個(gè)結(jié)果中(多個(gè)bounding box)篩選出最合適的幾個(gè),這個(gè)方法和faster R-CNN 中基本相同。都是先過(guò)濾掉score低于閾值的box,對(duì)剩下的box進(jìn)行NMS非極大值抑制,去除掉重疊度比較高的box(NMS具體算法可以回顧上面faster R-CNN小節(jié))。這樣就得到了最終的最合適的幾個(gè)box和他們的類別。
yolo的損失函數(shù)包含三部分,位置誤差,confidence誤差,分類誤差。具體公式如下:
誤差均采用了均方差算法,其實(shí)我認(rèn)為,位置誤差應(yīng)該采用均方差算法,而分類誤差應(yīng)該采用交叉熵。由于物體位置只有4個(gè)參數(shù),而類別有20個(gè)參數(shù),他們的累加和不同。如果賦予相同的權(quán)重,顯然不合理。故yolo中位置誤差權(quán)重為5,類別誤差權(quán)重為1。由于我們不是特別關(guān)心不包含物體的bounding box,故賦予不包含物體的box的置信度confidence誤差的權(quán)重為0.5,包含物體的權(quán)重則為1。
Faster R-CNN準(zhǔn)確率mAP較高,漏檢率recall較低,但速度較慢。而yolo則相反,速度快,但準(zhǔn)確率和漏檢率不盡人意。SSD綜合了他們的優(yōu)缺點(diǎn),對(duì)輸入300x300的圖像,在voc2007數(shù)據(jù)集上test,能夠達(dá)到58 幀每秒( Titan X 的 GPU ),72.1%的mAP。
SSD網(wǎng)絡(luò)結(jié)構(gòu)如下圖:
和yolo一樣,也分為三部分:卷積層,目標(biāo)檢測(cè)層和NMS篩選層
SSD論文采用了VGG16的基礎(chǔ)網(wǎng)絡(luò),其實(shí)這也是幾乎所有目標(biāo)檢測(cè)神經(jīng)網(wǎng)絡(luò)的慣用方法。先用一個(gè)CNN網(wǎng)絡(luò)來(lái)提取特征,然后再進(jìn)行后續(xù)的目標(biāo)定位和目標(biāo)分類識(shí)別。
這一層由5個(gè)卷積層和一個(gè)平均池化層組成。去掉了最后的全連接層。SSD認(rèn)為目標(biāo)檢測(cè)中的物體,只與周圍信息相關(guān),它的感受野不是全局的,故沒(méi)必要也不應(yīng)該做全連接。SSD的特點(diǎn)如下。
每一個(gè)卷積層,都會(huì)輸出不同大小感受野的feature map。在這些不同尺度的feature map上,進(jìn)行目標(biāo)位置和類別的訓(xùn)練和預(yù)測(cè),從而達(dá)到 多尺度檢測(cè) 的目的,可以克服yolo對(duì)于寬高比不常見(jiàn)的物體,識(shí)別準(zhǔn)確率較低的問(wèn)題。而yolo中,只在最后一個(gè)卷積層上做目標(biāo)位置和類別的訓(xùn)練和預(yù)測(cè)。這是SSD相對(duì)于yolo能提高準(zhǔn)確率的一個(gè)關(guān)鍵所在。
如上所示,在每個(gè)卷積層上都會(huì)進(jìn)行目標(biāo)檢測(cè)和分類,最后由NMS進(jìn)行篩選,輸出最終的結(jié)果。多尺度f(wàn)eature map上做目標(biāo)檢測(cè),就相當(dāng)于多了很多寬高比例的bounding box,可以大大提高泛化能力。
和faster R-CNN相似,SSD也提出了anchor的概念。卷積輸出的feature map,每個(gè)點(diǎn)對(duì)應(yīng)為原圖的一個(gè)區(qū)域的中心點(diǎn)。以這個(gè)點(diǎn)為中心,構(gòu)造出6個(gè)寬高比例不同,大小不同的anchor(SSD中稱為default box)。每個(gè)anchor對(duì)應(yīng)4個(gè)位置參數(shù)(x,y,w,h)和21個(gè)類別概率(voc訓(xùn)練集為20分類問(wèn)題,在加上anchor是否為背景,共21分類)。如下圖所示:
另外,在訓(xùn)練階段,SSD將正負(fù)樣本比例定位1:3。訓(xùn)練集給定了輸入圖像以及每個(gè)物體的真實(shí)區(qū)域(ground true box),將default box和真實(shí)box最接近的選為正樣本。然后在剩下的default box中選擇任意一個(gè)與真實(shí)box IOU大于0.5的,作為正樣本。而其他的則作為負(fù)樣本。由于絕大部分的box為負(fù)樣本,會(huì)導(dǎo)致正負(fù)失衡,故根據(jù)每個(gè)box類別概率排序,使正負(fù)比例保持在1:3。SSD認(rèn)為這個(gè)策略提高了4%的準(zhǔn)確率
另外,SSD采用了數(shù)據(jù)增強(qiáng)。生成與目標(biāo)物體真實(shí)box間IOU為0.1 0.3 0.5 0.7 0.9的patch,隨機(jī)選取這些patch參與訓(xùn)練,并對(duì)他們進(jìn)行隨機(jī)水平翻轉(zhuǎn)等操作。SSD認(rèn)為這個(gè)策略提高了8.8%的準(zhǔn)確率。
和yolo的篩選層基本一致,同樣先過(guò)濾掉類別概率低于閾值的default box,再采用NMS非極大值抑制,篩掉重疊度較高的。只不過(guò)SSD綜合了各個(gè)不同feature map上的目標(biāo)檢測(cè)輸出的default box。
SSD基本已經(jīng)可以滿足我們手機(jī)端上實(shí)時(shí)物體檢測(cè)需求了,TensorFlow在Android上的目標(biāo)檢測(cè)官方模型ssd_mobilenet_v1_android_export.pb,就是通過(guò)SSD算法實(shí)現(xiàn)的。它的基礎(chǔ)卷積網(wǎng)絡(luò)采用的是mobileNet,適合在終端上部署和運(yùn)行。
針對(duì)yolo準(zhǔn)確率不高,容易漏檢,對(duì)長(zhǎng)寬比不常見(jiàn)物體效果差等問(wèn)題,結(jié)合SSD的特點(diǎn),提出了yoloV2。它主要還是采用了yolo的網(wǎng)絡(luò)結(jié)構(gòu),在其基礎(chǔ)上做了一些優(yōu)化和改進(jìn),如下
網(wǎng)絡(luò)采用DarkNet-19:19層,里面包含了大量3x3卷積,同時(shí)借鑒inceptionV1,加入1x1卷積核全局平均池化層。結(jié)構(gòu)如下
yolo和yoloV2只能識(shí)別20類物體,為了優(yōu)化這個(gè)問(wèn)題,提出了yolo9000,可以識(shí)別9000類物體。它在yoloV2基礎(chǔ)上,進(jìn)行了imageNet和coco的聯(lián)合訓(xùn)練。這種方式充分利用imageNet可以識(shí)別1000類物體和coco可以進(jìn)行目標(biāo)位置檢測(cè)的優(yōu)點(diǎn)。當(dāng)使用imageNet訓(xùn)練時(shí),只更新物體分類相關(guān)的參數(shù)。而使用coco時(shí),則更新全部所有參數(shù)。
YOLOv3可以說(shuō)出來(lái)直接吊打一切圖像檢測(cè)算法。比同期的DSSD(反卷積SSD), FPN(feature pyramid networks)準(zhǔn)確率更高或相仿,速度是其1/3.。
YOLOv3的改動(dòng)主要有如下幾點(diǎn):
不過(guò)如果要求更精準(zhǔn)的預(yù)測(cè)邊框,采用COCO AP做評(píng)估標(biāo)準(zhǔn)的話,YOLO3在精確率上的表現(xiàn)就弱了一些。如下圖所示。
當(dāng)前目標(biāo)檢測(cè)模型算法也是層出不窮。在two-stage領(lǐng)域, 2017年Facebook提出了mask R-CNN 。CMU也提出了A-Fast-RCNN 算法,將對(duì)抗學(xué)習(xí)引入到目標(biāo)檢測(cè)領(lǐng)域。Face++也提出了Light-Head R-CNN,主要探討了 R-CNN 如何在物體檢測(cè)中平衡精確度和速度。
one-stage領(lǐng)域也是百花齊放,2017年首爾大學(xué)提出 R-SSD 算法,主要解決小尺寸物體檢測(cè)效果差的問(wèn)題。清華大學(xué)提出了 RON 算法,結(jié)合 two stage 名的方法和 one stage 方法的優(yōu)勢(shì),更加關(guān)注多尺度對(duì)象定位和負(fù)空間樣本挖掘問(wèn)題。
目標(biāo)檢測(cè)領(lǐng)域的深度學(xué)習(xí)算法,需要進(jìn)行目標(biāo)定位和物體識(shí)別,算法相對(duì)來(lái)說(shuō)還是很復(fù)雜的。當(dāng)前各種新算法也是層不出窮,但模型之間有很強(qiáng)的延續(xù)性,大部分模型算法都是借鑒了前人的思想,站在巨人的肩膀上。我們需要知道經(jīng)典模型的特點(diǎn),這些tricks是為了解決什么問(wèn)題,以及為什么解決了這些問(wèn)題。這樣才能舉一反三,萬(wàn)變不離其宗。綜合下來(lái),目標(biāo)檢測(cè)領(lǐng)域主要的難點(diǎn)如下:
一文讀懂目標(biāo)檢測(cè)AI算法:R-CNN,faster R-CNN,yolo,SSD,yoloV2
從YOLOv1到v3的進(jìn)化之路
SSD-Tensorflow超詳細(xì)解析【一】:加載模型對(duì)圖片進(jìn)行測(cè)試 https://blog.csdn.net/k87974/article/details/80606407
YOLO https://pjreddie.com/darknet/yolo/ https://github.com/pjreddie/darknet
C#項(xiàng)目參考:https://github.com/AlturosDestinations/Alturos.Yolo
項(xiàng)目實(shí)踐貼個(gè)圖。
四、yolov5ds使用了什么神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)。
當(dāng)下YOLO最新的卷積神經(jīng)網(wǎng)絡(luò)YOLOv5是完全基于PyTorch實(shí)現(xiàn)的,現(xiàn)版本的YOLOv5每個(gè)圖像的推理時(shí)間最快0.007秒,即每秒140幀(FPS),但YOLOv5的權(quán)重文件大小只有YOLOv4的1/9。
以上就是關(guān)于yolov5數(shù)據(jù)集劃分比例相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
國(guó)內(nèi)如何打開(kāi)youtube(國(guó)內(nèi)如何打開(kāi)推特)
youtube注冊(cè)中國(guó)號(hào)碼無(wú)法驗(yàn)證(youtube中國(guó)號(hào)碼不能驗(yàn)證)
無(wú)錫住宅景觀設(shè)計(jì)公司(無(wú)錫住宅景觀設(shè)計(jì)公司有哪些)
猜你喜歡
廣告推廣費(fèi)用一般多少(廣告推廣費(fèi)用一般多少合適)
表格怎么設(shè)置男女自動(dòng)選(從身份證號(hào)碼中提取性別公式)
淘寶運(yùn)營(yíng)提成一般多少(淘寶運(yùn)營(yíng)提成一般多少)
全國(guó)百度代辦開(kāi)戶(全國(guó)百度代辦開(kāi)戶有風(fēng)險(xiǎn)嗎)
谷歌GoogleChrome(谷歌googlechrome瀏覽器官方下載)
查詢優(yōu)化策略中正確的策略是(查詢優(yōu)化策略中正確的策略是什么)
百度官方認(rèn)證標(biāo)志(百度官方認(rèn)證標(biāo)志需要開(kāi)通百度推廣嗎)