LFWのpairをまねる.txt独自のデータセットを生成するtxtファイル
最近facenetのvalidaを走っていますon_lfw.pyのサンプルは、独自のデータセットでコードを実行したい場合です.pairについてtxtの説明、参照http://vis-www.cs.umass.edu/lfw/README.txtコードを記述して自分のpairを生成する.txtファイル:
完成してからlfwを修正します.pyでget_paths()のコード、は次のように変更されました.
import glob
import os.path
import numpy as np
import os
#
INPUT_DATA = r'F:\dataset\MIX'
def create_image_lists():
matched_result = set()
k = 0
# , x (root,dirs,files), INPUT_DATA ,
# ,
sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
while len(matched_result) < 3000:
for sub_dir in sub_dirs[1:]:
#
extensions = 'png'
# file_list
file_list = []
# os.path.basename(sub_dir) sub_sir
dir_name = os.path.basename(sub_dir)
file_glob = os.path.join(INPUT_DATA, dir_name, '*.' + extensions)
# glob.glob(file_glob) , file_list
file_list.extend(glob.glob(file_glob))
if not file_list: continue
#
label_name = dir_name
length = len(file_list)
random_number1 = np.random.randint(50)
random_number2 = np.random.randint(50)
base_name1 = os.path.basename(file_list[random_number1 % length]) #
base_name2 = os.path.basename(file_list[ random_number2 % length])
if(file_list[random_number1%length] != file_list[random_number2%length]):
#
matched_result.add(label_name +'\t'+ base_name1+ '\t'+ base_name2)
k = k + 1
#
return matched_result, k
def create_pairs():
unmatched_result = set() #
k = 0
sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]
# sub_dirs[0] , ,
for sub_dir in sub_dirs[1:]:
#
extensions = ['png']
file_list = []
# file_list
dir_name = os.path.basename(sub_dir)
for extension in extensions:
file_glob = os.path.join(INPUT_DATA, dir_name, '*.'+extension)
# glob.glob(file_glob) , file_list
file_list.extend(glob.glob(file_glob))
length_of_dir = len(sub_dirs)
for j in range(24):
for i in range(length_of_dir):
class1 = sub_dirs[i]
class2 = sub_dirs[(length_of_dir-i+j-1) % length_of_dir]
if ((length_of_dir-i+j-1) % length_of_dir):
class1_name = os.path.basename(class1)
class2_name = os.path.basename(class2)
#
extensions = 'png'
file_list1 = []
file_list2 = []
# file_list
file_glob1 = os.path.join(INPUT_DATA, class1_name, '*.' + extension)
file_list1.extend(glob.glob(file_glob1))
file_glob2 = os.path.join(INPUT_DATA, class2_name, '*.' + extension)
file_list2.extend(glob.glob(file_glob2))
if file_list1 and file_list2:
base_name1 = os.path.basename(file_list1[j % len(file_list1)]) #
base_name2 = os.path.basename(file_list2[j % len(file_list2)])
# unmatched_result.add([class1_name, base_name1, class2_name, base_name2])
s = class2_name+'\t'+base_name2+'\t'+class1_name+'\t'+base_name1
if(s not in unmatched_result):
unmatched_result.add(class1_name+'\t'+base_name1+'\t'+class2_name+'\t'+base_name2)
k = k + 1
return unmatched_result, k
result, k1 = create_image_lists()
print(len(result))
# print(result)
result_un, k2 = create_pairs()
print(len(result_un))
# print(result_un)
file = open(r'F:\dataset\pairs.txt', 'w')
result1 = list(result)
result2 = list(result_un)
file.write('10 300
')
j = 0
for i in range(10):
j = 0
print("============================================= " + str(i) + ' , ')
for pair in result1[i*300:i*300+300]:
j = j + 1
print(str(j) + ': ' + pair)
file.write(pair + '
')
print("============================================= " + str(i) + ' , ')
for pair in result2[i*300:i*300+300]:
j = j + 1
print(str(j) + ': ' + pair)
file.write(pair + '
')
完成してからlfwを修正します.pyでget_paths()のコード、は次のように変更されました.
for pair in pairs:
if len(pair) == 3:
path0 = os.path.join(lfw_dir, pair[0], pair[1])
path1 = os.path.join(lfw_dir, pair[0], pair[2])
issame = True
elif len(pair) == 4:
path0 = os.path.join(lfw_dir, pair[0], pair[1])
path1 = os.path.join(lfw_dir, pair[2], pair[3])
issame = False
if os.path.exists(path0) and os.path.exists(path1): # Only add the pair if both paths exist
path_list += (path0, path1)
issame_list.append(issame)
else:
print(pair)
nrof_skipped_pairs += 1