Tensorflow对象检测API无法正确检测对象/根本无法检测对象

时间:2018-03-26 04:36:30

标签: python tensorflow object-detection-api

我已经按照代码的整个步骤/格式(多次交叉检查以100%确定它们是正确的)以及在Tensorflow Object Detection API上训练自定义对象所需的数据。我尝试使用ssd_mobilenet_v1_coco,faster_rcnn_resnet101_coco以及faster_rcnn_inception_v2_coco模型,但仍未获得任何好的结果。我得到的只是对象的错误分类或根本没有边界框。

我正在训练检测单个类对象,其中训练图像数量约为250,验证图像数量为63;每个不同大小的图像大多在300 x 300像素或更小。我正在训练模型,直到它们收敛(不完全)。我知道这一点,通过观察步数超过15000的eval性能,损失随时间逐渐减小(至<0.04)但也会波动。我停止训练并导出图表。我的问题是:

我对用于解决物体检测的测试视频存在疑问。视频帧非常大,尺寸为1370 x 786像素,其中我需要检测的对象与帧大小相比非常小。这会导致问题吗?因为我的训练图像很小(300 x 300和更小),而我的测试视频帧与训练图像相比是如此之大?我尝试了几次训练,但每次使用每个模型都失败了,而且我坚持到了我想放弃的地步。

有人可以了解这里发生的事情吗?我应该训练更多的步骤吗?或者我应该训练类似尺寸的图像,如同在训练测试框架中一样?这会有帮助吗?

以下是我使用的配置文件和labelmap.pbtxt的代码。

配置文件:

    fine_tune_checkpoint: ".../ssd_mobilenet_v1_coco_2017_11_17/model.ckpt"
  from_detection_checkpoint: true
  num_steps: 200000
  data_augmentation_options {
    random_horizontal_flip {
    }
  }
  data_augmentation_options {
    ssd_random_crop {
    }
  }
}

train_input_reader: {
  tf_record_input_reader {
    input_path: ".../train.record"
  }
  label_map_path: ".../labelmap.pbtxt"
}

eval_config: {
  num_examples: 63

labelmap.pbtxt:

item {
  id: 1
  name: 'tomato'
}

1 个答案:

答案 0 :(得分:1)

  

或者我应该像训练测试框架一样训练类似的尺寸图像?这会有帮助吗?

根据您的解释,这正是您需要做的事情。

您不应期望在300x300图像上受过培训的网络能够在1370x786图像上按预期工作。特别是如果对象在大图像中已经很小。

您的火车数据必须与您的评估数据尽可能相似,而不会在危险的过度区域中进行监控。至少图像必须具有相似的尺寸和纵横比,并且来自相同的域

一旦解决了这个问题,请记住,小对象确实难以检测,因此您可能需要修改默认的模型配置。

如果您没有实时约束,我建议您首先尝试使用Faster-RCNN将output_stride参数设置为8而不是16。