我仍然不熟悉python。尝试深度学习开源代码,我正在编写测试代码,我可以看到它运行如下。 (使用数据集包和pascal_voc模块,BTW,这是来自py-faster-rcnn代码)
>>> import datasets
>>> import datasets.pascal_voc as pv
>>> d = datasets.pascal_voc('trainval', '2007')
>>> d._load_pascal_annotation('{0:06d}'.format(5))
Removed 2 difficult objects
{'boxes': array([[262, 210, 323, 338],
[164, 263, 252, 371],
[240, 193, 294, 298]], dtype=uint16), 'flipped': False, 'gt_classes': array([9, 9, 9], dtype=int32), 'gt_overlaps': <3x21 sparse matrix of type '<type 'numpy.float32'>'
函数_load_pascal_annotation
返回如下所示的值。
def _load_pascal_annotation(self, index):
....
return {'boxes' : boxes,
'gt_classes': gt_classes,
'gt_overlaps' : overlaps,
'flipped' : False}
我想提取&#39;框的数组&#39;从返回的字典中使用它来绘制一些东西。我试过d['boxes']
,但在下面给我错误。
>>> d['boxes']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'pascal_voc' object has no attribute '__getitem__'
如何从_load_pascal_annotation的返回值中提取坐标值?
答案 0 :(得分:2)
您调用_load_pascal_annotation
方法,但不要保留对其返回值的引用。
尝试:
_load_pascal_annotation
答案 1 :(得分:1)
我根本不了解您的图书馆,但根据您展示的内容,您可能希望将_load_pascal_annotation
的结果分配给新变量,然后访问{{1}字典中的项目。尝试这样的事情:
boxes
但有一点我注意到,名称中带有单个前导下划线的方法通常是私有的(例如,它们不属于该类的公共API)。您的data = d._load_pascal_annotation('{0:06d}'.format(5))
print(data['boxes'])
对象上可能还有其他方法或属性,而后者会在后台调用d
(并根据其返回值执行适当的操作)。