在自己的数据集上训练 Tensorflow 对象检测

2024-01-03

在花了几天时间尝试完成这项任务之后,我想分享一下我如何回答这个问题的经验:

我该如何使用TS 物体检测 https://github.com/tensorflow/models/tree/master/research/object_detection使用我自己的数据集进行训练?


这假设该模块已经安装。请参考他们的文档 https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md if not.

免责声明

这个答案并不意味着right or only训练目标检测模块的方法。这只是我分享我的经验和对我有用的东西。我愿意接受建议并了解更多相关信息,因为我对机器学习总体来说还是新手。

TL;DR

  1. 创建您自己的 PASCAL VOC 格式数据集
  2. 从中生成 TFRecords
  3. 配置管道
  4. 可视化

该答案的每个部分都包含相应的编辑(见下文)。阅读完每个部分后,请阅读其编辑部分以获取说明。为每个部分添加了更正和提示。

使用的工具

LabelImg https://github.com/tzutalin/labelImg:创建PASCAL VOC格式注释的工具。

1. 创建您自己的 PASCAL VOC 数据集

PS: 为简单起见,我的答案的文件夹命名约定遵循 Pascal VOC 2012

一窥2012 年 5 月数据集 http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar,您会注意到该文件夹​​具有以下结构

+VOCdevkit +VOC2012 +Annotations +ImageSets +Action +Layout +Main +Segmentation +JPEGImages +SegmentationClass +SegmentationObject

暂时对以下文件夹进行了修改:

注释:这是所有图像对应的 XML 文件将被放置的地方。使用上面建议的工具来创建注释。不要担心<truncated> and <difficulty>标签,因为它们将被训练和评估二进制文件忽略。

JPEG图像:实际图像的位置。确保它们的类型为 JPEG,因为这是当前支持的类型,以便使用其提供的脚本创建 TFRecord。

图像集->主:这仅由文本文件组成。对于每个类,都有一个对应的火车.txt, 训练值.txt and val.txt。以下是该内容的示例飞机_火车.txt在 VOC 2012 文件夹中

2008_000008 -1
2008_000015 -1
2008_000019 -1
2008_000023 -1
2008_000028 -1
2008_000033  1

该结构基本上是图像名称,后跟一个布尔值,表示相应的对象是否存在于该图像中。以图像为例2008_000008不包含飞机,因此标有-1但是图像2008_000033 does.

我编写了一个小的 Python 脚本来生成这些文本文件。只需迭代图像名称并在其旁边分配 1 或 -1 表示对象存在。我通过打乱图像名称在文本文件中添加了一些随机性。

The {类名}_val.txt文件由 testing 验证数据集组成。将此视为训练期间的测试数据。您希望将数据集分为训练和验证。更多信息可以找到here https://stats.stackexchange.com/questions/19048/what-is-the-difference-between-test-set-and-validation-set。这些文件的格式与训练的格式类似。

此时,您的文件夹结构应该是

+VOCdevkit +VOC2012 +Annotations --(for each image, generated annotation) +ImageSets +Main --(for each class, generated *classname*_train.txt and *classname*_val.txt) +JPEGImages --(a bunch of JPEG images)


1.1 生成标签图

准备好数据集后,我们需要创建相应的标签图。 导航模型/对象检测/数据并打开pascal_label_map.pbtxt.

该文件由一个 JSON 组成,该 JSON 为每个项目分配 ID 和名称。修改此文件以反映您想要的对象。


2. 生成TFRecord

如果你查看他们的代码,尤其是这个line https://github.com/tensorflow/models/blob/master/research/object_detection/create_pascal_tf_record.py#L162,他们明确地抓住了飞机_火车.txt仅有的。对于好奇心强的人来说,这就是为什么 https://stackoverflow.com/questions/44891732/create-pascal-voc-for-tensorflow-object-detection-api/44937455#44937455。将此文件名更改为您的任何班级列车文本文件。

确保VOC开发套件在里面模型/物体检测然后你就可以继续生成 TFRecord https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/preparing_inputs.md#generating-the-pascal-voc-tfrecord-files.

如果遇到任何问题,请先查看他们的代码。它是不言自明的并且有据可查。


3. 管道配置

The 指示 https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/configuring_jobs.md应该是不言自明的来涵盖这一部分。示例配置可以在以下位置找到对象检测/样本/配置 https://github.com/tensorflow/models/tree/master/research/object_detection/samples/configs.

对于那些像我一样想要从头开始训练的人,只需确保删除fine_tune_checkpoint and from_detection_checkpoint nodes. Here's https://pastebin.com/z7a2G2Dq我的配置文件是什么样子以供参考。

从这里开始,您可以继续tutorial https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_locally.md#running-the-training-job并运行训练过程。


4. 可视化

确保与训练并行运行评估,以便能够可视化学习过程。去引用乔纳森·黄 https://github.com/tensorflow/models/issues/1877

最好的方法是运行 eval.py 二进制文件。我们通常运行这个 与训练并行的二进制文件,将其指向保存的目录 正在训练的检查点。 eval.py 二进制文件将写入 记录到eval_dir您指定然后可以指向的 与张量板。

您希望看到 mAP 在最初几个小时内“起飞”, 然后你想看看它何时收敛。很难说没有 看看这些图你需要多少步。


编辑一(2017 年 7 月 28 日):

我没想到我的回答会受到如此多的关注,所以我决定回来回顾一下。

Tools

对于我的苹果用户来说,你实际上可以使用矩形标签 https://itunes.apple.com/us/app/rectlabel-labeling-images-for-object-detection/id1210181730?mt=12用于注释。

帕斯卡VOC

经过一番挖掘,我终于意识到训练值.txt实际上是训练和验证数据集的联合。

请看看他们的官方开发套件 https://pjreddie.com/media/files/VOC2012_doc.pdf更好地理解格式。

标签图生成

在我撰写本文时,ID 0 代表none_of_the_above。建议您的 ID 从 1 开始。

可视化

运行评估并将张量板定向到 Eval 目录后,它将向您显示每个类别的 mAP 以及每个类别的性能。这很好,但我喜欢同时看到我的训练数据和 Eval。

为此,请在不同的端口上运行tensorboard并将其指向您的火车目录

tensorboard --logdir=${PATH_TO_TRAIN} --port=${DESIRED_NUMBER}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在自己的数据集上训练 Tensorflow 对象检测 的相关文章

随机推荐