mmdetection训练自己的VOC数据集及常见问题
训练自己的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保存一次
参考链接:
mmdetection[v2.6.0]训练自己的VOC数据集_AI视觉爱好者的博客-CSDN博客_mmdetection训练voc数据集
使用mmdetection训练自己voc格式的数据集_大锤你给我站住的博客-CSDN博客_mmdetection voc数据集
新版 MMDetection V2.3.0训练测试笔记_包子爱跑步的博客-CSDN博客_samples_per_gpu
解决模型训练loss nan的问题_STU_11wxzou的博客-CSDN博客_mmdetection nan
mmdetection训练自己的VOC数据集及常见问题相关推荐
- mmdetection训练自己的COCO数据集及常见问题
训练自己的VOC数据集及常见问题见下文: mmdetection训练自己的VOC数据集及常见问题_不瘦8斤的妥球球饼的博客-CSDN博客_mmdetection训练voc 目录 一.环境安装 二.训练 ...
- mmdetection训练自己的VOC数据集
最新的请移步我的另一篇博文[2.6.0]:https://blog.csdn.net/jy1023408440/article/details/110135699 官方步骤: https://gith ...
- mmdetection的安装并训练自己的VOC数据集
mmdetection的安装并训练自己的VOC数据集 mmdetection的安装与VOC数据集的训练 一. mmdetection的安装 1.使用conda创建虚拟环境 2.安装Cython 3.安 ...
- 在服务器上利用mmdetection来训练自己的voc数据集
在服务器上利用mmdetection来训练自己的voc数据集 服务器上配置mmdetection环境 在服务器上用anaconda配置自己的环境 进入自己的虚拟环境,开始配置mmdetection 跑 ...
- mmdetectionV2.x版本 训练自己的VOC数据集
mmdetectionV2.x版本 训练自己的VOC数据集 1 首先根据规范的VOC数据集导入到项目目录下,如下图所示: mmdetection ----mmdet ----tools ----con ...
- yolov5-7.0训练自己的VOC数据集
yolov5-7.0训练自己的VOC数据集 这个笔记可能只适用于7.0版本的,写这个笔记主要是给工作室伙伴参考的,大佬请绕行 有错误之处欢迎指出 一.下载 yolov5的GitHub仓库地址:Rele ...
- 【mmdetection】SSD训练自己的VOC数据集注意事项
一.修改voc.py和class_names.py ./mmdet/datasets/voc.py 此处代码改为自己数据集的类别,以及./mmdet/core/evaluation/class_na ...
- 在Colab平台上用mmdetection中的Cascade RCNN训练自己的voc数据集
最近在学习目标检测,要用Cascde RCNN训练自己的数据集,因为本地电脑没有GPU,所以就借用Colab云端来进行模型训练,想要记录一下操作过程,以及希望可以给更多电脑没有GPU,但是需要用mmd ...
- 【学习记录】win10搭建YOLOX训练自己的VOC数据集
我是目录: 前言: 1.yolox的训练配置 2.yolox源码 3.必要的环境 配置yolox所需环境 1.安装依赖库 2.安装yolox 3.安装apex 4.下载预训练模型 4.准备自己的数据集 ...
最新文章
- mysql使用多端口用处_mysql 多端口设置如开启3306,3307,3308端口后, 能否通过不同端口操作同一张表?...
- java循环队列_java实现循环队列(顺序队列)
- python turtle画彩虹-Python基础实例——绘制彩虹(turtle库的应用)
- linux stat函数讲解
- ckeditor_3.6.6.2+CKFinder2.0.2配置
- 158.5. manifests
- windows 建立wifi热点
- ApacheCN PythonWeb 译文集 20211110 更新
- 谷歌推出理解神经网络的新方法SVCCA | NIPS论文+代码
- caffe---之eltwise层
- ping的时候怎么暂停_dos命令pause教程,?暂停bat批处理脚本程序,?请按任意键继续...
- HTTP请求tomcat版本升级无法识别问题
- 16、单片机串口原理与应用
- ShuffleNet模型解读
- 技术美术个人笔记(三)——各贴图格式
- LaTeX系统找不到指定文件解决方案
- 「区块链系列」搭建区块链底层技术
- php 识别lrc,自动识别LRC歌词精选.pptx
- java弹窗代码_JAVA的弹窗怎么做?
- mysql migration toolkit报错_MYSQL Migration Toolkit 安装