导致该错误的原因是np.linspace在numpy 1.11.0之后的版本只支持int类型的输入参数,而源码使用的浮点数。源码:
np.linspace(.5, 0.95, np.round((0.95 - .5) / .05) + 1, endpoint=True)
目的是生成0.05步长,0.5~0.95的数组:[ 0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95]
因此,我们可以使用numpy.arange函数代替。具体更改方式如下:
class Params:
'''
Params for coco evaluation api
'''
def setDetParams(self):
self.imgIds = []
self.catIds = []
# np.arange causes trouble. the data point on arange is slightly larger than the true value
'''
引发错误的代码:
self.iouThrs = np.linspace(.5, 0.95, np.round((0.95 - .5) / .05) + 1, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, np.round((1.00 - .0) / .01) + 1, endpoint=True)
修改为:
self.iouThrs = np.arange(0.5,0.97,0.05)
self.recThrs = np.arange(0., 1.0001, 0.01)
'''
self.iouThrs = np.arange(0.5,0.97,0.05)
self.recThrs = np.arange(0., 1.0001, 0.01)
self.maxDets = [1, 10, 100]
self.areaRng = [[0 ** 2, 1e5 ** 2], [0 ** 2, 32 ** 2], [32 ** 2, 96 ** 2], [96 ** 2, 1e5 ** 2]]
self.areaRngLbl = ['all', 'small', 'medium', 'large']
self.useCats = 1
def setKpParams(self):
self.imgIds = []
self.catIds = []
# np.arange causes trouble. the data point on arange is slightly larger than the true value
'''
引发错误的代码:
self.iouThrs = np.linspace(.5, 0.95, np.round((0.95 - .5) / .05) + 1, endpoint=True)
self.recThrs = np.linspace(.0, 1.00, np.round((1.00 - .0) / .01) + 1, endpoint=True)
修改为:
self.iouThrs = np.arange(0.5,0.97,0.05)
self.recThrs = np.arange(0., 1.0001, 0.01)
'''
self.iouThrs = np.arange(0.5,0.97,0.05)
self.recThrs = np.arange(0., 1.0001, 0.01)
self.maxDets = [20]
self.areaRng = [[0 ** 2, 1e5 ** 2], [32 ** 2, 96 ** 2], [96 ** 2, 1e5 ** 2]]
self.areaRngLbl = ['all', 'medium', 'large']
self.useCats = 1