Advertisement

Faster-RCNN训练自己的数据集

阅读量:

就目前我在了解到的资料来看,训练RCNN系列,一般有两种思路:

  • 优化CNN的工程架构,并使其能够适应特定的数据集需求。
    • 将原始数据格式按照VOC2007的标准重新组织成统一的数据集格式。

从工作量来看,无疑后者更容易一些,本文的思路也是如此。

首先是对图片命名格式的规定,在实际操作中我们仍需遵循一定的命名规范。尽管从理论上讲,图片名称不影响训练过程。然而,在实际应用中由于在训练过程中程序会从txt文件中提取图片名称,并基于此进行后续处理工作。因此为了确保数据集的一致性与可管理性 我们建议对图像文件进行批量且有规律的名字命名

我的数据集采用 JPG 格式,并与 Pascal VOC 2007 的数据集结构相似。为了方便处理,请将所有图片组织在一个统一的文件夹内,并确保文件路径正确无误。完成上述操作后,在 Python 环境中执行相应的代码流程即可完成整个流程。

代码见文末

完成命名后,则可以直接进行标注。我采用了基于网络的标注系统,在Windows7环境下表现稳定。遗憾的是该系统未公开提供源代码,因此无法深入研究或与其他用户交流互动。

复制代码
 * 标注工具得到了一份标注的集合的txt文件,记录图片和标注信息
这里写图片描述

这些属于必要准备步骤。这些完成后即可开始生成VOC数据集。总体而言,在VOC数据集中每个样本都包含图像像素数据以及相应的标注文件。具体来说:

  1. 标签信息通常包括类别标签和位置信息。
  2. 每个样本通常包括图像像素数据以及相应的标注文件。
复制代码
    ---VOC2007

    ------Annotations
    ------ImagesSet
    ---------Main
    ------JPEGImages
  • Annotations中存放的是.xml文件,文件中记录描述每张图片的信息
这里写图片描述

在ImagesSet/Main目录中存储了多个txt文件,在每个(txt)文件中都包含了用于训练与验证的所需数据(即包含图片名称的集合)。

这里写图片描述
复制代码
 * **JPEGImages中存放的是数据集中的图片**

关于VOC数据集格式,不清楚的可以下载一份VOC2007数据集,看一下就明白了。

在明确数据集所包含的具体内容后, 即可开始制作数据集. 接下来需要处理的是Annotations目录下的XML文件. 我参考了一些公开可用的代码作为基础, 并自行编写了一段高效运行的Python脚本. 通过读取TXT文本并遍历相关图片即可完成该步骤.

代码见文末

由于其中仅用于存储图像,在生成Annotations的过程中,在生成Annotations的过程中,我们将其每张图像复制到该目录中,并最终实现了这两个目录的所有内容的同步。

注意

提示

  1. 制作Main中的四个txt文件

由于txt内容相当于图片名字, 因此可以选择全面扫描JPEGImages或Annotations中的项目, 而我已经完成了对该注释文件的处理.

test.txt可被定义为测试数据集,在整体数据集中占比约一半;
trainval则包含了用于训练和验证的数据样本;
其中一部分被指定为训练集(train.txt),占总样本量的大约25%;
剩余约50%的数据则用于验证过程中的评估。

代码见文末

通过上述步骤完成了VOC2007数据集的制作。若需进行faster-RCNN模型的训练,请在该系统中相应地调整相关参数设置。请参考:

该GitHub仓库提供基于自己收集的数据集进行训练的Faster-RCNN Python实现版

由于在标注过程中可能会出现目标框过于接近边缘或者操作者疏忽的情况,在训练阶段可能导致数据出现问题。

assert(boxes[:,2]>=boxes[:,0]).all()

这行代码报错。(反正我中招了。。。)

原因和解决办法看这里

如何在Faster-R-CNN的训练阶段中使用assert语句来验证boxes[:,2]>=boxes[:,0]这一条件成立的问题所在

亲测前两步即可解决

此份即是简单的Faster-RCNN训练自己数据集的教程。全部涉及的代码均为Python编写。感谢参考者提供的两篇参考资料!

全部评论 (0)

还没有任何评论哟~