Detectron2训练自己的实例分割数据集

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

本文介绍如何构造自己的类coco数据集,并用detectron2来训练并预测。实际上detectron2出来已经有几天了。但这个框架个人感觉离真正工业使用还有点距离,首先第一点是不好部署,其次是相关的其他模型导出支持比较差,比如不支持onnx,同时即便是导出的onnx模型也很难用上一些加速框架进行加速,比如不支持TensorRT。但如果你不是追求速度,用python做推理也是可以的,并且最关键的是,你可以用你的数据集训练你的模型,或者是在这个框架上增加一些自己的修改,看看效果是不是更好之类。

首先看看这个如何来训练自己的数据集。我们今天要用的数据是这个:

wget https://github.com/Tony607/detectron2_instance_segmentation_demo/releases/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 segmentation 或者是Panoptic segmentation标注格式。

Setup Detectron2

关于如何安装detectron2这里不展开叙述,大家可以按照github给予的步骤来。这里给大家几点提醒:

  • 要python3.6;
  • 要pytorch1.3.

其他的没有了。

训练

首先看一下这个非常小非常迷你的数据集,在100次训练之后的效果:

Full source code:

jinfagang/FruitsNutsSeg​github.com

注册完数据集之后,可以开始train,基本上几个epoch就可以。

可以看出来,这个效果还是非常不错的啊。训练的脚本也非常简单:

​
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训练的太容易,那么来挑战难度大一点的?

确实,这个坚果数据集实在是太简单了,简单到我们甚至打印不出任何训练过程,一眨眼模型就训练好了。那就来个难度大一点的吧,我们将用Detectron2训练Cityscapes的实例分割!

Detectron2 训练Cityscapes实例分割

尽管在Detectron2里面有Cityscapes的数据dataloader,但我们并不打算用它,相反,我们觉得使用统一化的coco数据集格式能够更好的让数据fit。当我们决定做这件事情的时候犯难了。如何从Cityscapes转到coco?

好在有这个需求的人不少,这值得我们开发一个工具来转它。我们维护的现成的工具脚本可以在这里找到:

https://github.com/jinfagang/cityscapestococo

实际上我们将数据转到coco之后,发现效果我们想象的还好,因为这些标注都非常精准,并且包含了我们感兴趣的常用类别,比如car,truck,rider,cyclist,motor-cycle等:

这是可视化的效果。这些步骤与我们上面训练坚果数据集的步骤差不多,大家仿造步骤来,首先可视化数据确保我们的数据是准确无误的。那么接下里的事情就很简单了。

看起来似乎还不错,这些类别众多而精准,接下来开始train:

看起来似乎还不错。现在训练一个instance segmentation 简直是太简单了。

那么这个instance segmention模型训练完成之后是一种什么样的效果呢?模型还在训练,我们等下一期技术文章发布之后,给大家分享一下结果,同时,告诉大家一个好消息:

  1. 类似于MaskRCNN这样的模型速度是很难在实际场景中用起来的,原因也很简单,我们都需要realtime的东西,这速度差强人意,但是否有人尝试更轻便的backbone呢?不得而知,不过好消息是实际上通过一些加速框架,是可以把MaskRCNN加速到realtime的。而这些,我们等到detectron2go发布之后,或许会看得到一些好消息。

本文首发于MANA AI社区,如果你对AI感兴趣,欢迎加入我们的社区一起交流:

ManaAI社区​t.manaai.cn

pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导相关推荐

  1. 手写数字图片识别+导入csv训练集+预测训练集+csv导出预测结果

    手写数字图片识别+导入csv训练集+预测训练集+csv导出预测结果 题目来源: Dataset之MNIST:MNIST(手写数字图片识别+csv文件)数据集简介.下载.使用方法之详细攻略 导入csv训 ...

  2. 深度学习之经验和训练集(训练中英文样本)

    深度学习之经验和训练集(训练中英文样本) 学习深度学习和在深度学习两年多,积累了很多的学习资料,以及一些经验吧. 学习目标是什么?这个是一切深度学习需要明确的目标 *目前在这个方面,前人研究到什么程度 ...

  3. 利用U-Net语义分割进行自己训练集的训练和预测

    利用U-Net语义分割进行自己训练集的训练和预测 引言 利用U-Net语义分割网络进行三类图像分割(含背景),总体步骤分为以下三步: (1)制作自己的数据集(杯子数据集) 通过labelme进行图像打 ...

  4. 文本训练集_训练文本中的不稳定性

    文本训练集 介绍 (Introduction) In text generation, conventionally, maximum likelihood estimation is used to ...

  5. yolov3的训练(五)darknet的VOC测试集和训练集以及训练前准备

    VOC测试集和训练集     ################################## 同学们,这个系列的文件不要直接就跟着我操作了,因为这个是踩坑的记录,不是教程,我只是将整个流程记录下 ...

  6. coco训练集darknet_darknet-yolov3训练自己的数据集

    申明 一.标注工具(labelimg) 2.双击运行 3.保存后的文件为xml格式 二.下载编译darknet 1.拉取darknet git clone https://github.com/pjr ...

  7. Tensorflow学习第一天(TensorFlow报错不存在该模块以及训练集线性训练)

    #导入函数库 from tensorflow import keras import numpy as np#初始化训练集,其中units代表输入为1,即只有x一个 model = keras.Seq ...

  8. 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )

    文章目录 I . 分类概念 II . 分类 ( 离散值 ) 和 预测 ( 连续值 ) III . 分类过程 IV . 分类过程中使用的数据集 ( 训练集 | 测试集 | 新数据 ) V . 数据预处理 ...

  9. 【转载】如何理解数据集中【训练集】、【验证集】和【测试集】

    转自<吴恩达深度学习笔记(28)-网络训练验证测试数据集的组成介绍> 训练,验证,测试集(Train / Dev / Test sets) 在配置训练.验证和测试数据集的过程中做出正确决策 ...

最新文章

  1. python包Yellowbrick可视化lasso模型的最佳alpha值及误测误差
  2. 考博024001计算机科学与技术综合知识,2005-2006年同等学力人员申请硕士学位学科综合水平全国统一考试计算机科学与技术试卷.pdf...
  3. bzoj 4547: Hdu5171 小奇的集合
  4. Redis-10Redis的事务回滚
  5. 从银行网点拒绝普通客户 看互联网银行的“微众市场
  6. opengl加载显示3D模型HMP类型文件
  7. Linux创始人数据结构,Linux 通用数据结构说明
  8. java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...
  9. 董小姐宣布重磅升级:格力空调包修时长正式升级为10年
  10. 刹车时到底要不要踩离合器?
  11. Python numpy学习笔记(一)
  12. 洛谷 P3152 正整数序列
  13. 360浏览器保存网页html5,360浏览器怎么保存整个网页为图片?
  14. 高拍仪、浏览器获取获取多摄像头,切换摄像头
  15. 腾讯cdn设置 php,WordPress使用腾讯云CDN配置教程(https)
  16. 金融反欺诈 常用特征处理方法
  17. ios APP加密探究几维安全iOS 代码混淆效果参考
  18. 什么是工业4.0? 本文已经帮你解释清楚了
  19. 打开控制台查看后台html代码
  20. XDP/BPF Github教程

热门文章

  1. 在StackBlitz上setup SAP Spartacus
  2. jsp项目手动导出成war包
  3. SAP Enterprise search test report ESH_TEST_SEARCH debug in Q2D
  4. SAP CRM WebClient UI和Hybris的controller是如何被调用的
  5. SAP CRM产品主数据应用里value node和model node的转换
  6. 2020年关于SAP知识问答的一个新的尝试
  7. 一些SAP UI5的学习笔记
  8. SAP CRM Fiori note automatic delete deletion scenario
  9. Marketing Cloud的contact主数据的odata调用方式
  10. what happened after a template is selected in Create with template button