Fster-RCNN 训练自己的数据集

训练自己的数据集

本人研究的方向是乳腺肿块的目标检测。目前已经在自己的电脑上搭建出Faster-RCNN的环境以及训练出自己的数据集。
本人电脑环境:Windows10+tensorflow 1.13+Python3.5
训练自己的数据集首先要将代码中的类别数进行修改。源码中的类别是21类别(20个物体类别+1个背景类)改成你的类别。比如我的是肿块(tumor)。那么类别就应该是tumor+background两类。对应改的代码位置很多博主都有教程。对应着改就行了。改完后就开始圈画出你的数据集了。在这里我想推荐大家一个软件。很多博主和论文里都是用的LabelImage标注软件。但是似乎对windows环境不太友好需要安装很多包。这里我推荐一款精灵标注助手。免费而且用法也很简单。安装就百度搜索它的名字即可。标注完成后会有一个导出格式。选择PASCALVOC。
将生成的XML文件放置在*
Faster-RCNN tumour anchor\data\VOCDevkit2007\VOC2007\Annotations下。
将图片放在
Faster-RCNN tumour anchor\data\VOCDevkit2007\VOC2007\JPEGImages下。
最后你需要在Faster-RCNN tumour anchor\data\VOCDevkit2007\VOC2007\ImageSets\Main路径下寻找一个trainval.txt文件。Windows环境下你只需要修改这个文件就可以。这个txt文件存放的是你训练集所用到的图片名称。也就是你JPEGImages下所有图片的名称。在这里给大家一份代码。用于生成一系列类似“000XXX”的一系列文件名。注意图片文件格式必须这样!必须是"000XXX"
Fster-RCNN 训练自己的数据集_第1张图片
生成的txt文件如下图
Fster-RCNN 训练自己的数据集_第2张图片
这里提醒一下大家。一定要检查下txt文件最后一行是否是空格!(不过按我的代码来是不会有空格的,但是博主刚开始不是用代码。手工弄的。这个坑郁闷了博主一天)如果是空格会导致你训练的时候报错".jpeg Path Not Found"。
然后你要去将几个文件夹中的文件删除。不然程序会报错
(1)E:\Faster-RCNN tumour\default\voc_2007_trainval\default
该文件夹下存放的是模型训练完成后保存的权重偏置等数据。假如你已经训练了PASCALVOC2007数据集。那么会生成几个针对该数据集得到的权重以及偏置。训练自己的数据的话你肯定要删。
(2)E:\Faster-RCNN tumour\data\cache
该文件夹下存放的是在第一次运行train.py程序会对读取的数据信息生成pkl文件并保存。如果你第二次读取相同的数据那么我们直接读取pkl文件就可以。加快了读取数据的速度。假如你已经训练了PASCALVOC2007数据集。那么它会生成一个针对读取PASCALVOC2007的数据集的pkl文件。训练自己的数据的话肯定要删除。
完成后你就可以运行train.py了。但是你得到的只是每次迭代所产生的四个LOSS值。分别是RPN层的二分类。RPN层第一次边框回归。最终的物体分类LOSS。最终的边框回归LOSS。如果想看到最终圈画结果的话你需要建立一个文件夹。对应路径如下
E:\Faster-RCNN tumour\output\vgg16\voc_2007_trainval+voc_2012_trainval\default
将你刚才训练后得到的权重偏置的pkl文件复制进去。这个pkl文件在你训练完成后保存至
E:\Faster-RCNN tumour\default\voc_2007_trainval\default下。你只需要复制最终训练完成后的四个pkl文件就可以。如图:
Fster-RCNN 训练自己的数据集_第3张图片
同时你需要将你测试集图片放在
E:\Faster-RCNN tumour\data\demo*下。同时修改demo.py中的物体分类个数。同样改成你的类别个数+1。改的位置很多博主也写了。完成到这里。运行的话。就可以在pycharm中看到模型为我们圈画的结果了!但是如果你想将这些图片保存至文件夹的话。博主也附上一段代码。可以将测试集图像保存至指定文件夹。
Fster-RCNN 训练自己的数据集_第4张图片
至此。就是如何将自己的数据集运用到Faster-RCNN的全过程了。网上关于Windows环境下TF版的Faster-RCNN训练自己的数据集相关资料也是比较少的。博主也是研究了很久后写出来的一篇文章。如果有不对的地方欢迎大家指点。大家共同进步。谢谢大家

你可能感兴趣的:(Fster-RCNN 训练自己的数据集)