mmdetection3.1.0 训练自己的数据集

目录

  • 前言
  • 安装mmcv
  • 安装mmdetection
  • 验证安装
  • 数据集
    • 转为COCO
    • 划分训练集、验证集及测试集
      • 安装PaddlePaddle
      • 安装PaddleX
      • 划分数据集
  • 修改对应文件
    • 修改coco.py
    • 重新安装
    • 修改模型文件
  • 训练
  • 测试
    • 测试带真值的图像
    • 测试不带真值的图像
      • 批量测试
  • 错误集锦
    • ValueError: need at least one array to concatenate
    • Downgrade the protobuf package

前言

去年打比赛期间,深入学习了mmdetection框架,今年有个项目着急看效果,在A100服务器上重新安装了mm,发现已经是3.X版本了,改动了一些函数,故重新记录一下。

安装mmcv

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

安装mmdetection

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
# "-v" means verbose, or more output
# "-e" means installing a project in editable mode,
# thus any local modifications made to the code will take effect without reinstallation.

验证安装

mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .
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 cpu

出现下图,则证明安装成功

在这里插入图片描述

数据集

数据集采用的是布匹瑕疵检测的数据集,

转为COCO

首先将下载后的标签文件转为COCO格式


import json
from tqdm import tqdm
import cv2, os
from glob import glob
from collections import defaultdictbase_dirs = ['/home/xray/guangdong1_round1/', ]mp = {"破洞": 1, "水渍": 2, "油渍": 2, "污渍": 2,  "三丝": 3, "结头": 4, "花板跳": 5, "百脚": 6, "毛粒": 7,"粗经": 8, "松经": 9, "断经": 10, "吊经": 11, "粗维": 12, "纬缩": 13, "浆斑": 14, "整经结": 15, "星跳": 16, "跳花": 16,"断氨纶": 17, "稀密档": 18, "浪纹档": 18, "色差档": 18, "磨痕": 19, "轧痕": 19, "修痕":19, "烧毛痕": 19, "死皱": 20,"云织": 20, "双纬": 20, "双经": 20, "跳纱": 20, "筘路": 20, "纬纱不良": 20}def make_coco_traindataset(images2annos, name='train'):idx = 1image_id = 20190000000images = []annotations = []for im_name in tqdm(images2annos):#         im = cv2.imread(base_dir + 'defect_Images/' + im_name)
#         h, w, _ = im.shapeh, w = 1000, 2446image_id += 1image = {'file_name': im_name, 'width': w, 'height': h, 'id': image_id}images.append(image)annos = images2annos[im_name]for anno in annos:bbox = anno[:-1]seg = [bbox[0], bbox[1], bbox[0], bbox[3],bbox[2], bbox[3], bbox[2], bbox[1]]bbox = [bbox[0], bbox[1], bbox[2] - bbox[0], bbox[3] - bbox[1]]anno_ = {'segmentation': [seg], 'area': bbox[2] * bbox[3], 'iscrowd': 0, 'image_id': image_id,'bbox': bbox, 'category_id': anno[-1], 'id': idx, 'ignore': 0}idx += 1annotations.append(anno_)ann = {}ann['type'] = 'instances'ann['images'] = imagesann['annotations'] = annotationscategory = [{'supercategory':'none', 'id': id, 'name': str(id)} for id in range(1, 21)]ann['categories'] = categoryjson.dump(ann, open(base_dir + '{}.json'.format(name),'w'))for idx, base_dir in enumerate(base_dirs, 1):annos = json.load(open(base_dir + 'Annotations/anno_train.json'))images2annos = defaultdict(list)for anno in annos:images2annos[anno['name']].append(anno['bbox'] + [mp[anno['defect_name']]])make_coco_traindataset(images2annos, 'train' + str(idx))

划分训练集、验证集及测试集

采用的是paddleX工具进行划分,比例为7:2:1

安装PaddlePaddle

python -m pip install paddlepaddle-gpu==2.2.2 -i https://mirror.baidu.com/pypi/simple

安装PaddleX

pip install paddlex -i https://mirror.baidu.com/pypi/simple

划分数据集

paddlex --split_dataset --format COCO --dataset_dir D:/MyDataset --val_value 0.2 --test_value 0.1

修改对应文件

修改coco.py

路径 /mmdetection/mmdet/dataset/coco.py
将类别修改为自己的类别名称。
在这里插入图片描述

重新安装

重新执行下述命令,修改才会生效。

pip install -v -e .

修改模型文件

ctrl+F 查找 num_classes, 改为自己数据集的类别数量,不需要加背景

训练

python tools/train.py \${CONFIG_FILE} \[optional arguments]

测试

测试带真值的图像

将测试结果保存到文件夹中

python tools/test.py \configs/rtmdet/rtmdet_l_8xb32-300e_coco.py \checkpoints/rtmdet_l_8xb32-300e_coco_20220719_112030-5a0be7c4.pth \--show-dir faster_rcnn_r50_fpn_1x_results

测试不带真值的图像

批量测试

Todo

错误集锦

ValueError: need at least one array to concatenate

解决方案: 修改coco.py文件对应的类别

Downgrade the protobuf package

If you cannot immediately regenerate your protos, some other possible workarounds are: 1. Downgrade the protobuf package to 3.20.x or lower. 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

解决方案:
卸载原有的
重新安装低版本的

pip uninstall protobuf

pip install protobuf==3.20.0

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

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

相关文章

Kafka

1.定义 Kafka:一个分布式基于发布/订阅模式的消息队列。 发布者发布消息进入队列后,每个订阅者都能在一定时间内获取发布的消息(Kafka:消费者通过主动拉取pull队列)。 缺点:即使没有消息,消费者…

如何解决VScode远程下载插件不了的问题?如何手动安装插件?

当我们在使用VScode进行远程操作时,在安装我们所需要的一些插件时,可能会出现如下图,一直卡在安装中....明明只有小几十MB,却一连好几个小时都一动不动。像这种情况,就需要我们进行手动安装该插件。 插件网站&#xff…

在云计算环境中,保护Java应用程序可用的有效措施和工具

云计算(Cloud)技术是近年来计算机科学的一个重要突破。大多数组织已经通过将自己的应用程序移入云平台而获益。不过,如何保证应用程序在第三方服务器上的安全性,是一项艰巨的挑战。 在本文中,我们将重点讨论Java&…

一文带你了解Spring中存入Bean和获取Bean的方式

0. Spring中的五大注解 上图中就是五大类注解对应的层,通过源码可以看到其他四个注解都基于Conponent 1. 存入 Bean Spring既然是一个包含众多工具方法的IoC容器,它是一个控制反转的容器,所以就需要将Bean对象存入到容器中,需要…

使用Jenkins自由风格的软件项目实现接口自动化测试持续集成

这里写目录标题 一、JOB项目配置1、添加描述2、限制项目的运行节点3、源码管理4、构建触发器5、构建步骤6、构建后操作 一、JOB项目配置 1、添加描述 可选选项可填可不填 2、限制项目的运行节点 节点中要有运行环境所需的配置 节点配置教程:https://blog.csdn…

回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SVM-Adaboost支持向…

Spring初识(一)

一.Spring 是什么? 首先我们来看看官网的解释 Spring 使每个人都可以更快、更轻松、更安全地进行 Java 编程。Spring 对速度、简单性和生产力的关注使其成为 世界上最受欢迎的 Java框架。 这里我简单的说明一下什么是spring? 我们通常所说的 Spring 指的是 Sprin…

[JavaScript游戏开发] 2D二维地图绘制、人物移动、障碍检测

系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 文章目录 系列文章目录前言一、列计划1.1、目标1.2、步骤 二、使用步骤2.1、准备素材(图片):草坪、人物(熊猫)、障碍(石头)2.2、初…

Python对Excel不同的行分别复制不同的次数

本文介绍基于Python语言,读取Excel表格文件数据,并将其中符合我们特定要求的那一行加以复制指定的次数,而不符合要求的那一行则不复制;并将所得结果保存为新的Excel表格文件的方法。 这里需要说明,在我们之前的文章Pyt…

php连接上mysql数据库该的配置方法

用mysql官方的管理工具workbench: 打开导出界面后,下一步,选择csv格式,导出后excel就能打开了 如果你需要在程序代码中导出,需要找到对应代码的excel处理库。 如php 的 phpExcel( 最新版已更名为 phpoffice/phpspread…

selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

目录 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until()或者until_not()方法结合使用 WebDriverWait与expected_conditions结合使用 显示等待,自定义等待条件 强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间&#x…

14matlab数理统计 多项式的求根和根据根求多项式(matlab程序)

1.简述 分享一下通过多种不同的方法计算多项式的根。 数值根 使用代换法求根 特定区间内的根 符号根 数值根 roots 函数用于计算系数向量表示的单变量多项式的根。 例如,创建一个向量以表示多项式 x2−x−6,然后计算多项式的根。 p [1 -1 -6]; r …

Prometheus节点监控及hadoop集群监控

背景:我司长期苦于CM6.3后收费问题,这次领导痛下决心,决定要自己开发一套大数据管理平台,监控就是其中一部分,本文主要阐述,话不多说,先看效果。 1.监控组件Prometheus 1.1上传Prometheus包 [root@bigdb01 ~]# rsync root@172.16.1.247/data/fan/install/native/09.…

uni.app如何检测小程序版本更新以及上线后如何关闭全局打印

uni.app如何检测小程序版本更新以及上线后如何关闭全局打印 检测小程序版本更新关闭全局打印 检测小程序版本更新 App.vue 入口文件中 添加如下代码 //检测小程序版本是否更新const updateManager wx.getUpdateManager()updateManager.onCheckForUpdate(function(res) {// 请求…

DuiLib中的list控件以及ListContainerElement控件

文章目录 前言1、创建list控件2、创建 ListContainerElement 元素,并添加到 List 控件中,这里的ListContainerElement用xml来表示3、在 ListContainerElement 元素中添加子控件 1、List控件2、ListContainerElement控件 前言 在 Duilib 中,List 控件用于…

【批量将视频转为图像序列】

批量将视频转为图像序列 代码如下,代码中带有解释: # 导入所需要的库 import cv2 import os import numpy as np# 多个视频所在的路径 datasets_path ["/home/y/Code/数据集/1/007f.mp4","/home/y/Code/数据集/1/05f.mp4","/…

UI界面中的图标设计趋势与最佳实践

作为UI设计师,在日常的工作中,避免不了做图标规范。今天跟大家聊一聊,UI设计中的图标设计。 规范的重要性不用多说了,没有规范多个设计师绘制的图标会有很多差异,描边粗细、角度、圆角度等等。今天的文章和大家聊一下…

Stable Diffusion - 编辑生成 (OpenPose Editor) 相同人物姿势的图像

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131818943 OpenPose Editor 是 Stable Diffusion 的扩展插件,可以自定义人物的姿势和表情,以及生成深度、法线和边缘图等信…

vue 集成tinymce2实现图片,视频以及文件的上传

vue 集成tinymce2实现图片,视频以及文件的上传 1. 安装插件 (1)安装tinymce npm install tinymce -S (2)安装tinymce-vue npm install tinymce/tinymce-vue3.0.1 -S 2. 复制静态文件到public目录 资源下载路径&…

Django入门

前言 早就想入门后端了,自己倒是用过Flask,对于常规网站来说Django更完善一些。稍微学习下,能够做一些简单业务处理就好啦。 跟着官方文档学习的,这里做一下记录。纯纯拿来用,不去研究原理与架构,无脑跟着…