Tensorflow框架:目标检测Yolo思想
Yolo-You Only Look Once
YOLO算法采用一個單獨(dú)的CNN模型實(shí)現(xiàn)end-to-end的目標(biāo)檢測:
? YOLO算法整體來說就是把輸入的圖片劃分為SS格子,這里是33個格子。
? 當(dāng)被檢測的目標(biāo)的中心點(diǎn)落入這個格子時(shí),這個格子負(fù)責(zé)檢測這個目標(biāo),如圖中的人。
? 我們把這個圖片輸入到網(wǎng)絡(luò)中,最后輸出的尺寸也是SSn(n是通道數(shù)),這個輸出的SS與原輸 入圖片SS相對應(yīng)(都是33)。
? 假如我們網(wǎng)絡(luò)一共能檢測20個類別的目標(biāo),那么輸出的通道數(shù)n=2(4+1)+20=30。這里的2指 的是每個格子有兩個標(biāo)定框(論文指出的),4代表標(biāo)定框的坐標(biāo)信息, 1代表標(biāo)定框的置信度, 20是檢測目標(biāo)的類別數(shù)。
? 所以網(wǎng)絡(luò)最后輸出結(jié)果的尺寸是SSn=3330。
關(guān)于標(biāo)定框:
? 網(wǎng)絡(luò)的輸出是S x S x (5*B+C) 的一個 tensor(S-尺寸,B- 標(biāo)定框個數(shù),C-檢測類別數(shù),5-標(biāo)定框的信息)。
? 5分為4+1:
? 4代表標(biāo)定框的位置信息。框的中心點(diǎn)(x,y),框的高寬 h,w。
? 1表示每個標(biāo)定框的置信度以及標(biāo)定框的準(zhǔn)確度信息。
一般情況下,YOLO 不會預(yù)測邊界框中心的確切坐標(biāo)。它預(yù)測:
?與預(yù)測目標(biāo)的網(wǎng)格單元左上角相關(guān)的偏移;
?使用特征圖單元的維度進(jìn)行歸一化的偏移。
例如: 以上圖為例,如果中心的預(yù)測是 (0.4, 0.7),則中心在 13 x 13 特征圖上的坐標(biāo)是 (6.4, 6.7)(紅色單 元的左上角坐標(biāo)是 (6,6))。
但是,如果預(yù)測到的 x,y 坐標(biāo)大于 1,比如 (1.2, 0.7)。那么預(yù)測的中心坐標(biāo)是 (7.2, 6.7)。注意該中心在紅色單元右側(cè)的單元中。這打破了 YOLO 背后的理論,因?yàn)槿绻覀兗僭O(shè)紅色框負(fù)責(zé)預(yù)測目 標(biāo)狗,那么狗的中心必須在紅色單元中,不應(yīng)該在它旁邊的網(wǎng)格單元中。 因此,為了解決這個問題,我們對輸出執(zhí)行 sigmoid 函數(shù),將輸出壓縮到區(qū)間 0 到 1 之間,有效 確保中心處于執(zhí)行預(yù)測的網(wǎng)格單元中。
每個標(biāo)定框的置信度以及標(biāo)定框的準(zhǔn)確度信息:
左邊代表包含這個標(biāo)定框的格子里是否有目標(biāo)。有=1沒有=0。 右邊代表標(biāo)定框的準(zhǔn)確程度, 右邊的部分是把兩個標(biāo)定框(一個是Ground truth一個是預(yù)測的標(biāo) 定框)進(jìn)行一個IOU操作,即兩個標(biāo)定框的交集比并集,數(shù)值越大,即標(biāo)定框重合越多,越準(zhǔn)確。
我們可以計(jì)算出各個標(biāo)定框的類別置信度(class-specific confidence scores/ class scores): 表達(dá)的是該標(biāo)定框中目標(biāo)屬于各個類別的可能性大小以及標(biāo)定框匹配目標(biāo)的好壞。
每個網(wǎng)格預(yù)測的class信息和bounding box預(yù)測的confidence信息相乘,就得到每個bounding box 的class-specific confidence score。
? 其進(jìn)行了二十多次卷積還有四次最大池化。其中3x3卷積用于提取特征,1x1卷積用于壓縮特征,最后將圖像 壓縮到7x7xfilter的大小,相當(dāng)于將整個圖像劃分為7x7的網(wǎng)格,每個網(wǎng)格負(fù)責(zé)自己這一塊區(qū)域的目標(biāo)檢測。
? 整個網(wǎng)絡(luò)最后利用全連接層使其結(jié)果的size為(7x7x30),其中7x7代表的是7x7的網(wǎng)格,30前20個代表的是預(yù)測 的種類,后10代表兩個預(yù)測框及其置信度(5x2)。
對每一個網(wǎng)格的每一個bbox執(zhí)行同樣操作: 7x7x2 = 98 bbox (每個bbox既有對應(yīng)的class信息又有坐標(biāo)信息)
得到每個bbox的class-specific confidence score以后,設(shè)置閾值,濾掉得分低的boxes,對保留的 boxes進(jìn)行NMS處理,就得到最終的檢測結(jié)果。
排序后,不同位置的框內(nèi),概率不同:
以最大值作為bbox_max,并與比它小的非0值(bbox_cur)做比較:IOU
遞歸,以下一個非0 bbox_cur(0.2)作為bbox_max繼續(xù)比較IOU:
最終,剩下n個框。
得到每個bbox的class-specific confidence score以后,設(shè)置閾值,濾掉得分低的boxes,對保留的boxes進(jìn)行NMS處理,就得到最終的檢測結(jié)果。
對bb3(20×1)類別的分?jǐn)?shù),找分?jǐn)?shù)對應(yīng)最大類別的索引.---->class bb3(20×1)中最大的分---->score
根據(jù)不同類劃分不同的框:
Yolo的缺點(diǎn):
?YOLO對相互靠的很近的物體(挨在一起且中點(diǎn)都落在同一個格子上的情況),還有很小的 群體檢測效果不好,這是因?yàn)橐粋€網(wǎng)格中只預(yù)測了兩個框,并且只屬于一類。
?測試圖像中,當(dāng)同一類物體出現(xiàn)不常見的長寬比和其他情況時(shí)泛化能力偏弱。
Yolo2
1.Yolo2使用了一個新的分類網(wǎng)絡(luò)作為特征提取部 分。
2. 網(wǎng)絡(luò)使用了較多的3 x 3卷積核,在每一次池化操 作后把通道數(shù)翻倍。
3. 把1 x 1的卷積核置于3 x 3的卷積核之間,用來壓 縮特征。
4. 使用batch normalization穩(wěn)定模型訓(xùn)練,加速收 斂。
5. 保留了一個shortcut用于存儲之前的特征。
6. 除去網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)化外,yolo2相比于yolo1加入 了先驗(yàn)框部分,最后輸出的conv_dec的shape為 (13,13,425):
? 13x13是把整個圖分為13x13的網(wǎng)格用于預(yù)測。
? 425可以分解為(85x5)。在85中,由于yolo2常 用的是coco數(shù)據(jù)集,其中具有80個類;剩余 的5指的是x、y、w、h和其置信度。x5意味著 預(yù)測結(jié)果包含5個框,分別對應(yīng)5個先驗(yàn)框。
Yolo3
YOLOv3相比于之前的yolo1和yolo2,改進(jìn)較大,主要 改進(jìn)方向有:
1、使用了殘差網(wǎng)絡(luò)Residual
2、提取多特征層進(jìn)行目標(biāo)檢測,一共提取三個特征 層,它的shape分別為(13,13,75),(26,26,75), (52,52,75)。最后一個維度為75是因?yàn)樵搱D是基于voc 數(shù)據(jù)集的,它的類為20種。yolo3針對每一個特征層 存在3個先驗(yàn)框,所以最后維度為3x25。
3、其采用反卷積UpSampling2d設(shè)計(jì),逆卷積相對于 卷積在神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的正向和反向傳播中做相反的運(yùn) 算,其可以更多更好的提取出特征。
代碼實(shí)現(xiàn):
在資源中
實(shí)現(xiàn)結(jié)果如下
總結(jié)
以上是生活随笔為你收集整理的Tensorflow框架:目标检测Yolo思想的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到和丧尸打斗是什么意思
- 下一篇: caffe安装_目标检测之caffe-s