esh*_*ima 25 machine-learning object-detection tensorflow
在花了几天试图完成这项任务之后,我想分享一下我如何回答这个问题的经验:
如何使用TS对象检测来训练使用我自己的数据集?
esh*_*ima 50
这假设模块已经安装.如果没有,请参阅他们的文档.
放弃
这个答案并不是训练物体检测模块的正确或唯一方法.这只是我分享我的经验以及对我有用的东西.我愿意接受建议,并对此有所了解,因为我一般都是ML的新手.
TL; DR
本答案的每个部分都包含相应的编辑(见下文).阅读完每个部分后,请阅读其编辑内容以进行说明.每个部分都添加了更正和提示.
使用的工具
LabelImg:用于创建PASCAL VOC格式注释的工具.
1.创建自己的PASCAL VOC数据集
PS: 为简单起见,我的答案的文件夹命名惯例遵循Pascal VOC 2012
查看2012年5月的数据集,您会注意到该文件夹具有以下结构
+VOCdevkit
+VOC2012
+Annotations
+ImageSets
+Action
+Layout
+Main
+Segmentation
+JPEGImages
+SegmentationClass
+SegmentationObject
目前,对以下文件夹进行了修改:
注释:这是所有图像的相应XML文件将被放入.使用上面建议的工具来创建注释.不要担心<truncated>和<difficulty>标记,因为它们将被训练和eval二进制文件忽略.
JPEGImages:实际图像的位置.确保它们是JPEG类型,因为这是使用其提供的脚本创建TFRecords时当前支持的内容.
ImageSets-> Main:这只包含文本文件.对于每个类,都存在相应的 train.txt, trainval.txt和 val.txt.以下是VOC 2012文件夹中 aeroplane_train.txt内容的示例
2008_000008 -1
2008_000015 -1
2008_000019 -1
2008_000023 -1
2008_000028 -1
2008_000033 1
Run Code Online (Sandbox Code Playgroud)
该结构基本上是图像名称,后跟一个布尔值,表示相应的对象是否存在于该图像中.例如,图像2008_000008不包含飞机,因此标记为-1但图像2008_000033标记为-1.
我写了一个小的Python脚本来生成这些文本文件.只需遍历图像名称并在它们旁边分配1或-1即可存在对象.我通过改变图像名称在我的文本文件中添加了一些随机性.
该{}类名_val.txt文件由的测试验证数据集.将此视为培训期间的测试数据.您希望将数据集划分为训练和验证.更多信息可以在这里找到.这些文件的格式类似于培训的格式.
此时,您的文件夹结构应该是
+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生成标签图
准备好数据集后,我们需要创建相应的标签贴图.导航到models/object_detection/data并打开pascal_label_map.pbtxt.
此文件包含一个JSON,用于为每个项目分配ID和名称.对此文件进行修改以反映您想要的对象.
2.生成TFRecords
如果您查看他们的代码,尤其是这一行,他们只会明确地获取aeroplane_train.txt.对于古玩人士来说,这就是原因.将此文件名更改为任何类训练文本文件.
确保VOCdevkit位于models/object_detection中,然后您可以继续生成TFRecords.
如果您遇到任何问题,请先查看他们的代码.这是自我解释和有据可查的.
3.管道配置
该指令应该是自我解释来弥补这一部分.样本配置可以在object_detection/samples/configs中找到.
对于那些希望像我一样从头开始训练的人,只需确保删除fine_tune_checkpoint和from_detection_checkpoint节点.这是我的配置文件的样子供参考.
从这里开始,您可以继续学习本教程并运行培训过程.
4.可视化
确保与培训并行运行eval,以便能够可视化学习过程.引用Jonathan Huang的话
最好的方法是运行eval.py二进制文件.我们通常将此二进制文件与训练并行运行,将其指向保存正在训练的检查点的目录.eval.py二进制文件会将日志写入
eval_dir您指定的日志,然后您可以使用Tensorboard指向该日志.您希望看到mAP在最初的几个小时内"解除",然后您希望看到它何时收敛.如果不看这些图表,你需要多少步骤,这很难说清楚.
编辑I(17年7月28日):
我从没想过我的回应得到了这么多的关注,所以我决定回来看看.
工具
对于我的Apple用户,您实际上可以使用RectLabel进行注释.
帕斯卡VOC
在挖掘之后,我终于意识到trainval.txt实际上是训练和验证数据集的结合.
请查看他们的官方开发工具包,以便更好地理解格式.
标签图生成
在我写作时,ID 0表示none_of_the_above.建议您的ID从1开始.
想象
运行评估并将张量板指向您的Eval目录后,它将显示每个类别的mAP以及每个类别的性能.这很好,但我喜欢看到我的训练数据与Eval并行.
为此,请在其他端口上运行tensorboard并将其指向您的火车目录
tensorboard --logdir=${PATH_TO_TRAIN} --port=${DESIRED_NUMBER}
Run Code Online (Sandbox Code Playgroud)
Dat*_*ran 16
我在Medium上写了一篇关于我的经验的博客文章以及我如何使用Tensorflow在我自己的数据集上训练一个物体探测器(特别是它是一个浣熊探测器).这可能对其他人有用,并且与eshirima的答案互补.
| 归档时间: |
|
| 查看次数: |
17230 次 |
| 最近记录: |