1

我的设置是

python 3.9 numpy 1.21.0 cuda 10.2

现在我在接收两条错误消息时遇到问题。

一个是: 错误:pycocotools 无法运行:“numpy.float64”对象不能被解释为整数

第二个是: 错误:pycocotools 无法运行:numpy.ndarray 大小已更改,可能表示二进制不兼容。预期来自 C 标头的 88,从 PyObject 获得 80

情况是,我寻找封闭的问题并找到了解决方案。对于第一个错误,降级 numpy是许多人的解决方案。(下至 1.16.5)

对于第二个错误,升级 numpy是许多人的解决方案。(最高 1.21.0)

因此,如果我升级 numpy,会出现第一个问题,降级,会出现第二个问题。相反的解决方案。

我一直在尝试在不降级我的 numpy 的情况下解决第一个错误,但进展并不顺利。

这是下面的问题代码。

   # Save JSON
    if save_json and len(jdict):
        f = 'detections_val2017_%s_results.json' % \
            (weights.split(os.sep)[-1].replace('.pt', '') if isinstance(weights, str) else '')  # filename
        print('\nCOCO mAP with pycocotools... saving %s...' % f)
        with open(f, 'w') as file:
            json.dump(jdict, file)

        try:  # https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoEvalDemo.ipynb
# THIS IS WHERE THE CODE STOPS WHEN SECOND ERROR OCCURS
            from pycocotools.coco import COCO
            from pycocotools.cocoeval import COCOeval
            imgIds = [int(Path(x).stem) for x in dataloader.dataset.img_files]
            cocoGt = COCO(glob.glob('../coco/annotations/instances_val*.json')[0])  # initialize COCO ground truth api
            cocoDt = cocoGt.loadRes(f)  # initialize COCO pred api
#THIS IS WHERE THE CODE STOPS WHEN FIRST ERROR OCCURS
            cocoEval = COCOeval(cocoGt, cocoDt, 'bbox')
            cocoEval.params.imgIds = imgIds  # image IDs to evaluate
            cocoEval.evaluate()
            cocoEval.accumulate()
            cocoEval.summarize()
            map, map50 = cocoEval.stats[:2]  # update results (mAP@0.5:0.95, mAP@0.5)
        except Exception as e:
            print('ERROR: pycocotools unable to run: %s' % e)

下面是每个 cocoGt 和 cocoDt 的值和类型

<pycocotools.coco.COCO 对象位于 0x000002351F4CE6A0> <class 'pycocotools.coco.COCO'>

<pycocotools.coco.COCO 对象位于 0x000002351F4E58E0> <class 'pycocotools.coco.COCO'>

cocoEval = COCOeval(cocoGt, cocoDt, 'bbox') 我认为这部分是代码中最可疑的部分我试图用 int 覆盖值 (cocoGt, cocoDt) 但它没有显示错误: int()参数必须是字符串、类似字节的对象或数字,而不是 'COCO'

下面是 cocoeval.py 的一部分,其中包含cocoEval = COCOeval(cocoGt, cocoDt, 'bbox')的定义,以防它可能是有用的信息。

    def __init__(self, cocoGt=None, cocoDt=None, iouType='segm'):
        '''
        Initialize CocoEval using coco APIs for gt and dt
        :param cocoGt: coco object with ground truth annotations
        :param cocoDt: coco object with detection results
        :return: None
        '''
        if not iouType:
            print('iouType not specified. use default iouType segm')

        self.cocoGt   = cocoGt              # ground truth COCO API
        self.cocoDt   = cocoDt              # detections COCO API
        self.params   = {}                  # evaluation parameters
        self.evalImgs = defaultdict(list)   # per-image per-category evaluation results [KxAxI] elements
        self.eval     = {}                  # accumulated evaluation results
        self._gts = defaultdict(list)       # gt for evaluation
        self._dts = defaultdict(list)       # dt for evaluation
        self.params = Params(iouType=iouType) # parameters
        self._paramsEval = {}               # parameters for evaluation
        self.stats = []                     # result summarization
        self.ious = {}                      # ious between all gts and dts
        if not cocoGt is None:
            self.params.imgIds = sorted(cocoGt.getImgIds())
            self.params.catIds = sorted(cocoGt.getCatIds())

非常感谢您的宝贵时间

4

0 回答 0