使用Tensorflow对象检测预训练模型提高准确性

时间:2018-01-16 15:39:03

标签: python object tensorflow detection object-detection

我正在构建一个对象检测模型,我希望用22个新类创建它们(大多数不在COCO或PETS数据集中) 我已经做的是:

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

  • 对于大于500k

  • 的图像,将图像尺寸减小到2
  • 将XML转换为CSV文件

  • 将CSV和图像转换为TFRecord

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

结果:SSD_Mobilenet和SSD_Inception导致没有课程 发现(损失~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。我应该尝试一下吗?如果可以,我该如何使用它们?
  6. 我在这个领域很新,我需要一些支持来理解这些术语和行动。

    BTW:我正在使用GTX 1060(GPU)进行培训,但eval没有并行工作,所以我无法获得mAP进行验证。我试图强制使用eval但没有成功。

    感谢。

3 个答案:

答案 0 :(得分:0)

1)我在上面使用的物体检测中的train.py与从image_retraining中重新训练到从Slim中的train_image_classifier.py

之间有什么区别? 答:答:据我所知,没有。因为train.py导入的training.py导入了slim.learning.train(在train_image_classifier.py中使用的同一个类)来训练。

2)哪个更适合我的任务?或者我应该以不同的方式做到这一点?

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

3)在FRCNN启动时运行train.py时,我发现损失大约为0.7,即使在100k步之后也不会降低。在实现损失方面是否有任何目标?

Ans:如果您使用tensorboard来显示结果,您会发现当您的分类丢失图表没有发生很大变化(已经收敛)时,您的模型就会受到训练。关于0.7的损失,经过这么多步骤的训练后,这个数字很高。只需检查管道配置文件参数。

4)您如何建议更改配置文件以改善此目的?

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

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

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

答案 1 :(得分:0)

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

您的带注释的对象相对于图像大小是否较小? 我没有或很少检测到SSD时遇到了同样的问题,发现模型对确定盒子提议(锚点生成器)大小的设置非常敏感。这是link with some details

此外,在调试和调整模型时,运行活动eval作业非常重要。 TotalLoss或从列车作业返回的任何参数不会告知您实际模型的性能,只会告知您是否正在收敛。评估工作为您提供了例如mAP是衡量绩效的真正指标。

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

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

b)激活虚拟环境并在虚拟环境中安装tensorflow cpu(是的,你应该再次安装tensorflow,没有支持gpu)

c)像往常一样在tensorflow-gpu上开始训练(以任何方式安装它)

d)在虚拟环境中运行eval作业(这将强制它在cpu上运行并且工作得很好!我还从这个安装运行tensorboard以最小化干扰列车工作的风险)

答案 2 :(得分:0)

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