windows环境下使用mmdetection+mmdeploy训练自定义数据集并转成onnx格式部署

news2024/11/18 5:45:12

目录

  • 实验环境
  • 安装conda
  • 创建虚拟环境
  • 安装pytorch
  • 使用 MIM 安装 MMEngine 和 MMCV
  • 安装 MMDetection
  • 准备自定义数据集
  • 修改配置信息
  • 开始训练
  • 模型转换与推理

实验环境

  • windows10
  • python:3.8
  • pytorch :1.8.1
  • cuda:11.1
  • mmdet:3.1.0
  • mmcv:2.0.1
  • onnxruntime-gpu:1.9.0

安装conda

conda下载地址:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Windows-x86_64.exe

创建虚拟环境

conda create -n openmmlab python=3.8
conda activate openmmlab

安装pytorch

pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

使用 MIM 安装 MMEngine 和 MMCV

pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"

安装 MMDetection

在github上下载MMDetection:

git clone git@github.com:open-mmlab/mmdetection.git

如果网络不好也可到gitee下载:

git clone git@gitee.com:open-mmlab/mmdetection.git

或者可以直接下载zip压缩包:
在这里插入图片描述

准备自定义数据集

此处使用VOC数据集进行演示,使用的框架为Faster RCNN。VOC数据集的格式如下:

└─VOCdevkit
    └─VOC2007
        ├─Annotations
        ├─ImageSets
        │  └─Main
                 └─test.txt
                 └─train.txt
                 └─val.txt
        └─JPEGImages

其中Annotations存放xml文件,JPEGImages存放jpg文件。

修改配置信息

复制configs/_base_/datasets/voc0712.py,命名为configs/_base_/datasets/vocengine.py。(该名称可自定义)
修改数据集路径:
在这里插入图片描述
在这里插入图片描述

复制configs/faster_rcnn/faster-rcnn_r50_fpn_1x_coco.py,命名为configs/faster_rcnn/faster-rcnn_r50_fpn_1x_voc.py,修改信息如下:
在这里插入图片描述
修改mmdet/evaluation/functional/class_names.py和mmdet/datasets/voc.py的类别信息:
在这里插入图片描述

在这里插入图片描述

修改configs/_base_/models/faster-rcnn_r50_fpn.py的类别数:
在这里插入图片描述

修改epochs:
configs/_base_/schedules/schedule_1x.py
在这里插入图片描述

开始训练

python tools/train.py configs/faster_rcnn/faster-rcnn_r50_fpn_1x_voc.py

训练结束后将在work_dir下得到训练的相关信息以及模型权重文件。

模型转换与推理

下载mmdeploy:

git clone git@github.com:open-mmlab/mmdeploy.git
or
git clone git@gitee.com:open-mmlab/mmdeploy.git

安装相关库:

pip install mmdeploy==1.0.0
pip install mmdeploy-runtime-gpu==1.0.0
pip install onnxruntime-gpu==1.9.0

将训练得到的模型以及py文件复制到mmdeploy/faster_rcnn_configs/目录下,并设置结果路径为:faster_rcnn_onnx/。(这两个目录可以自定义)
在这里插入图片描述
新建inference.py,用以下代码进行模型转换以及推理:

from mmdeploy.apis import torch2onnx
from mmdeploy.apis.utils import build_task_processor
from mmdeploy.utils import get_input_shape, load_config
import torch


# 假设在安装步骤中,mmdetection 和 mmdeploy 代码库在同级目录下,并且当前的工作目录为 mmdetection 的根目录,
# 那么以 Faster R-CNN 模型为例,你可以从此处下载对应的 checkpoint,并使用以下代码将之转换为 onnx 模型:
def pth_to_onnx(args):
    """
    将pth模型转换为onnx模型
    Args:
        args: 

    Returns:

    """
    # 1. convert model to onnx
    torch2onnx(args.image, args.work_dir, args.save_file, args.deploy_cfg, args.model_cfg,
               args.model_checkpoint, args.device)


def onnx_inference(args):
    """
    使用onnx模型进行推理
    Args:
        args: 

    Returns:

    """
    # read deploy_cfg and model_cfg
    deploy_cfg, model_cfg = load_config(args.deploy_cfg, args.model_cfg)

    # build task and backend model
    task_processor = build_task_processor(model_cfg, deploy_cfg, args.device)
    model = task_processor.build_backend_model(args.backend_model)

    # process input image
    input_shape = get_input_shape(deploy_cfg)
    model_inputs, _ = task_processor.create_input(args.image, input_shape)

    # do model inference
    with torch.no_grad():
        result = model.test_step(model_inputs)

    # visualize results
    task_processor.visualize(
        image=args.image,
        model=model,
        result=result[0],
        window_name='visualize',
        output_file='output_detection.png')


if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser(
        description=__doc__)

    # 训练设备类型
    parser.add_argument('--device', default='cuda', help='device')
    # 图像
    parser.add_argument('--image', default='test.jpg')
    # 转换模型后的输出文件夹
    parser.add_argument('--work-dir', default='mmdeploy_models/mmdet/onnx')
    # 保存的模型名称
    parser.add_argument('--save-file', default='end2end.onnx')
    # mmdeploy的配置文件,使用目标检测应选择detection
    parser.add_argument('--deploy-cfg', default='configs/mmdet/detection/detection_onnxruntime_static.py')
    # 训练得到的配置文件
    parser.add_argument('--model-cfg', default='faster_rcnn_configs/faster-rcnn_r50_fpn_1x_voc.py')
    # 训练得到的配置文件
    parser.add_argument('--model-checkpoint', default='')
    # 转换后的onnx模型
    parser.add_argument('--backend_model', default=['mmdeploy_models/mmdet/onnx/end2end.onnx'], type=list)
    args = parser.parse_args()
    print(args)
    pth_to_onnx(args)
    onnx_inference(args)

其中的参数有:

  • –device:使用设备,可选择cuda or cpu
  • –image:测试使用的图片,可随意选择一张
  • –work-dir:转换模型后的输出文件夹
  • –save-file:保存的模型名称
  • –deploy-cfg:mmdeploy的配置文件,使用目标检测应选择detection
  • –model-checkpoint:训练得到的配置文件
  • –backend_model:转换后的onnx模型

然后,输入如下命令行(可根据实际需求修改):

python inference.py --model-checkpoint faster_rcnn_configs/epoch_1.pth --image test.jpg --device cuda

最后,将在根目录下得到如下onnx模型:
在这里插入图片描述
以及output_detection.png预测结果文件:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想要精通算法和SQL的成长之路 - 验证二叉树

想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下: 对于一颗二叉树,我们需要做哪些校验? 首先…

C++:stl:stack、queue、priority_queuej介绍及模拟实现和容量适配器deque介绍

本文主要介绍c中stl的栈、队列和优先级队列并对其模拟实现,对deque进行一定介绍并在栈和队列的模拟实现中使用。 目录 一、stack的介绍和使用 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue的介绍和使用 1.queue的介绍 2.queue的使用 3.queue的…

C++篮球俱乐部管理系统

一、 本系统的设计 篮球俱乐部管理系统是一个用于管理篮球俱乐部日常运营和球队管理的软件系统。它提供了一套功能齐全的工具,帮助篮球俱乐部进行会员管理、训练计划安排、比赛管理、场地预订以及财务记录等方面的工作。 该管理系统的主要特点和功能包括&#xff…

fcpx插件:82种复古电影胶卷框架和效果mFilm Matte

无论您是在制作音乐剪辑、私人假期视频还是大型广告活动,这个专业的插件都将帮助您为您的镜头赋予真正的电影角色。 复古效果在任何视频中都能立即识别出来,增添了感伤的复古氛围,并使镜头更具说服力。使用 mFilm Matte 轻松实现这些特征&…

通过人才测评系统,对程序员岗位进行招聘测评

一、 程序员的基本工作内容 1、 负责项目组内的代码维护和更新迭代,保证研发效率,对于运营产品提出的需求应积极沟通并实现。 2、 规范相关开发文档等相关资料,对于有变更的代码和功能需求,要对开发文档做出相应的变更。 3、 作为…

从0开始深入理解并发、线程与等待通知机制(上)含大厂面试题

目录 一,基础概念 进程与线程 进程(就是一代代码的执行程序,程序的实例) 线程 大厂面试题:进程间的通信 CPU 核心数和线程数的关系 上下文切换(Context switch) 并行和并发 二,认识…

SwiftUI 4.0:两种方式实现子视图导航功能

0. 概览 从 SwiftUI 4.0 开始,觉悟了的苹果毅然抛弃了已“药石无效”的 NavigationView,改为使用全新的 NavigationStack 视图。 诚然,NavigationStack 从先进性来说比 NavigationView 有不小的提升,若要如数家珍得单开洋洋洒洒…

Leetcode---114双周赛

题目列表 2869. 收集元素的最少操作次数 2870. 使数组为空的最少操作次数 2871. 将数组分割成最多数目的子数组 2872. 可以被 K 整除连通块的最大数目 一、收集元素的最小操作次数 直接模拟,倒序遍历即可,代码如下 class Solution { public:int mi…

ROS(5)PX4仿真安装及运行

1、配置,提升下载速度 启动 $ cd clash-for-linux$ sudo bash start.sh$ source /etc/profile.d/clash.sh$ proxy_on 关闭 $ cd clash-for-linux$ sudo bash shutdown.sh$ proxy_off 2、安装PX4开源无人机 git clone https://github.com/PX4/PX4-Autopilot.git…

全栈开发笔记1:首个项目的收获

本文为编程导航实战项目学习笔记。 文章目录 7.跨域问题解决 2023.10.26.项目部署 2023.10.15.统一处理返回值 2023.10.14.开发注册和用户管理 2023.09303.开发登陆注册接口 2023.09.172.数据库设计1.前后端初始化 2023.9.16 7.跨域问题解决 2023.10.2 三种方式: …

ps插件:alpaca增效工具 (完美替代AI创成式填充) 2.8.1 中文版

Alpaca是一个Photoshop插件,提供了多种功能,帮助用户更高效地进行图像处理和设计。可以进行模型训练并无缝地融入图像中。同时还提供文本到图像的生成、图像到图像的变化、涂色、放大、深度图创建等功能,极大地提升了设计和艺术创作的效率和创…

Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!

目录 一、Go的关键字列表和分类介绍关键字在Go中的定位语言的基石简洁与高效可扩展性和灵活性 关键字分类声明各种代码元素组合类型的字面表示基本流程控制语法协程和延迟函数调用 二、Go的关键字全代码示例关键字全代码示例 三、Go的标识符定义基础定义特殊规定关键字与标识符…

【Aseprite像素画】如何取巧做到各种画面效果(小工具的各种技巧)

文章目录 参考链接:具体如下1、水中倒影2、参考图片3多个帧添加动画物品4多个帧删除动画物品5六毛钱受击效果6添加标签7导出特定标志的gif图8忽略标志帧,然后播放9轮廓线10多个图层轮廓线11洋葱皮12替换多个不同帧的色块簇13连接细胞14快速连续删除15冻结…

战火使命兑换码最新,战火使命礼包码

战火使命手游是一款二次元卡牌游戏,玩家可以通过使用兑换码来获取礼包奖励。如果你还不知道如何获取兑换码,下面为你提供最新的礼包码合集。 关注【娱乐天梯】,获取内部福利号 战火使命兑换码最新: 1、兑换码:ZHSM0421…

安装matplotlib_

安装pip 安装matplotlib 安装完毕 导入出现bug......

C++算法 —— 动态规划(10)二维费用背包

文章目录 1、动规思路简介2、一和零3、盈利计划 背包问题需要读者先明白动态规划是什么,理解动规的思路,并不能给刚接触动规的人学习。所以最好是看了之前的动规博客,以及两个背包博客,或者你本人就已经懂得动规了。 1、动规思路简…

弧度、圆弧上的点、圆的半径(r)、弧长(s)之间的关系

要计算弧度和圆弧上的点,需要知道以下几个要素: 圆的半径(r):即圆的中心到圆周上任意一点的距离。 弧长(s):从圆周上的一个点到另一个点所经过的弧长。 弧度(θ&#x…

为什么Spring不建议使用基于字段的依赖注入

在我们通过IDEA编写Spring的代码的时候,假如我们编写了如下代码: IDEA会给我们一个warning警告: 翻阅官方文档;我们会发现: 大意就是强制依赖使用构造器注入,可选依赖使用setter注入那么这是为什么呢&am…

App测试时常用的adb命令你都掌握了哪些呢?

adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

【服务器】在 Linux CLI 下安装 Anaconda

【服务器】在 Linux CLI 下安装 Anaconda 1 系统环境2 下载安装包3 安装 1 系统环境 查看系统信息 cat /etc/os-release2. 查看架构 uname -a # output # Linux localhost.localdomain 4.18.0-193.28.1.el8_2.x86_64 #1 SMP Thu Oct 22 00:20:22 UTC 2020 x86_64 x86_64 x86…