我正在尝试训练SVHN(街景房号)数据集,以便在tensorflow中进行对象检测(对数字进行一些基本的OCR)。 到目前为止,我已经成功地遵循了物体检测 - 张量流指南中的宠物训练示例。 当我根据示例faster_rcnn_resnet101.config训练网络时,经过几十步后我得到了:
INFO:tensorflow:Error reported to Coordinator:
<class 'tensorflow.python.framework.errors_impl.InvalidArgumentError'>,
Reduction axis 1 is empty in shape [3,0]
[[Node: Loss/RPNLoss/Match/cond/ArgMax_1 = ArgMax[T=DT_FLOAT, Tidx=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"]
(Loss/RPNLoss/Match/cond/ArgMax/Switch:1,
Loss/RPNLoss/Match/cond/ArgMax_1/dimension)]]
我不知道要改变或改进什么。 以前有人见过这个吗? 这里出了什么问题? 它只是一个错误的配置设置? 我改变的唯一参数(除了path-info)是num_classes:10(10位)
感谢任何提示。
我的标签图如下所示:
item {
id: 0
name: 'none_of_the_above'
}
item {
id: 1
name: '1'
}
item {
id: 2
name: '2'
}
... with id: 10 being '0'
在这里假设https://github.com/tensorflow/models/blob/master/object_detection/g3doc/running_pets.md 我使用了预训练的COCO模型faster_rcnn_resnet101以及来自的配置文件: https://github.com/tensorflow/models/blob/master/object_detection/samples/configs/faster_rcnn_resnet101_pets.config 我改编的唯一内容是路径和:
faster_rcnn {
num_classes: 11
image_resizer {
keep_aspect_ratio_resizer {
min_dimension: 64
max_dimension: 900
}
}
由于来自SVHN的图像相当小,我在这里调整了尺寸并删除了高度或宽度小于64像素的所有图像。 到目前为止,我没有注意清除培训目录。但我现在尝试了,同样的错误发生了。 我正在尝试使用预训练的初始模型,也许这可以解决。
答案 0 :(得分:0)
当提案数为0时使用ArgMaxMatcher
类时会发生这种情况。
如果在这里修改了问题的PR:https://github.com/tensorflow/models/pull/1986
答案 1 :(得分:0)
随着问题消失,当我正确地进行训练时,我会发布这个解决方案......可能是,其他人和我一样“愚蠢”。 正如宠物教程中提出的,我下载了一个预训练模型。 但是我将training-directory的路径设置为下载的预训练模型所在的目录。 我认为这导致了错误。
答案 2 :(得分:0)
我不确定是什么引起了您的错误,但您不应在标签图中使用索引0,因为它是占位符索引。所有索引应从1开始。
答案 3 :(得分:0)
您需要在“ keep_aspect_ratio_resizer”部分中设置参数“ pad_to_max_dimension” = true。它对我有用
答案 4 :(得分:0)
您来自数据集的图像大小与您用于训练的模型大小不匹配。 例如:如果您使用模式 mask_rcnn_inception_v2_coco_2018_01_28 那么您的数据集的图像大小必须在范围内[800: 1365]