
極市導讀
miemiedetection 里的算法訓練速度都非常快,數據讀取不再是訓練速度的瓶頸!本文包含獲取預訓練模型(轉換權重)、配置文件詳解、預測、評估、訓練COCO數據集、訓練自定義數據集、導出為ONNX以及一些後續工作的介紹。>>加入極市CV技術交流群,走在計算機視覺的最前沿
代碼:https://github.com/miemie2013/miemiedetection
miemiedetection 是 Github 開源作者 miemie2013 (https://github.com/miemie2013)基於 YOLOX (https://github.com/Megvii-BaseDetection/YOLOX)進行二次開發的個人檢測庫(使用的深度學習框架為pytorch),支持 Windows、Linux 系統,以咩醬的名字命名。miemiedetection 是一個不需要安裝的檢測庫用戶可以直接更改其代碼改變執行邏輯,所見即所得!所以往miemiedetection里加入新的算法是一件很容易的事情(可以參考 PPYOLO 的寫法往 miemiedetection 里加入新的算法)。得益於 YOLOX 的優秀架構,miemiedetection 里的算法訓練速度都非常快,數據讀取不再是訓練速度的瓶頸!目前 miemiedetection 支持 YOLOX、PPYOLO、PPYOLOv2 等算法,預計未來會加入更多算法。
本倉庫包含以下模型:
注意:
讀者可以到這個鏈接下載轉換好的*.pth權重文件:
鏈接:https://pan.baidu.com/s/1ehEqnNYKb9Nz0XNeqAcwDw 提取碼:qe3i
或者按照下面的步驟獲取(需要安裝paddlepaddle):
第一步,需要先安裝paddlepaddle來方便讀取權重:
pipinstallpaddlepaddle-gpu==2.2.1-ihttps://pypi.tuna.tsinghua.edu.cn/simple第二步,下載權重文件,項目根目錄下執行(即下載文件,Windows用戶可以用迅雷或瀏覽器下載wget後面的鏈接):
wgethttps://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_2x_coco.pdparamswgethttps://paddledet.bj.bcebos.com/models/ppyolo_r18vd_coco.pdparamswgethttps://paddledet.bj.bcebos.com/models/ppyolov2_r50vd_dcn_365e_coco.pdparamswgethttps://paddledet.bj.bcebos.com/models/ppyolov2_r101vd_dcn_365e_coco.pdparamswgethttps://paddledet.bj.bcebos.com/models/pretrained/ResNet50_vd_ssld_pretrained.pdparamswgethttps://paddledet.bj.bcebos.com/models/pretrained/ResNet18_vd_pretrained.pdparamswgethttps://paddledet.bj.bcebos.com/models/pretrained/ResNet101_vd_ssld_pretrained.pdparams注意,帶有pretrained字樣的模型是在ImageNet上預訓練的骨幹網路,PPYOLO和PPYOLOv2加載這些權重以訓練COCO數據集。其餘為COCO上的預訓練模型。
第三步,轉換權重,項目根目錄下執行:
pythontools/convert_weights.py-fexps/ppyolo/ppyolo_r50vd_2x.py-cppyolo_r50vd_dcn_2x_coco.pdparams-ocppyolo_2x.pth-nc80pythontools/convert_weights.py-fexps/ppyolo/ppyolo_r18vd.py-cppyolo_r18vd_coco.pdparams-ocppyolo_r18vd.pth-nc80pythontools/convert_weights.py-fexps/ppyolo/ppyolov2_r50vd_365e.py-cppyolov2_r50vd_dcn_365e_coco.pdparams-ocppyolov2_r50vd_365e.pth-nc80pythontools/convert_weights.py-fexps/ppyolo/ppyolov2_r101vd_365e.py-cppyolov2_r101vd_dcn_365e_coco.pdparams-ocppyolov2_r101vd_365e.pth-nc80pythontools/convert_weights.py-fexps/ppyolo/ppyolo_r18vd.py-cResNet18_vd_pretrained.pdparams-ocResNet18_vd_pretrained.pth-nc80--only_backboneTruepythontools/convert_weights.py-fexps/ppyolo/ppyolov2_r50vd_365e.py-cResNet50_vd_ssld_pretrained.pdparams-ocResNet50_vd_ssld_pretrained.pth-nc80--only_backboneTruepythontools/convert_weights.py-fexps/ppyolo/ppyolov2_r101vd_365e.py-cResNet101_vd_ssld_pretrained.pdparams-ocResNet101_vd_ssld_pretrained.pth-nc80--only_backboneTrue參數解釋:
執行完畢後就會在項目根目錄下獲得轉換好的*.pth權重文件。
配置文件詳解在下面的命令中,大部分都會使用模型的配置文件,所以一開始就有必要先詳細解釋配置文件。
(1)mmdet.exp.base_exp.BaseExp為配置文件基類,是一個抽象類,聲明了一堆抽象方法,如get_model()表示如何獲取模型,get_data_loader()表示如何獲取訓練的dataloader,get_optimizer()表示如何獲取優化器等等。
(2)mmdet.exp.datasets.coco_base.COCOBaseExp是數據集的配置,繼承了BaseExp,它只給出數據集的配置。本倉庫只支持COCO標註格式的數據集的訓練!其它標註格式的數據集,需要先轉換成COCO標註格式,才能訓練(支持太多標註格式的話,工作量太大)。如何把自定義數據集轉換成COCO標註格式,可以看miemieLabels 。所有的檢測算法配置類都會繼承COCOBaseExp,表示所有的檢測算法共用同樣的數據集的配置。
COCOBaseExp的配置項有:
self.num_classes=80self.data_dir='../COCO'self.cls_names='class_names/coco_classes.txt'self.ann_folder="annotations"self.train_ann="instances_train2017.json"self.val_ann="instances_val2017.json"self.train_image_folder="train2017"self.val_image_folder="val2017"另外,自帶有一個VOC2012數據集的配置,把
#self.num_classes=20#self.data_dir='../VOCdevkit/VOC2012'#self.cls_names='class_names/voc_classes.txt'#self.ann_folder="annotations2"#self.train_ann="voc2012_train.json"#self.val_ann="voc2012_val.json"#self.train_image_folder="JPEGImages"#self.val_image_folder="JPEGImages"解除注釋,注釋掉COCO數據集的配置,就是使用VOC2012數據集了。
voc2012_train.json、voc2012_val.json是我個人轉換好的COCO標註格式的註解文件,可以到這個鏈接下載:
鏈接:https://pan.baidu.com/s/1ehEqnNYKb9Nz0XNeqAcwDw 提取碼:qe3i
下載好後,在VOC2012數據集的self.data_dir目錄下新建一個文件夾annotations2,把voc2012_train.json、voc2012_val.json放進這個文件夾。
所以,COCO數據集、VOC2012數據集、本項目的放置位置應該是這樣:
D://GitHub|------COCO||------annotations||------test2017||------train2017||------val2017||------VOCdevkit||------VOC2007|||------Annotations|||------ImageSets|||------JPEGImages|||------SegmentationClass|||------SegmentationObject||||------VOC2012||------Annotations||------annotations2|||----------voc2012_train.json|||----------voc2012_val.json||------ImageSets||------JPEGImages||------SegmentationClass||------SegmentationObject||------miemiedetection-master|------assets|------class_names|------mmdet|------tools|------...數據集根目錄和miemiedetection-master是同一級目錄。我個人非常不建議把數據集放在miemiedetection-master里,那樣的話PyCharm打開會巨卡無比;而且,多個項目(如mmdetection、PaddleDetection、AdelaiDet)共用數據集時,可以做到數據集路徑和項目名無關。
(3)mmdet.exp.ppyolo.ppyolo_method_base.PPYOLO_Method_Exp是實現具體算法所有抽象方法的類,繼承了COCOBaseExp,它實現了所有抽象方法。
(4)mmdet.exp.ppyolo.ppyolo_r50vd_2x_base.PPYOLO_R50VD_2x_Exp是PPYOLO算法的Resnet50Vd模型的配置類,繼承了PPYOLO_Method_Exp,它給出了ppyolo_r50vd_2x具體的所有配置(包括訓練輪數、學習率、ema、網絡結構配置、NMS配置、預處理配置等);
mmdet.exp.ppyolo.ppyolo_r18vd_base.PPYOLO_R18VD_Exp是PPYOLO算法的Resnet18Vd模型的配置類,繼承了PPYOLO_Method_Exp,它給出了ppyolo_r18vd具體的所有配置(包括訓練輪數、學習率、ema、網絡結構配置、NMS配置、預處理配置等);
注意,xxx_base_coco.py和xxx_base_custom.py僅為了方便複製粘貼而存在,實際配置文件是xxx_base.py。如果是訓練自定義數據集,複製xxx_base_custom.py里的全部內容,粘貼到xxx_base.py,再根據自己的需求更改相關配置項。如果是訓練COCO數據集,複製xxx_base_coco.py里的全部內容,粘貼到xxx_base.py。最初xxx_base_coco.py里的內容和xxx_base.py里的內容是完全一樣的。
(5)exp.ppyolo_r50vd_2x.Exp是PPYOLO算法的Resnet50Vd模型的最終配置類,繼承了PPYOLO_R50VD_2x_Exp,除了self.exp_name什麼都沒有修改;
exp.ppyolo_r18vd.Exp是PPYOLO算法的Resnet50Vd模型的最終配置類,繼承了PPYOLO_R18VD_Exp,除了self.exp_name什麼都沒有修改;
預測(1)預測一張圖片,項目根目錄下執行:
pythontools/demo.pyimage-fexps/ppyolo/ppyolo_r50vd_2x.py-cppyolo_2x.pth--pathassets/000000000019.jpg--conf0.15--tsize608--save_result--devicegpupythontools/demo.pyimage-fexps/ppyolo/ppyolo_r18vd.py-cppyolo_r18vd.pth--pathassets/000000000019.jpg--conf0.15--tsize416--save_result--devicegpupythontools/demo.pyimage-fexps/ppyolo/ppyolov2_r50vd_365e.py-cppyolov2_r50vd_365e.pth--pathassets/000000000019.jpg--conf0.15--tsize640--save_result--devicegpupythontools/demo.pyimage-fexps/ppyolo/ppyolov2_r101vd_365e.py-cppyolov2_r101vd_365e.pth--pathassets/000000000019.jpg--conf0.15--tsize640--save_result--devicegpu參數解釋:
預測完成後控制台會打印結果圖片的保存路徑,用戶可打開查看。
其它可選的參數:
如果是使用訓練自定義數據集保存的模型進行預測,修改-c為你的模型的路徑即可。
(2)預測圖片文件夾,項目根目錄下執行:
pythontools/demo.pyimage-fexps/ppyolo/ppyolo_r50vd_2x.py-cppyolo_2x.pth--pathassets--conf0.15--tsize608--save_result--devicegpupythontools/demo.pyimage-fexps/ppyolo/ppyolo_r18vd.py-cppyolo_r18vd.pth--pathassets--conf0.15--tsize416--save_result--devicegpu很簡單,--path改成圖片文件夾的路徑即可。
評估項目根目錄下執行:
pythontools/eval.py-fexps/ppyolo/ppyolo_r50vd_2x.py-d1-b4-cppyolo_2x.pth--conf0.01--tsize608結果是
Averageforwardtime:36.18ms,AverageNMStime:0.00ms,Averageinferencetime:36.18msAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=0.453AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=0.654AveragePrecision(AP)@[IoU=0.75|area=all|maxDets=100]=0.498AveragePrecision(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=0.300AveragePrecision(AP)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.485AveragePrecision(AP)@[IoU=0.50:0.95|area=large|maxDets=100]=0.593AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=1]=0.345AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=10]=0.578AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=100]=0.631AverageRecall(AR)@[IoU=0.50:0.95|area=small|maxDets=100]=0.450AverageRecall(AR)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.666AverageRecall(AR)@[IoU=0.50:0.95|area=large|maxDets=100]=0.780項目根目錄下執行:
pythontools/eval.py-fexps/ppyolo/ppyolo_r50vd_2x.py-d1-b8-cppyolo_2x.pth--conf0.01--tsize320結果是
Averageforwardtime:10.69ms,AverageNMStime:0.00ms,Averageinferencetime:10.69msAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=0.395AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=0.593AveragePrecision(AP)@[IoU=0.75|area=all|maxDets=100]=0.428AveragePrecision(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=0.173AveragePrecision(AP)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.432AveragePrecision(AP)@[IoU=0.50:0.95|area=large|maxDets=100]=0.590AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=1]=0.314AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=10]=0.515AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=100]=0.559AverageRecall(AR)@[IoU=0.50:0.95|area=small|maxDets=100]=0.305AverageRecall(AR)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.614AverageRecall(AR)@[IoU=0.50:0.95|area=large|maxDets=100]=0.761項目根目錄下執行:
pythontools/eval.py-fexps/ppyolo/ppyolo_r18vd.py-d1-b8-cppyolo_r18vd.pth--conf0.01--tsize416結果是
Averageforwardtime:5.40ms,AverageNMStime:0.00ms,Averageinferencetime:5.40msAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=0.286AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=0.470AveragePrecision(AP)@[IoU=0.75|area=all|maxDets=100]=0.303AveragePrecision(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=0.125AveragePrecision(AP)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.307AveragePrecision(AP)@[IoU=0.50:0.95|area=large|maxDets=100]=0.428AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=1]=0.255AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=10]=0.421AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=100]=0.449AverageRecall(AR)@[IoU=0.50:0.95|area=small|maxDets=100]=0.222AverageRecall(AR)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.482AverageRecall(AR)@[IoU=0.50:0.95|area=large|maxDets=100]=0.649項目根目錄下執行:
pythontools/eval.py-fexps/ppyolo/ppyolov2_r50vd_365e.py-d1-b4-cppyolov2_r50vd_365e.pth--conf0.01--tsize640結果是
Averageforwardtime:42.58ms,AverageNMStime:0.00ms,Averageinferencetime:42.58msAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=0.491AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=0.677AveragePrecision(AP)@[IoU=0.75|area=all|maxDets=100]=0.538AveragePrecision(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=0.315AveragePrecision(AP)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.534AveragePrecision(AP)@[IoU=0.50:0.95|area=large|maxDets=100]=0.622AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=1]=0.363AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=10]=0.612AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=100]=0.665AverageRecall(AR)@[IoU=0.50:0.95|area=small|maxDets=100]=0.464AverageRecall(AR)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.711AverageRecall(AR)@[IoU=0.50:0.95|area=large|maxDets=100]=0.801項目根目錄下執行:
pythontools/eval.py-fexps/ppyolo/ppyolov2_r50vd_365e.py-d1-b8-cppyolov2_r50vd_365e.pth--conf0.01--tsize320結果是
Averageforwardtime:12.62ms,AverageNMStime:0.00ms,Averageinferencetime:12.62msAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=0.424AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=0.608AveragePrecision(AP)@[IoU=0.75|area=all|maxDets=100]=0.457AveragePrecision(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=0.207AveragePrecision(AP)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.469AveragePrecision(AP)@[IoU=0.50:0.95|area=large|maxDets=100]=0.631AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=1]=0.330AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=10]=0.542AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=100]=0.588AverageRecall(AR)@[IoU=0.50:0.95|area=small|maxDets=100]=0.331AverageRecall(AR)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.655AverageRecall(AR)@[IoU=0.50:0.95|area=large|maxDets=100]=0.800項目根目錄下執行:
pythontools/eval.py-fexps/ppyolo/ppyolov2_r101vd_365e.py-d1-b4-cppyolov2_r101vd_365e.pth--conf0.01--tsize640結果是
Averageforwardtime:56.81ms,AverageNMStime:0.00ms,Averageinferencetime:56.81msAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=0.497AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=0.683AveragePrecision(AP)@[IoU=0.75|area=all|maxDets=100]=0.545AveragePrecision(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=0.336AveragePrecision(AP)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.543AveragePrecision(AP)@[IoU=0.50:0.95|area=large|maxDets=100]=0.633AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=1]=0.366AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=10]=0.616AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=100]=0.668AverageRecall(AR)@[IoU=0.50:0.95|area=small|maxDets=100]=0.490AverageRecall(AR)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.713AverageRecall(AR)@[IoU=0.50:0.95|area=large|maxDets=100]=0.812項目根目錄下執行:
pythontools/eval.py-fexps/ppyolo/ppyolov2_r101vd_365e.py-d1-b8-cppyolov2_r101vd_365e.pth--conf0.01--tsize320結果是
Averageforwardtime:16.42ms,AverageNMStime:0.00ms,Averageinferencetime:16.42msAveragePrecision(AP)@[IoU=0.50:0.95|area=all|maxDets=100]=0.431AveragePrecision(AP)@[IoU=0.50|area=all|maxDets=100]=0.614AveragePrecision(AP)@[IoU=0.75|area=all|maxDets=100]=0.466AveragePrecision(AP)@[IoU=0.50:0.95|area=small|maxDets=100]=0.214AveragePrecision(AP)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.477AveragePrecision(AP)@[IoU=0.50:0.95|area=large|maxDets=100]=0.640AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=1]=0.333AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=10]=0.545AverageRecall(AR)@[IoU=0.50:0.95|area=all|maxDets=100]=0.589AverageRecall(AR)@[IoU=0.50:0.95|area=small|maxDets=100]=0.338AverageRecall(AR)@[IoU=0.50:0.95|area=medium|maxDets=100]=0.653AverageRecall(AR)@[IoU=0.50:0.95|area=large|maxDets=100]=0.807需要注意的是,PPYOLO和PPYOLOv2使用的是matrix_nms,為SOLOv2中提出的新的後處理算法,已經包含在head裡面,所以評估時的代碼捕捉不到NMS的時間,所以顯示"Average NMS time: 0.00 ms"。
參數解釋:
其它可選的參數:
如果是使用訓練自定義數據集保存的模型進行評估(評估的是自定義數據集的驗證集),修改-c為你的模型的路徑即可。
訓練COCO數據集如果讀取ImageNet預訓練骨幹網路訓練COCO數據集,項目根目錄下執行:
pythontools/train.py-fexps/ppyolo/ppyolo_r50vd_2x.py-d8-b24-eb8-cResNet50_vd_ssld_pretrained.pth或者
pythontools/train.py-fexps/ppyolo/ppyolo_r18vd.py-d4-b32-eb8-cResNet18_vd_pretrained.pth或者
pythontools/train.py-fexps/ppyolo/ppyolov2_r50vd_365e.py-d8-b12-eb8-cResNet50_vd_ssld_pretrained.pth或者
pythontools/train.py-fexps/ppyolo/ppyolov2_r101vd_365e.py-d8-b12-eb8-cResNet101_vd_ssld_pretrained.pth這些是高端玩家才能輸入的命令,使用8卡訓練,每卡的批大小是24,需要每張卡的顯存為32GB或以上。建議8張Tesla V100。咩醬沒有試過多卡訓練,如果有報錯或你發現什麼錯誤,請提出,讓咩醬修正多卡部分的代碼。
有一個細節是miemiedetection的PPYOLO把RandomShape、NormalizeImage、Permute、Gt2YoloTarget這4個預處理步驟放到了sample_transforms中,不像PaddleDetection放到batch_transforms中(配合DataLoader的collate_fn使用),雖然這樣寫不美觀,但是可以提速n倍。因為用collate_fn實現batch_transforms太耗時了!能不使用batch_transforms儘量不使用batch_transforms!唯一的缺點是對於隨機種子玩家,可能需要寫額外代碼初始化隨機種子,決定每個epoch怎麼打亂所有圖片,以及每個iter怎麼選隨機尺度。
參數解釋:
其它可選的參數:
建議讀取COCO預訓練權重進行訓練,因為收斂快。以上述的VOC2012數據集為例,
一、ppyolo_r50vd模型
只需修改2個配置文件:
(1)mmdet.exp.datasets.coco_base.COCOBaseExp,修改數據集的配置項。把COCO數據集的配置注釋掉,把VOC2012數據集的配置項解除注釋即可。如果是其它的自定義數據集,需要手動寫一下配置項。
(2)mmdet.exp.ppyolo.ppyolo_r50vd_2x_base.PPYOLO_R50VD_2x_Exp,修改該模型的配置項。複製ppyolo_r50vd_2x_base_custom.py里的全部內容,粘貼到ppyolo_r50vd_2x_base.py,再根據自己的需求更改相關配置項(或不改,使用咩醬預設配置)。我個人建議修改的配置項有:
不建議修改基礎學習率self.basic_lr_per_img,這是算法作者默認的配置,是每張圖片的學習率。本倉庫會根據用戶輸入的訓練時的批大小動態調節真正的basic_lr,即basic_lr = self.basic_lr_per_img * batch_size
輸入命令開始訓練:
pythontools/train.py-fexps/ppyolo/ppyolo_r50vd_2x.py-d1-b8-eb4-cppyolo_2x.pth如果訓練因為某些原因中斷,想要讀取之前保存的模型恢復訓練,只要修改-c,加上--resume,輸入:
pythontools/train.py-fexps/ppyolo/ppyolo_r50vd_2x.py-d1-b8-eb4-cPPYOLO_outputs/ppyolo_r50vd_2x/13.pth--resume把13.pth替換成你要讀取的模型的名字。
遷移學習VOC2012數據集,實測ppyolo_r50vd_2x的AP(0.50:0.95)可以到達0.59+、AP(0.50)可以到達0.82+、AP(small)可以到達0.18+。
讀者感興趣的話,可以把命令中的「 -c ppyolo_2x.pth」改成「 -c ResNet50_vd_ssld_pretrained.pth」,即讀取ImageNet預訓練骨幹網路訓練VOC2012數據集,並且修改配置文件mmdet.exp.ppyolo.ppyolo_r50vd_2x_base.PPYOLO_R50VD_2x_Exp的self.backbone['freeze_at']為4(因為預訓練骨幹網路沒有使用DCNv2,所以stage5的可變形卷積層也要訓練一下)。咩醬實測也能訓練出一個較好的效果。
二、ppyolo_r18vd模型
只需修改2個配置文件:
(1)mmdet.exp.datasets.coco_base.COCOBaseExp,修改數據集的配置項。把COCO數據集的配置注釋掉,把VOC2012數據集的配置項解除注釋即可。如果是其它的自定義數據集,需要手動寫一下配置項。
(2)mmdet.exp.ppyolo.ppyolo_r18vd_base.PPYOLO_R50VD_2x_Exp,修改該模型的配置項。複製ppyolo_r18vd_base_custom.py里的全部內容,粘貼到ppyolo_r18vd_base.py,再根據自己的需求更改相關配置項(或不改,使用咩醬預設配置)。
輸入命令開始訓練:
pythontools/train.py-fexps/ppyolo/ppyolo_r18vd.py-d1-b8-eb4-cppyolo_r18vd.pth遷移學習VOC2012數據集,實測ppyolo_r18vd的AP(0.50:0.95)可以到達0.39+、AP(0.50)可以到達0.65+、AP(small)可以到達0.06+。
三、ppyolov2_r50vd模型
只需修改2個配置文件:
(1)mmdet.exp.datasets.coco_base.COCOBaseExp,修改數據集的配置項。把COCO數據集的配置注釋掉,把VOC2012數據集的配置項解除注釋即可。如果是其它的自定義數據集,需要手動寫一下配置項。
(2)mmdet.exp.ppyolo.ppyolov2_r50vd_365e_base.PPYOLOv2_R50VD_365e_Exp,修改該模型的配置項。複製ppyolov2_r50vd_365e_base_custom.py里的全部內容,粘貼到ppyolov2_r50vd_365e_base.py,再根據自己的需求更改相關配置項(或不改,使用咩醬預設配置)。
輸入命令開始訓練:
pythontools/train.py-fexps/ppyolo/ppyolov2_r50vd_365e.py-d1-b6-eb2-cppyolov2_r50vd_365e.pth遷移學習VOC2012數據集,實測ppyolov2_r50vd的AP(0.50:0.95)可以到達0.63+、AP(0.50)可以到達0.84+、AP(small)可以到達0.25+。
導出為ONNX目前只支持ppyolo_r18vd導出。其它模型實現中..
導出:
pythontools/export_onnx.py--output-nameppyolo_r18vd.onnx-fexps/ppyolo/ppyolo_r18vd.py-cppyolo_r18vd.pthONNX預測:
pythontools/onnx_inference.py-anPPYOLO-acnppyolo_r18vd-mppyolo_r18vd.onnx-iassets/dog.jpg-oONNX_PPYOLO_R18VD_outputs-s0.15--input_shape416,416-cnclass_names/coco_classes.txt用onnx模型進行驗證:
pythontools/onnx_eval.py-anPPYOLO-acnppyolo_r18vd-mppyolo_r18vd.onnx-i../COCO/val2017-a../COCO/annotations/instances_val2017.json-s0.01--input_shape416,416--eval_typeeval後續工作支持NCNN、TensorRT等的部署。
如果覺得有用,就請分享到朋友圈吧!
公眾號後台回復「transformer」獲取最新Transformer綜述論文下載~

#CV技術社群邀請函#

備註:姓名-學校/公司-研究方向-城市(如:小極-北大-目標檢測-深圳)
即可申請加入極市目標檢測/圖像分割/工業檢測/人臉/醫學影像/3D/SLAM/自動駕駛/超分辨率/姿態估計/ReID/GAN/圖像增強/OCR/視頻理解等技術交流群
每月大咖直播分享、真實項目需求對接、求職內推、算法競賽、乾貨資訊匯總、與10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發者互動交流~
