python访问返回的变量

时间:2016-08-01 07:16:14

标签: python caffe pycaffe

我仍然不熟悉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的返回值中提取坐标值?

2 个答案:

答案 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(并根据其返回值执行适当的操作)。