從 2015 年的 YOLOV1,2016 年 YOLOV2,2018 年的 YOLOV3,到 2020 年的 YOLOV4、 YOLOV5, 以及最近出現(xiàn)的 YOLOV76 和 YOLOV7 可以說(shuō) YOLO 系列見(jiàn)證了深度學(xué)習(xí)時(shí)代目標(biāo)檢測(cè)的演化。對(duì)于 YOLO 的基礎(chǔ)知識(shí)以及 YOLOV1 到 YOLOV5 可以去看大白的 YOLO 系列,本文主要對(duì) YOLOV7 的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行一個(gè)梳理,便于大家直觀的感受。
1. YOLOV7 整體結(jié)構(gòu)
我們先整體來(lái)看下 YOLOV7,首先對(duì)輸入的圖片 resize 為 640x640 大小,輸入到 backbone 網(wǎng)絡(luò)中,然后經(jīng) head 層網(wǎng)絡(luò)輸出三層不同 size 大小的 feature map,經(jīng)過(guò) Rep 和 conv輸出預(yù)測(cè)結(jié)果,這里以 coco 為例子,輸出為 80 個(gè)類別,然后每個(gè)輸出(x ,y, w, h, o) 即坐標(biāo)位置和前后背景,3 是指的 anchor 數(shù)量,因此每一層的輸出為 (80+5)x3 = 255再乘上 feature map 的大小就是最終的輸出了。
2. backbone
YOLOV7 的 backbone 如下圖所示
總共有 50 層, 我在上圖用黑色數(shù)字把關(guān)鍵層數(shù)標(biāo)示出來(lái)了。
首先是經(jīng)過(guò) 4 層卷積層,如下圖,CBS 主要是 Conv + BN + SiLU 構(gòu)成,我在圖中用不同的顏色表示不同的 size 和 stride, 如 (3, 2) 表示卷積核大小為 3 ,步長(zhǎng)為 2。 在 config 中的配置如圖。
經(jīng)過(guò) 4個(gè) CBS 后,特征圖變?yōu)?160 * 160 * 128 大小。隨后會(huì)經(jīng)過(guò)論文中提出的 ELAN 模塊,ELAN 由多個(gè) CBS 構(gòu)成,其輸入輸出特征大小保持不變,通道數(shù)在開(kāi)始的兩個(gè) CBS 會(huì)有變化, 后面的幾個(gè)輸入通道都是和輸出通道保持一致的,經(jīng)過(guò)最后一個(gè) CBS 輸出為需要的通道。
MP 層 主要是分為 Maxpool 和 CBS , 其中 MP1 和 MP2 主要是通道數(shù)的比變化。
backbone的基本組件就介紹完了,我們整體來(lái)看下 backbone,經(jīng)過(guò) 4 個(gè) CBS 后,接入例如一個(gè) ELAN ,然后后面就是三個(gè) MP + ELAN 的輸出,對(duì)應(yīng)的就是 C3/C4/C5 的輸出,大小分別為 80 * 80 * 512 , 40 * 40 * 1024, 20 * 20 * 1024。 每一個(gè) MP 由 5 層, ELAN 有 8 層, 所以整個(gè) backbone 的層數(shù)為 4 + 8 + 13 * 3 = 51 層, 從 0 開(kāi)始的話,最后一層就是第 50 層。
3. head
YOLOV7 head 其實(shí)就是一個(gè) pafpn 的結(jié)構(gòu),和之前的YOLOV4,YOLOV5 一樣。首先,對(duì)于 backbone 最后輸出的 32 倍降采樣特征圖 C5,然后經(jīng)過(guò) SPPCSP,通道數(shù)從1024變?yōu)?12。先按照 top down 和 C4、C3融合,得到 P3、P4 和 P5;再按 bottom-up 去和 P4、P5 做融合。
這里基本和 YOLOV5 是一樣的,區(qū)別在于將 YOLOV5 中的 CSP 模塊換成了 ELAN-H 模塊, 同時(shí)下采樣變?yōu)榱?MP2 層。 ELAN-H 模塊是我自己命名的,它和 backbone 中的 ELAN 稍微有點(diǎn)區(qū)別就是 cat 的數(shù)量不同。
至于 E-ELAN 論文中說(shuō)到是在 YOLOV7-E6eE中用到, 但是我在看代碼的時(shí)候,有點(diǎn)沒(méi)太明白是怎么做 shuffle 的,這里等我弄明白了再補(bǔ)上來(lái)。
對(duì)于 pafpn 輸出的 P3、P4 和 P5 , 經(jīng)過(guò) RepConv 調(diào)整通道數(shù),最后使用 1x1 卷積去預(yù)測(cè) objectness、class 和 bbox 三部分。
RepConv 在訓(xùn)練和推理是有一定的區(qū)別。訓(xùn)練時(shí)有三個(gè)分支的相加輸出,部署時(shí)會(huì)將分支的參數(shù)重參數(shù)化到主分支上。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-440063.html
end
至此,我們將 YOLOV7 的基本結(jié)構(gòu)介紹完了,至于 YOLOv7 的其他知識(shí),如Aux Head 等以及 YOLOv7 的其他網(wǎng)絡(luò)結(jié)構(gòu),我們后續(xù)再講。 梳理可能有未理解正確的地方,歡迎交流。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-440063.html
到了這里,關(guān)于深入淺出 Yolo 系列之 Yolov7 基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!