Detectron2训练⾃⼰的实例分割数据集
本⽂介绍 Detectron2训练⾃⼰的实例分割数据集
事业单位年终个人工作总结Detectron2训练⾃⼰的实例分割数据集快乐元宵节
本⽂介绍如何构造⾃⼰的类coco数据集,并⽤detectron2来训练并预测。实际上detectron2出来已经有⼏天了。但这个框架个⼈感觉离真正⼯业使⽤还有点距离,⾸先第⼀点是不好部署,其次是相关的其他模型导出⽀持⽐较差,⽐如不⽀持onnx,同时即便是导出的onnx模型也很难⽤上⼀些加速框架进⾏加速,⽐如不⽀持TensorRT。但如果你不是追求速度,⽤python做推理也是可以的,并且最关键的是,你可以⽤你的数据集训练你的模型,或者是在这个框架上增加⼀些⾃⼰的修改,看看效果是不是更好之类。
⾸先看看这个如何来训练⾃⼰的数据集。我们今天要⽤的数据是这个:
养鸡秘诀
/Tony607/detectron2_instance_gmentation_demo/releas/download/V0.1/data.zip
这篇⽂章很⼤借鉴于原作者的⼀些尝试,感兴趣的朋友可以给他github⼀个star。这个data是⼀个⾮常⾮常适合来测试分割的⼀个微型数据集,⼩到什么程度?只有那么25张图⽚。。
类别⼤概是:
cats: [{'supercategory': 'date', 'id': 1, 'name': 'date'}, {'supercategory': 'fig', 'id': 2, 'name': 'fig'}, {'supercategory': 'hazelnut', 'id': 3, 'name': 'hazelnut'}]
(这⾥date的意思是枣椰⼦,fig的意思是⽆花果,hazelnut是榛⼦。)
如果你下载好了数据,那么基本上我们可以开始了。⼤家可以看到这个数据集还有⼀个trainval.json,完全是按照coco的标注⽅式来标注的。coco的json格式也是⽬前⽐较通⽤的是instance gmentation 或者是Panoptic gmentation标注格式。
Setup Detectron2
关于如何安装detectron2这⾥不展开叙述,⼤家可以按照github给予的步骤来。这⾥给⼤家⼏点提醒:
要python3.6;
要pytorch1.3.
其他的没有了。
训练
执医考试时间
型号英文⾸先看⼀下这个⾮常⼩⾮常迷你的数据集,在100次训练之后的效果:
可以看出来,这个效果还是⾮常不错的啊。训练的脚本也⾮常简单:
import random
from detectron2.utils.visualizer import Visualizer
from detectron2.data.catalog import MetadataCatalog, DatatCatalog
import fruitsnuts_data
import cv2
ine import DefaultTrainer
fig import get_cfg
import os
ine.defaults import DefaultPredictor
from detectron2.utils.visualizer import ColorMode
fruits_nuts_metadata = ("fruits_nuts")
if __name__ =="__main__":
cfg = get_cfg()
<_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# t the testing threshold for this model
cfg.MODEL.ROI_HEADS.NUM_CLASSES =3
cfg.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 ungmented pixels
)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
img = v.get_image()[:,:,::-1]
cv2.imshow('rr', img)
cv2.waitKey(0)
⼤家可能觉得这个instance gmention训练的太容易,那么来挑战难度⼤⼀点的?
确实,这个坚果数据集实在是太简单了,简单到我们甚⾄打印不出任何训练过程,⼀眨眼模型就训练好了。那就来个难度⼤⼀点的吧,我们将⽤Detectron2训练Cityscapes的实例分割!年终分红
Detectron2 训练Cityscapes实例分割
尽管在Detectron2⾥⾯有Cityscapes的数据dataloader,但我们并不打算⽤它,相反,我们觉得使⽤统⼀化的coco数据集格式能够更好的让数据fit。当我们决定做这件事情的时候犯难了。如何从Cityscapes转到coco?
好在有这个需求的⼈不少,这值得我们开发⼀个⼯具来转它。我们维护的现成的⼯具脚本可以在这⾥找到:
实际上我们将数据转到coco之后,发现效果我们想象的还好,因为这些标注都⾮常精准,并且包含了我们感兴趣的常⽤类别,⽐如
car,truck,rider,cyclist,motor-cycle等。这些步骤与我们上⾯训练坚果数据集的步骤差不多,⼤家仿造步骤来,⾸先可视化数据确保我们的数据是准确⽆误的。那么接下⾥的事情就很简单了。
看起来似乎还不错,这些类别众多⽽精准,接下来开始train。
这个instance gmention模型训练完成之后是⼀种什么样的效果呢?模型还在训练,我们等下⼀期技术⽂章发布之后,给⼤家分享⼀下结果,同时,告诉⼤家⼀个好消息:
1. 类似于MaskRCNN这样的模型速度是很难在实际场景中⽤起来的,原因也很简单,我们都需要realtime的东西,这速度差强⼈意,但
是否有⼈尝试更轻便的backbone呢?不得⽽知,不过好消息是实际上通过⼀些加速框架,是可以把MaskRCNN加速到realtime的。
⽽这些,我们等到detectron2go发布之后,或许会看得到⼀些好消息。
>足部健康