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