不論是從two-stage到one-stage,從anchor-based到anchor-free,目前檢測演算法的發展其實沒有本質上的創新,基本都是incremental innovation,缺少breaking innovation。我個人覺得裡面的問題就在於很多細節大家沒有去深入琢磨,Devils are in the details。

我試問幾個問題,看看大家是否能給出一個非常solid的回答:

1,SSD-like 和 FPN-like 的backbone到底區別在哪裡?兩者的優劣勢是什麼?

2,在檢測中,anchor-based是不是必須的?(我一直覺得anchor這個就是反人類的)

3,在網路上中,detection head裡面的神經元看到的原圖是什麼?

檢測裡面有很多common sense, 比如大家都知道感受野的重要性,不同尺度的物體需要不同的感受野,不同層的feature map 融合有助於使用local和global的語義信息等等。這些認知其實是很難再讓檢測領域往前更進一步了。需要到細節中去,感受野到底是怎麼影響的?

這裡我想說,大家一定要深入研究感受野這個事情。我在未來將給出一套檢測的框架,在這個框架裡面我會解釋檢測的運作機理,同時給出上面三個問題我的答案。未來的檢測可以根據問題的本身去生成獨立的網路結構,不用一味地使用主流的pretrained backbone,在精度和速度之間可以做到非常好的平衡。


不清楚你想問的方向是什麼,ssd的改進方向,其實也是整個目標檢測領域的改進方向。常見的一些需求:

1、更快,vgg,resnet在生產中還是太大了,如何裁剪網路才是合理的

2、更准,現在大多數的檢測方法ap值都比較高,但是看一下曲線就知道是通過更高的召回來提升ap值的,也就是說誤檢可能比較多,常見的focal loss就是一個,誤檢增加比較明顯

3、更通用,不同的場景,不同的縮放比,不同大小的目標變化,能否一個網路梭哈

4、充分利用視頻流信息,單幀圖像檢測研究得比較多了,vid的方向還有待開發,但實際生產中很多時候都是視頻流,能不能利用視頻流信息提升檢測的效果或者降低檢測的耗時也是一個點

5、超高解析度檢測,安防監控逐漸開始使用4k,8k或者環視等等,在超大解析度上是不是可以直接完成目標的檢測工作

等等。。。

那麼常見的改進方向就是:

1、裁網路,縮減vgg或者resnet的通道數,使用類似mobile net的網路

2、高低層信息融合,各種fpn梭哈測一波

3、檢測跟蹤融合,多幀檢測融合,單獨的vid技術

除去這些還可以改進定位不準,nms或者說後處理耗時過多等等。


其它回答已經總結的很全了,可以再看看TensorFlow Object Detection API裡面的網路。其實他們FPN,OHEM,Focal Loss都實現了,還有各種Backbone,SSDLite。但他們特別低調,不說自己是DSSD,Retinanet,只說是SSD。。。訓練時各種Trick都可以自由組合。我之前還改了一個ShuffleNet的Backbone。訓練好了還可以用TensorRT去量化和加速。


SSD加入FPN,DSSD誕生了;再加入focal-loss,Retinanet誕生了;SSD加入two stage的做法,RefineDet誕生了;SSD需要預訓練,加入BN後不需要預訓練,ScratchDet誕生了;anchor數量太多減少一些,YOLO產生了。本身就是一個單階段檢測器的跨時代框架,你熟悉哪一塊加入進去,就能優化它。網路結構,損失函數,優化方法,NMS後處理,速度等切入一個方面,總能找到可以優化的地方


前面的回答沒什麼實質內容,千篇一律的魔改ssd結構,老生常談的特徵融合話題。

說一下自己的一些拙見:

  1. one stage使用point feature,無法探尋物體內部特徵,一種簡單的想法是能否添加一些其他信息和類別預測共同作為正樣本的判定條件;
  2. fp將某個target assign到某個level 的feature 上,其他level feature上的對應區域便作為neg;
  3. 還有一些所有detector面臨的難題,比如NMS中用置信度最高表示定位性能最好的框、遮擋loss等等相關工作

當然還可以結合一些其他工作

  1. 引入Anchor free。比如FSAF,Guide Anchor等
  2. Cascade ssd,解決mis-alignment
  3. 加instance seg分支,亦可以提升det也可以說成做instance seg.
  4. ATSS等正負樣本判斷閾值。
  5. 拋棄fp結構,用TridentNet思想嘗試嘗試
  6. 等等


推薦閱讀:
相关文章