從 2015 年的 YOLOV1,2016 年 YOLOV2,2018 年的 YOLOV3,到 2020 年的 YOLOV4、 YOLOV5, 以及最近出現的 YOLOV6 和 YOLOV7 可以說 YOLO 系列見證了深度學習時代目標檢測的演化,對于 YOLO 的基礎知識以及 YOLOV1 到 YOLOV5 可以去看大白的 YOLO 系列,本文主要對 YOLOV7 的網路結構進行一個梳理,便于大家直觀的感受,
1. YOLOV7 整體結構
我們先整體來看下 YOLOV7,首先對輸入的圖片 resize 為 640x640 大小,輸入到 backbone 網路中,然后經 head 層網路輸出三層不同 size 大小的 **feature map**,經過 Rep 和 conv輸出預測結果,這里以 coco 為例子,輸出為 80 個類別,然后每個輸出(x ,y, w, h, o) 即坐標位置和前后背景,3 是指的 anchor 數量,因此每一層的輸出為 (80+5)x3 = 255再乘上 feature map 的大小就是最終的輸出了,
2. backbone
YOLOV7 的 backbone 如下圖所示
總共有 50 層, 我在上圖用黑色數字把關鍵層數標示出來了,
首先是經過 4 層卷積層,如下圖,CBS 主要是 Conv + BN + SiLU 構成,我在圖中用不同的顏色表示不同的 size 和 stride, 如 (3, 2) 表示卷積核大小為 3 ,步長為 2, 在 config 中的配置如圖,


MP 層 主要是分為 Maxpool 和 CBS , 其中 MP1 和 MP2 主要是通道數的比變化,
backbone的基本組件就介紹完了,我們整體來看下 backbone,經過 4 個 CBS 后,接入例如一個 ELAN ,然后后面就是三個 MP + ELAN 的輸出,對應的就是 C3/C4/C5 的輸出,大小分別為 80 * 80 * 512 , 40 * 40 * 1024, 20 * 20 * 1024, 每一個 MP 由 5 層, ELAN 有 8 層, 所以整個 backbone 的層數為 4 + 8 + 13 * 3 = 51 層, 從 0 開始的話,最后一層就是第 50 層,
3. head
YOLOV7 head 其實就是一個 pafpn 的結構,和之前的YOLOV4,YOLOV5 一樣,首先,對于 backbone 最后輸出的 32 倍降采樣特征圖 C5,然后經過 SPPCSP,通道數從1024變為512,先按照 top down 和 C4、C3融合,得到 P3、P4 和 P5;再按 bottom-up 去和 P4、P5 做融合,
至于 E-ELAN 論文中說到是在 YOLOV7-E6eE中用到, 但是我在看代碼的時候,有點沒太明白是怎么做 shuffle 的,這里等我弄明白了再補上來,
對于 **pafpn** 輸出的 P3、P4 和 P5 , 經過 RepConv 調整通道數,最后使用 1x1 卷積去預測 objectness、class 和 bbox 三部分,
RepConv 在訓練和推理是有一定的區別,訓練時有三個分支的相加輸出,部署時會將分支的引數重引數化到主分支上,
至此,我們將 YOLOV7 的基本結構介紹完了,至于 YOLOv7 的其他知識,如Aux Head 等以及 YOLOv7 的其他網路結構,我們后續再講, 梳理可能有未理解正確的地方,歡迎交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/499877.html
標籤:其他
上一篇:國內外知名原始碼商城系統盤點
下一篇:【線性DP】數字三角形
