目錄
目標檢測入門
比賽規則分析
評測指標
- mAP, pascal voc, 和 coco,mmdetection有兩者格式的eval,詳細的也可以參考https://github.com/rafaelpadilla/Object-Detection-Metrics
- acc+mAP
- F1-score
這里要注意,mAP時,提交的confidence thresh是一般來說是越低越好,盡管在視覺上會顯得雜亂無章。
模型限制
- maxDets的限制,即每張圖的最多檢測量
- 模型體積,模型保存fp16的模式
運行時間限制
- 硬性規定
- 得分加權,即評測指標排名與運行時間排名的綜合
- 時間分數占比
數據分析
主要分析數據集中類別,有無長尾分布,bbox的分布,包括面積,長寬,長寬比等,這里可以考慮使用https://github.com/joydeepmedhi/Anchor-Boxes-with-KMeans
在統計bbox的分布時,要主要設定圖像的大小,比如說最小邊縮放至800等,這里的尺寸就應該是圖像輸入到模型的尺寸,僅做一次可能找不到合適的縮放尺寸,可以考慮多做幾次。
在anchor的設計中,應該考慮模型anchor的感受野,訓練尺度和bbox分布的一個權衡。
還有考慮數據domain的分布,例如數據集中同時存在有無雨霧的場景。
圖像大小分布
- 超大圖像(醫療,遙感),需要合理的crop
- 數據集內圖像大小差異比較大,需要合理的padding和crop,這里要注意,數據集內超大圖像中的bbox也是不是超大的,如果也是,就可以直接縮放到一定尺度,不需要其他操作
- 結合自身設備設定尺度上限
bboxes大小和長寬比例分布
- bboxes影響anchor scale的設計
- bboxes 長寬比例影響anchor ratio的設計,
- 類內和類間大小的分布,影響整體算法的設計,例如多尺度以及專家模型
選定輸入尺寸之后,將bboxes長寬畫在出來,Anchor-Boxes-with-KMeans中有。然后決定anchor scale, anchor ratio,最后根據模型感受野選擇backbone的選取。
如果anchor ratios分布很不集中,可以考慮使用deform conv。
bboxes類別分布不均衡,長尾分布
- 對很少的類進行上采樣,或對很多的類進行下采樣
- 訓練動態加權采樣,對每幅圖片的采樣設置一個權重,detectron2中的RepeatFactorTrainingSampler
- 對稀少數據訓練專家模型
感受野 vs anchor & 訓練尺度
- 首先根據機器顯存大小和backbone大小選擇合理的訓練尺度
- 基於resize后的bboxes大小進行分析,包括bboxes的大小、長寬比和面積,類別等
- 設置anchor scale和ratio盡量解決目標分布,以加快收斂
- 模型感受野要盡量大於bboxes的長邊:
- 縮小訓練圖像尺度
- 增加訓練尺度,選擇更深的backbone
- 最后的卷積層選用空洞卷積
- 引入DCN模塊
- 當一個新聯尺度后者一個模型難以協調時:
- 多尺度訓練
- 專家模型
數據的特殊數性質
- 津南數字制造,X光,摳圖+貼圖
- 虛擬仿真環境下自動駕駛交通標志識別,使用粗檢測+精檢測應對目標數量及其稀少的檢測任務,使用hrnet作為backbone應對iou要求及其高的檢測。
- 布匹瑕疵:存在ratio極端的情況,存在貫穿全圖的情況。可以使用通道拼接,做差輸入等
數據分析總結
- 模型感受野 vs anchor vs gt分布
- 數據增強方式
- 針對數據特殊性質的特殊處理
- 驗證集划分(通過驗證集對每一類進行指標分析)
- 訓練采樣的方式
- 在線加權采樣,按照類別數量比例/類別豐富程度等進行加權
- OHEM
- 正常數據的使用
- 拼接, 摳圖+粘貼
- 對於背景數據與含有目標數據有對應關系的:做差/通道拼接
目標檢測算法選擇
整體算法
推薦使用two-stage
- backbone
- ResNet
- ResNext
- SENet
- EfficientNet
- HRNet
- DCN
- FPN
- FPN
- PANET
- NAS-fpn
- Bifpb
- Head
- cascade
- double head
- post-prcessing
- nms
- soft-nms
- 基於最大score的后驗二分類,(減少假陽誤檢),假設一個圖片中所有檢測都不超過th,認為都是誤檢,可用於瑕疵檢測
- 基於類間關系的后處理,有些類別不會共存
- 基於目標大小以位置先驗的分布,比如目標ratio,和位置等
模型預訓練
好的預訓練是成功的一般。
- ImageNet, coco, openimage object356
- 目標檢測推薦使用coco。
- 使用DCN時盡量使用預訓練模型
多模型集成
- 直接nms
- score加權集成
- bboxes voting
- 專家單類替代
調參技巧
- 一定要明白每個參數的含義
- 在一個小的backbone上調試與backbone無關的參數
- 在實驗時,盡量控制變量