当前位置:网站首页>利用mindspore下面mindzoo里面的yolov3-darknet53进行目标识别,模型训练不收敛

利用mindspore下面mindzoo里面的yolov3-darknet53进行目标识别,模型训练不收敛

2022-08-11 08:52:00 小乐快乐

Modelzoo中yolov3-darknet53代码(mindspore1.1源码中的modelzoo)。

运行环境:mindspore-gpu1.4.1  docker,python3.7.5

【操作步骤&问题现象】

1、数据方面:原始数据是公开比赛数据xinye,标注标准是coco2014格式。数据的组织形式是按照yolov3-darknet53. 其中训练数据1300张,大小为960*720(width*height).原始数据图片和标注可视化后形式如下:

同时下载了

darknet53.conv.74

并用自带的工具进行格式转换生成了backbone_darknet53.ckpt.

2、训练过程如下:

尝试了对两种形式的数据进行训练:

A。直接用原始数据,没有做任何图片放缩。因为源码里面已经对图片做了416*416的切割。运行脚本run_distribute_train_gpu.sh 分别以lr=0.001,epoch=320,和lr=0.0003,epoch=2000进行训练,前者loss减少到170后者loss减少到127就不动了。模型不收敛,从而无法进行后处理。(加载了预训练模型)

B。对原始数据进行加工,把960*720的图片放缩到416*416(宽和高按照不同比例放缩),标注文件坐标进行相应放缩。运行脚本run_distribute_train_gpu.sh 分别以lr=0.001,epoch=320,和lr=0.0003,epoch=2000进行训练,前者loss减少到180左右后者loss减少到120左右就不动了。模型不收敛,从而无法进行后处理。(加载了预训练模型)

3、为了验证是不是数据本身不收敛。组内其他人员用基于pytorch的yolo3对同样的原始数据进行训练(源码为

https://github.com/ultralytics/yolov3,

2.7k),模型收敛,loss减少到0.0..一下,模型收敛,从而后处理很正常。

我的问题是:是我的数据处理不正常,还是图片没有增强,还是预训练模型处理不正确,还是要调节其他参数(比赛数据有很多小物体)。应该向哪个方向改进。pytorch组内

对于多个物体的场景可以通过配置文件中配置适当参数,yolov3-darknet53中没看到相应接口。能否给下宝贵意见,多谢!

【截图信息】

日志

 

1. 针对小目标的检测,通常是通过修改anchor大小来匹配,你可以通过default_config.yaml里面的anchor_scales配置来进行修改。通常这个anchor_scales,是通过在训练集上做聚类来得到的。也可以考虑根据感觉来手动调整。

如果是希望通过修改模型结构来适配小目标,那就只能手动修改代码了,配置文件中没有对应的选项。

2. 检测模型通常对超参比较敏感,如果不收敛,可以考虑加大一下调参的范围,比如lr扩大10倍到0.01的级别。

另外,不知道你的配置修改是在什么地方改的,如果是在yaml文件里改的,有可能会被bash文件里的配置覆盖。

同时,由于可选cosine等周期学习率,改超参配置的时候,还要注意一下bash文件里的T_Max选项,是用来控制周期长度的,如果是希望学习率单调下降,通常配置和总epoch数一致。

3. 模型不收敛的问题,通常是由于梯度异常导致的训练,会直接更新出一个很离谱的权重。你可以查看一下训练中间状态的权重文件,看是否存在一些极大的异常值,比如绝对值有好几十亿这种,如果有的话,可以考虑加一些梯度后处理或者溢出检测机制来避免使用异常梯度来更新权重。

原网站

版权声明
本文为[小乐快乐]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45666880/article/details/126270270