YOLOv6: A Single-Stage Object Detection Framework for IndustrialApplications
paper地址:https://arxiv.org/abs/2209.02976
源碼github地址:GitHub - meituan/YOLOv6: YOLOv6: a single-stage object detection framework dedicated to industrial applications.
6月底發布的源碼,9月初終于發布了技術報告。細節部分歡迎去原文中扣,這里只做各部分的一些講解和個人理解。
目錄
摘要
一、介紹
二、方法介紹
2.1 網絡設計
2.2?標簽分配
2.3 損失函數
2.4 為了工業部署便利的相關tricks
2.5 量化和部署
摘要
? ? ? ? 上來先說,yolov6大量地吸收了最近的網絡設計、訓練策略、測試技術、量化和優化方法的想法,就是說沒有什么很吸睛的創新,就是一堆縫合。然后說明,yolo作者已經慷慨許可了他們把這個算法命名為yolov6(因此不要說他們蹭熱度了)。
? ? ? ? ?關于精度和性能對比,看下面這張圖就差不多明白了。
一、介紹
? ? ? ? 介紹了yolov6出來的動機和背景:
? ? ? ? (1)來自RepVGG的重參數化是一種優越的技術,在檢測(已有的yolo版本)中尚未得到很好的利用(實際上同時期的yolov7里也用到了)。同時,作者認為小型網絡和大型網絡不一樣,對大型網絡來說,對RepVGG塊進行簡單地模型縮放不切實際。
? ? ? ? (2)基于重參數化的檢測器的量化也要調整
? ? ? ? (3)考慮真正的服務環境中的部署(以前的算法往往在高功耗的v100上比),我要換個平臺賽道比比
? ? ? ? (4)新的標簽分配和損失函數出來啦,得試試
? ? ? ? (5)加點新的策略tricks,不增加推理時間就行
? ? ? ? 總結yolov6的貢獻:
- ? ? ? ? 同時在分類和回歸中加入了自蒸餾策略
- ? ? ? ? 做了很多實驗驗證不同的標簽分配策略、損失函數、數據增強技術,找到了最好的組合
二、方法介紹
????????YOLOv6的新設計包括以下組件:網絡設計、標簽分配、損失函數、數據增強、為了工業方便的改進、量化和部署:
2.1 網絡設計
- ? ? ? ? Backbone:yolov6的小型網絡(跟v5和其他的版本一樣,yolov6提供yolov6-n、yolov6-s等好幾個規模的網絡)中,使用RepBlock為基本模塊;yolov6的大型網絡,用了他們自己修改的一個高效CSP塊,取名叫CSPStackRep塊。
????????
(a)和(b)表示了RepBlock,(a)表示訓練的時候,RepVGG block接一個ReLU,(b)表示推理的時候,RepVGG塊被替換成了RepConv
(c)CSPStackRep塊的結構?
- ? ? ? ? Neck:參考YOLOv4和v5用的PAN,結合backbone里的RepBlock或者CSPStackRep,提出了一個Rep-PAN
- ? ? ? ? Head:類似YOLOX的解耦頭,更高效化了(微調)。YOLOv6里采用的是anchor-free的檢測頭(YOLOX、FCOS),是anchor point-based,而不是keypoint-based
2.2?標簽分配
? ? ? ?SimOTA的訓練太慢,而且容易陷入不穩定的訓練。 實驗發現TAL(Task alignment learning)更好。
2.3 損失函數
? ? ? ? 分類損失用的是VFL(VariFocal Loss),回歸損失用的是SIoU/GIoU
2.4 為了工業部署便利的相關tricks
? ? ? ? 更多的epoch、自蒸餾、圖片邊緣放置灰色邊界(有助于檢測邊界的object)
2.5 量化和部署
? ? ? ? 用了 訓練后量化(PTQ)和量化感知訓練(QAT)
總結
以上是生活随笔為你收集整理的YOLOv6: A Single-Stage Object Detection Framework for IndustrialApplications的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataBricks从开源到商业化踩过的
- 下一篇: 单下划线和双下划线