python 访问返回的变量

python accessing returned variable

我对 python 还是不太满意。尝试使用深度学习开源代码,我正在编写测试代码,我可以看到它运行如下所示。 (使用数据集包和其中的 pascal_voc 模块,顺便说一句,这是来自 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 returns 值如下所示。

def _load_pascal_annotation(self, index):
....
    return {'boxes' : boxes,
        'gt_classes': gt_classes,
        'gt_overlaps' : overlaps,
        'flipped' : False}

我想从返回的字典中提取 'boxes' 的数组并用它来绘制一些东西。我试过 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 的返回值中提取坐标值?

我根本不了解你的图书馆,但从你展示的内容来看,你可能想将 _load_pascal_annotation 的结果分配给一个新变量,然后访问 boxes 项目在字典里。尝试这样的事情:

data = d._load_pascal_annotation('{0:06d}'.format(5))
print(data['boxes'])

但是我要注意的一件事是,名称中带有单个前导下划线的方法通常是私有的(例如,它们不是 class 的 public 的一部分) API)。您的 d 对象上可能有一些其他方法或属性,您应该使用这些方法或属性,它们将在后台调用 _load_pascal_annotation(并对其 return 值做一些适当的事情)。

您调用了 _load_pascal_annotation 方法,但没有保留对其 return 值的引用。

尝试:

r_value = d._load_pascal_annotation('{0:06d}'.format(5))
r_value['boxes']