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