今天很開心給大家介紹我們最新的一個開源項目:SimpleDet。
SimpleDet是一套簡單通用的目標檢測與物體識別的框架。整套框架基于MXNet的原生API完成。這篇文章不僅僅想介紹一下這樣一個新的框架有什么與眾不同的feature,更想去介紹一下我們為什么決定做這么一件事情以及我們的初衷是什么。
為什么還要再造一次錘子?
這個問題其實也是我們在開始這個項目之前自問了很多次的問題。如果大家有心留意下的話,Ross在產出RCNN和Fast RCNN的那兩三年,每年都會去參加一下ImageNet比賽。其實當初很不解,為什么要去這么做,尤其是基本都是很裸的方法,一定不可能拿到好的名次。后來有機會去抓住Kaiming問了一下這個問題,Kaiming給我的答案是,Ross其實并不關系這個名次,Ross關心的是借這個機會宣傳他更好用的錘子給大家。
其實不同于很多人認為的那樣,模型fancy,結果好才是一個好工作的體現。恰恰相反,簡單可靠,越多的paper愿意以這個方法作為baseline,就越說明這個方法的經典。其實對我自己而言,我從讀PhD開始就一直愿意去做這樣的baseline和這樣的錘子。從當年用HOG+LR超越絕大多數paper的Tracking到參與MXNet項目再到后來用5行代碼做domain adaptation的AdaBN。雖然開始的時候都遭受了很多人包括reviewer的質疑,但是時間都證明了這些工作的價值。
對于目標檢測和識別領域,今天我們發現了同樣的問題。雖有很多開源的代碼和框架,但是目前看下來仍有很大進步的空間。一方面現有的開源框架雖有各種冠軍頭銜加持,但因為各種各樣的原因,復現出真正SOTA的結果仍然不是一件輕松的事情;另一方面,一些性能還不錯的開源代碼(如SNIP和SNIPER)卻難以拓展和維護。所導致的結果就是目前仍然有很多論文仍然在一個很低的baseline上進行改進,就算取得了性能的提升也很難說明方法的有效性。我們建立SimpleDet就是為了對于Instance Recognition這一系列問題提供一個更好的baseline和更好的錘子。
如果去問一個同學你需要一個什么樣的目標檢測和識別框架,我相信性能好,速度快,好用這三個關鍵詞可以覆蓋99%的需求,下面我們一一展開來看看SimpleDet在這些方面的優勢和與其他開源框架的區別。
什么叫性能好?
在SimpleDet中,最值得關注的一個算法是我們的TridentNet(不知道TridentNet的同學歡迎猛戳:https://zhuanlan.zhihu.com/p/54334986)。我們公布了在各個setting下的模型和訓練代碼。這也是目前已知的COCO上單模型最高的算法。除了一個干凈的模型(testdev mAP=42.7)之外,我們還提供了一個加上了全部大禮包的setting(testdev mAP=48.4),包括Sync BN,multi-scale training/testing,deformable conv和softer NMS。雖然這些都是在很多paper和比賽中大家已經常用的技術了,但是仍然很難把所有的方法都直接正確打開。我們在SimpleDet中提供了一套開箱即用的方案,希望借此降低復現SOTA的門檻,從而提升下整個領域中baseline的水平。除此之外,為了方便大家進一步拓展,我們還提供了一些經典模型和算法,例如Mask(Faster) RCNN,FPN,RetinaNet,CascadeRCNN等。這個算法的結果都已經經過驗證,能達到論文中和已有開源代碼的結果。我們后續還會進一步補充一些經典和重要的工作,也歡迎大家積極貢獻。
什么叫速度快?
首先針對速度這個問題,我們一個獨特的feature是FP16 training,FP16不僅可以節省一半的顯存,在最新支持TensorCore的Volta和Turing系列GPU上還可以有一倍甚至更多的速度提升。如下左圖,從1080Ti的30img/s可以提升到75img/s,展現了非常顯著的提升。其次,對有不同資源的同學來說,對于速度的需求也是不同的。我們著重考慮了三種典型的用戶:
1. 入門用戶:這類用戶可能由于實驗室資源限制,或者單純是因為個人興趣,只能負擔起小于4塊GPU。針對這類用戶,能夠盡量復現出更多資源下的結果是第一優先級。核心的問題在于使用大的batchsize和BN batchsize。在這樣的setting下,SimpleDet提供了Inplace ABN[1] (To be announced),結合上MXNet本身提供的memonger功能,再加上FP16,極限狀態下訓練的單卡batchsize可以達到8到16。雖然損失了一定的速度,但是在兩到四卡上就能達到正常八卡訓練的batchsize。
2.普通用戶:這類用戶應該占據絕大多數,可以獨占一臺8卡機器進行訓練。這類用戶對于速度會有著更高的需求,可以在入門用戶的基礎上關掉memonger這種對速度有一些影響的組件,以得到更好的訓練速度。
3.土豪用戶:手里有多臺8卡機器,希望充分利用機器快速迭代模型。針對這部分用戶,依托于MXNet優秀的分布式設計以及阿里云更進一步優化的Perseus通信框架,如下右圖所示,我們在4機32卡的情況下可以做到線性加速(沒有資源進行更大的測試了,更強大的土豪可以贊助點機器。。。)。這對于打比賽或者對模型迭代速度有很高要求的應用來說,無疑是個福音。
我們希望每一類用戶都能各取所需,在SimpleDet中找到最適合自己資源的setting,極大化產出。
什么叫做好用?
雖然每個用戶心里都會有一個好用的定義(心疼產品經理1s...),除了前面的性能和速度之外,我們認為是否容易拓展和方便清晰調參也會是兩個重要的因素。我們針對一些常見需求,進行了高度模塊化的設計,一個核心思想便是盡量抽象和隔離核心操作,使各種不同算法盡量復用,在這些核心操作之上拓展而無需修改。例如,我們抽象出了一整套干凈通用的配置系統,除了可以配置所有常見參數之外,還將常用的預處理和數據擴充操作也都抽象出來。針對這些常見的變更,用戶不需要修改核心代碼即可完成調優。再比如,修改一個detection算法可能會遇到最復雜的邏輯就是在于data loader和pre-process,但是往往一個欠佳的實現會導致loader的效率大幅度下降,從而成為整個訓練中的瓶頸,使得GPU利用率降低。在SimpleDet中,我們提取出了一個通用的多線程loader框架,并抽象出了在預處理中常見的操作。后續新算法的拓展可以很容易在這些通用工具的基礎上同時保持簡潔性和效率。更多的設計歡迎大家直接閱讀源碼,我們也給出了一個簡單的對Faster RCNN和TridentNet代碼結構的分析供大家參考。
以上便是SimpleDet的一個簡要介紹,歡迎大家積極試用,提出寶貴意見。也歡迎大家一起來捉bug,貢獻新的算法和feature,共同把SimpleDet打造成一套目標檢測與物體識別的前沿試驗平臺。
-
框架
+關注
關注
0文章
399瀏覽量
17434 -
機器
+關注
關注
0文章
779瀏覽量
40687 -
開源框架
+關注
關注
0文章
32瀏覽量
9408
原文標題:SimpleDet: 一套簡單通用的目標檢測與物體識別框架
文章出處:【微信號:thejiangmen,微信公眾號:將門創投】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論