Detectron是Facebook AI Research 的開源項(xiàng)目泽论。主要是faster RCNN系列的大神們韩脏,將Mask RCNN脉让,RetinaNet,F(xiàn)aster RCNN跷睦,RPN等算法集合到了一個(gè)框架下筷弦,方便研究人員使用。
科研人員除了科研能力抑诸,如果能具備優(yōu)秀的工程能力烂琴,將是非常棒的爹殊。本文記錄了detectron pytorch版本的代碼結(jié)構(gòu)筆記,一起來學(xué)習(xí)一下大神優(yōu)美的工程架構(gòu)监右。
detection pytorch link: https://github.com/roytseng-tw/Detectron.pytorch
Detectron:
主要包含以下五個(gè)文件夾边灭。
1、configs:
2健盒、data
3、lib
4称簿、tools
5扣癣、Outputs
——————————————————————————————————————————————
下邊繼續(xù)介紹這些文件夾
configs
這個(gè)文件夾目錄下全部存放的是模型訓(xùn)練的各種yaml配置文件,你想要選什么樣的模型組合憨降,可在這里挑選父虑,并且可以修改其中的一些參數(shù)。
包含三個(gè)文件夾:baselines授药、getting_started士嚎、gn_baselines
一般選baselines里邊的模型就行了。
tools
這個(gè)文件夾放一些自己添加的常用的工具腳本文件悔叽,比較重要的兩個(gè)文件有train_net.py 和 test_net.py莱衩,這兩個(gè)文件分別是訓(xùn)練和測(cè)試的初始加載文件。
Outputs
這個(gè)文件夾中保存的是訓(xùn)練的模型已經(jīng)測(cè)試的結(jié)果
模型保存在 ckpt中
測(cè)試結(jié)果在 test中娇澎,可視化結(jié)果在test中的vis里笨蚁。
data
這是存放數(shù)據(jù)集的地方,可以按照VOC的形式存放趟庄。
——————————————————————————————————————————————
注意括细,最最最關(guān)鍵的核心代碼都在這里!
lib
lib 包含 datasets、core戚啥、model奋单、modeling、nn猫十、roi_data
下邊繼續(xù)逐個(gè)介紹這些文件夾以及里邊的文件
1览濒、datasets
dataset_catalog.py:跟所讀取的數(shù)據(jù)相關(guān)的路徑參數(shù)的配置代碼。
roidb.py炫彩、json_dataset.py:讀取數(shù)據(jù)構(gòu)建數(shù)據(jù)結(jié)構(gòu)roidb的代碼匾七。
voc_dataset_evaluator.py和voc_eval.py:測(cè)試與結(jié)果評(píng)估涉及的代碼。
在目標(biāo)檢測(cè)類任務(wù)中, 有一個(gè)很重要的數(shù)據(jù)結(jié)構(gòu)roidb, 它將作為基本的數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)隊(duì)列中存在, Detection 的數(shù)據(jù)載入類 RoIDdataLoader 也是將該數(shù)據(jù)結(jié)構(gòu)作為成員變量使用的江兢。
2昨忆、core
這個(gè)文件夾中主要包含一下幾個(gè)文件:
config.py: 配置一些超參數(shù)的地方。
test_engine.py:調(diào)用tools/test_net.py后就會(huì)調(diào)用到這個(gè)文件杉允,然后去調(diào)用datasets 里邊的 roidb.py邑贴、json_dataset.py讀取數(shù)據(jù)構(gòu)建roidb席里,然后再通過模型推斷出預(yù)測(cè)的結(jié)果,最后進(jìn)行結(jié)果的評(píng)估拢驾。
test.py: 測(cè)試的過程需要用到的一些函數(shù)封裝好在這個(gè)文件中奖磁。
3、model
3.1繁疤、nms:非極大抑制算法咖为,應(yīng)用相當(dāng)廣泛,其主要目的是消除多余的框稠腊,找到最佳的物體檢測(cè)位置躁染。
3.2、roi_align: ROI Align 是在Mask-RCNN這篇論文里提出的一種區(qū)域特征聚集方式, 很好地解決了ROI Pooling操作中兩次量化造成的區(qū)域不匹配(mis-alignment)的問題架忌。實(shí)驗(yàn)顯示吞彤,在檢測(cè)測(cè)任務(wù)中將 ROI Pooling 替換為 ROI Align 可以提升檢測(cè)模型的準(zhǔn)確性 [3]。
3.3 roi_crop:傳統(tǒng)的CNN限制了輸入必須固定大刑痉拧(比如AlexNet是224x224)饰恕,所以需要進(jìn)行裁剪,在實(shí)際使用中往往需要對(duì)原圖片進(jìn)行crop或者warp的操作 [4]井仰。
crop:截取原圖片的一個(gè)固定大小的patch
warp:將原圖片的ROI縮放到一個(gè)固定大小的patch
crop和warp都無法保證在不失真的情況下將圖片傳入到CNN當(dāng)中:
crop:物體可能會(huì)產(chǎn)生截?cái)嗦袂叮绕涫情L(zhǎng)寬比大的圖片.
warp:物體被拉伸,失去“原形”糕档,尤其是長(zhǎng)寬比大的圖片
3.4 roi_pooling:為了解決 crop和warp帶來的問題(截?cái)嗬蚰铡⑹ァ霸巍保┒岢龅摹?br> 3.5 utils: 里邊就包含一個(gè)文件net_utils.py, 該文件中封裝了一些跟網(wǎng)絡(luò)本身有關(guān)的函數(shù),比如權(quán)重初始化速那。
4俐银、modeling
這個(gè)文件夾中存放的是一些網(wǎng)絡(luò)結(jié)構(gòu)的文件,比如resnet端仰、fpn捶惜、fast_rcnn_heads等等,接下來我將一一介紹荔烧。
5吱七、nn
5.1 modules: 包含(normalization.py 和 upsample.py)
5.2 parallel:用于并行計(jì)算的文件
6、roi_data
包含生成roi相關(guān)的文件鹤竭。
7踊餐、utils
工具文件存放的文件夾
參考文獻(xiàn)
1、https://hellozhaozheng.github.io/z_post/Caffe2-Detectron1-roidb%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/
2臀稚、https://blog.csdn.net/mr_health/article/details/80676799
3吝岭、https://blog.csdn.net/wfei101/article/details/79618567
4、https://blog.csdn.net/weixin_43872578/article/details/87897857