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

2023-05-16

学习目标:

学习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 dataset
    cfg.DATALOADER.NUM_WORKERS = 2
    # cfg.MODEL.WEIGHTS = "detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl"  # initialize from model zoo
    cfg.MODEL.WEIGHTS = "./output/model_final_f10217.pkl"
    cfg.SOLVER.IMS_PER_BATCH = 2
    cfg.SOLVER.BASE_LR = 0.0025
    cfg.SOLVER.MAX_ITER = (300)  # 300 iterations seems good enough, but you can certainly train longer
    cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = (128)  # faster, and good enough for this toy dataset
    cfg.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 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.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 model
    cfg.MODEL.ROI_HEADS.NUM_CLASSES = 3
    cfg.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,因此会有一些网络参数进行省略,这里忽略即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • **make[2]: *** [CMakeFiles/offb_node.dir/build.make:84:报错解决

    make报错很有可能是因为CmakeList里面的文件没有修改好 xff01 如果是cpp文件的话需要修改下面两部分 xff1a 1 修改的第一处 xff1a 把节点修改成自己文件的节点就可以 2 修改的第二处 xff1a
  • Ubuntu18.04下ROS+Gazebo+Mavros+PX4安装教程(最新!最全!)

    一 依赖安装 span class token function sudo span span class token function apt span span class token function install span nin
  • 在Gazebo仿真中修改仿真环境 (World)

    这一步是要把初始环境改成白色地板环境 xff0c 跑仿真或者基于地标降落的时候更容易观察 xff0c 让人看着也比较舒服 这一步只需要修改下面代码 原代码 xff1a xff08 初始环境 xff09 span class token op
  • 关于Arduino、树莓派和 Pixhawk微处理器对比分析

    摘要 xff1a Arduino是一款基于微控制器 xff08 单片机 xff09 的电子开发板 xff0c 它可以运行一些相对比较简单的应用程序 包含硬件 xff08 各种型号的Arduino板 xff09 和软件 xff08 Ardui
  • 关于STARMAC旋翼机的计算系统组成分析

    摘要 xff1a STARMAC xff0c 全称为 the Stanford Testbed of Autonomous Rotorcraft for Multi Agent Control xff0c 是斯坦福大学为为了突破先前飞行器笨
  • 读史铁生随笔摘要

    人可以走向天堂 xff0c 不可以走到天堂 物质的天堂注定难为 xff0c 而精神的天堂恰于走向中成立 永远的限制是其永远成立的依据 无所眺望或有所眺望都证明到达之地并非圆满 xff0c 而你若永远地走向它 xff0c 你便随时都在它的光照
  • IMAX B6电路原理详解

    IMAX B6电路原理详解 本文出自 手电大家谈 xff0c 原帖 xff1a http www shoudian org thread 447417 1 1 html
  • arduino实验第三代码

    include lt avr eeprom h gt define PinA 2 中断0 define led1 1 define led2 3 define led3 4 define led4 5 define da 6 define
  • pytorch总结——1:初步introduction

    pytorch简介 先说Torch xff0c 这是一个与Numpy类似的张量 xff08 Tensor xff09 操作库 xff0c 与Numpy不同的是Torch对GPU支持的很好 xff0c Lua是Torch的上层包装 但是Lua
  • pytorch_RNN相关函数介绍

    1 RNN背景介绍 RNN结构 参数介绍 input size 输入x的特征数量 hiddien size 隐藏层的特征数量 num layers RNN的层数 nonlinearity 指定激活函数是tanh还是relu xff0c 默认
  • 一些tensorflow-VIN 的笔记

    1tensorflow 使用flags定义命令行参数 2 product的执行 3 xff0c round函数 保留小数点后几位 96 a 61 1 12345 result 61 round a 2 print result 1 12 4
  • rosbag录制固定话题,多话题等

    ROS框架下可以很方便的进行数据记录 并且将其转换为txt文件进行matlab处理 下面介绍一下rosbag的日常使用方法 1 查找你所需要的话题 xff1a rostopic list 在ros节点开启的情况下 span class to
  • 相机与IMU标定教程

    标定教程 way 相机与IMU联合标定 1 imu utils 标定IMU的内参 1 imu utils标定IMU的内参 xff0c 可以校准IMU的噪声密度和随机游走噪声 2 kalibr包标定相机的内外参数 xff0c 相机与IMU之间
  • 如何在Win11中安装wsl Ubuntu系统

    目录 前言正文一 环境二 在 Windows 11 上启用 WSL四 按照官方文档进行安装五 安装ubuntu系统六 下载vcxSrv七 运行wsl八 总结 参考 前言 在笔记本上安装一下环境 xff0c 便于平常的工作 正文 一 环境 w
  • 下载PX4固件时网络太慢,经常出现克隆失败

    下载PX4固件时 xff0c 官网给的指令是 git clone https github com PX4 PX4 Autopilot git recursive 需要进行循环克隆 xff0c 在克隆过程中可能出现以下的情况 无法克隆 39
  • roslaunch mavros px4.launch 出现的问题

    在运行roslaunch mavros px4 launch fcu url 61 udp 14540 64 127 0 0 1t 14557 时出现了以下错误 xff0c 这是由于 符号是中文符号导致的 xff0c 切换成英文的即可 RL
  • 解决Ubuntu执行sudo命令后提示无法解析主机

    解决Ubuntu执行sudo命令后提示无法解析主机 异常现象异常原因查看修改主机名普通用户与管理员间的切换 异常现象 异常原因 etc hostname和 etc hosts文件中主机名称不一致导致 xff0c 将其修改一致即可 修改此文件
  • rosdep update 指令超时问题

    在执行rosdep update后出现超时问题 xff0c 报如下错误 reading in sources list data from etc ros rosdep sources list d ERROR unable to proc
  • 使用git --recursive进行循环克隆,由于网络原因,出现克隆失败的情况。

    git clone recursive 用于循环克隆git子项目 xff0c 但由于网络原因 xff0c 经常会出现克隆失败的情况 xff0c 这时不得不删掉克隆文件夹 xff0c 全部重新来过 xff0c 我们可以先将主文件克隆下来 xf
  • minimumsnap(1)微分平坦特性(Differential Flatness)

    本文内容参考论文 Minimum Snap Trajectory Generation and Control for Quadrotors Daniel Mellinger and Vijay Kumar 从名字可以看出 xff0c 我们

随机推荐

  • 未安装Ceres

    编译VINs的时候 xff0c 遇到了这个问题 xff0c 是没安装Ceres导致的 96 CMake Error at VINS Mono camera model CMakeLists txt 19 find package By no
  • 费雪信息场增量建场实际实验

    写在前面 上一阶段的工作是基础是在张子潮大佬的费雪信息场这几篇论文的基础上进行的 Beyond Point Clouds Fisher Information Field for Active Visual Localization Zic
  • XTDrone+VINs+fast-planner

    接下来的工作需要把XTDrone VINS和fast planner集成到一起 在XTDrone集成VINs按照XTDrone使用手册来就可以了 xff0c 按照仿真平台基础配置 xff0c PX4飞控与EKF配置和视觉惯性里程计 xff0
  • 代码随想录算法训练营第19天|77. 组合

    代码随想录算法训练营第19天 77 组合 77 组合 题目链接 提交代码 span class token keyword class span span class token class name Solution span span
  • 【无标题】

    代码随想录算法训练营第1天 216 组合总和III 17 电话号码的字母组合 216 组合总和III 题目链接 提交代码 span class token keyword class span span class token class
  • 代码随想录算法训练营第20天回溯系列

    代码随想录算法训练营第1天 704 二分查找 27 移除元素 39 组合总和 题目链接 提交代码 span class token keyword class span span class token class name Solutio
  • SMPL-CN

    paper reading 为方便理解smpl文章的主要实现思想 xff0c 此文为论文中文解读 xff0c 资料来源zju 日后有空 xff0c 会写出论文的主要推导过程以及值得注意的重点 摘要 xff1a 我们提出了一个人体形状和姿势相
  • 自动驾驶的实现之路——几大关键传感器应用解析

    来源 xff1a MEMS 随着近两年来智慧汽车 车联网等等概念的兴起 xff0c 汽车自动驾驶的各种科技进展不断占据媒体版面 xff0c 引起了全球的关注和各国政府的支持 对于大部分人来说 xff0c 吃着火锅唱着歌 轻轻松松地直达目的地
  • 从零开始 CMake 学习笔记 (F)Build Type

    从零开始 CMake 学习笔记 xff08 F xff09 Build Type 开始前先默念三遍口诀 xff1a Declare a targetDeclare target s traitsIt s all about targets
  • 利用tf.reset_default_graph()重置default graph计算图以及nodes节点

    import tensorflow as tf tf reset default graph 利用这个可清空defualt graph以及nodes with tf variable scope Space a a 61 tf consta
  • c++继承多态知识感悟

    组合与继承 先说说组合 xff0c 当设计一个新的类的时候 xff0c 可以将一个已有类的对象作为成员 xff0c 然后通过成员对象实现已有类的功能 xff0c 类的对象成员与内置类型数据成员的声明语法一样 我们很早就开始接触并使用了 再说
  • Win10+Ubuntu18.04双系统安装教程

    一 说在前头 不同的配置安装方法不同 xff0c 我也是小白第一次安 xff0c 也是看了无数个教程不断重安了无数次才成功的 xff0c 所以我的教程不一定适合你的配置 xff0c 但你可以耐心的按照我的思路尝试 xff0c 如果你有更好的
  • ROS中的package.xml的使用

    文章目录 package xml作用package xml写法 来自VINS mono中 vins estimator package xml作用 pacakge xml 包含了package的名称 版本号 内容描述 维护人员 软件许可 编
  • 五、VINS-mono 代码解析——VIO初始化之SFM详解

    文章目录 前言系统流程图Estimator类processImage 函数initialStructure 初始化函数SFM初始化relativePose 函数getCorresponding 函数返回两帧匹配特征点3D坐标solveRel
  • 嵌入式软件工程师的四项基本能力

    能力1 xff1a 对C语言的深入掌握 xff0c 不犯低级语法错误 能力2 xff1a 对嵌入式芯片平台熟悉 xff0c 包括芯片各类外设的原理和使用方法 xff0c 以及相应的嵌入式操作系统 还包括芯片外围电路的设计能力 xff0c 包
  • windows中cuda版本切换

    一 安装 xff1a cuda的安装教程较多 xff0c 可以参考的博客 xff1a https blog csdn net zsc201825 article details 91129403 安装后的默认地址 xff1a C Progr
  • 阿里云配置ubuntu图形化界面

    购买阿里云ECS服务器 xff1a 阿里云官网地址 xff1a https www aliyun com 点击云服务器ECS xff0c 根据自身情况进行选购 购买后点击控制台 xff0c 找到实例 xff1a 找到自己的服务器实例 xff
  • ‘labelme‘ 不是内部或外部命令,也不是可运行的程序问题解决

    文章目录 一 安装labelme1 创建虚拟环境2 安装pyqt支持库3 安装Labelme 二 lableme启动 一 安装labelme 1 创建虚拟环境 命令行输入 conda create span class token oper
  • 超9成SCI论文发在国外!中文期刊到底差在哪?

    来源 科学网 撰文 卜叶 编辑 宗华 学术界不投中文期刊的原因是什么 xff1f 这一老生常谈的问题 xff0c 最近再次出现在某知识问答平台热榜 短短两周 xff0c 便吸引了180个回答 xff0c 浏览量超过34万 中文期刊到底差在哪
  • detectron2入门学习一:实现FruitsNut水果坚果分割任务以源码阅读

    学习目标 xff1a 学习detectron2数据集的注册以及基本的训练推理 一 工程文件下载与数据集准备 xff1a 整体的工程文件下载地址 xff1a https github com fenglingbai FruitsNutSeg