在训练YOLOV6的时候碰上了
'Results do not correspond to current coco set'
这个问题。
assert set(annsImgIds) == (set(annsImgIds) & set(self.getImgIds())) 根据这个断言检查了下。
调用coco API检查了下,打印出来len((person_imgs_id)的值为297.
from pycocotools.coco import COCO
val_info = r'VOC/annotations/instances_val.json'
coco = COCO(val_info) # 导入验证集
person_imgs_id = coco.getImgIds()
print(len(person_imgs_id))
而在检查set(annsImgIds)时,在evaler.py文件的eval_model这个方法中
annsImgIds = [ann['image_id'] for ann in pred_results]
print(len(set(annsImgIds)))
打印出来的长度为497(也就是我验证集的数量)
然后检查了下instances_val.json文件,发现
?image_id是6,而我的数据图片id为6.8CAXX.jpg,那么就找到了问题的所在。
在dataset.py中的generate_coco_format_labels方法中
img_id = osp.basename(img_path).split('.')[0]
这样就导致以一个点分割了这个图片id,6.8CAXX.jpg被分割乘了6、8CAXX、jpg 三个字符串,所以导致了json文件中出现了image_id为6的情况。
解决办法:
在dataset.py中的generate_coco_format_labels方法中
img_id = osp.basename(img_path).split('j')[0].strip('.')
将img_id改成上述代码,以j分割,再去掉剩下来的点,代码就能成功跑通了
|