【问题标题】:Improve accuracy with Tensorflow Object detection pretrained model使用 Tensorflow 对象检测预训练模型提高准确性
【发布时间】:2018-06-25 09:01:56
【问题描述】:

我正在构建一个对象检测模型,我想用 22 个新类创建该模型(其中大部分不在 COCO 或 PETS 数据集中) 我已经做的是:

  • 使用 LabelIMG 准备具有多个标签的图像。

  • 对于大于 500k 的图像,将图像大小减小 2

  • 将 XML 转换为 CSV 文件

  • 将 CSV 和图像转换为 TFRecord

  • 使用我用几个预训练检查点训练的 Tensorflow 示例配置文件。

结果:SSD_Mobilenet 和 SSD_Inception 没有产生任何课程 found(loss ~10.0) 而更快的 RCNN Inception 确实成功地检测到了一些 对象(损失〜0.7)。

我的问题是:

  1. 我在上面使用的 Object detection 的 train.py 到 image_retraining 的 retrain.py 到 Slim 的 train_image_classifier.py 之间有什么区别?
  2. 哪个更适合我的任务?还是我应该换一种方式?
  3. 在 FRCNN 初始运行 train.py 时,我发现损失约为 0.7,即使经过 100k 步后也不会降低。在损失方面有什么目标要实现吗?
  4. 您建议如何更改配置文件以改善这一点?
  5. 我发现了其他模型,例如 Inception V4 等...没有示例配置文件 - TF slim。我应该尝试它们吗?如果可以,我该如何使用它们?

我是这个领域的新手,我需要一些支持来理解条款和行动。

顺便说一句:我正在使用 GTX 1060 (GPU) 进行训练,但 eval 无法并行工作,因此我无法获取 mAP 进行验证。我试图对 CPU 强制 eval 但没有成功。

谢谢。

【问题讨论】:

  • 有人吗?........

标签: python object tensorflow detection object-detection


【解决方案1】:

重新训练用于在预训练模型的顶部添加一个级别...您可以像这样赢得时间..对数千张图片有用,对百万张标签图片无用...效率低于从 skratch 训练。配置文件有模板。如果没有配置文件,请创建自己的.. 看看 tensorflow github 解释...

【讨论】:

    【解决方案2】:

    (不是一个完整的答案,但我希望它在某种程度上有所帮助!)

    您的注释对象相对于图像大小是否较小? 我在 SSD 没有检测或检测很少的情况下遇到了同样的问题,发现该模型对决定框建议(锚生成器)大小的设置非常敏感。这是link with some details

    此外,在调试和调整模型时,运行一个活跃的评估作业非常重要。 TotalLoss 或从训练作业返回的任何参数不会告诉您实际模型的性能,只会告诉您它是否正在收敛。评估工作给你例如mAP 是性能的真正衡量标准。

    在 cpu 上强制执行 eval 作业的一种简单方法是执行以下操作:

    a) 安装专用于评估作业的虚拟环境,instructions here

    b) 激活虚拟环境并在虚拟环境中安装tensorflow cpu(是的,你应该重新安装tensorflow,并且不支持gpu)

    c) 像往常一样在你的 tensorflow-gpu 上启动训练作业(无论你以何种方式安装它)

    d) 在虚拟环境中运行 eval 作业(这将迫使它在 cpu 上运行并且效果很好!我还从这个安装中运行 tensorboard 以最大程度地减少干扰训练作业的风险)

    【讨论】:

      【解决方案3】:

      1) 我在上面使用的 Object detection 的 train.py 与 image_retraining 的 retrain.py 和 Slim 的 train_image_classifier.py 有什么区别

      Ans : 据我所知,没有。因为 train.py 导入 trainer.py,trainer.py 导入 slim.learning.train(与 train_image_classifier.py 中使用的类相同)进行训练。

      2) 哪个更适合我的任务?还是我应该以不同的方式来做?

      Ans:上面的答案也回答了这个问题。

      3) 在 FRCNN inception 上运行 train.py 时,我发现损失在 0.7 左右,即使经过 100k 步后也不会降低。在损失方面有什么目标要实现吗?

      Ans:如果你使用 tensorboard 来可视化你的结果,你会发现当你的分类损失图变化不大(已经收敛)时,你的模型就被训练好了。关于 0.7 的损失,经过这么多步骤的训练,这已经很高了。只需检查您的管道配置文件参数即可。

      4) 您建议如何更改配置文件以改善这一点?

      Ans:学习率值可以是一个好的开始

      5) 我发现了其他模型,例如 Inception V4 等...没有示例配置文件 - TF slim?我应该尝试它们吗?如果可以,我该如何使用它们?

      Ans:目前,我对此没有答案。但会回复你。

      【讨论】:

        猜你喜欢
        • 2019-01-22
        • 2019-10-27
        • 1970-01-01
        • 2018-02-20
        • 2019-10-21
        • 1970-01-01
        • 2020-10-17
        • 2018-05-04
        • 1970-01-01
        相关资源
        最近更新 更多