YOLOF训练自己的数据集(目标检测,cvpods版本)
训练准备:
github repo地址:https://github.com/megvii-model/YOLOF
github上有两个版本,一个是cvpods,一个是detectron2,第二个我每次运行都报AssertionError: bad box: x1 larger than x2,说是调小学习率,后来一直也没跑成功,精度也不正常,就放弃了,转到cvpods版本了
我也是初学刚接触,看不懂网上的注册数据集,就是运行的时候哪里报错哪里改代码,有专业的还请多多指正
前提是你已经把你的数据集转换成coco形式了,我在这里给出一个转换后的例子,只有一个waste类,从0开始标记
我是从yolo格式转到coco,github repo使用的是:DL_tools/yolo2coco.py at main · Weifeng-Chen/DL_tools · GitHub
{"categories": [{"id": 0,"name": "waste","supercategory": "mark"}],"annotations": [{"area": 21344.000000000004,"bbox": [493.0,9.999999999999996,232.0,92.00000000000001],"category_id": 0,"id": 0,"image_id": 0,"iscrowd": 0},...],
"images": [{"file_name": "0071.jpg","id": 0,"width": 1600,"height": 900},...]
}
我使用的是单类数据集,要注意的是,我是从0开始标记物体的,如果是从1开始标记物体的,那么0就是background,具体看这篇CSDN中 “注册自己的数据集” 这部分
Detectron2训练自己的数据集(较详细)_qq_29750461的博客-CSDN博客_detectron2训练自己的数据集
默认你已经安装好README.md里所有环境了
默认在你的根目录下有datasets,你已经用ln -s链接数据集过了,我这边取名为coco
另外我这边还下载了预训练权重,loss会损失地快一点,我这边用到的模型是YOLOF_R50_C5_1x,没有用他默认给的detectron2://ImageNetPretrained/MSRA/R-50.pkl
然后开始修改部分代码,以下代码所在行数,根据你使用的模型代码而定,其实你可以修改每一个步骤就执行一遍训练的命令,哪里报错就改哪里。全改完了跑起来还是报错,就看看有没有kennel漏改的地方(学习率,类别数等等)
训练过程:
1、 修改权重路径
到playground/detection/coco/yolof/yolof.res50.C5.1x/config.py Line 6,确保预训练权重名和你下载的一样
WEIGHTS="../../../../../pretrained_models/YOLOF_R50_C5_1x.pth",
2、修改参数
我是单卡,只有一个gpu,原来的模型是在8个gpu上跑的,需要修改batch,steps,warmup等参数设置,跑失败了我再调整参数,调参真的是件很痛苦的事,我也没什么技巧和经验,在这里简单说一下我是按照什么规则调的,具体还要看你们机器
到playground/detection/coco/yolof/yolof.res50.C5.1x/config.py Line 66-67,调整IMS_PER_BATCH=64, IMS_PER_DEVICE=8,原来的batch是64,有8张卡,所以一张卡是8个batch。但是我只有一个卡,我调成了4,再跑不起来,就再以2的倍数调小,2、1。。
IMS_PER_BATCH=4,
IMS_PER_DEVICE=4,
3、修改训练类别
这一部分就是你训练的时候也不会显示报错,但是最后测试的时候会出错的地方,在训练之前就要设置好
到playground/detection/coco/yolof/yolof.res50.C5.1x/config.py Line 24,NUM_CLASSES=80换成你数据集中的类别数,我这里是1
到cvpods/data/datasets/builtin_meta.py Line 7,注释掉原来的COCO_CATEGORIES,设置为你数据集中的种类,我这里只有一个类别waste,并且我第id是从0开始,这要看你的json是怎样设置的了,我的json是从0开始计数类别
COCO_CATEGORIES = [{"color": [220, 20, 60], "isthing": 1, "id": 0, "name": "waste"}
]
3、最后执行运行命令:
pods_train --num-gpus 1
出现以下类似界面不中断就已经跑起来了
训练到迭代5000次的时候代码会保存一个checkpoint,设置的地方在cvpods/configs/base_config.py,Line 140
CHECKPOINT_PERIOD=5000
这里放一个我训练到5000次的截图,可以看到加载了预训练模型后,loss收敛的速度还是较快的
训练结果:
执行命令验证一下模型的精确度:
pods_test --num-gpus 1 MODEL.WEIGHTS output/model_iter_0005000.pth
精度还是差点,因为没训练完 回头跑完
-------------------------------------------- 华丽的分割线 --------------------------------------------
跑完了,最终的效果还是不错的
可能报错的地方:
1、RuntimeError: Default process group has not been initialized, please make sure to call init_process_group
解决方法:到playground/detection/coco/yolof/yolof_base/yolof.py Line 7,下添加以下代码:
dist.init_process_group('gloo', init_method='file:///tmp/somefile', rank=0, world_size=1)
或者把模型中包含SyncBN的地方都换成BN
2、RuntimeError: CUDA out of memory. Tried to allocate 234.00 MiB (GPU 0; 7.79 GiB total capacity; 5.79 GiB already allocated; 108.25 MiB free; 5.83 GiB reserved in total by PyTorch)
解决方法:到playground/detection/coco/yolof/yolof.cspdarknet53.DC5.3x/config.py,把该页面下所有的SyncBN都换成了BN
或者减小batch,或者看看有没有其他进程占用了
3、AssertionError: IMS_PER_BATCH/DEVICE in config file is used for 8 GPUs
解决方法:到cvpods/engine/setup.py Line 84,注释这一句
# AssertionError: IMS_PER_BATCH/DEVICE in config file is used for 8 GPUs
4、AssertionError: Box regression deltas become infinite or NaN!
解决方法:需要修改参数,我认为出现这个错就是降低学习率,出现精度有差距,就加大迭代次数
到你模型的config文件下,我使用的模型对应的py路径是playground/detection/coco/yolof/yolof.res50.C5.1x/config.py
Line 50开始的SOLVER部分,需要注意的几个参数(我自认为需要调整的参数,有其他的可以补充,还有也具体调整多少还是看机器,一个个试看怎样才能跑起来)
参考github issue:Cannot get the AP result in the paper · Issue #37 · megvii-model/YOLOF · GitHub
前面说到”原来的batch是64,有8张卡,所以一张卡是8个batch,但是我只有一个卡,我调成了4“,所以相比之前我缩小到了一半的batch,所以参数都是按照1/2的比例放大缩小,要是太大或太小自己可以再调整,以最终跑起来为主
5、assert len(thing_ids) == 80, len(thing_ids) AssertionError: 1
解决方法:到cvpods/data/datasets/builtin_meta.py下
Line 194:把80换成你的类别数
assert len(thing_ids) == 1, len(thing_ids)
6、执行运行命令没反应
解决方法:之前在playground/detection/coco/yolof/yolof_base/yolof.py Line 7加了下面的代码,
dist.init_process_group('gloo', init_method='file:///tmp/somefile', rank=0, world_size=1)
先注释上面这个代码,注释后再运行,运行报错后再添加(我感觉这个命令是不是设置了之后,只能初始化下一次的程序运行,每次跑都要再初始化一次,有效性只有一次??)
更新:后来我发现程序顺利跑完之后,就不需要注释再运行,可能之前是因为程序意外中断的,导致没有及时销毁吧
更新:后来我又发现再怎么经过这个操作都不行了,我就重启了一下电脑,又可以了,我怀疑是初始化太多次了,而每次结束后都没销毁,所以重启之后就好了,如果注释后再添加不行,就试试重启
以上
YOLOF训练自己的数据集(目标检测,cvpods版本)相关推荐
- 5. 使用PyTorch预先训练的模型执行目标检测
5. 使用PyTorch预先训练的网络执行目标检测 PyTorch是什么? 使用PyTorch训练第一个神经网络 使用PyTorch训练第一个卷积神经网络 使用预训练网络进行PyTorch图像分类 使 ...
- 使用自己的数据训练MobileNet SSD v2目标检测--TensorFlow object detection
使用自己的数据训练MobileNet SSD v2目标检测--TensorFlow object detection 1. 配置 1.1 下载models-1.12.0 2. 准备数据集 3. 配置文 ...
- [数据集][目标检测]篮球数据集VOC格式7398张
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):7398 标注数量(xml文件个数):739 ...
- 大连理工IIAU Lab提出SSLSOD:自监督预训练的RGB-D显著性目标检测模型(AAAI 22)
作者丨Lart 编辑丨极市平台 导读 本文在显著性目标检测任务(SOD)中,首次引入自监督预训练.凭借提出的有效的前置任务(pretext task),在仅使用少量无标签的RGB-D数据进行预训练的情 ...
- 使用opencv训练cascade分类器进行目标检测
文章目录 0.建立训练目录 1.建立正负样本 2.生成正负样本的txt文件 3.生成 pos.vec描述文件 4.训练cascade分类器 5.目标检测 总结 0.建立训练目录 文件夹: train/ ...
- [数据集][VOC][目标检测]河道垃圾水面漂浮物数据集目标检测可用yolo训练-1304张介绍
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1304 标注数量(xml文件个数):130 ...
- [数据集][VOC][目标检测]西瓜数据集目标检测可用yolo训练-1702张介绍
数据集名称:高质量西瓜目标检测数据集 数据集地址:数据集VOC格式目标检测数据集西瓜数据集-1702张-数据集文档类资源-CSDN下载 数据集介绍: 数据集格式:Pascal VOC格式(不包含分割路 ...
- 动动手,用TensorFlow API训练出自己的目标检测模型
TensorFlow内包含了一个强大的物体检测API,我们可以利用这API来训练自己的数据集实现特殊的目标检测. Dat Tran就分享了自己实现可爱的浣熊检测器的经历,在文章中作者把检测器的训练流程 ...
- 实用教程!使用YOLOv3训练自己数据的目标检测
点击我爱计算机视觉标星,更快获取CVML新技术 YOLOv3是当前计算机视觉中最为流行的实时目标检测算法之一. 昨天LearnOpenCV网站博主又发福利,post了一个清晰明了的教程,一步一步示例, ...
最新文章
- LVQ模型Python实现
- 医学图像处理期末复习(三)
- java 更新jlabel_java - 用Java更新绑定的JLabel文本 - 堆栈内存溢出
- N 年沉淀,腾讯这套系统终于开源!
- gcc: weak_alias如何使用
- TMDB 5000电影数据集
- .net 开发工程师 面试题
- Web 全栈大会:万维网之父的数据主权革命
- C++异常处理的问题
- gSkeletonClu: Revealing Density-Based Clustering Structure from the Core-Connected Tree of a Network
- JavaScript 之 调用outlook发邮件功能mailto(附带换行问题)
- Ubantu 安装 Oracle JDK
- 2021年育婴员(五级)复审考试及育婴员(五级)实操考试视频
- HA高可用与负载均衡入门到实战(四)---- 配置nginx防盗链和HTTPS
- ajax nginx 转发 sessionid_百度、京东、网易、腾讯、淘宝等大厂都在用的Web服务器Nginx详解
- Linux-overlay启动挂载代码分析
- 正态分布 概率密度函数PDF
- ubuntu 18.04 三五分钟即可一键安装ROS系统(亲测有效)
- LiveGBS GB28181流媒体服务-产品介绍及相关资源
- 华丽转身——如何从技术岗位走向管理岗位