2020-01-06: InsightFace 프로젝트 실전(二) 데이터 제작

1. 프로젝트 준비
1. 프로젝트 이해 참조:https://blog.csdn.net/hanjiangxue_wei/article/details/86566435
2. 프로젝트 주소:https://github.com/deepinsight/insightface 
3. 상술한 항목을 로컬 서버로 복제
xshell의 명령행 모드에서:
  • 연결 서버: ssh 서버 도메인 이름;사용자 이름과 암호 입력;
  • 작업 디렉터리를 지정된 위치로 전환: cddir;
  • 이 디렉터리에 복제 항목:git clonehttps://github.com/deepinsight/insightface

  • 2. 원시 데이터 다운로드: lfw 데이터를 예로 들어 lfw 원시 이미지 데이터를 다운로드한다.
    3. 데이터 제작 절차
    1. 데이터 정렬
  • lfwdata 폴더 만들기: 경로 insightface/datasets/lfwdata/, 목적 저장 lfw 원시 데이터 및 lfw_align 데이터 정렬;
  • lfw_ 만들기align 폴더: 경로 insightface/datasets/lfwdata/lfw_align, 절단된 얼굴 데이터 저장하기;
  • xshell 명령줄에서 환경을 활성화하고 insightface/src/align/align_로 전환lfw.py가 있는 디렉터리에서 다음 문장을 실행합니다:python3 align_lfw.py --input-dir './insightface/datasets/lfwdata/lfw' --output-dir './insightface/datasets/lfwdata/lfw_align'

  • 2. 생성list:insightface/datasets/lfwdata/lfw에 저장
  • insightface/src/data/에 새로운generatelst.py 파일, 다음 내용을 입력하십시오.
  • import os
    import random
    import argparse
    
    
    class PairGenerator:
        def __init__(self, data_dir, pairs_filepath, img_ext):
            """
            Parameter data_dir, is your data directory.
            Parameter pairs_filepath, where is the pairs.txt that belongs to.
            Parameter img_ext, is the image data extension for all of your image data.
            """
            self.data_dir = data_dir
            self.pairs_filepath = pairs_filepath
            self.img_ext = img_ext
    
        # splitting the database content into 10 random sets
        def split_to_10(self):
            folders = []
            cnt = 0
            for name in os.listdir(self.data_dir):
                folders.append(name)
            folders = sorted(folders) # sorting names in abc order
    
            a = []
            # names of folders - e.g. Talgat Bigeldinov, Kairat Nurtas, etc.
            for name in folders:
                # f = open(self.pairs_filepath, 'a+')
                # looping through image files in one folder
                for file in os.listdir(self.data_dir + '/' + name):
                    # a.append(data_dir + name + '/' + file)
    
                    a.append(name)
                    cnt = cnt + 1
                cnt = cnt + 1
            random.shuffle(a)
    
    
        # splitting the database content into 10 random sets
    
        def write_similar(self, lst):
            f = open(self.pairs_filepath, 'a+')
            for i in range(20):
                left = random.choice(lst)
                right = random.choice(lst)
                f.write(left + '\t' + right + '\t' + '1
    ') # writing 1 IMAGE_PATH LABEL like insightface lst file needs def write_item_label(self): cnt = 0 for name in os.listdir(self.data_dir): if name == ".DS_Store": continue # print(name) a = [] f = open(self.pairs_filepath, 'a+') for file in os.listdir(self.data_dir + '/' + name): if file == ".DS_Store": continue a.append(data_dir + '/' + name + '/' + file) f.write(str(1) + '\t' + data_dir + '/' + name + '/' + file + '\t' + str(cnt) + '
    ') cnt = cnt + 1 # writing 1 IMAGE_PATH LABEL like insightface lst file needs in alphabetic order def write_item_label_abc(self): cnt = 0 names = [] for name in os.listdir(self.data_dir): names.append(name) names = sorted(names) for name in names: print(name) a = [] f = open(self.pairs_filepath, 'a+') for file in os.listdir(self.data_dir + '/' + name): if file == ".DS_Store": continue a.append(data_dir + '/' + name + '/' + file) f.write(str(1) + '\t' + data_dir + '/' + name + '/' + file + '\t' + str(cnt) + '
    ') cnt = cnt + 1 def write_different(self, lst1, lst2): f = open(self.pairs_filepath, 'a+') for i in range(500): left = random.choice(lst1) right = random.choice(lst2) f.write(left + '\t' + right + '\t' + '0
    ') f.close() def generate_pairs(self): for name in os.listdir(self.data_dir): if name == ".DS_Store": continue a = [] for file in os.listdir(self.data_dir + '/' + name): if file == ".DS_Store": continue a.append(name + '/' + file) generatePairs.write_similar(a) def generate_non_pairs(self): folder_list = [] for folder in os.listdir(self.data_dir): folder_list.append(folder) folder_list.sort(reverse=True) # print(folder_list) i = 0 a = [] for dir in os.listdir(self.data_dir): if dir == ".DS_Store": continue for file in os.listdir(self.data_dir + dir): if file == ".DS_Store": continue a.append(dir + '/' + file) # print(a) b = [] for dir in os.listdir(self.data_dir): if dir == ".DS_Store": continue for file in os.listdir(self.data_dir + folder_list[i]): if file == ".DS_Store": continue b.append(folder_list[i] + '/' + file) # print(b) i = i + 1 generatePairs.write_different(a, b) if __name__ == '__main__': # data_dir = "/home/ti/Downloads/DATASETS/out_data_crop/" # pairs_filepath = "/home/ti/Downloads/insightface/src/data/pairs.txt" # alternative_lst = "/home/ti/Downloads/insightface/src/data/crop.lst" # test_txt = "/home/ti/Downloads/DATASETS/out_data_crop/test.txt" # img_ext = ".png" # arguments to pass in command line parser = argparse.ArgumentParser(description='Rename images in the folder according to LFW format: Name_Surname_0001.jpg, Name_Surname_0002.jpg, etc.') parser.add_argument('--dataset-dir', default='', help='Full path to the directory with peeople and their names, folder should denote the Name_Surname of the person') parser.add_argument('--list-file', default='', help='Full path to the directory with peeople and their names, folder should denote the Name_Surname of the person') parser.add_argument('--img-ext', default='', help='Full path to the directory with peeople and their names, folder should denote the Name_Surname of the person') # reading the passed arguments args = parser.parse_args() data_dir = args.dataset_dir lst = args.list_file img_ext = args.img_ext # generatePairs = PairGenerator(data_dir, pairs_filepath, img_ext) # generatePairs.write_item_label() # generatePairs = PairGenerator(data_dir, pairs_filepath, img_ext) generatePairs = PairGenerator(data_dir, lst, img_ext) generatePairs.write_item_label_abc() # looping through our dataset and creating 1 ITEM_PATH LABEL lst file # generatePairs.generate_pairs() # to use, please uncomment this line # generatePairs.generate_non_pairs() # to use, please uncomment this line # generatePairs = PairGenerator(dataset_dir, test_txt, img_ext) # generatePairs.split_to_10()
  • src/data/generatelst로 전환합니다.py가 있는 디렉터리에서 다음 문장을 실행합니다.
  • python3 generatelst.py --dataset-dir ./insightface/datasets/lfwdata/lfw_align  --list-file ./insightface/datasets/lfwdata/lfw/train.lst --img-ext '.jpg'
  • --dataset-dir 뒤에 정렬된 그림 디렉터리, 절대 경로(lfw_align 폴더 아래)
  • -list-file-dir 뒤따라train.lst의 출력 디렉터리, 절대 경로 (lfw 폴더 아래)


  • 3. rec와 idx 파일 생성:/insightface/datasets/lfwdata/lfw에 저장
  • /insightface/datasets/lfwdata/lfw에서property 파일을 만들고 접두사가 없습니다.
  • vi명령을 통해property를 열고 ID 수량(몇 명), 이미지 사이즈, 이미지 사이즈, 즉 5749112112를 입력한다.
  • xshell에서 실행명령:pythonface2rec2.py ./insightface/datasets/lfwdata/lfw/

  • 4.pair와bin 파일 생성(검증 집합 데이터):/insightface/datasets/lfwdata/lfw에 저장
    (1)pair 파일 생성
  • xshell에서 다음 명령을 실행합니다:python3generate_image_pairs.py --data-dir ./insightface/datasets/lfwdata/lfw_align --outputtxt ./insightface/datasets/lfwdata/lfw/train.txt --num-samepairs 1000
  • -data-dir 후접 정렬 후 사람 얼굴
  • --outputtxt는 train을 저장하는 데 사용됩니다.txt 파일
  • -num-samepairs 생성 몇 쌍
  • 운행에 성공하면 데이터sets/train에서train을 생성합니다.txt 파일

  • (2)bin 파일 생성
  • xshell에서 다음 명령을 실행합니다:python3 lfw2pack.py --data-dir ./insightface/datasets/lfwdata/lfw --output ./insightface/datasets/lfwdata/lfw/lfw.bin --num-samepairs 1000
  • 좋은 웹페이지 즐겨찾기