學(xué)號(hào):20011210350? 姓名:呂敬武
轉(zhuǎn)載自:https://blog.csdn.net/litt1e/article/details/88814417?ops_request_misc=&request_id=&biz_id=102&utm_term=YOLO&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-4-88814417.first_rank_v2_pc_rank_v29
【嵌牛導(dǎo)讀】圖像處理是現(xiàn)在必不可缺也是特別熱門的方向之一缰冤,目前發(fā)展十分迅速欺劳。YOLO(you only look once)是一種基于深度神經(jīng)網(wǎng)絡(luò)的對(duì)象識(shí)別和定位算法泼疑,其最大的特點(diǎn)是運(yùn)行速度很快镊辕,可以用于實(shí)時(shí)系統(tǒng)闷沥。下面是對(duì)YOLO v1的一個(gè)自己的看法。
【嵌牛鼻子】YOLO v1趣斤;自己的理解
【嵌牛正文】
從R-CNN到Faster R-CNN一直采用的思路是proposal+分類 (proposal 提供位置信息方援, 分類提供類別信息)精度已經(jīng)很高,但由于two-stage(proposal耗費(fèi)時(shí)間過多)處理速度不行達(dá)不到real-time效果式镐。
YOLO
提供了另一種更為直接的思路: 直接在輸出層回歸bounding box的位置和bounding box所屬的類別(整張圖作為網(wǎng)絡(luò)的輸入反镇,把 Object
Detection 的問題轉(zhuǎn)化成一個(gè) Regression 問題)。
網(wǎng)絡(luò)結(jié)構(gòu):
網(wǎng)絡(luò)結(jié)構(gòu)借鑒了 GoogLeNet 娘汞。24個(gè)卷積層歹茶,2個(gè)全鏈接層。(用1×1 reduction layers 緊跟 3×3
convolutional layers 取代Goolenet的 inception modules )。
預(yù)訓(xùn)練分類網(wǎng)絡(luò):在 ImageNet 1000-class
competition dataset上預(yù)訓(xùn)練一個(gè)分類網(wǎng)絡(luò)辆亏,這個(gè)網(wǎng)絡(luò)是圖中的前20個(gè)卷機(jī)網(wǎng)絡(luò)+average-pooling layer+ fully connected layer (此時(shí)網(wǎng)絡(luò)輸入是224×224)风秤。訓(xùn)練檢測(cè)網(wǎng)絡(luò):轉(zhuǎn)換模型去執(zhí)行檢測(cè)任務(wù),《Object detection networks
on convolutional feature maps》提到說在預(yù)訓(xùn)練網(wǎng)絡(luò)中增加卷積和全鏈接層可以改善性能扮叨。在他們例子基礎(chǔ)上添加4個(gè)卷積層和2個(gè)全鏈接層缤弦,隨機(jī)初始化權(quán)重。檢測(cè)要求細(xì)粒度的視覺信息彻磁,所以把網(wǎng)絡(luò)輸入也又224×224變成448×448碍沐。
作者在YOLO算法中把物體檢測(cè)(object detection)問題處理成回歸問題,用一個(gè)卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)就可以從輸入圖像直接預(yù)測(cè)bounding box和類別概率衷蜓。
算法首先把輸入圖像劃分成S×S的格子累提,然后對(duì)每個(gè)格子都預(yù)測(cè)B個(gè)bounding boxes,每個(gè)bounding box都包含5個(gè)預(yù)測(cè)值:x,y,w,h和confidence磁浇。
x斋陪,y就是bounding box的中心坐標(biāo),與grid cell對(duì)齊(即相對(duì)于當(dāng)前grid cell的偏移值)置吓,使得范圍變成0到1无虚;
w,h進(jìn)行歸一化(分別除以圖像的w和h衍锚,這樣最后的w和h就在0到1范圍)友题。
confidence
代表了所預(yù)測(cè)的box中含有object的置信度和這個(gè)box預(yù)測(cè)的有多準(zhǔn)兩重信息:
換句話說,如果ground truth落在這個(gè)grid cell里戴质,那么Pr(Object)就取1度宦,否則就是0,IOU就是bounding box與實(shí)際的groud truth之間的交并比告匠。所以confidence就是這兩者的乘積戈抄。
所以如何判斷一個(gè)grid cell中是否包含object呢?答案是:如果一個(gè)object的ground truth的中心點(diǎn)坐標(biāo)在一個(gè)grid cell中凫海,那么這個(gè)grid cell就是包含這個(gè)object呛凶,也就是說這個(gè)object的預(yù)測(cè)就由該grid cell負(fù)責(zé)。
每個(gè)grid cell都預(yù)測(cè)C個(gè)類別概率行贪,表示一個(gè)grid cell在包含object的條件下屬于某個(gè)類別的概率。
損失函數(shù)設(shè)計(jì):
這里詳細(xì)講一下loss function模闲。在loss function中建瘫,前面兩行表示localization
error(即坐標(biāo)誤差),第一行是box中心坐標(biāo)(x,y)的預(yù)測(cè)尸折,第二行為寬和高的預(yù)測(cè)啰脚。這里注意用寬和高的開根號(hào)代替原來的寬和高,這樣做主要是因?yàn)橄嗤膶捄透哒`差對(duì)于小的目標(biāo)精度影響比大的目標(biāo)要大。
第三橄浓、四行表示bounding box的confidence損失粒梦,就像前面所說的,分成grid cell包含與不包含object兩種情況荸实。這里注意下因?yàn)槊總€(gè)grid cell包含兩個(gè)bounding box匀们,所以只有當(dāng)ground truth 和該網(wǎng)格中的某個(gè)bounding box的IOU值最大的時(shí)候,才計(jì)算這項(xiàng)准给。
第五行表示預(yù)測(cè)類別的誤差泄朴,注意前面的系數(shù)只有在grid cell包含object的時(shí)候才為1。
測(cè)試:
等式左邊第一項(xiàng)就是每個(gè)網(wǎng)格預(yù)測(cè)的類別信息露氮,第二三項(xiàng)就是每個(gè)bounding box預(yù)測(cè)的confidence祖灰。這個(gè)乘積即encode了預(yù)測(cè)的box屬于某一類的概率,也有該box準(zhǔn)確度的信息畔规。
對(duì)每一個(gè)網(wǎng)格的每一個(gè)bbox執(zhí)行同樣操作: 7x7x2 = 98 bbox (每個(gè)bbox既有對(duì)應(yīng)的class信息又有坐標(biāo)信息)
得到98bbox的信息后局扶,首先對(duì)閾值小于0.2的score清零,然后重新排序叁扫,最后再用NMS算法去掉重復(fù)率較大的bounding box(NMS:針對(duì)某一類別三妈,選擇得分最大的bounding box,然后計(jì)算它和其它bounding box的IOU值陌兑,如果IOU大于0.5沈跨,說明重復(fù)率較大,該得分設(shè)為0兔综,如果不大于0.5饿凛,則不改;這樣一輪后软驰,再選擇剩下的score里面最大的那個(gè)bounding box涧窒,然后計(jì)算該bounding box和其它bounding box的IOU,重復(fù)以上過程直到最后)锭亏。最后每個(gè)bounding box的20個(gè)score取最大的score纠吴,如果這個(gè)score大于0,那么這個(gè)bounding box就是這個(gè)socre對(duì)應(yīng)的類別(矩陣的行)慧瘤,如果小于0戴已,說明這個(gè)bounding box里面沒有物體,跳過即可锅减。
缺陷:YOLO對(duì)相互靠的很近的物體(挨在一起且中點(diǎn)都落在同一個(gè)格子上的情況)糖儡,還有很小的群體 檢測(cè)效果不好,這是因?yàn)橐粋€(gè)網(wǎng)格中只預(yù)測(cè)了兩個(gè)框怔匣,并且只屬于一類握联。
測(cè)試圖像中,當(dāng)同一類物體出現(xiàn)的不常見的長(zhǎng)寬比和其他情況時(shí)泛化能力偏弱。
由于損失函數(shù)的問題金闽,定位誤差是影響檢測(cè)效果的主要原因纯露,尤其是大小物體的處理上,還有待加強(qiáng)代芜。