ValueError: attempt to get argmax of an empty sequence
本文针对faster rcnn训练中出现上述问题及解决的方法进行简单记录。
报错信息
2019-12-12 04:51:57.002253: W tensorflow/core/framework/op_kernel.cc:1610] Invalid argument: ValueError: attempt to get argmax of an empty sequence
Traceback (most recent call last):File “/usr/local/lib/python3.5/dist-packages/tensorflowcore/python/ops/scriptops.py”, line 221, in __call
ret = func(*args)
File “/workspace/tf-faster-rcnn-master/tools/../lib/layer_utils/anchor_target_layer.py”, line 51, in anchor_target_layer
argmax_overlaps = overlaps.argmax(axis=1)
排查方法
增加文件名信息至训练数据(lib/roi_data_layer/minibatch.py程序的get_minibatch函数)
blobs[‘addimages’]=roidb[0][‘image’] #增加语句
blobs[‘gt_boxes’] = gt_boxes输出当前训练batch数据的信息(lib/model/train_val.py程序的construct_graph函数)
blobs = self.data_layer.forward()
print (‘iter{}, info:{}’.format(iter,blobs)) #增加语句输出当前val batch数据的信息(lib/model/train_val.py程序的construct_graph函数)
blobs_val = self.data_layer_val.forward()
print (‘iter{}, info_val:{}’.format(iter,blobs)) #增加语句
重新运行获得错误数据的图片信息
iter4559, info_val:{‘addimages’: ‘data/JPEGImages/000202.jpg’, ‘data’: array([[[[ -91.9801 , -99.9465 , -107.7717 ],
[ -91.5426 , -99.509 , -107.3342 ],
...,
[ -6.9801 , 25.0535 , 1.2283 ]]]], dtype=float32), 'gt_boxes': array([], shape=(0, 5), dtype=float32), 'im_info': array([600. , 800. , 1.6], dtype=float32)}
解决方法
- 查看xml标注文件,删除空元素
- 对于修改文件处理程序的,如pascal_voc.py,需要确保数据读取中无异常\
ps:可通过anchor_target_layer.py函数快速输出gt_boxes的信息
print ('gt_boxes: {}, ahcnors: {}'.format(gt_boxes, anchors)) #添加语句
overlaps = bbox_overlaps(
np.ascontiguousarray(anchors, dtype=np.float),
np.ascontiguousarray(gt_boxes, dtype=np.float))
argmax_overlaps = overlaps.argmax(axis=1)
Q2: IndexError: list index out of range
加载数据时越界了,有两种情况导致该原因:
.pkl文件没有更新,删除后重新生成即可;
旧的中间模型没有删除,导致加载了原有训练模型的参数,引起数据异常;
参考文献:
- tf-faster-rcnn
还没有评论,来说两句吧...