mxnet灵活的创建rec lst idx教程
mxnet version >= 1.3
'''
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
val.lst val.rec val.idx 同理;
'''
1. 创建lst文件,无论分类,还是目标检测都可以使用 多标签
code:
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, gender = lis[0], lis[1]
f.write(str(i) + '\t' +
str(1-int(gender)) + '\t' + age + '\t' +
img_name + '\n')
f.close()
# val.lst
with open(val_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()
return
2. 调用 im2rec.py 生成train.rec train.idx / val.rec val.idx [按照教程即可]
#########################################
后续补充如何写入语义分割的标签; 但是还是觉得pytorch好用,我也会用tensorflow的语义分割标签,暂时不会mxnet的语义分割标签 后续继续更新 mxnet的教程,主要是看 官方接口API,model.fit()等。 gulon基本上和pytorch很接近
#########################################
mxnet symbol 语义分割标签制作:
制作lst文件,格式:index label_img_name image_name
自定义数据读取类,继承自mxnet.io.DataIter