调用cocoeval时报TypeError的解决方法

问题描述:

我在调用cocoeval计算map时,发生报错:TypeError: object of type cannot be safely interpreted as an integer

经查,错误主要发生在pycocotools/cocoeval.py下面这一行代码:

self.iouThrs = np.linspace(.5, 0.95, np.round((0.95 - .5) / .05) + 1, endpoint=True)

参考网址:https://stackoverflow.com/questions/59801932/raise-typeerror-typeerror-object-of-type-class-numpy-float64-cannot-be-saf 中的回答,可以看到,在numpy 1.17.0版本中,np.linspace()是可以使用浮点数作为步长的,但是在numpy 1.18.0版本中就会报错(如下)。

(1)numpy == 1.17.0

In [216]: np.linspace(0,1,10.)                                                                   
Out[216]: 
array([0.        , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
       0.55555556, 0.66666667, 0.77777778, 0.88888889, 1.        ])

(2) numpy == 1.18.0

In [2]: np.linspace(0,10,10.) 
---------------------------------------------------------------------------
TypeError: object of type  cannot be safely interpreted as an integer.

解决方法:

降低numpy的版本。

具体步骤如下:

  1. 查看自身numpy版本:

    pip show numpy
    

    我这里显示我的numpy版本是1.18.0,所以需要降低版本号。

  2. 降低numpy版本:

    pip install -U numpy==1.17.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    后面加上 -i 是为了设置清华镜像源作为下载地址,速度飞快。

  3. 降低版本号后即可正常调用coco的api了。


附:存一个安装pycocotools的方法:

 pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

你可能感兴趣的:(python,机器学习)