系列文章目录
SSD-Pytorch环境搭建(一)
SSD-Pytorch环境搭建(二)
文章目录
- 系列文章目录
- 前言
- 一、训练步骤
- 1、本文使用VOC格式进行训练。
- 2、训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。
- 3、训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。
- 4、在训练前利用voc2ssd.py文件生成对应的txt。
- 5、再运行根目录下的voc_annotation.py,运行前需要将classes改成你自己的classes。
- 6、就会生成对应的2007_train.txt,每一行对应其图片位置及其真实框的位置。
- 7、在训练前需要修改model_data里面的voc_classes.txt文件,需要将classes改成你自己的classes。
- 8、修改utils/config.py里面的NUM_CLASSES与需要训练的种类的个数相同。运行train.py即可开始训练。
- 训练
- 1、将ssd.py中model_path改为训练好的模型
- 2、在训练前利用voc2ssd.py文件生成对应的txt并替换在classes_path上(已改好)
- 3、运行predict.py,输入要预测的照片的路径即可(可把照片直接放在根目录下,测试时直接输入图片名称)
- mAP运行
- 先依次运行get_gt_txt.py和get_dr_txt.py会生成input文件,里面会有三个文件
- 问题类
- 1.如果出现UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.warnings.warn(warning.format(ret))
- 2.如果运行mAP的时候出现MatplotlibDeprecationWarning:The set_window_title function was deprecated in Matplotlib 3.4 and will be removed two minor releases later. Use manager.set_window_title or GUI-specific methods instead. fig.canvas.set_window_title(window_title)
- 总结
前言
训练模型需要进行相关的数据集准备,对训练操作以及相关修改的事项需要进行熟悉了解,当然还有解决原项目在下载后存在运行BUG问题,添加连续预测,map数值、真实值等图表显示
【注:labelimg 是一个标注数据集软件】
一、训练步骤
1、本文使用VOC格式进行训练。
1.1.用labelme对图片进行标记,使用长方形框把需要识别部分框起来,对同一类的物体标记名统一命名保存,标记名称的要求是最好没有空格。
图一
图二
(注:把同一标记.json文件和原图片保存在同一文件夹可以方便后续查看是否标记和更改标记内容);
1.2.把.json文件转化为voc格式.xml的方法有许多种,如可以在labelme设置进行直接转换,可以在网上搜.json转voc格式网上转换(注:缺点是单一文件上传,复杂粘贴使用速度非常慢),可以下载相关的.json转换voc格式软件,也可以直接使用代码进行批量的转换(方便快捷).(这里使用的是代码转.json文件为.xml文件:,转https://blog.csdn.net/weixin_44671418/article/details/110975655)
2、训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。
2.1.把.json文件转换为.xml的文件复制到VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。.xml文件格式大致为:
图三
图四 图五
可能为(注:由于转换的形式不同,可能会出现标记文件命名不同的情况,需要注意目标D/difficult的大小写,需要找到voc_annotation.py文件更改相应的D/difficult大小写,而有些.josn转.xml会出现没有目标值的情况)
3、训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。
4、在训练前利用voc2ssd.py文件生成对应的txt。
4.1.运行voc2ssd.py会主动生成相应图片的索引
4.2.trainval_percent=0.9为随机选择测试值数量为总体训练值的10%,需要更多的测试值可以进行更改,如果有自己的测试值也可以直接改为1.0,不采用随机挑选测试指.
5、再运行根目录下的voc_annotation.py,运行前需要将classes改成你自己的classes。
5.1.如果进行多类训练可以改成类似图片这样的
图六
6、就会生成对应的2007_train.txt,每一行对应其图片位置及其真实框的位置。
6.1.图片的名字应该需要为全数字的形式才能够识别,最好的是以年月+其他数字的形式,这里采用的就是年月+类别+编号的形式
7、在训练前需要修改model_data里面的voc_classes.txt文件,需要将classes改成你自己的classes。
7.1.如果有新的类加入,这里也是要把新的类的名字加入进去.
8、修改utils/config.py里面的NUM_CLASSES与需要训练的种类的个数相同。运行train.py即可开始训练。
8.1.该类别个数要求为背景板+需要训练的种类的个数(即1+N)
训练
1、将ssd.py中model_path改为训练好的模型
图七
1.1.训练出来的模型会出现在logs/中,训练出来的模型会有两类
需要选择的模型是Epoch—这样的样式的模型才是有效果的,然后把模型放到model_data/中,模型名字修改为所需要的名字并在ssd.py中的"model_path":‘model_data/xxxxxx(修改为模型名字)’
1.2.confidence置信度,比如confidence:0.2就是指预测的时候把0.2以下的相似度的框框省略掉,留下0.2以上相似度的预测框
2、在训练前利用voc2ssd.py文件生成对应的txt并替换在classes_path上(已改好)
3、运行predict.py,输入要预测的照片的路径即可(可把照片直接放在根目录下,测试时直接输入图片名称)
3.1.由于程序中增加了批量预测的代码,所以如果使用批量预测的代码就只需要运行便会对上面随机选择的图片进行预测,在imgage_results中可以查看预测结果
3.2.模型ssd.py
mAP运行
先依次运行get_gt_txt.py和get_dr_txt.py会生成input文件,里面会有三个文件
图八
detection-results:指的是预测结果的txt.
ground-truth:指的是真实框的txt.
image-optional:指的是图片,有这个可以可视化,但是这个可以没有.
(依次运行主目录下的get_dr_txt.py和get_gt_txt.py获得预测框对应的txt和真实框对应的txt).然后运行get_map.py文件会生成mAP相应的数据存放在生成的result文件中
问题类
1.如果出现UserWarning: size_average and reduce args will be deprecated, please use reduction=‘sum’ instead.warnings.warn(warning.format(ret))
这大概是因为在新的pytorch版本中,size_average 和reduce 这两个参数,都将不再支持,需要在ssd_training.py中找到 loss_c = F.cross_entropy(conf_p, targets_weighted, size_average=False) 改为loss_c = F.cross_entropy(conf_p, targets_weighted, reduction=‘sum’),在这程序中,需要把程序改为图中横线所示的代码。
图九
2.如果运行mAP的时候出现MatplotlibDeprecationWarning:The set_window_title function was deprecated in Matplotlib 3.4 and will be removed two minor releases later. Use manager.set_window_title or GUI-specific methods instead. fig.canvas.set_window_title(window_title)
可以尝试在get_map.py中将fig.canvas.set_window_title(window_title)修改为fig.canvas.manager.set_window_title(window_title)
总结
进行了关于VOC格式的数据集的建立和训练步骤、还有相关问题类的总结讲述,希望对你们有所帮助。
如果有需要也可以对数据集的制作总结和修改后的项目上传