[mmdetection]fast-rcnn模型训练自己的数据集的详细教程

本篇博客是由本人亲自调试成功后的学习笔记。使用了mmdetection项目包进行fast-rcnn模型的训练,数据集是自制图像数据。废话不多说,下面进入训练步骤教程。

注:本人使用linux服务器进行展示,Windows环境大差不差。另外,每个人的训练环境不同,目前我只展示自己所使用的环境和配置,条件允许的情况下,请尽可能地根据我的版本进行安装和训练,以防出错。

一、conda环境及torch、mmcv等包的安装

1.1 linux服务器上的conda环境及torch包

linux服务器上的conda环境及torch包等可以根据下面这位博主发的教程进行安装:

Linux服务器安装anaconda并安装pytorch_如何利用pycharm在linux服务器上安装anaconda-CSDN博客

1.2 mmdetection中的必须包安装

在安装mmdetection之前,先进行下面三个包的安装:

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

在安装完上面三个包后,到github官网上把mmdetection的项目包拉下来,下载网址如下:

GitHub - open-mmlab/mmdetection: OpenMMLab Detection Toolbox and Benchmark

dowm下来后,使用xshell等软件打开该项目包,确保路径在该项目的主文件上。然后使用以下命令安装必备的包:

pip install -v -e .

经过上述步骤,mmdetection项目的运行环境就已经安装结束,下面进入mmdetection的配置和测试环节。

注意:请在该环节结束前检查自己安装torch版本是否是显卡(cuda)版本,不然无法使用显卡进行训练。可以在命令行中使用下面命令进行测试:

python    # 进入python
import torch    # 导入torch库
torch.cuda.is_available()    # 返回True则是cuda版本;返回False则是cpu版本
exit()    # 退出python

二、mmdetection配置及调试

2.1 mmdetection测试

根据官网给出的测试步骤进行测试,官网给出的是cpu的推理版本,这里给出的是cuda推理版本。调试命令如下:

mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .

进行以上步骤后,会在mmdetection主目录下下载一个权重文件(.pth)和模型配置文件(.py)。下载速度视自身网速而定,耐心等待~

在主目录中出现上述两个文件后,使用以下命令进行推理测试:

python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cuda

运行结束后,mmdetection主目录中会自动生成一个新的文件夹output保存刚刚推理的结果。

注意:(1)推理的路径使用了相对路径,如果你在运行后提示文件路径的报错,可以使用绝对路径进行运行。如果还是报错的话请仔细检查是否是文件没有下载在正确的路径中。(2)运行后出现mmcv版本的报错,该报错的解决请看下面的步骤~

2.2 mmcv版本报错的解决方法

在运行推理测试后,弹出“AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0”的报错,可以找到并打开/mmdetection-main/mmdet文件夹下的init.py文件,然后注释掉下面的这四行代码:

# assert (mmcv_version >= digit_version(mmcv_minimum_version)
#         and mmcv_version < digit_version(mmcv_maximum_version)), \
#     f'MMCV=={mmcv.__version__} is used but incompatible. ' \
#     f'Please install mmcv>={mmcv_minimum_version}, <{mmcv_maximum_version}.'

在执行完上述操作后,基本可以解决mmcv版本的问题。重新运行推理测试命令即可生成output结果文件夹。

至此,mmdetection项目的调试到此就结束了,可以进入正题开始fast-rcnn的训练准备工作!

三、自制数据集的准备

3.1 数据集的标注工作

这部分我就不详细展开标准的教程了,csdn中有很多这方面的教程,自己去找一下。

步骤:首先,使用labelme工具进行数据标注,我使用voc格式进行标注(.xml)。然后,在获得图片和标签文件后,将之分别存放在images和labels文件夹中。在这两个文件夹中请自行划分好train、val和test数据集。最终的数据集文件夹如下所示。

dataset
-images
--train
--val
--test
-labels
--train
--val
--test

3.2 制作fast-rcnn能训练的标签格式

利用以下代码分别对train、val和test的标签进行xml到coco标签的转换:

(注意:为了后续训练的方便,输出的json文件命名方式请遵循:instances_train2017.json、instances_val2017.json、instances_test2017.json)

import xml.etree.ElementTree as ET
import json
import os# 预定义类别
PRE_DEFINE_CATEGORIES = {"A1": 1, "B1": 2, "B2": 3, "A2": 4}# 初始化 COCO 格式的字典
coco_dict = {"images": [],"annotations": [],"categories": []
}# 处理类别信息
for category_name, category_id in PRE_DEFINE_CATEGORIES.items():category_info = {"id": category_id,"name": category_name,"supercategory": "object"}coco_dict["categories"].append(category_info)# 指定 XML 文件所在的文件夹
xml_dir = r'E:\BaiduSyncdisk\WALNUT-DATESET\split_dataset\test\labels\voc_label'  # 请替换为实际的 XML 文件所在文件夹路径annotation_id = 1
image_id = 1# 遍历文件夹下的所有 XML 文件
for filename in os.listdir(xml_dir):if filename.endswith('.xml'):xml_file_path = os.path.join(xml_dir, filename)try:# 解析 XML 文件tree = ET.parse(xml_file_path)root = tree.getroot()# 处理图像信息image_info = {"id": image_id,"file_name": root.find('filename').text,"width": int(root.find('size/width').text),"height": int(root.find('size/height').text)}coco_dict["images"].append(image_info)# 处理标注信息for obj in root.findall('object'):category_name = obj.find('name').textcategory_id = PRE_DEFINE_CATEGORIES[category_name]bbox = obj.find('bndbox')xmin = int(bbox.find('xmin').text)ymin = int(bbox.find('ymin').text)xmax = int(bbox.find('xmax').text)ymax = int(bbox.find('ymax').text)width = xmax - xminheight = ymax - yminannotation_info = {"id": annotation_id,"image_id": image_id,"category_id": category_id,"bbox": [xmin, ymin, width, height],"area": width * height,"iscrowd": 0}coco_dict["annotations"].append(annotation_info)annotation_id += 1image_id += 1except Exception as e:print(f"Error processing {xml_file_path}: {e}")# 保存为 JSON 文件
output_json_file = r'E:\BaiduSyncdisk\WALNUT-DATESET\tools\1.数据集制作\annotations\instances_test2017.json'
with open(output_json_file, 'w') as f:json.dump(coco_dict, f, indent=4)

在对训练集、验证集和测试集都运行了以上代码后会生成三个josn文件,随后将这三个文件保存到一个annotation文件夹中。

3.3 fast-rcnn数据文件保存格式

在进行了上述操作后,现在可以在mmdetection主文件夹中按照以下格式新建文件夹:

mmdetection   # 主目录
-...   # 主目录的其他文件
-data
--coco
---annotations
---train2017
---val2017
---test2017
-...   # 主目录的其他文件

在新建完成后,将图片数据按照分类分别上传到train2017、val2017和test2017文件夹中,刚刚生成的json文件上传到annotations文件夹中。

3.4 数据集配置文件的准备

在执行完上述操作后,进入/mmdetection/mmdet/datasets文件夹中复制coco.py,粘贴新建一个自己数据集的配置文件,本教程用ABC.py做例子进行讲解。

(1)将复制的文件打开后,修改原来coco数据集的classes和palette信息,按照自己的来。

修改前:

修改后:(这是我的例子,请按照自己的情况设定)

class的名字也要改一下:ABCDataset

(2)然后打开/mmdet/datasets/init.py,导入自己的数据集

....from .walnut import ABCDataset....__all__ = ['XMLDataset', 'CocoDataset', 'ABCDataset', 'DeepFashionDataset', 'VOCDataset','CityscapesDataset', 'LVISDataset', 'LVISV05Dataset', 'LVISV1Dataset','WIDERFaceDataset', 'get_loading_pipeline', 'CocoPanopticDataset','MultiImageMixDataset', 'OpenImagesDataset', 'OpenImagesChallengeDataset','AspectRatioBatchSampler', 'ClassAwareSampler', 'MultiSourceSampler','GroupMultiSourceSampler', 'BaseDetDataset', 'CrowdHumanDataset','Objects365V1Dataset', 'Objects365V2Dataset', 'DSDLDetDataset','BaseVideoDataset', 'MOTChallengeDataset', 'TrackImgSampler','ReIDDataset', 'YouTubeVISDataset', 'TrackAspectRatioBatchSampler','ADE20KPanopticDataset', 'CocoCaptionDataset', 'RefCocoDataset','BaseSegDataset', 'ADE20KSegDataset', 'CocoSegDataset','ADE20KInstanceDataset', 'iSAIDDataset', 'V3DetDataset', 'ConcatDataset','ODVGDataset', 'MDETRStyleRefCocoDataset', 'DODDataset','CustomSampleSizeSampler', 'Flickr30kDataset'
]

至此,fast-rcnn模型能接受的数据集格式已经已经布置完成。接下来进入fast-rcnn模型训练的配置环节。

四、模型配置文件的准备

在训练fast-rcnn模型前,需要先进行rpn的训练,因为rpn有fast-rcnn模型训练所需要的前置文件(.pkl)。

4.1 rpn模型的训练

(1)选择模型

进入到/mmdetection/configs文件夹中找到rpn文件夹,进入后找到rpn_r50_fpn_1x_coco.py,本博客将使用这个例子进行教学。

(2)rpn模型训练

在命令行中使用以下模型进行训练:

python tools/train.py /root/autodl-tmp/model/mmdetection-main/configs/rpn/rpn_r50_fpn_1x_coco.py

修改rpn_r50_fpn_1x_coco.py文件中的相应代码获得train和val的.pkl文件,这两个文件会自动生成在数据集/mmdetection/data/coco/路径下的proposals文件夹中。

注:本例子只做训练集和验证集的pkl,没有test。各位根据自身的需要进行生成。

在获得这两个文件后,就可以进行fast-rcnn模型的训练啦~

4.2 fast-rcnn模型的训练

(1)类别设置

打开mmdetection-main/configs/_base_/models,找到并打开fast-rcnn_r50_fpn.py,搜索num_classes,把coco的80个类别修改成自己的类别,本博客例子有4个类别,所以我将num_classes设置成4。

(2)配置dataset、batch、workers

打开mmdetection-main/configs/_base_/datasets,找到并打开coco_detection.py。

修改一下部位,请Ctrl+F进行分别搜索关键字

dataset_type
train_dataloader
val_dataloader
test_dataloader

将dataset_type设置成ABCDataset;train_dataloader、val_dataloader、test_dataloader中的    batch_size=16,
num_workers=16,

根据自己的设备配置来设置,这里我将batch和worker都设置成了16。

以上就完成了fast-rcnn的环境、数据集和训练文件的全部配置。接下来开始进行fast-rcnn模型的训练步骤。

五、开始训练

在命令行中cd进到mmdetection的项目主目录中,使用以下命令进行fast-rcnn模型的训练:(文件路径请根据自己的来改)

python tools/train.py /root/autodl-tmp/model/mmdetection-main/configs/fast_rcnn/fast-rcnn_r50_fpn_2x_coco.py

训练过程截图如下:

如果不报错并且出现和截图相似的界面就说明训练开始了!!


——————————  今天不学习,明天变垃圾  ——————————

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

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

相关文章

对比uart iic spi 三种总线的使用

1.uart串口通信 1.1uart的通信总线方式 1.2查询开发板和数据手册对需要进行修改的串口进行设置 例如STM32MP157aaa 1.设置8bit数据位 2.设置无校验位 3.设置1bit停止位 4.设置波特率为115200 5.设置16倍过采样 7.使能发送器 TE 8.使能接收器 RE 9.使能串口 UE10.发送数据&…

【玩转 Postman 接口测试与开发2_016】第13章:在 Postman 中实现契约测试(Contract Testing)与 API 接口验证(上)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证1 契约测试的概念2 契约测试的工作原理3 契约测试的分类4 DeepSeek 给出的契约测试相关背景5 契约测试在 Postman 中的创建方法6 API 实例的基本用法7 API 实例的类型实…

java-(Oracle)-Oracle,plsqldev,Sql语法,Oracle函数

卸载好注册表,然后安装11g 每次在执行orderby的时候相当于是做了全排序,思考全排序的效率 会比较耗费系统的资源,因此选择在业务不太繁忙的时候进行 --给表添加注释 comment on table emp is 雇员表 --给列添加注释; comment on column emp.empno is 雇员工号;select empno,en…

尚硅谷课程【笔记】——大数据之Shell【一】

课程视频&#xff1a;【【尚硅谷】Shell脚本从入门到实战】 一、Shell概述 为什么要学习Shell&#xff1f; 1&#xff09;需要看懂运维人员的Shell程序 2&#xff09;偶尔编写一些简单的Shell程序来管理集群、提高开发效率 什么是Shell&#xff1f; 1&#xff09;Shell是一…

pytorch实现长短期记忆网络 (LSTM)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 LSTM 通过 记忆单元&#xff08;cell&#xff09; 和 三个门控机制&#xff08;遗忘门、输入门、输出门&#xff09;来控制信息流&#xff1a; 记忆单元&#xff08;Cell State&#xff09; 负责存储长期信息&…

CDDIS从2025年2月开始数据迁移

CDDIS 将从 2025 年 2 月开始将我们的网站从 cddis.nasa.gov 迁移到 earthdata.nasa.gov&#xff0c;并于 2025 年 6 月结束。 期间可能对GAMIT联网数据下载造成影响。

【Redis】主从模式,哨兵,集群

主从复制 单点问题&#xff1a; 在分布式系统中&#xff0c;如果某个服务器程序&#xff0c;只有一个节点&#xff08;也就是一个物理服务器&#xff09;来部署这个服务器程序的话&#xff0c;那么可能会出现以下问题&#xff1a; 1.可用性问题&#xff1a;如果这个机器挂了…

华为云kubernetes部署deepseek r1、ollama和open-webui(已踩过坑)

1 概述 ollama是一个管理大模型的一个中间层&#xff0c;通过它你可以下载并管理deepseek R1、llama3等大模型。 open-webui是一个web界面&#xff08;界面设计受到chatgpt启发&#xff09;&#xff0c;可以集成ollama API、 OpenAI的 API。 用常见的web应用架构来类比&#x…

在Mac mini M4上部署DeepSeek R1本地大模型

在Mac mini M4上部署DeepSeek R1本地大模型 安装ollama 本地部署&#xff0c;我们可以通过Ollama来进行安装 Ollama 官方版&#xff1a;【点击前往】 Web UI 控制端【点击安装】 如何在MacOS上更换Ollama的模型位置 默认安装时&#xff0c;OLLAMA_MODELS 位置在"~/.o…

CSS 背景与边框:从基础到高级应用

CSS 背景与边框&#xff1a;从基础到高级应用 1. CSS 背景样式1.1 背景颜色示例代码&#xff1a;设置背景颜色 1.2 背景图像示例代码&#xff1a;设置背景图像 1.3 控制背景平铺行为示例代码&#xff1a;控制背景平铺 1.4 调整背景图像大小示例代码&#xff1a;调整背景图像大小…

数据思维错题知识点整理(复习)

小的知识点整理 目前常见的数据采集方案有什么。 埋点、可视化埋点、无埋点&#xff08;无埋点并不是字面意思不埋点&#xff0c;其实也是一种埋点&#xff0c;只是让开发人员完全无感知&#xff0c;直接嵌入sdk&#xff0c;然后每个元素都能查看他们的情况&#xff0c;后续开…

PyQt4学习笔记2】QMainWindow

目录 一、创建 QMainWindow 组件 1. 创建工具栏 2. 创建停靠窗口 3. 设置状态栏 4. 设置中央窗口部件 二、QMainWindow 的主要方法 1. addToolBar() 2. addDockWidget() 3. setStatusBar() 4. setCentralWidget() 5. menuBar() 6. saveState() 和 restoreState() 三、QMainWind…

Linux:文件系统(软硬链接)

目录 inode ext2文件系统 Block Group 超级块&#xff08;Super Block&#xff09; GDT&#xff08;Group Descriptor Table&#xff09; 块位图&#xff08;Block Bitmap&#xff09; inode位图&#xff08;Inode Bitmap&#xff09; i节点表&#xff08;inode Tabl…

ubuntu22.40安装及配置静态ip解决重启后配置失效

遇到这种错误&#xff0c;断网安装即可&#xff01; 在Ubuntu中配置静态IP地址的步骤如下。根据你使用的Ubuntu版本&#xff08;如 Netplan 或传统的 ifupdown&#xff09;&#xff0c;配置方法有所不同。以下是基于 Netplan 的配置方法&#xff08;适用于Ubuntu 17.10及更高版…

手写MVVM框架-实现简单的数据代理

MVVM框架最显著的特点就是虚拟dom和响应式的数据、我们以Vue为例&#xff0c;分别实现data、computed、created、methods以及虚拟dom。 这一章我们先实现简单的响应式&#xff0c;修改数据之后在控制台打印。 我们将该框架命名为MiniVue。 首先我们需要创建MiniVue的类(src/co…

ESLint

ESLint ESLint 是一个针对 JS 的代码风格检查工具&#xff0c;当不满足其要求的风格时&#xff0c;会给予警告或错误。 官网&#xff1a;https://eslint.org/ 中文网&#xff1a;https://eslint.nodejs.cn/ 安装使用 在你的项目中安装 ESLint 包&#xff1a; npm install -…

kaggle视频行为分析1st and Future - Player Contact Detection

这次比赛的目标是检测美式橄榄球NFL比赛中球员经历的外部接触。您将使用视频和球员追踪数据来识别发生接触的时刻&#xff0c;以帮助提高球员的安全。两种接触&#xff0c;一种是人与人的&#xff0c;另一种是人与地面&#xff0c;不包括脚底和地面的&#xff0c;跟我之前做的这…

Chapter 6 -Fine-tuning for classification

Chapter 6 -Fine-tuning for classification 本章内容涵盖 引入不同的LLM微调方法准备用于文本分类的数据集修改预训练的 LLM 进行微调微调 LLM 以识别垃圾邮件评估微调LLM分类器的准确性使用微调的 LLM 对新数据进行分类 现在&#xff0c;我们将通过在大语言模型上对特定目标任…

【从零开始的LeetCode-算法】922. 按奇偶排序数组 II

给定一个非负整数数组 nums&#xff0c; nums 中一半整数是 奇数 &#xff0c;一半整数是 偶数 。 对数组进行排序&#xff0c;以便当 nums[i] 为奇数时&#xff0c;i 也是 奇数 &#xff1b;当 nums[i] 为偶数时&#xff0c; i 也是 偶数 。 你可以返回 任何满足上述条件的…

python 小游戏:扫雷

目录 1. 前言 2. 准备工作 3. 生成雷区 4. 鼠标点击扫雷 5. 胜利 or 失败 6. 游戏效果展示 7. 完整代码 1. 前言 本文使用 Pygame 实现的简化版扫雷游戏。 如上图所示&#xff0c;游戏包括基本的扫雷功能&#xff1a;生成雷区、左键点击扫雷、右键标记地雷、显示数字提示…