欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

YOLOv3 使用COCO数据集 Model accepts 80 classes labeled from 0 - 79, however you labeled a class**问题解决

程序员文章站 2024-03-17 09:27:10
...

首先确认coco数据集标签序号是0-79,默认的是1-80或1-91,需要写脚本改为0-79。
其次是要删除缓存label文件:

train2014.npy
和
val2014.npy

这有我自己写的对应coco2014的批量标签转换python脚本,可以从1-91转换到1-80:

import os

z = []
g = {}
with open(r'F:\codes\coco\coco_labels.txt') as f:  # 结合coco数据集自带的coco_labels.txt文件使用
    lines = f.readlines()
    for x in lines:
        y = x.split(',')
        z.append(y)
for x in z:
    key = x[0]
    val = x[1]
    g[key] = val

path = 'F:\\codes\\coco\\labels\\val2014\\'  # 需要批量操作的label文件夹
filelist = os.listdir(path)
for file in filelist:
    Olddir = os.path.join(path, file)
    filename = os.path.splitext(file)[0];  # 文件名
    filetype = os.path.splitext(file)[1];  # 文件扩展名
    filePath = path + filename + filetype
    newcont = []
    with open(filePath,'r') as fil:
        flines = fil.readlines()
        for x1 in flines:
            z1 = x1[:2]
            z3 = x1[2:]
            # print('老id:'+x1)
            if z1.endswith(' '):
                z1 = x1[:1]
                z3 = x1[1:]
            z2 = g[z1]
            x2 = z2+z3
            newcont.append(x2)
    with open(filePath,'w') as wtfil:
        for line in newcont:
            wtfil.writelines(line)
            # print('新id:'+line)
    print(filename + filetype + ' 已完成')

然后是发现需要标签数减1的情况下写的减1脚本:

import os

# z = []
# g = {}
# with open(r'F:\codes\coco\coco_labels.txt') as f:
#     lines = f.readlines()
#     for x in lines:
#         y = x.split(',')
#         z.append(y)
# for x in z:
#     key = x[0]
#     val = x[1]
#     g[key] = val

path = '/data/coco/labels/val2014/'
filelist = os.listdir(path)
for file in filelist:
    filename = os.path.splitext(file)[0]  # 文件名
    filetype = os.path.splitext(file)[1]  # 文件扩展名
    filePath = path + filename + filetype
    newcont = []
    with open(filePath,'r') as fil:
        flines = fil.readlines()
        for x1 in flines:
            z1 = x1[:2]
            z3 = x1[2:]
            # print('老id:'+x1)
            if z1.endswith(' '):
                z1 = x1[:1]
                z3 = x1[1:]
            z2 = int(z1)-1
            z2 = str(z2)
            x2 = z2+z3
            newcont.append(x2)
    with open(filePath,'w') as wtfil:
        for line in newcont:
            wtfil.writelines(line)
            # print('新id:'+line)
    print(filename + filetype + ' 已完成')

print('全部完成')