Tensorflow对象检测API多类错误

时间:2017-08-20 18:32:06

标签: python machine-learning tensorflow object-detection

我正在使用在image-resizer标签中设置为最大尺寸300x400的更快的RCNN模型创建一个11类对象检测器。这是因为如果GPU更高,因为GPU是1050 Ti,4Gb版本,CUDA OOM错误会弹出,所以我有大约3800-3900 Mb的模型运行时训练记忆。

我遵循了erishima's步骤,并使用Pet的脚本和Dati Tran's对其进行了变更,以生成TFRecord文件。

步骤如下:

  1. 使用labelImg为类别创建标签。
  2. 使用labelImg中的name字段来注释图像文件的类。
  3. 创建CSV文件并从XML文件中提取文件名,类,xmin,ymin,xmax,ymax。 (自定义脚本)
  4. 从主CSV文件创建一个列车和测试/评估CSV。
  5. 生成要输入配置文件的TFRecord文件。训练和测试。(Dati Tran的剧本经过修改以满足需要)
  6. 修改faster_rcnn_config而不触及超参数。
  7. 创建了一个label_map.pbtxt文件,该文件对应于类的名称。从与此主题相关的许多其他答案中所述的1开始。
  8. 通过所述方法开始训练模型。
  9. 类的数据集是自定义的,图像/类的范围从2500到300.数据集没有对象方向的定义和图像中检测的难度,即使对象的每个可能的角度都存在于那些图像。

    当我在217k步骤之后训练到损失值为.002时出现的问题是,无论是在视频还是图像上运行检测器,单个类都包围了所有其他类的对象。我没有尝试运行eval.py脚本,因为在这个设置上需要太长时间,而我无法真正看到类的mAP,但我认为它应该是冗余信息,因为问题应该在数据集中设置准备方法或在数据集本身。

    当重新训练60k步时,问题仍然存在,但另一个课程包围了所有其他课程。

    显示的警告是:

    • 稀疏索引张量会占用大量内存。我可以更改代码,这样就不会弹出,也可能为我节省一些宝贵的内存。
    • 想要[x,?,?,y],而是[x,y,z,a,b]。这个停止训练。在训练中获得了2次,达到217k步。不知道这个起源在哪里;可能是数据集。

    如果有人能告诉我一个正确的解决方法,我会非常感激。

1 个答案:

答案 0 :(得分:0)

我相信你有阶级不平衡。有similar problem in the past

对数据集进行分析 - 确保每个类的图像数量级相同。