学习目标:

学习detectron2数据集的注册以及基本的训练推理


一.工程文件下载与数据集准备:

整体的工程文件下载地址:
https://github.com/fenglingbai/FruitsNutSeg
在项目中如图所示(output/model_final_f10217.pkl需要在官网下载):

水果坚果的实例分割网络这里采用mask_rcnn_R_50_FPN_3x作为例子,网络结构参数在工程文件中已经设置好,如果后续需要更改可以自己进行。
网络预训练权重在官网的
https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md
进行相应权重的下载(标红点处)

放在output文件夹中。


二.注册数据集:

在fruitsnuts_data.py文件中,进行水果坚果数据集的注册。代码如下所示

from detectron2.data.datasets import register_coco_instances
from detectron2.data import DatasetCatalog, MetadataCatalog
register_coco_instances("fruits_nuts", {'thing_classes':['date', 'fig', 'hazelnut'],'thing_dataset_id_to_contiguous_id':{1: 0, 2: 1, 3: 2}}, "./data/trainval.json", "./data/images")

其中函数register_coco_instances是detectron2的一个接口,用来专门注册coco形式的数据集,其基本形式如下:

register_coco_instances(name, metadata, json_file, image_root)

其中name是自己的数据集名称,json_file是标注文件的地址,image_root是图片数据的地址,metadata是数据集的基本信息,如果缺省则用空字典输入,否则可以用键值对的形式录入。
注册完毕后,可调用接口进行检查,注释为对应的数据集数据:

fruits_nuts_metadata = MetadataCatalog.get("fruits_nuts")
# Metadata(evaluator_type='coco', image_root='./data/images',
# json_file='./data/trainval.json',
# name='fruits_nuts', thing_classes=['date', 'fig', 'hazelnut'],
# thing_dataset_id_to_contiguous_id={1: 0, 2: 1, 3: 2})

在其他文件进行注册时,可以直接使用

import fruitsnuts_data

进行注册


训练:

训练代码详见train.py:

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
from detectron2.utils.logger import setup_logger
import os
setup_logger()if __name__ == "__main__":cfg = get_cfg()# cfg.merge_from_file(#     "../../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"# )cfg.merge_from_file("./configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")cfg.DATASETS.TRAIN = ("fruits_nuts",)cfg.DATASETS.TEST = ()  # no metrics implemented for this datasetcfg.DATALOADER.NUM_WORKERS = 2# cfg.MODEL.WEIGHTS = "detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl"  # initialize from model zoocfg.MODEL.WEIGHTS = "./output/model_final_f10217.pkl"cfg.SOLVER.IMS_PER_BATCH = 2cfg.SOLVER.BASE_LR = 0.0025cfg.SOLVER.MAX_ITER = (300)  # 300 iterations seems good enough, but you can certainly train longercfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = (128)  # faster, and good enough for this toy datasetcfg.MODEL.ROI_HEADS.NUM_CLASSES = 3  # 3 classes (data, fig, hazelnut)os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)trainer = DefaultTrainer(cfg)trainer.resume_or_load(resume=False)trainer.train()print('OK')

注意需要修改的地方主要有以下几点:
1.cfg.merge_from_file:网络参数设置的路径
2.cfg.MODEL.WEIGHTS:网络初始化权重的路径
运行后直接可以进行网络训练

训练后的结果为:

推理:

预测推理代码详见predict.py:

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 ColorModefruits_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.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/3.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)

其中data_f是需要预测推理的图片地址,运行程序后结果如下:

三.其他可能的问题:

1.预测的图片没有类别标注

这是由于在数据注册阶段没有进行对应的数据输入,

2.出现警告UserWarning: This overload of nonzero is deprecated: nonzero

解决方法:在对应位置nonzero()中改为:
nonzero(as_tuple=False)

3.出现警告Skip loading parameter

这是由于初始的网络权重是适应81类分类任务的,而当前的分类任务为4,因此会有一些网络参数进行省略,这里忽略即可。

detectron2入门学习一:实现FruitsNut水果坚果分割任务以源码阅读相关推荐

  1. 【vn.py学习笔记(六)】vn.py constant源码阅读、委托生命周期

    [vn.py学习笔记(六)]vn.py constant源码阅读.委托生命周期 写在前面 1 constant 1.1 Direction 1.2 Offset 1.3 Status 1.4 Prod ...

  2. 【vn.py学习笔记(五)】vn.py Base、Log、Oms、Email Engine源码阅读

    [vn.py学习笔记(五)]vn.py Base.Log.Oms.Email Engine源码阅读 写在前面 1 BaseEngine 2 LogEngine 3 OmsEngine 3.1 构造函数 ...

  3. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  4. 基于JAVA水果商城设计计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA水果商城设计计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA水果商城设计计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  5. 计算机毕业设计ssm网上水果商城s7436系统+程序+源码+lw+远程部署

    计算机毕业设计ssm网上水果商城s7436系统+程序+源码+lw+远程部署 计算机毕业设计ssm网上水果商城s7436系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  6. java计算机毕业设计vue学习视频课程网站MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue学习视频课程网站MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue学习视频课程网站MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: ...

  7. 基于JAVA智慧农业水果销售系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA智慧农业水果销售系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA智慧农业水果销售系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...

  8. 基于JAVA水果销售管理网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA水果销售管理网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA水果销售管理网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: 项目架构 ...

  9. java经典源码 阅读_公开!阿里甩出“源码阅读指南”,原来源码才是最经典的学习范例...

    我们为啥要阅读源码? 为什么面试要问源码?为什么我们Java程序员要去看源码?相信大多数程序员看到源码第一感觉都是:枯燥无味,费力不讨好!要不是为了"涨薪"我才不去看这个鬼东西!但 ...

最新文章

  1. FileZilla Server : FTP and FTPS Server
  2. wireshark tcp抓包分析_网络分析系列之八_使用Wireshark抓包
  3. php mongo in 查询语句,PHP 怎么执行mongodb 的 $in 和$size查询
  4. Qt入门(8)——事件和事件过滤器
  5. 散户“大溃败”?GME连续5日暴跌80% 白银价格急转直下
  6. 【ClickHouse】Hangout with ClickHouse
  7. SQL Server2005探索之---正确使用索引
  8. iconpath 微信小程序_微信小程序开发(全局配置文件)
  9. HALCON 20.11:深度学习笔记(6)---有监督训练
  10. 前大嗅万万没想到系列之520奇葩礼物大盘点,活着不好吗?
  11. 串珠问题(今日头条笔试)
  12. electron图标
  13. windows 开机自启动cmd文件
  14. ListView 设置 scrollbars 之后出现的细线白边的解决方法
  15. The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be reso site:blog.csdn.net
  16. Python基础语法---(3)字符串的基本操作和使用
  17. TM1650数码管驱动芯片
  18. 基于turtlebot3实现SLAM建图及自主导航仿真
  19. vue中实现Excel导入导出功能
  20. 泰捷we30c系统语言,系统简洁、稳定,开机无广告 泰捷方盒WE30C升级版日常体验...

热门文章

  1. 正则表达式(四)——贪婪与非贪婪模式
  2. 什么是网络终端,这个“终端”是什么意思?
  3. 苹果又撕下了国产手机遮羞布,国内消费者最爱iPhone
  4. 003:鸣人的影分身
  5. iCore-3588Q 8K人工智能核心板
  6. IT名人博客推荐(15个)载
  7. 智能指针初始化(pcl库)
  8. 所谓“著”、“编”和“注”
  9. 使用家庭宽带和摄像头,实现公网直播
  10. 【量化交易】资产配置决策