二、MMRotate旋转框目标检测训练DOTA数据集(模型推理与部署,保存推理结果为xml文件并构建镜像)

在上一篇文章中介绍了MMRotate的概述、安装和训练Dota数据集全流程,由于文章篇幅限制还剩下一部分模型的推理和部署环节没有写,为避免后续对这部分工作的遗忘,决定还是补充上这部分的笔记,仅作记录,如有不足之处还请指出!

一、模型推理测试

1.1单张图片推理测试

可以首先使用官网上的推理方法,从源代码安装mmrotate, 只需运行以下命令。

# 首先把所需要的配置文件下载下来,或直接用你训练好的模型和配置。
mim download mmrotate --config oriented-rcnn-le90_r50_fpn_1x_dota --dest .# 推理单张图片,也可验证mmrotate是否正确推理
python demo/image_demo.py demo/demo.jpg oriented_rcnn_r50_fpn_1x_dota_le90.py 
oriented_rcnn_r50_fpn_1x_dota_le90-6d2b2ce0.pth --out-file result.jpg

执行成功之后会生成result.jpg,就是模型的推理结果。
参考地址:https://mmrotate.readthedocs.io/zh-cn/1.x/get_started.html

1.2 使用test方法推理数据集

您可以使用以下命令来推理数据集进行模型测试。

# 单个 GPU
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [optional arguments]

例如:

python ./tools/test.py oriented-rcnn-le90_r50_fpn_1x_dota.py  oriented_rcnn_r50_fpn_1x_dota_le90-6d2b2ce0.pth

参考地址:https://mmrotate.readthedocs.io/zh-cn/stable/get_started.html#id2

二、模型推理结果导出为xml文件

通过上述方法,我们可以简单测试模型的性能,如果模型性能满足要求之后,我们想生产部署或者批量推理的时候,我们需要将模型的推理结果导出为xml文件,可以借助代码中的demo/huge_image_demo.py获取模型的推理结果,提取结果中的标签信息,并将结果保存为xml文件。
修改后的完整推理代码如下:

run,py

# Copyright (c) OpenMMLab. All rights reserved.import os
import warnings
warnings.filterwarnings("ignore", category=UserWarning)
import numpy as np
os.environ["KMP_DUPLICATE_LIB_OK"] = "True"
import xml.etree.ElementTree as ET
from xml.dom.minidom import parseString
from glob import glob
from tqdm import tqdm
from argparse import ArgumentParser
import cv2
from datetime import datetimeimport mmcv
from mmdet.apis import init_detector
from mmrotate.apis import inference_detector_by_patches
from mmrotate.registry import VISUALIZERS
from mmrotate.utils import register_all_modulesdef parse_args():parser = ArgumentParser()parser.add_argument('input_path', help='Image file')parser.add_argument('--config', default='configs/rotated_rtmdet/rotated_rtmdet_l-100e-aug-dota.py', help='Config file')parser.add_argument('--checkpoint', default='rtmdet_l_epoch_200.pth', help='Checkpoint file')parser.add_argument('output_path', default='/output_path', help='Path to output file')parser.add_argument('--patch_sizes',type=int,nargs='+',default=[1024],help='The sizes of patches')parser.add_argument('--patch_steps',type=int,nargs='+',default=[768], # 824help='The steps between two patches')parser.add_argument('--img_ratios',type=float,nargs='+',default=[1.0],help='Image resizing ratios for multi-scale detecting')parser.add_argument('--merge_iou_thr',type=float,default=0.3,help='IoU threshold for merging results')parser.add_argument('--merge_nms_type',default='nms_rotated',choices=['nms', 'nms_rotated', 'nms_quadri'],help='NMS type for merging results')parser.add_argument('--device', default='cuda:0', help='Device used for inference')parser.add_argument('--palette',default='dota',choices=['dota', 'sar', 'hrsc', 'random'],help='Color palette used for visualization')parser.add_argument('--score-thr', type=float, default=0.3, help='bbox score threshold')args = parser.parse_args()return argsdef remove_whitespace_nodes(node):for child in list(node.childNodes):if child.nodeType == child.TEXT_NODE and not child.data.strip():node.removeChild(child)elif child.hasChildNodes():remove_whitespace_nodes(child)def create_empty_xml(image_path, output_path):root = ET.Element("annotation")# Adding source detailssource_x = ET.SubElement(root, "source")file_n = ET.SubElement(source_x, "filename")orig = ET.SubElement(source_x, "origin")file_n.text = os.path.basename(image_path)orig.text = "Optical"# Adding research detailsresearch = ET.SubElement(root, "re

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

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

相关文章

DataSet和DataTable的关系

C#中的DataTable 在C#中,DataTable 是 System.Data 命名空间下的一个类,它是 DataSet 的一个组件,用于存储表格形式的数据。DataTable 可以独立于数据库使用,也可以与数据库表相关联,用于数据的读取、更新、插入和删除…

LeetCode 热题100-17 缺失的第一个正数

缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释:范围 [1,…

OpenCV绘图函数(13)绘制多边形函数函数polylines()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 画几条多边形曲线 函数原型 void cv::polylines (InputOutputArray img,InputArrayOfArrays pts,bool isClosed,const Scalar & color…

【高等代数笔记】(18)N阶行列式

2. N阶行列式 2.12 行列式按k行&#xff08;列&#xff09;展开 【拉普拉斯定理】 n n n阶矩阵 A ( a i j ) \boldsymbol{A}(a_{ij}) A(aij​)&#xff0c;取定第 i 1 , i 2 , . . . , i k i_{1},i_{2},...,i_{k} i1​,i2​,...,ik​行&#xff08;其中 i 1 < i 2 < .…

将x减到零的最小操作数问题

欢迎跳转我的主页&#xff1a;羑悻的小杀马特-CSDN博客 目录 一题目简述&#xff1a; 二题目思路&#xff1a; 三解答代码&#xff1a; 一题目简述&#xff1a; leetcode题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二题目思路&#xff1a; 首先这道题…

STM32(F103ZET6)第十九课:FreeRtos的移植和使用

目录 需求一、FreeRtos简介二、移植FreeRtos1.复制代码2.内存空间分配和内核相关接口3.FreeRtosConfig4.添加到工程中三、任务块操作1.任务四种状态2.创建任务过程 需求 1.将FreeRtos&#xff08;嵌入式实时操作系统&#xff09;移植到STM32中。 2.在该系统中实现任务的创建、…

git 更改分支名称

1. 本地分支重命名&#xff08;还未推送到远程&#xff09; 1、修改当前分支名称 git branch -m 新分支名称2、修改其他分支名称 git branch -m 旧分支名称 新分支名称2. 远程分支重命名&#xff08;已推送远程&#xff09; 1&#xff09;重新命名远程分支对应的本地分支 …

86、pod部署策略

一、集群的调度 集群的调度&#xff1a; 怎么把pod部署到节点的方法。 1.1、调度的过程&#xff1a; scheduler是集群的调度器&#xff0c;主要任务就是把pod部署到节点上。 1.2、自动调度&#xff1a; 1、公平&#xff0c;保证每个可用的节点都可以部署pod 2、资源的高…

【生日视频制作】黑板写文字美女跳舞2版AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程黑板写文字美女跳舞2版AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板替换工程 怎么如何做的【生日视频制作】黑板写文字美女跳舞2版AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导…

有向无环图的关联矩阵及其矩阵乘积的含义

有向无环图的关联矩阵及其矩阵乘积的含义 引言关联矩阵的定义矩阵乘积 B B T BB^T BBT的含义伪代码示例C代码示例结论引言 在计算机科学和数学中,有向无环图(Directed Acyclic Graph, DAG)是一种常见的数据结构,广泛应用于各种算法中,如拓扑排序、动态规划等。在有向无环…

10、Django Admin修改标题

admin from django.contrib import admin from .models import Category, Origin, Hero, Villain # 添加以下代码 admin.site.site_header "系统管理" admin.site.site_title "管理员界面" admin.site.index_title "欢迎来到这里&#xff…

网络模型及协议介绍

一.OSI七层模型 OSI Open System Interconnect 开放系统互连模型 以前不同厂家所生产的网络设备的标准是不同的&#xff0c;所以为了统一生产规范就制定了OSI这个生产模型。 作用&#xff1a;降低网络进行数据通信复杂度 这个模型的作用第一降低数据通信的复杂度&#xff…

QT cmake vscode 构建流程

采用基于QT creater方式实现&#xff1a; 1. Qt Creator——创建项目——Qt Widgets Application——CMake——Desktop Qt 6.8.0 MSVC2022 64bit——接下来全默认 关键点是选择CMake和构建套件这里用windows的MSVC。 2. 用vscode打开&#xff0c;即可。 可以配置一个调试任务…

【html】编辑器、基础、属性、标题、段落、格式化、 连接、头部、CSS、图像

目录 2.HTML编辑器 3.HTML基础 3.1 HTML标题 3.2 段落 4.HTML元素 4.1 元素语法 4.2 嵌套元素 4.3 HTML空元素 4.4 HTML提示&#xff0c;使用小写标签 5.HTML属性 5.1 属性实例 5.2 HTML 属性常用引用属性值 5.3 使用小写属性 5.4 HTML属性参考手册 6.HTML标题 6.1 HTML水…

JAKA学习2:博途组态配置PROFINET和MODBUS

目录 一、GSD文件安装与设备组态1.1、GSD安装1.2、PROFINET设备组态二、远程启动顺序2.1、启动步骤2.2、安全点配置三、JAKA配置3.1、输入输出点配置一、GSD文件安装与设备组态 1.1、GSD安装 1.2、PROFINET设备组态 二、远程启动顺序 2.1、启动步骤 1、 要保证DO9已开机状态…

驾驭Python与MySQL的桥梁:pymysql的神秘面纱

文章目录 **驾驭Python与MySQL的桥梁&#xff1a;pymysql的神秘面纱**背景&#xff1a;为何选择pymysql&#xff1f;库的简介安装指南简单的库函数使用方法场景应用常见问题与解决方案总结 驾驭Python与MySQL的桥梁&#xff1a;pymysql的神秘面纱 背景&#xff1a;为何选择pym…

赛码网牛客在acm模式下利用node.js处理多行输入方法

赛码网在JS Node的语言下&#xff0c;acm模式的默认标准输入输出代码是这样的&#xff1a; const readline require(readline);const rl readline.createInterface({input: process.stdin,output: process.stdout }); rl.on(line, function (line) {const tokens line.spli…

java重点学习-redis

一.redis 穿透无中生有key&#xff0c;布隆过滤nul隔离 锁与非期解难题。缓存击穿过期key&#xff0c; 雪崩大量过期key&#xff0c;过期时间要随机。 面试必考三兄弟&#xff0c;可用限流来保底。 1.1 Redis的使用场景 根据自己简历上的业务进行回答 缓存穿透、击穿、雪崩、双…

实验报告: lookie-lookie 项目测试与分析

目录 一、实验目的 二、实验环境 三、实验步骤 1. 下载与准备项目 1.1 从 GitHub 获取项目 1.2 查看项目文件结构 2. 运行项目 2.1 启动项目 2.2 浏览器设置 3. 项目体验 3.1 功能测试 3.2 运行截图 4. 文件结构分析 4.1 总体结构 4.2 主要文件和目录说明 5. 数…

重头开始嵌入式第三十二天(TCP多客户端模型)

1.多路IO 1.select #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netine…