【小样本目标检测实践VOC格式】Frustratingly Simple Few-Shot Object Detection


本文记录一下,使用FSDet进行小样本目标检测的一个实践过程(以铝材瑕疵数据为例)。

数据准备

数据来源

使用的数据集为 [飞粤云端2018]广东工业智造大数据创新大赛—智能算法赛 的数据,百度云链接: https://pan.baidu.com/s/1sncD_D12PkR4D8huei3d6Q 提取码: egwc

使用的数据为赛制第二阶段的数据,数据格式为:
在这里插入图片描述
在每个类别中随机挑选了15张-20张图片组成小样本数据集。

数据预处理

  1. 将文件中的中文改为英文
# -*- coding=utf-8-*-

"""
 @Time   : 22-7-12下午4:49
 @Author : MaQian
 @language : Python2.7
"""
import os
import numpy as np
import codecs
import json
from glob import glob
import cv2
import shutil
from xml.dom import minidom
import xml.etree.cElementTree as ET
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedShuffleSplit


# 将中文名字改为英文名  瑕疵名字用拼音代替
def change_cn2en():
    cn2en_names = {
   '不导电': 'BuDaoDian', '喷流': 'PenLiu', '擦花': 'CaHua', '杂色': 'ZaSe',
                   '桔皮': 'JuPi', '漆泡': 'QiPao', '漏底': 'LouDi', '脏点': 'ZangDian',
                   '角位漏底': 'JiaoWeiLouDi', '起坑': 'QiKeng', '正常': 'ZhengChang'}
    path = './few-shot-lvcai-data'
    imgdir = os.listdir(path)
    for id in imgdir:
        file_path = os.path.join(path, id)
        # print id.decode(encoding='utf-8')
        # print(file_path)
        file_names = os.listdir(file_path)
        for file_name in file_names:
            # print(file_name)
            name = file_name.strip().split('.')[0]
            type = file_name.strip().split('.')[1]
            xiaciname = name[0:name.index('2018')]
            if xiaciname.__contains__(','):
                xcnames = xiaciname.strip().split(',')
                for xcn in xcnames:
                    name = name.replace(xcn, cn2en_names[xcn])
                name = name.replace(',', "And")
            else:
                name = name.replace(xiaciname, cn2en_names[xiaciname])

            name = name[0:name.index('对照')]
            name = name + '.' + type
            # print(name)
            # os.rename(file_name, name)
            os.rename(os.path.join(file_path, file_name), os.path.join(file_path, name))


# 将文件夹也改为英文
def change_cn2en2():
    cn2en_names = {
   '不导电': 'BuDaoDian', '喷流': 'PenLiu', '擦花': 'CaHua', '杂色': 'ZaSe',
                   '桔皮': 'JuPi', '漆泡': 'QiPao', '漏底': 'LouDi', '脏点': 'ZangDian',
                   '角位漏底': 'JiaoWeiLouDi', '起坑': 'QiKeng', '正常': 'ZhengChang'}
    path = './few-shot-lvcai-data'
    imgdir = os.listdir(path)
    for id in imgdir:
        if len(id) < 5:
            # print(id, cn2en_names[id])
            os.rename(os.path.join(path, id), os.path.join(path, cn2en_names[id]))

  1. 将json文件转换为xml文件
# 将数据集转换为VOC格式

# 处理json文件,生成xml文件
def handel_json2xml():
    label_warp = {
   
        '不导电': 'BuDaoDian',
        '喷流': 'PenLiu',
        '擦花': 'CaHua',
        '杂色': 'ZaSe',
        '桔皮': 'JuPi',
        '漆泡': 'QiPao',
        '漏底': 'LouDi',
        '脏点': 'ZangDian',
        '角位漏底': 'JiaoWeiLouDi',
        '起坑': 'QiKeng'}

    # 保存路径
    saved_path = "./VOC2007/"

    # 创建要求文件夹
    if not os.path.exists(saved_path + "Annotations"):
        os.makedirs(saved_path + "Annotations")
    if not os.path.exists(saved_path + "JPEGImages/"
  • 9
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 33
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值