【发布时间】:2018-01-28 20:20:20
【问题描述】:
我正在使用 fast-RCNN 模型创建一个 11 类对象检测器,该模型在 image-resizer 标签中设置为 300x400 的最大尺寸。这是由于 GPU 是 1050 Ti、4Gb 版本,所以如果我再高一点就会弹出 CUDA OOM 错误,所以我有大约 3800-3900 Mb 的模型运行时训练内存。
我已经按照erishima's 的步骤,用 Pet 的脚本和Dati Tran's 对它们进行了变异,以生成 TFRecord 文件。
步骤如下:
- 使用 labelImg 为类别创建标签。
- 使用 labelImg 中的 name 字段来注释图像文件的类。
- 创建一个 CSV 文件并从 XML 文件中提取文件名、类、xmin、ymin、xmax、ymax。 (自定义脚本)
- 从主 CSV 文件创建训练和测试/评估 CSV。
- 生成要输入到配置文件中的 TFRecord 文件。训练和测试。(根据需要修改了 Dati Tran 的脚本)
- 修改 faster_rcnn_config 而不触及超参数。
- 创建了一个与类名对应的 label_map.pbtxt 文件。如与此主题相关的许多其他答案中所述,从 1 开始。
- 开始通过所述方法训练模型。
类的数据集是自定义的,图像/类从 2500 到 300 不等。数据集没有定义对象的方向和在图像中检测的难度,即使对象的每个可能角度都存在于那些图片。
当我在 217k 步后训练到 0.002 的损失值时出现的问题是,无论我在视频或图像上运行检测器,单个类都包含所有其他类的对象。我没有尝试运行 eval.py 脚本,因为这在此设置上花费了太长时间,而且我无法真正看到这些类的 mAP,但我认为它应该是冗余信息,因为问题应该在数据集中设置准备方法或数据集本身。
当重新训练 60k 步时,问题仍然存在,但另一个类包围了所有其他类。
显示的警告是:
- 稀疏索引张量会占用大量内存。我可以更改代码以使其不会弹出并可能节省一些宝贵的内存。
- 想要 [x,?,?,y],得到 [x,y,z,a,b]。这会停止训练。在最多 217k 步的训练中得到了 2 次。不知道这个起源于哪里;可能是数据集。
如果有人能告诉我正确解决此问题的提示,我将不胜感激。
【问题讨论】:
标签: python machine-learning tensorflow object-detection