mmdetecion

安装和测试:

GET STARTED — MMDetection 3.3.0 documentation

mmdetection从配置到训练_openmim-CSDN博客

训练voc数据集:

mmdetection训练自己的VOC数据集及常见问题_mmdetection训练voc数据集-CSDN博客

训练自己的COCO数据集及常见问题见下文:

mmdetection训练自己的COCO数据集及常见问题_不瘦8斤的妥球球饼的博客-CSDN博客

目录

一、环境安装

二、训练测试步骤

三、常见问题

batch size设置

学习率和epoch的修改

训练过程loss为nan的问题

GPU out of memory

如果自己的voc数据集图片是 png/tif 文件

训练生成的.pth文件占用较大内存

一、环境安装
代码:GitHub - open-mmlab/mmdetection: OpenMMLab Detection Toolbox and Benchmark

官方安装教程:Prerequisites — MMDetection 2.23.0 documentation

或者mmdetection/get_started.md at master · open-mmlab/mmdetection · GitHub

二、训练测试步骤
步骤一:准备数据。首先根据规范的VOC数据集导入到项目目录下,如下所示:

 VOC数据集格式介绍_不瘦8斤的妥球球饼的博客-CSDN博客_voc格式

mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   │   ├── Annotations
│   │   │   ├── JPEGImages
│   │   │   ├── ImageSets
│   │   │   │   ├── Main
│   │   │   │   │   ├── test.txt
│   │   │   │   │   ├── trainval.txt
推荐以软连接的方式创建:

cd mmdetection
mkdir data
ln -s $VOC2007_ROOT data/VOCdevkit
其中,$VOC2007_ROOT需改为你的VOC2007数据集根目录。

步骤二:修改config.py

在configs文件夹中选择自己要训练的config文件,例如:faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py

选好后,打开可以看到faster_rcnn_r50_fpn_1x_coco.py的基础配置如下:

下需要修改前两个文件(如红框所示):

1. 退到上级目录找到_base_,找到faster_rcnn_r50_fpn.py,修改原VOC类的数目:

2. (1)把‘../_base_/datasets/coco_detection.py’修改为‘../_base_/datasets/voc0712.py’

(2)datesets中VOC0712.py,修改成你的数据源:

 步骤三:修改mmdetection/mmdet/datasets目录下voc.py

修改CLASSES成自己的类别数,如果是一个类别,需要写成CLASSES = ('person',)【需要加一个逗号】,否则会出现 “AssertionError: CLASSES in RepeatDatasetshould be a tuple of str.Add comma if number of classes is 1 as CLASSES = (person,)” 的错误。

步骤四:修改mmdetection/mmdet/core/evaluation目录下class_names.py

步骤五:运行python setup.py install,重新编译

步骤六:运行训练代码

1. 使用单个GPU进行训练

python ./tools/train.py ${CONFIG_FILE} [optional arguments]
python ./tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn.py  --work_dir models
2.使用多个GPU进行训练

./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]
./tools/dist_train.sh  configs/faster_rcnn/faster_rcnn_r50_fpn.py
[optional arguments]  可选参数

--no-validate  : 不建议使用,代码中每隔K(默认为1)执行评估,可以在configs/_base_/datasets/voc0712.py 修改evaluation = dict(interval=1, metric='mAP')

--work-dir ${WORK_DIR}   覆盖配置文件中指定的工作目录

--resume-from ${CHECKPOINT_FILE}   程序中断后继续训练,从先前的检查点文件恢复

--options 'Key=value'   :  在使用的配置中覆盖一些设置。

步骤七:测试:

# single-gpu testing
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] [--show]
三、常见问题
batch size设置


学习率和epoch的修改


重要:配置文件中的默认学习率(lr=0.02)是8个GPU和samples_per_gpu=2(批大小= 8 * 2 = 16)。根据线性缩放规则,如果您使用不同的GPU或每个GPU的有多少张图像,则需要按批大小设置学习率,例如,对于4GPU* 2 img / gpu=8,lr =8/16 * 0.02 = 0.01 ;对于16GPU* 4 img / gpu=64,lr =64/16 *0.02 = 0.08 。

计算公式:lr = (gpu_num * samples_per_gpu) / 16 * 0.02

训练过程loss为nan的问题
常见问题解答 — MMDetection 2.23.0 文档

1.检查数据的标注是否正常

长或宽为 0 的框可能会导致回归 loss 变为 nan,一些小尺寸(宽度或高度小于 1)的框在数据增强(例如,instaboost)后也会导致此问题。 因此,可以检查标注并过滤掉那些特别小甚至面积为 0 的框,并关闭一些可能会导致 0 面积框出现数据增强。

2.降低学习率

一般出现loss nan,无非是网络传输的梯度过大导致的,所以首先考虑在模型配置schedule_1x.py里减小模型的学习率。可是学习率调小100倍甚至10000倍,还出现nan的情况,所以考虑其他原因导致。先排除学习率的影响,将学习率设为0,loss依旧nan,然后就可以尝试下一个了。

3.延长 warm up 的时间

一些模型在训练初始时对学习率很敏感,可以在模型配置schedule_1x.py里把 warmup_iters 从 500 更改为 1000 或 2000。

4.梯度裁剪

一些模型需要梯度裁剪来稳定训练过程。 默认的 grad_clip 是 None, 你可以在模型配置schedule_1x.py里设置 optimizer_config=dict(_delete_=True, grad_clip=dict(max_norm=35, norm_type=2)) 如果你的 config 没有继承任何包含 optimizer_config=dict(grad_clip=None), 你可以直接设置optimizer_config=dict(grad_clip=dict(max_norm=35, norm_type=2))。

5.不使用fp16训练

如果用了fp16训练,可尝试将其注释掉。

# fp16 = dict(loss_scale=512.)
GPU out of memory
常见问题解答 — MMDetection 2.23.0 文档

存在大量 ground truth boxes 或者大量 anchor 的场景,可能在 assigner 会 OOM。 您可以在 assigner 的配置中设置 gpu_assign_thr=N,这样当超过 N 个 GT boxes 时,assigner 会通过 CPU 计算 IOU。

在 backbone 中设置 with_cp=True。 这使用 PyTorch 中的 sublinear strategy 来降低 backbone 占用的 GPU 显存。

使用 config/fp16 中的示例尝试混合精度训练。loss_scale 可能需要针对不同模型进行调整。

如果自己的voc数据集图片是 png/tif 文件
在/mmdet/datasets/xml_style.py 51行.jpg 可以改为.png/.tif。

训练生成的.pth文件占用较大内存

#保存模型
可修改configs/base/default_runtime.py文件中:

checkpoint_config = dict(interval=10) # interval=10 表示10个epoch保存一次
 

# 保存最优模型:

checkpoint=dict(type="CheckpointHook",interval=50,save_best="coco/bbox_mAP",rule="greater"
),

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

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

相关文章

搜索与图论第五期 拓扑序列

前言 拓扑排序是非常重要的一部分,希望大家都能够手撕代码!!!(嘿嘿嘿) 一、拓扑排序定义(百度须知嘿嘿嘿) 拓扑排序 拓扑排序是一种对有向无环图(Directed Acyclic Gra…

flink学习之窗口处理函数

窗口处理函数 什么是窗口处理函数 Flink 本身提供了多层 API,DataStream API 只是中间的一环,在更底层,我们可以不定义任何具体的算子(比如 map(),filter(),或者 window()),而只是…

Java事务的传播

Java事务的传播详解 欢迎来到本博客,今天我们将深入探讨Java中事务传播行为,这是在处理多个事务边界时至关重要的一环。 1. 事务传播概述 在Java中,事务是一系列操作的执行单元,要么全部执行成功,要么全部回滚。事务…

GitHub Copilot 与 ChatGPT:哪种工具更适合软件开发?

GitHub Copilot 与 ChatGPT:哪种工具更适合软件开发? 比较 ChatGPT 与 GitHub Copilot编程语言功能性定制化训练数据上下文准确性 ChatGPT 与 GitHub Copilot:哪个更适合软件开发?常见问题解答: 不断发展的编程世界正在…

深入理解stress/stress-ng

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、重要参数说明 四、实例4.1、压测CPU4.2、压测内存4.3、压测IO4.4、压测磁盘及IO4.5、压测磁盘及CPU 团队博客: 汽车电子社区 一、概述 stress是一种工作负载…

电子行业含砷废水,深度除砷技术

砷是一种类金属元素,砷化物生物毒性极强,是国际公认的第一类致癌物。因此,这些含砷废水必须经过一定的处理才能排放到环境中。那么,哪些行业会产生含砷废水呢?在地球上,砷是一种常见的元素。在自然界中,砷…

2023年CSDN年底总结-独立开源创作者第一年

2023年最大的变化,就是出来创业,当独立开源创作者,这一年发起SolidUI开源项目,把知乎重新开始运营起来。CSDN粉丝破万,CSDN博客专家和AI领域创作者。 2023年年度关键词:创业 https://github.com/CloudOrc…

SpringBoot责任链与自定义注解:优雅解耦复杂业务

引言 责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者处理请求。在实际应用中,责任链模式常用于解耦发送者和接收者,使得请求可以按照一定的规则被多个处理者依次处理。 首先,本…

如何区分 html 和 html5?

HTML(超文本标记语言)和HTML5在很多方面都存在显著的区别。HTML5是HTML的最新版本,引入了许多新的特性和元素,以支持更丰富的网页内容和更复杂的交互。以下是一些区分HTML和HTML5的关键点: 新特性与元素:H…

zabbix 安装和启动报错处理

zabbix 安装报错处理 yum安装agent或者proxy报错解决办法,yum源取消检查配置 对已经安装好的zabbix 报错解决办法 yum安装agent或者proxy报错 配置官方源 rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpmyum安装报…

搭建k8s集群实战(三)安装配置containerd、kubelet、kubeadm、kubectl

k8s在1.24之后,使用containerd代码docker提供容器服务。 下面说明如果安装containerd,并设置镜像仓库。 添加源 yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装containerd 由于CentOS 8 默…

Ceph篇之利用Prometheus监控ceph服务

一、Ceph内置模块 Ceph manager 内部的模块中包含了 prometheus 的监控模块,并监听在每个 manager 节点的 9283 端口,该端口用于将采集到的信息通过 http 接口向 prometheus 提供数据。 二、监控搭建 1、启用 prometheus 监控模块 ceph mgr module enable promethe…

研究性学习:当地能源资源调查

1. 课题名称 当地能源资源调查 2. 起止时间 起始时间:2024年1月25日 结束时间:2024年2月20日 3. 项目组成员 组长:王五组员:赵六、钱七校内指导教师:李老师校外指导教师:能源专家刘教授4. 组员分工情况 搜集整理资料: 王五:负责搜集西安市能源资源的分布情况、使用…

Java+Spring Cloud +Vue+UniApp微服务智慧工地云平台源码

目录 智慧工地云平台功能 【劳务工种】所属工种有哪些? 1.管理人员 2.信息采集 3.证件管理 4.考勤管理 5.考勤明细 6.工资管理 7.现场统计 8.WIFI教育 9.课程库管理 10.工种管理 11.分包商管理 12.班组管理 13.项目管理 智慧工地管理平台是以物联网、…

Windows物理主机迁移至VMware ESXI服务器

文章目录 物理主机迁移至VMware ESXI服务器一、迁移环境二、迁移步骤1、主机A准备工作1、关闭主机A的防火墙2、主机A需要设置管理员密码3、主机A需要设置允许共享访问 2、主机B操作步骤1、安装**VMware vCenter Conver…

鸿蒙开发第2篇__装饰器

在ArkTS中, 有装饰器语法。 装饰器用于装饰类、结构、方法、变量,赋予其特殊的含义。 1. Component 表示自定义组件, 用此装饰器的组件是可重用的,可以与其他组件重合 此装饰器装饰的 struct 表示该结构体具有组件化能力&#…

Java复习系列之阶段二:数据库(2)

1. 基础语法 1.1 DQL(数据查询语句) 执行顺序: from、join 、on、where、group by、having、select、distinct、order by、limit 1.2 DML(数据修改语言) 对数据表的增删改 insert into update set delete form 1.…

新年短信群发选择自己发还是106短信平台合适?

选择自己发新年短信群发还是106短信平台,取决于您的需求和资源。 如果您需要发送的短信数量较少,或者您有特定的发送需求,例如需要发送一些包含敏感信息的短信,那么您可以选择自己发送。您可以使用手机或电脑上的短信应用程序来发…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 1月26日,星期五

每天一分钟,知晓天下事! 2024年1月26日 星期五 农历腊月十六 1、 教育部:保障符合就业条件的公费师范生有编有岗,全部落实任教学校。 2、 禁用有毒有害材料!我国首部快递包装强制性国家标准6月1日实施。 3、 中疾控&…

仿真机器人-深度学习CV和激光雷达感知(项目2)day8【作业2与答案2】

文章目录 前言作业2答案2前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容 🌟 预置知识:基本Python语法,基本linux命令行使用 以下的几个专栏是本人比较满意的…