LFWのpairをまねる.txt独自のデータセットを生成するtxtファイル


最近facenetのvalidaを走っていますon_lfw.pyのサンプルは、独自のデータセットでコードを実行したい場合です.pairについてtxtの説明、参照http://vis-www.cs.umass.edu/lfw/README.txtコードを記述して自分のpairを生成する.txtファイル:
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()のコード、仿照LFW的pair.txt生成自己数据集的txt文件_第1张图片は次のように変更されました.
    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