2020-01-06: Producción de datos de combate real (dos) del proyecto InsightFace

1. Preparación del proyecto

1. Referencia de comprensión del proyecto: https://blog.csdn.net/hanjiangxue_wei/article/details/86566435

2. Dirección del proyecto: https://github.com/deepinsight/insightface 

3. Clona el proyecto anterior en el servidor local.

En el modo de línea de comandos en xshell:

  • Conéctese al servidor: nombre de dominio del servidor ssh, introduzca el nombre de usuario y la contraseña;
  • Cambie el directorio de trabajo a la ubicación especificada: cd dir;
  • Clone el proyecto en este directorio: git clone https://github.com/deepinsight/insightface

2. Descarga de datos originales: tome los datos lfw como ejemplo, descargue los datos de la imagen original lfw.

3. Proceso de producción de datos

1. Alineación de datos

  • Cree la carpeta lfwdata: ruta insightface / datasets / lfwdata /, propósito de almacenar datos brutos lfw y datos de alineación lfw_align;
  • Cree la carpeta lfw_align: path insightface / datasets / lfwdata / lfw_align, con el propósito de almacenar los datos de corte y cara alineada;
  • En la línea de comando xshell, active el entorno, cambie al directorio donde se encuentra insightface / src / align / align_lfw.py y ejecute la siguiente declaración: python3 align_lfw.py --input-dir './ insightface / datasets / lfwdata / lfw '--output -dir' ./ insightface / datasets / lfwdata / lfw_align '

2. Generar lista: almacenar en insightface / datasets / lfwdata / lfw

  • Cree un nuevo archivo generatelst.py en insightface / src / data / e ingrese el siguiente contenido:
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\n')

    # 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) + '\n')
            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) + '\n')
            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\n')
        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()


  • Cambie al directorio donde se encuentra src / data / generatelst.py y ejecute la siguiente instrucción:
    • python3 generatelst.py --dataset-dir ./insightface/datasets/lfwdata/lfw_align --list-file ./insightface/datasets/lfwdata/lfw/train.lst --img-ext '.jpg'
      • --dataset-dir seguido del directorio de imágenes alineadas, ruta absoluta (en la carpeta lfw_align)
      • --list-file-dir seguido del directorio de salida de train.lst, ruta absoluta (debajo de la carpeta lfw)

3. Genere archivos rec e idx: almacénelos en / insightface / datasets / lfwdata / lfw

  • Cree un archivo de propiedades en / insightface / datasets / lfwdata / lfw sin sufijo;
  • Abra la propiedad a través del comando vi, ingrese el número de ID (cuántas personas), el tamaño de la imagen, el tamaño de la imagen, es decir, 5749, 112, 112;
  • Ejecute el comando en xshell: python face2rec2.py ./insightface/datasets/lfwdata/lfw/

4. Genere archivos bin y par (datos del conjunto de validación): almacénelos en / insightface / datasets / lfwdata / lfw

(1) Generar archivo de pares

  • Ejecute los siguientes comandos en xshell: python3 generate_image_pairs.py --data-dir ./insightface/datasets/lfwdata/lfw_align --outputtxt ./insightface/datasets/lfwdata/lfw/train.txt --num-samepairs 1000
    • --data-dir seguido de la cara alineada
    • --outputtxt se usa para guardar el archivo train.txt
    • --num-samepairs cuántos pares generar
    • Después de ejecutarse correctamente, se generará un archivo train.txt en datasets / train

(2) Generar archivo bin

  • Ejecute los siguientes comandos en xshell: python3 lfw2pack.py --data-dir ./insightface/datasets/lfwdata/lfw --output ./insightface/datasets/lfwdata/lfw/lfw.bin --num-samepairs 1000

Supongo que te gusta

Origin blog.csdn.net/weixin_38192254/article/details/103861231
Recomendado
Clasificación