你的YOLO V4該換了 | YOLO V4原班人馬改進Scaled YOLO V4,已開源(附論文+源碼)

2021-02-14 AI人工智慧初學者

點擊訂閱【人工智慧初學者】,讓我們一起前行

YOLOv4-large在COCO上最高可達55.8 AP!速度也高達15 FPS!YOLOv4-tiny的模型實現了1774 FPS!(在RTX 2080Ti上測試)
作者單位:YOLOv4原班人馬

1、簡介

基於CSP方法的YOLOv4目標檢測方法,可以上下縮放,並且適用於小型和大型網絡,同時保持速度和準確性。基於此本文提出了一種網絡縮放方法,該方法不僅可以修改深度、寬度、解析度,還可以修改網絡的結構。YOLOv4-Large模型達到了最先進的結果:在Tesla V100上以15FPS/s的速度,MS COCO數據集的AP為55.8% AP(73.3%AP50)。這是目前所有已發表文章中COCO數據集的最高準確性。YOLOv4-tiny模型在RTX 2080Ti上以443FPS/s的速度實現了22.0%的AP(42.0%AP50),而使用TensorRT,batchsize=4和FP16精度,YOLOv4-tiny的模型實現了1774FPS/s。

2、Scaled YOLO V4

首先對YOLOv4進行了重新設計,提出了YOLOv4-CSP,然後在YOLOv4-CSP的基礎上開發了Scaled-YOLOv4。在提出的Scaled-yolov4中討論了線性縮放模型的上界和下界,並分析了小模型和大模型縮放時需要注意的問題。因此,能夠系統地開發YOLOv4-Large和YOLOv4-Tiny模型。

Scaled-YOLOv4能夠在速度和精度之間實現最好的平衡,能夠在15fps、30fps和60fps的視頻以及嵌入式系統上進行實時對象檢測。

2.1、動機分析

在對所提出的對象檢測器進行模型縮放後,下一步是處理將發生變化的定量因素,包括帶有定性因素的參數的數量。這些因素包括模型推理時間、平均精度等。根據使用的設備或資料庫,不同的定性因素會有不同的增益效果。

具體對定量因素的分析和設計,以及在低端設備和高端GPU上的微型對象檢測器的定性因素。可以參見原論文。

2.2、Scaled-YOLOv4設計

在本節中將重點放在為一般gpu、低端gpu和高端gpu設計縮放YOLOv4上。

2.2.1、CSP-ized YOLOv4

1、Backbone
在Residual Block中下採樣卷積計算中不包括跨級過程。因此,可以推斷CSPDarknet每個階段的計算量為

由前式可知,CSPDarknet stage只有在k>1時。CSPDarknet53中每個階段擁有的Residual Layer層數分別為1-2-8-8-4。為了獲得更好的速度/精度折中,這裡將第一個CSP階段轉換為Original Darknet Residual Layer。具體結構如下圖:

2、Neck
為了有效地減少計算量,文中對YOLOv4中的PAN體系結構進行了CSP-ize。PAN結構的計算列表如圖2(a)所示。它主要整合來自不同特徵金字塔的特徵,然後通過兩組反向的Original Darknet Residual Layer,沒有shortcut連接。經過CSP-ize,新的計算列表的架構如圖2(b)所示。這個設計有效地減少了40%的計算量。

3、SPP
SPP模塊最初是插入在neck第一個計算列表組的中間位置。因此,作者也將SPP模塊插入到CSP-PAN的第一個計算列表組的中間位置。

class CrossConv(nn.Module):
    # Cross Convolution Downsample
    def __init__(self, c1, c2, k=3, s=1, g=1, e=1.0, shortcut=False):
        # ch_in, ch_out, kernel, stride, groups, expansion, shortcut
        super(CrossConv, self).__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, (1, k), (1, s))
        self.cv2 = Conv(c_, c2, (k, 1), (s, 1), g=g)
        self.add = shortcut and c1 == c2

    def forward(self, x):
        return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))


class C3(nn.Module):
    # Cross Convolution CSP
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion
        super(C3, self).__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False)
        self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False)
        self.cv4 = Conv(2 * c_, c2, 1, 1)
        self.bn = nn.BatchNorm2d(2 * c_)  # applied to cat(cv2, cv3)
        self.act = nn.LeakyReLU(0.1, inplace=True)
        self.m = nn.Sequential(*[CrossConv(c_, c_, 3, 1, g, 1.0, shortcut) for _ in range(n)])

    def forward(self, x):
        y1 = self.cv3(self.m(self.cv1(x)))
        y2 = self.cv2(x)
        return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1))))


class Sum(nn.Module):
    # Weighted sum of 2 or more layers https://arxiv.org/abs/1911.09070
    def __init__(self, n, weight=False):  # n: number of inputs
        super(Sum, self).__init__()
        self.weight = weight  # apply weights boolean
        self.iter = range(n - 1)  # iter object
        if weight:
            self.w = nn.Parameter(-torch.arange(1., n) / 2, requires_grad=True)  # layer weights

    def forward(self, x):
        y = x[0]  # no weight
        if self.weight:
            w = torch.sigmoid(self.w) * 2
            for i in self.iter:
                y = y + x[i + 1] * w[i]
        else:
            for i in self.iter:
                y = y + x[i + 1]
        return y

2.3、YOLOv4-tiny

YOLOv4-tiny是專為低端GPU設備設計的:

這裡使用PCB架構的CSPOSANet來構成YOLOv4的主幹。設g=b/2為增長率,最終使其增長到b/2+kg = 2b。通過計算得到k=3,其結構如圖3所示。對於每個階段的通道數量和Neck部分了採用YOLOv3-tiny的設計。

2.4、YOLOv4-large

YOLOv4-large是為雲GPU設計的,主要目的是實現高精度的目標檢測。這裡設計了一個完全CSP-ize的模型:YOLOv4-P5,並將其擴展到YOLOv4-P6和YOLOv4-P7。

如圖4所示為YOLOv4-P5、YOLOv4-P6、YOLOv4-P7的結構。作者設計在

實驗表明,當寬度縮放因子為1時,YOLOv4-P6可以在30幀/秒的視頻中達到實時性能。對於YOLOv4-P7來說,當寬度縮放因子等於1.25時,它可以在15fps的視頻中達到實時性能。

3、實驗結果3.1、CSP-ized消融實驗3.2、YOLOv4-tiny消融實驗3.3、SOTA實驗對比參考

[1] Real-time object detection method based on improved YOLOv4-tiny

相關焦點

  • PP-YOLO超越YOLOv4-目標檢測的進步
    YOLO-9000是Joseph Redmon出版的第二個「YOLOv2」目標探測器,它改進了探測器,並強調了該檢測器能夠推廣到世界上任何物體的能力。YOLOv3對檢測網絡做了進一步的改進,並開始將目標檢測過程納入主流。
  • 深度學習第31講:目標檢測算法經典論文研讀之 yolo v2/yolo 9000
    Redmon 和 Allen AI 的 Ali Farhadi 針對此前 yolo v1 的缺陷作了大量的改進工作,於 2017 年發表了論文 yolo 9000,並獲得了 CVPR 2017 最佳論文提名。
  • 一文看懂YOLOv5(含網絡結構)
    核心基礎內容 2.2.1 輸入端2.2.2 Backbone2.2.3 Neck2.2.4 輸出端2.3 Yolov5四種網絡結構的不同點2.3.1 四種結構的參數2.3.2 Yolov5網絡結構2.3.3 Yolov5四種網絡的深度2.3.4 Yolov5四種網絡的寬度3 Yolov5相關論文及代碼4 小目標分割檢測
  • 深入淺出的Yolov5核心基礎知識完整講解
    大白在之前寫過《深入淺出Yolo系列之Yolov3&Yolov4核心基礎知識完整講解》對Yolov4的相關基礎知識做了比較系統的梳理,但Yolov4後不久,又出現了四種網絡結構的不同點2.3.1 四種結構的參數2.3.2 Yolov5網絡結構2.3.3 Yolov5四種網絡的深度2.3.4 Yolov5四種網絡的寬度3 Yolov5相關論文及代碼4 小目標分割檢測5 後語1 Yolov5
  • YOLOV4
    YOLO的純正血統的,因為Alexey就是前幾代yolo代碼在github上的維護者。論文連結:https://arxiv.org/pdf/2004.10934.pdf代碼連結:https://github.com/AlexeyAB/darknet一、前言YOLOV4是一個速度和性能更加均衡的檢測算法!先看圖
  • YOLOv5在建築工地中安全帽佩戴檢測的應用(已開源+數據集)
    文末附每日小知識點哦!!該項目使用了YOLOv5s、YOLOv5m、YOLOv5l來訓練安全帽佩戴檢測數據集,代碼和權重均已開源!安全帽佩戴檢測數據集也是開源的(共含7581 張圖像)!項目教程也相當詳細,推薦入門練手學習!而且有意思的是,該項目和數據集的兩位作者均是中國人,點讚!
  • YOLO v5 實現目標檢測(參考數據集&自製數據集)
    2.1、下載源碼項目的源碼可以直接使用Git Bash在指定文件夾目錄下輸入下面命令行來獲取:git clone https://github.com/ultralytics/yolov5或者在github官網使用點擊下載zip源碼進行解壓即可使用,如下圖所示。
  • YOLOv4團隊開源最新力作!1774fps、COCO最高精度,分別適合高低端GPU的YOLO
    /ScaledYOLOv4YOLOv4-CSP: https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-cspYOLOv4-tiny: https://github.com/WongKinYiu/ScaledYOLOv4
  • yolov5實戰之皮卡丘檢測
    工作中聽同事提到yolov5效果不錯,而且文檔指導也比較豐富,因此選擇從此入手,順便也熟悉下pytorch。本文就以訓練一個簡單的皮卡丘檢測作為入門吧,也激發下對檢測的學習興趣,暫時不涉及網絡,anchor等細節的理解,只以訓練完為目標。
  • 【源頭活水】YOLO之外的另一選擇,手機端97FPS的Anchor-Free目標檢測模型NanoDet現已開源~
    為此,我們特別精選論文閱讀筆記,開闢「源頭活水」專欄,幫助你廣泛而深入的閱讀科研文獻,敬請關注。分析下來,主要還是因為FCOS的centerness分支在輕量級的模型上很難收斂,之後發表的一些在FCOS上面進行改進的論文也都沒有解決這一問題。
  • 深度學習筆記 | 第7講:CNN目標檢測發家史之從R-CNN到yolo
    yolo v1 算法的核心思想就是將整張圖像作為網絡的輸入,直接在網絡的輸出層輸出目標物體的類別和邊界框的具體位置坐標。yolo v1 將輸入圖像劃分為 S*S 的網格(grid),每個網格預測兩個邊界框,如果目標物體落入相應的網格中,該網格就負責檢測出該目標物體。
  • YOLOv5的妙用:學習手語,幫助聽力障礙群體
    如果聽不到了,你會怎麼辦?如果只能用手語交流呢?當對方無法理解你時,即使像訂餐、討論財務事項,甚至和朋友家人對話這樣簡單的事情也可能令你氣餒。對普通人而言輕輕鬆鬆的事情對於聽障群體可能是很困難的,他們甚至還會因此遭到歧視。在很多場景下,他們無法獲取合格的翻譯服務,從而導致失業、社會隔絕和公共衛生問題。
  • YOLOv5 對決 Faster RCNN,誰贏誰輸?
    YOLOv5 的實現是在 PyTorch 中完成的,與之前基於 DarkNet 框架的開發形成了鮮明的對比。這使得該模型的理解、訓練和部署變得更加容易(目前暫時沒有使用 YOLO-v5 的論文發表)。以我的理解來看,在架構上,它和 YOLO-v4 很相似。一個不同之處可能是使用了 Cross Stage Partial Network(CSP)來降低計算成本。
  • PyTorch版YOLOv4更新了,不僅適用於自定義數據集,還集成了注意力和...
    近日,就有研究者在 GitHub 上更新了基於 PyTorch 的 YOLOv4。從今年 4 月 YOLOv4 發布後,對於這個目標檢測框架,問的最多的問題或許就是:「有沒有同學復現 YOLOv4 的, 可以交流一下麼」。由於原版 YOLO 使用 C 語言進行編程,光憑這一點就讓不少同學望而卻步。
  • 目標檢測介紹之---- YOLO V1 到 V4
    下面大概介紹一下YOLOv1到v4的發展過程。YOLOv1:     題目:You Only Look Once: Unified, Real-Time Object Detection    YOLO的思想詳細可參考:目標檢測介紹之----YOLO與SSD     YOLO將目標檢測重新定義為一個回歸問題。
  • YOLO項目復活!大神接過衣缽,YOLO之父隱退2月後,v4版正式發布
    另一位曾經參與YOLO項目維護的大神Alexey Bochkovskiy,在arXiv上提交了YOLO v4,而且這篇論文已經被拉入原來YOLO之父建立的項目主線。這也意味著YOLO v4獲得了認可,成為官方指定「繼承人」。
  • YOLOv4 中的數據增強
    發布的YOLOv4顯示,COCO的平均精度(AP)和每秒幀數(FPS)分別提高了10%和12%。在這篇文章中,我們將看到作者是如何通過深入研究YOLOv4中使用的數據增強技術的細節來實現這一突破的。馬賽克增強的發明人Glen Jocher發布了一個名為YOLOv5的新的YOLO訓練框架。
  • 1.8M超輕量目標檢測模型NanoDet,比YOLO快,上線兩天Star量超200
    模型性能目前開源的 NanoDet-m 模型在 320x320 輸入解析度的情況下,整個模型的 Flops 只有 0.72B,而 yolov4-tiny 則有 6.96B,小了將近十倍。在這種設置下,320 解析度輸入能夠達到 20.6 的 mAP,比 tiny-yolov3 高 4 分,只比 yolov4-tiny 低 1 個百分點。在將輸入解析度與 YOLO 保持一致,都使用 416 輸入的情況下,NanoDet 與 yolov4-tiny 得分持平。
  • 1.8M超輕量目標檢測模型NanoDet,比YOLO跑得快,上線兩天Star量超200
    模型性能目前開源的 NanoDet-m 模型在 320x320 輸入解析度的情況下,整個模型的 Flops 只有 0.72B,而 yolov4-tiny 則有 6.96B,小了將近十倍。模型的參數量也只有 0.95M,權重文件在使用 ncnn optimize 進行 16 位存儲之後,只有 1.8mb。
  • YOLO的意思其實是YODO
    最近一個詞在老一輩同志們這火了,叫yolo. 因為前段時間某網站號召散戶大戰華爾街,宣傳語就是這個yolo.年輕人的詞彙。