参考链接:
性别年龄文献综述
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 同理;
'''
def create_lst_file(img_root_path, lst_file_save_path):
'''
: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')]
with open(lst_file_save_path, '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')
f.close()
return
def create_lst_train_val_file(img_root_path, train_lst_file_save_path, val_lst_file_save_path):
'''
:param img_root_path:
:param train_lst_file_save_path:
:param val_lst_file_save_path:
:return: 创建人脸-gender-age训练测试集lst文件, 区分 trian/val = 4:1
'''
name_list = [f for f in os.listdir(img_root_path) if f.endswith('jpg')]
random.shuffle(name_list)
num = len(name_list)
# trian.lst
with open(train_lst_file_save_path, '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')
f.close()