数据标签处理方法

  • 剔除文本中的图片信息,此图片不在文件夹中
#剔除文本中的图片信息,此图片不在文件夹中
import os
dict_str = {}     #构造图片完备字典,key为图片名字,value为标签信息
useless_img = []
with open("./train.lst","r",encoding='utf-8') as f:
    for line in f:
        line = line.rsplit()
        dict_str[line[3]] = line[1:3]  
with open("train_yy.lst","w",encoding='utf-8') as f:
    for i,img in enumerate(os.listdir("./train")):  #遍历文件夹中的图片名称,在字典中则取出标签信息
        if img not in dict_str:
            useless_img.append(line)
            print("{}不在"img)
        else:
            age, gender = dict_str[img][0], dict_str[img][1]
            line_lable = str(i) + '\t' + age + '\t' + gender + "\t" + img + '\n'
            f.write(line_lable)                     #将标签信息写入文本
    print("total number:{}".format(i+1))
  • 统一重命名两个文件夹对应的文件(不同文件夹名称相同)
#统一重命名两个文件夹对应的文件(不同文件夹名称相同)
import re,os
path_list, suffix ,dict_lable= ['./yy','./qq'], ['.txt','.lst'], {}  #文件夹1,文件夹2,文件格式1,格式2
dict_lable = {lable.replace(suffix[0],'') : str(i+1) for i,lable in enumerate(os.listdir(path_list[0]))} #生成字典{'name':"number"}
lable_list, img_list = os.listdir(path_list[0]),os.listdir(path_list[1])
assert len(lable_list) == len(img_list)         #判断两个文件夹文件数量是否相等
for label, img in zip(lable_list, img_list):    #并行重命名两个文件夹内的文件
    os.rename(os.path.join(path_list[0],label),os.path.join(path_list[0],dict_lable[label.replace(suffix[0],'')]+suffix[0]))
    os.rename(os.path.join(path_list[1],img),os.path.join(path_list[1],dict_lable[img.replace(suffix[1],'')]+suffix[1]))

  • UTKFace 性别年龄标签处理
#coding:utf-8
#UTKFace的处理:
'''
   MXNet lst rec idx 文件生成 [适合任意的标签数量,自定义生成最灵活合适]
   1. lst文件自定义创建,格式: index label_1 label_n image_abs_path_name; 
                                             eg: 0 2 3 /mnt/data/my.jpg [label需要从0开始]
   2. rec idx文件创建,使用 mxnet/tools/im2rec.py(自己去安装路径下复制出来) ,命令行执行 python im2rec.py lst_path image_data_root --pack-label
                                             eg: python im2rec.py /mnt/data/train.lst /mnt/data/image --pack-label  生成train.rec train.idx; image_data_root所有图片放在一个文件夹
   val.lst val.rec val.idx 同理;

'''
import numpy as np
import os
def create_lst_file(img_root_path, lst_path_name, choice):
   '''
   :param img_root_path:
   :param lst_file_save_path:
   :return:  只创建lst, 未区分train / val
   '''
   name_list = [f for f in os.listdir(img_root_path) if f.endswith('jpg')]
   num = len(name_list)
   print(num)
   if choice == 1:
       # 创建训练集list
       with open(lst_path_name[0], 'w') as f:
           for i, img_name in enumerate(name_list):
               lis = img_name.split('_')
               # 要求 age需要在[1,100]之间,大于100的,网络会处理成100;gender需要male=1,female=0;而数据集正相反
               age, gender = lis[0], lis[1]
               f.write(str(i) + '\t' +
                       str(1 - int(gender)) + '\t' + age + '\t' +
                       img_name + '\n')
   else:
       # create trian.lst
       np.random.shuffle(name_list)
       with open(lst_path_name[1], 'w+') as f:
           for i, img_name in enumerate(name_list[:int(num * 0.8)]):
               lis = img_name.split('_')
               # 要求 age需要在[1,100]之间,大于100的,网络会处理成100;gender需要male=1,female=0;而数据集正相反
               age, gender = lis[0], lis[1]
               f.write(str(i) + '\t' +
                       str(1 - int(gender)) + '\t' + age + '\t' +
                       img_name + '\n')
       # create val.lst
       with open(lst_path_name[2], 'w+') as f:
           for i, img_name in enumerate(name_list[int(num * 0.8):]):
               lis = img_name.split('_')
               # 要求 age需要在[1,100]之间,大于100的,网络会处理成100;gender需要male=1,female=0;而数据集正相反
               age, gender = lis[0], lis[1]
               f.write(str(i) + '\t' +
                       str(1 - int(gender)) + '\t' + age + '\t' +
                       img_name + '\n')
if __name__ == "__main__":
   img_root_path = "./img_aligned"
   lst_file_save_path = "./"
   just_train, train_name, val_name = "train.lst", "train.lst", "val.lst"
   choice = 1 # 1代表只生成训练集,2代表训练集+验证集 8:2
   list_path_name = [lst_file_save_path + name for name in (just_train, train_name, val_name)]
   create_lst_file(img_root_path, list_path_name, choice)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值