pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
Detectron2訓(xùn)練自己的實例分割數(shù)據(jù)集
This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu本文介紹如何構(gòu)造自己的類coco數(shù)據(jù)集,并用detectron2來訓(xùn)練并預(yù)測。實際上detectron2出來已經(jīng)有幾天了。但這個框架個人感覺離真正工業(yè)使用還有點距離,首先第一點是不好部署,其次是相關(guān)的其他模型導(dǎo)出支持比較差,比如不支持onnx,同時即便是導(dǎo)出的onnx模型也很難用上一些加速框架進行加速,比如不支持TensorRT。但如果你不是追求速度,用python做推理也是可以的,并且最關(guān)鍵的是,你可以用你的數(shù)據(jù)集訓(xùn)練你的模型,或者是在這個框架上增加一些自己的修改,看看效果是不是更好之類。
首先看看這個如何來訓(xùn)練自己的數(shù)據(jù)集。我們今天要用的數(shù)據(jù)是這個:
wget https://github.com/Tony607/detectron2_instance_segmentation_demo/releases/download/V0.1/data.zip這篇文章很大借鑒于原作者的一些嘗試,感興趣的朋友可以給他github一個star,人家也不容易。這個data是一個非常非常適合來測試分割的一個微型數(shù)據(jù)集,小到什么程度?只有那么25張圖片。。
類別大概是:
cats: [{'supercategory': 'date', 'id': 1, 'name': 'date'}, {'supercategory': 'fig', 'id': 2, 'name': 'fig'}, {'supercategory': 'hazelnut', 'id': 3, 'name': 'hazelnut'}](這里date的意思是棗椰子,fig的意思是無花果,hazelnut是榛子。)
如果你下載好了數(shù)據(jù),那么基本上我們可以開始了。大家可以看到這個數(shù)據(jù)集還有一個trainval.json,完全是按照coco的標(biāo)注方式來標(biāo)注的。coco的json格式也是目前比較通用的是instance segmentation 或者是Panoptic segmentation標(biāo)注格式。
Setup Detectron2
關(guān)于如何安裝detectron2這里不展開敘述,大家可以按照github給予的步驟來。這里給大家?guī)c提醒:
- 要python3.6;
- 要pytorch1.3.
其他的沒有了。
訓(xùn)練
首先看一下這個非常小非常迷你的數(shù)據(jù)集,在100次訓(xùn)練之后的效果:
Full source code:
jinfagang/FruitsNutsSeg?github.com注冊完數(shù)據(jù)集之后,可以開始train,基本上幾個epoch就可以。
可以看出來,這個效果還是非常不錯的啊。訓(xùn)練的腳本也非常簡單:
? import random from detectron2.utils.visualizer import Visualizer from detectron2.data.catalog import MetadataCatalog, DatasetCatalog import fruitsnuts_data import cv2 from detectron2.engine import DefaultTrainer from detectron2.config import get_cfg import os from detectron2.engine.defaults import DefaultPredictor from detectron2.utils.visualizer import ColorMode ? ? fruits_nuts_metadata = MetadataCatalog.get("fruits_nuts") ? ? if __name__ == "__main__":cfg = get_cfg()cfg.merge_from_file("../../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")cfg.MODEL.WEIGHTS = os.path.join(cfg.OUTPUT_DIR, "model_final.pth")print('loading from: {}'.format(cfg.MODEL.WEIGHTS))cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set the testing threshold for this modelcfg.MODEL.ROI_HEADS.NUM_CLASSES = 3cfg.DATASETS.TEST = ("fruits_nuts", )predictor = DefaultPredictor(cfg) ?data_f = './data/images/2.jpg'im = cv2.imread(data_f)outputs = predictor(im)v = Visualizer(im[:, :, ::-1],metadata=fruits_nuts_metadata,scale=0.8,instance_mode=ColorMode.IMAGE_BW # remove the colors of unsegmented pixels)v = v.draw_instance_predictions(outputs["instances"].to("cpu"))img = v.get_image()[:, :, ::-1]cv2.imshow('rr', img)cv2.waitKey(0) ?大家可能覺得這個instance segmention訓(xùn)練的太容易,那么來挑戰(zhàn)難度大一點的?
確實,這個堅果數(shù)據(jù)集實在是太簡單了,簡單到我們甚至打印不出任何訓(xùn)練過程,一眨眼模型就訓(xùn)練好了。那就來個難度大一點的吧,我們將用Detectron2訓(xùn)練Cityscapes的實例分割!
Detectron2 訓(xùn)練Cityscapes實例分割
盡管在Detectron2里面有Cityscapes的數(shù)據(jù)dataloader,但我們并不打算用它,相反,我們覺得使用統(tǒng)一化的coco數(shù)據(jù)集格式能夠更好的讓數(shù)據(jù)fit。當(dāng)我們決定做這件事情的時候犯難了。如何從Cityscapes轉(zhuǎn)到coco?
好在有這個需求的人不少,這值得我們開發(fā)一個工具來轉(zhuǎn)它。我們維護的現(xiàn)成的工具腳本可以在這里找到:
https://github.com/jinfagang/cityscapestococo
實際上我們將數(shù)據(jù)轉(zhuǎn)到coco之后,發(fā)現(xiàn)效果我們想象的還好,因為這些標(biāo)注都非常精準(zhǔn),并且包含了我們感興趣的常用類別,比如car,truck,rider,cyclist,motor-cycle等:
這是可視化的效果。這些步驟與我們上面訓(xùn)練堅果數(shù)據(jù)集的步驟差不多,大家仿造步驟來,首先可視化數(shù)據(jù)確保我們的數(shù)據(jù)是準(zhǔn)確無誤的。那么接下里的事情就很簡單了。
看起來似乎還不錯,這些類別眾多而精準(zhǔn),接下來開始train:
看起來似乎還不錯。現(xiàn)在訓(xùn)練一個instance segmentation 簡直是太簡單了。
那么這個instance segmention模型訓(xùn)練完成之后是一種什么樣的效果呢?模型還在訓(xùn)練,我們等下一期技術(shù)文章發(fā)布之后,給大家分享一下結(jié)果,同時,告訴大家一個好消息:
總結(jié)
以上是生活随笔為你收集整理的pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 离谱!百度网盘下载竟能用变速精灵加速 直
- 下一篇: 春天怎样拍花更好看?这几个技巧让你的照片