对象检测API的Tensorflow ConcatOp错误

LKM*_*LKM 6 python object-detection tensorflow

我下面tensorflow物体检测API的说明,并试图培养现有对象的检测模型("faster_rcnn_resnet101_coco")具有50类我自己的数据集.

所以根据我自己的数据集,我创建了

  1. TFRecord(单独进行培训,评估和测试)
  2. labelmap.pbtxt

接着,我编辑model.config仅对模型faster_rcnn-num_classes(90 - > 50(我自己的数据集的类的),train_config-的batch_size(1的数量- 200000> 10),train_config-num_steps( - > 100), train_input_reader-tf_record_input_reader-input_path(到TFRecord驻留的路径)和train_input_reader-label_map_path(到labelmap.pbtxt驻留的路径).

最后,我运行命令

python train.py \
--logtostderr \
--pipeline_config_path="PATH WHERE CONFIG FILE RESIDES" \
--train_dir="PATH WHERE MODEL DIRECTORY RESIDES"
Run Code Online (Sandbox Code Playgroud)

我遇到了以下错误:

InvalidArgumentError(参见上述用于回溯):ConcatOp:输入尺寸应当匹配:形状[0] = [1,890,600,3]对形状[1] = [1,766,600,3] [[节点:CONCAT_1 = ConcatV2 [N = 10, T = DT_FLOAT,TIDX = DT_INT32,_device = "/作业:本地主机/复制:0 /任务:0/CPU:0"(预处理器/分,Preprocessor_1 /分,Preprocessor_2 /分,Preprocessor_3 /分,Preprocessor_4 /分, Preprocessor_5 /分,Preprocessor_6 /分,Preprocessor_7 /分,Preprocessor_8 /分,Preprocessor_9 /分,CONCAT_1 /轴)]]

它似乎是输入图像的尺寸,因此可能是由于未调整原始图像数据的大小而引起的.

但据我所知,模型会自动调整输入图像的大小以进行训练(不是吗?)

然后我就遇到了这个问题.

如果有解决方案,我会很感激您的回答.谢谢.

UPDATE

当我updated my batch_size field from 10 to one(original one),它似乎train without any problem...... 但我不明白为什么......

Cip*_*agă 13

TaeWoo是对的,你必须设置batch_size为1才能训练更快的RCNN.

这是因为FRCNN使用a keep_aspect_ratio_resizer,这反过来意味着如果你有不同大小的图像,它们在预处理后也会有不同的大小.这实际上使得配料不可能,因为批量张量具有形状[num_batch, height, width, channels].当(height, width)一个示例与下一个示例不同时,您可以看到这是一个问题.

这与使用"普通"缩放器的SSD模型形成对比,即,无论输入图像如何,所有预处理的示例将最终具有相同的大小,这允许它们被批处理在一起.

现在,如果您有不同大小的图像,实际上您有两种使用批处理的方法:

  • 使用更快的RCNN并在训练前一次填充图像,或者连续作为预处理步骤.我建议使用前者,因为这种类型的预处理似乎会减慢学习速度
  • 使用SSD,但请确保您的对象不会因失真而受到太大影响.这应该不是一个很大的问题,它可以作为一种数据扩充方式.


小智 4

我有同样的问题。设置batch_size=1确实似乎解决了这个问题,但我不确定这是否会对模型的准确性产生任何影响。很想得到 TF 团队的答复。