使用SSD mobilenet训练自己的数据集

1、首先配置好环境,我是用的的torch1.7.1,和torchvision0.8.2版本,可以直接根据作者给出的requirements.txt文件进行其他安装包的配置

2、下载代码lufficc-SSD
PS:我是根据某乎上面一个博主进行代码调试的,这里给出链接SSD训练自己数据

3、先放置数据集,按照这种方式放置的话,代码里面其他位置都不需要改变了
看另外一个博主说的其实VOC2012里面的内容就是VOC2007直接复制过去的,不过我是在训练之后才看到他的博文,所以我是将自己的数据集一大半放VOC2007,小部分放的VOC2012的。annotations中放置Pascal voc类型的xml文件
使用SSD mobilenet训练自己的数据集_第1张图片
4、打开ssd/config/defaults.py文件,以及configs文件夹下你需要的yaml文件,在这两个里面更改num_classes,注意这里要改成自己的数据类别数+1!!!!这个1代表背景

5、打开ssd/data/datasets/,在下面找到coco.py或者voc.py,将里面的列别改成自己的类别。知乎那个博主说的加载预训练模型的问题我没有遇到,因为我没有使用预训练模型,在defaults.py文件中将加载预训练模型设为False即可。
voc.py的69行class_name = obj.find(‘name’).text.lower().strip(),所以我们的数据类别一定要小写才行

6、defaults.py和.yaml文件中,yaml的优先级更高,yaml中没有的到defaults里面找,使用哪个backbone,输入图片大小,特征图,默认框的生成配置,训练配置,batch_size等等

7、更换backbone,在defaults.py文件中修改,我自己使用的是mobilenet的backbone,所以我这里改为

_C.MODEL.BACKBONE.NAME = 'mobilenet_v2'

在改完这里之后,设置自己需要的特征图大小,我设置的是512,在yaml文件中修改这个值即可。这里不能简单的改个名字,需要对应去你要的backbone的py文件中查看你需要网络的名字,再写上去

8、更改defaults.py中其他参数。最简单直接的方法就是对应yaml文件中的参数修改,至于为什么要这么修改我这里就不写了,详细的请看上面链接贴出的内容,那个博主写的很好
其实在运行代码的时候我发现改的这些好像没有怎么用到,因为上面说了都是优先ymal文件中的内容,所以输出的都是yaml文件中的内容,不放心的话也可以改一下啊
使用SSD mobilenet训练自己的数据集_第2张图片
9、在训练之前在train.py中先指定–config-file,我是使用的configs/mobilenet_v2_ssd320_voc0712.yaml,看自己需要进行修改,然后就可以开始训练
使用SSD mobilenet训练自己的数据集_第3张图片
10、我还遇到了问题 with open(cfg_filename, “r”) as f:
FileNotFoundError: [Errno 2] No such file or directory: ‘’,后面发现是我的yaml文件中写了中文注释,读取不出来,把中文删掉就可以了

11、训练中我没有看到怎么设置epoch,但是在yaml文件中设置了一个MAX_ITER=120000,在这里设置训练的次数,同时默认2500次进行以此评估,这个也是看自己需求进行修改

12、在训练到45000次的时候突然中断了,我这里还没有弄清怎么resume,等我找到方法继续更新…

+++++++++++++++++++++++++++++++++++++++++++++++++++++++
好了,看了这么久终于看出点眉目了,根本就不用再哪里设置怎么重新训练,直接点运行就会接着上一次的继续训练了。。。。。。。

++++++++++++++++++++++++++++++++++++++++++++++++++++++
我在跑完120000个iter之后,准备再利用我刚刚生成的模型进行训练,然后将defaults.py中的_C.MODEL.BACKBONE.PRETRAINED设置为True,然后我在train.py文件中进行断点调试,
使用SSD mobilenet训练自己的数据集_第4张图片
从这里看到我需要将我自己的模型放到C盘对应的这个文件夹下面,然后将我自己的名字改成–mobilenet_v2-b0353104.pth,这样的话就可以直接用我自己训练好的权重进行训练了,不需要在代码中更改其他,如果自己有其他想改动的地方也可以调整。
使用SSD mobilenet训练自己的数据集_第5张图片

你可能感兴趣的:(训练自己的数据集,python,深度学习,计算机视觉)