博客
关于我
目标检测与分类识别之提高map的方法---新生成类进行针对性训练
阅读量:605 次
发布时间:2019-03-12

本文共 3106 字,大约阅读时间需要 10 分钟。

什么是Map?与分类识别中的挑战

在分类识别中,MAP(平均准确率"]="的表现是评估模型性能的重要指标。 MAP旨在反映模型在不同类别上的预测精度,但它也容易受到个别类别表现的影响。这意味着如果某些类别的AP(平均精度)较低,那么整体的 MAP 值可能会下降。

在实际应用中,我们经常会遇到一些类别的 AP 较低的情况。虽然整体 MAP 值可能还有可接受的水平,但这仍然需要进一步分析和解决。这是因为这些低 AP 类别往往会对整体性能产生较大影响。

变通解决方案:提取低 AP 类别并扩充数据集

为了应对这一问题,我们可以采取以下步骤:

  • 识别低 AP 类别:通过分析统计信息,找出哪些类别的 AP 值偏低。

  • 提取特定类别数据:将这些低 AP 类别从原始数据集中单独提取,并生成相应的新数据集。

  • 扩充数据集:通过复制或生成更多相关样本,丰富这部分类别的数据,提高其模型的性能表现。

  • 以下是一个实现这一目标的代码示例:

    import osimport shutilimport xml.etree.ElementTree as ETimport globimport numpy as npdef get_classes_from_xml(xml_files):    """从多个 XML 文件中提取分类信息"""    class_names = set()    for xml_path in xml_files:        root = ET.parse(xml_path).getroot()        for obj in root.findall('object'):            class_name = obj.find('name').text.lower()            class_names.add(class_name)    return sorted(class_names)def create_directories(name):    """创建新文件夹"""    if not os.path.exists(name):        os.makedirs(name)    print(f"创建文件夹:{name}")def process_annotation(count_path):    """读取统计信息并筛选低 AP 类别"""    all_classes = {}    low_ap_classes = {}        with open(count_path, 'r', encoding='utf-8') as f:        for line in f:            parts = line.strip().split(':')            if len(parts) != 2:                continue            cls, ap = parts[0].strip(), int(parts[1])            all_classes[cls] = ap            if ap <= 400:                low_ap_classes[cls] = ap        return all_classes, low_ap_classes# 绝对路径替换为实际路径count_path = './VOCdevkit/count.txt'anno_dir = './VOCdevkit/VOC2007/Annotations/'image_dir = './VOCdevkit/VOC2007/JPEGImages/'new_dataset_dir = './VOCdevkit/new_datasets_400/'classes, low_ap_classes = process_annotation(count_path)# 创建新文件夹结构create_directories(new_dataset_dir)create_directories(os.path.join(new_dataset_dir, 'Annotations'))create_directories(os.path.join(new_dataset_dir, 'ImageSets'))create_directories(os.path.join(new_dataset_dir, 'JPEGImages'))
    1. 运行代码并导入新数据集
    2. 运行上述 Python 脚本后,你将会在 new_datasets_400 文件夹中生成新的数据集。这包括:

      • Annotations 文件夹:存储提取的 XML 文件
      • ImageSets 文件夹:包含类别标签
      • JPEGImages 文件夹:存储相关图片

      验证与进一步处理

      在生成新数据集后,建议对标签与图片对应关系进行验证。这可以通过以下步骤实现:

      import osimport shutil# 获取所需的文件列表image_dir = './VOCdevkit/VOC2007/JPEGImages/'anno_dir = './VOCdevkit/VOC2007/Annotations/'new_dataset_dir = './VOCdevkit/new_datasets_400/'# 遍历所有图片文件for file in os.listdir(image_dir):    base_name = os.path.splitext(file)[0]        # 列出对应的标签文件    anno_file = os.path.join(anno_dir, f'{base_name}.xml')    if os.path.exists(anno_file):        continue        # 如果存在对应的图片文件,则将其复制到新数据集中    image_path = os.path.join(image_dir, file)    if os.path.exists(image_path):        shutil.copy(image_path, os.path.join(new_dataset_dir, 'JPEGImages'))        shutil.copy(anno_file, os.path.join(new_dataset_dir, 'Annotations'))        print(f"成功复制:{os.path.join(new_dataset_dir, file)}")    else:        print(f"未找到对应文件:{file}")

      这个脚本会检查是否存在标签与图片不对应的情况,并进行修复。

      最终步骤

    3. 运行代码:将上述代码保存为 get_low_ap_classes.py 并运行。

    4. 查看生成的数据集:检查 new_datasets_400/JPEGImagesnew_datasets_400/Annotations 文件夹,确认数据已经成功导入。

    5. 进一步处理:如需要,可以根据新的数据集进行模型训练和验证,确保模型能够准确识别这些特定类别。

    6. 通过这种方式,我们可以有效地提取低AP类别,扩充数据集,并提升整体模型性能。希望以上内容能够为您提供实用的参考价值!

    转载地址:http://nshxz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现普通矩阵A和B的乘积(附完整源码)
    查看>>
    Objective-C实现更新数字指定偏移量上的值updateBit算法(附完整源码)
    查看>>
    Objective-C实现最优二叉搜索树算法(附完整源码)
    查看>>
    Objective-C实现最大和连续子序列算法(附完整源码)
    查看>>
    Objective-C实现最大最小距离算法(附完整源码)
    查看>>
    Objective-C实现最大的非常大的数字算法(附完整源码)
    查看>>
    Objective-C实现最大类间方差法OTSU算法(附完整源码)
    查看>>
    Objective-C实现最大非相邻和算法(附完整源码)
    查看>>
    Objective-C实现最小二乘多项式曲线拟合(附完整源码)
    查看>>
    Objective-C实现最小二乘法(附完整源码)
    查看>>
    Objective-C实现最小值滤波(附完整源码)
    查看>>
    Objective-C实现最小公倍数LCM算法(附完整源码)
    查看>>
    Objective-C实现最小生成树 boruvka算法(附完整源码)
    查看>>
    Objective-C实现最小编辑距离问题算法(附完整源码)
    查看>>
    Objective-C实现最小路径和算法(附完整源码)
    查看>>
    Objective-C实现最快的归并排序算法(附完整源码)
    查看>>
    Objective-C实现最短路径Dijsktra算法(附完整源码)
    查看>>
    Objective-C实现最短路径Dijsktra算法(附完整源码)
    查看>>
    Objective-C实现最短路径广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现最近点对问题(附完整源码)
    查看>>