调用cocoeval时报TypeError的解决方法

问题描述:
我在调用cocoeval计算map时,发生报错:TypeError: object of type <class ‘numpy.float64’> 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 <class 'float'> 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了。

解决方法二:

修改cocoapi的源码

因为我现在用的是python3.9+pytorch1.9,numpy版本已经降不到1.17.0了,所以只有去修改cocoapi源码的方法了。
如果用的是conda环境,cocoapi所在位置应该是:
/home/w61/anaconda3/envs/[env name]/lib/[python version]/site-packages/pycocotools/pycocotools.py
找到这个文件,修改以下代码:

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

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

保存即可。

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

 pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值