流程
了解过yolov3的模型结构了(但是还没去看v1,v2,尬)
现在我准备用自己的数据集进行一个训练,看看能不能达到想要的预期效果。
流程:
1、搜集数据集。
2、数据集标注和分类
3、进行训练
4、得到权重进行预测
1、搜集数据集
本来脑洞大开,想做一些不一样的检测,结果,,不知道去哪里搞那么大量的数据集。
最后,最为初次入门,我选择了笔这个物品,作为我的数据集内容。
伙伴们淘宝搜寻了两百张的各类笔的数据集
比如这样:
再比如这样:
如果你们也想搞这个训练,自己上淘宝卖家秀,买家秀,一顿copy。我的伙伴们也花了不少时间。。。
2、数据集标注和分类
当然我们初始的数据集是不能直接丢入网络中直接训练的。我们需要将它进行一个规范。这个规范呢不同的设计者,可以要求不同的规范。
之前有说过了,
我使用的是github上yolov3
这个代码,要我们标注完是一个img+xml标签VOC类型的文件。
我们使用一个目标标注软件labelimg进行一个生成。
关于labelimg的使用和教程呢,参考这位博主的windows下使用labelImg标注图像
就可以完成VOC数据集准备工作咯。。
接下来就是网络需要的标签生成(我们用软件生成的是xml标签文件。我们要将它转化为网络可读的txt文本文件,接下来会讲)和数据集分类了(分为训练集和测试集)
我们将标注好的文件要分为两个文件夹。
将图片文件放在JPEGImages中
xml标签文件放在Annotations中
就放在代码中VOCdevkit下的VOC2007下
下一步,我们查看ImageSets下main里是否有
test.txt,train.txt,trainval.txt,val.txt这四个文本。有的话我们要删除,因为我们要生成我们自己的
删除完之后,我们运行VOC2007目录下的
生成我们自己的train.txt。因为这个代码里只写了生成训练集列表。所以只有在生成的train.txt中有我们需要的训练集序列号。这样我们就能读取我们的训练图片和标签了。但是还不够,我们还需要生成图片对应标签的一个路径。
下一步,我们运行根目录下的
文件生成我们图片路径+标签+种类。
我们要注意的是!!
在这步生成之前,我们要修改代码中的classes,改成我们用到的类别,就两个地方!!!
第一个地方:
就在voc2yolo3.py代码中
这里我用的是一个种类pen。
那我就改成
classes = ["pen"]
第二个地方:
在utils下的config.py代码中,
我们要将classes改为我们定义的类的个数。
运行之后我们就可以得到2007_train.txt文件了。
3、进行训练
一切准备工作做好之后,
我们可以开始训练了
我们运行train.py代码。
等到完成之后,权重文件将会保存在logs文件夹下,使用权重时,我们可以选取loss比较低的使用。
之后我们就可以利用训练好的权重文件进行预测了。
4、得到权重进行预测
预测代码在yolo.py代码中,predict.py只是做了一个接口,让我们输入图片输出label的一个工作。
在yolo.py中,我们要修改两个地方,分别为
model_path 和 classes_path两个路径。
model_path 就是我们生成的权重文件路径。在logs下。
classes_path 我们需要建立一个我们自己类别的txt
然后将我们的类名写进去就可以了。
然后将这个文档的路径加到classes_path中就好了。
修改完之后,我们就可以运行predict.py文件,进行我们数据的预测了。
输入我们图片路径。
然后就会输出检测图咯。。
因为我之前做的。权重文件都删了。。所以这里就不放预测图了。。。
总之训练完成了,成功实现pen预测。。。。。