Face Recognition System - mise à jour.

1. projet

Le projet de système de reconnaissance faciale. Point idée de base est la suivante: Pour l'image d'entrée, d'abord, la détection des visages par le réseau MTCNN, l'image de visage acquise, puis insightface pour l'extraction de traits du visage, la comparaison des données dans la base de données, identifier le visage. Structure d'objet comme indiqué:

Système de reconnaissance de visage configuration figure 1

Tout d' abord besoin de former le réseau mtcnn, identifier la détection de visage. réseau de formation MTCNN dans le « algorithme pour comprendre et mettre en œuvre MTCNN a été atteint » dans ce modèle peut être utilisé directement formé. Pour insightface, la nécessité d' une formation de insightface.

Ce projet utilise l'environnement: ubuntu16.04 + RTX2070S.

2. Processus de mise en œuvre du projet

2.1 Traitement des données

2.1.1 Formation de traitement de données

Utilisé dans le projet CASIA-Webface données, données télécharger les fichiers suivants:

Ce qui, train.idx et les données train.rec est utilisé pour la formation, et le reste des fichiers bin sont des ensembles de données de test.

Tout d'abord, créez un dossier utils, des composants communs sont stockés dans les utilisations du projet, qui dans le fichier de configuration globale config.py, le code est le suivant:

1  import os
 2  
3  
4  # paramètres prepare_data 
5 mxdata_dir = " ./data " 
6 tfrecord_dir = " ./data/CASIA.tfrecords " 
7 lfw_dir = ' ./data/lfw ' 
8 lfw_save_dir = ' ./data/lfw_face ' 
9 eval_dir = ' ./data/lfw_face.db ' 
10 eval_datasets_self = [ ' ./data/lfw_face.db ' ]
 11 eval_datasets = [ " ./data/lfw.bin ", " ./Data/agedb_30.bin " , " ./data/calfw.bin " ,
 12                   " ./data/cfp_ff.bin " , " ./data/cfp_fp.bin " , " ./data/cplfw.bin " ' ./data/lfw_face.db ' ]
 13  
14  
15  # de paramètres de modèle 
16 model_params = { " backbone_type " : " resnet_v2_m_50 " 17 " out_type " :" E                 " 18 " bn_decay " : 0,9 ,
 19 " weight_decay " : 0,0005 ,
 20 " keep_prob " : 0,4 ,
 21 " embd_size " : 512 }
 22 23 24 # paramètres d'entraînement 25 s = 64,0
 26 m = 0,5
 27 class_num = 85742
 28 de lr_steps = [40000, 60000, 80000 ]
 29 lr_values = [0,004, 0,002, 0,0012, 0,0004 ]
 30 impulsion = 0,9
 31                                                                     
 
 
addrt = " ./data/CASIA.tfrecords " 
32 model_patht = " ./model/Arcface_model " 
33 img_size = 112
 34 batch_size = 128
 35 addr = " ../data/CASIA.tfrecords " 
36 model_name = " Arcface " 
37 train_step = 1000001
 38 model_path = " ../model/Arcface_model " 
39 gpu_num = 2
 40 model_save_gap = 30000
 41  
42  
43  # paramètres d'évaluation 
44 eval_dropout_flag =Faux
 45 eval_bn_flag = False
 46  
47  
48  # paramètres de base de données de la face 
49 de custom_dir = ' ../data/custom ' 
50 arc_model_name = ' Arcface-330000 ' 
51 arc_model_path = ' ./model/Arcface_model/Arcface-330000 ' 
52  
53 base_dir = ' ./model/MTCNN_model ' 
54 mtcnn_model_path = [os.path.join (base_dir, " Pnet_model / Pnet_model.ckpt-20000 " ),
 55                      os.path.join (base_dir," Rnet_model / Rnet_model.ckpt-40000 " ),
 56                      os.path.join (base_dir, " Onet_model / Onet_model.ckpt-40000 " )]
 57 embds_save_dir = " ../data/face_db "
Afficher le code

 

Étant donné que les données sont stockées format mxnet, vous devez d'abord convertir les données dans un format TFrecord créer un fichier gen_tfrecord_mxdata.py dans le répertoire racine du projet, le code est le suivant:

1  import tensorflow comme tf
 2  import mxnet que mx
 3  import os
 4  import io
 5  import numpy comme np
 6  import CV2
 7  import temps
 8  de scipy import misc
 9  import argparse
 10  de utils importent config
 11  
12  
13  def arg_parse ():
 14  
15      analyseur = argparse.ArgumentParser ()
 16     parser.add_argument ( " --read_dir " , par défaut = config.mxdata_dir, type = str, help = ' répertoire pour lire les données ' )
 17      parser.add_argument ( " --save_dir " , par défaut = config.tfrecord_dir, type = str, aide = ' chemin d'enregistrer le fichier TFRecord ' )
 18  
19      retour parser.parse_args ()
 20  
21  
22  def main ():
 23      
24      avec tf.python_io.TFRecordWriter (save_dir) comme écrivain:
 25          idx_path = os.path.join (read_dir , ' train.idx ')
 26          bin_path = os.path.join (read_dir, ' train.rec ' )
 27          imgrec = mx.recordio.MXIndexedRecordIO (idx_path, bin_path, ' r ' )
 28          s = imgrec.read_idx (0)
 29          l' en- tête, _ = mx .recordio.unpack (s)
 30          imgidx = liste (portée (1 , int (header.label [0])))
 31          étiquettes = []
 32          pour i dans imgidx:
 33              img_info = imgrec.read_idx (i)
 34 en-              tête, img =mx.recordio.unpack (img_info)
 35              label = int (header.label)
 36              labels.append (label)
 37              img = io.BytesIO (img)
 38              img = misc.imread (img) .astype (np.uint8)
 39              img = cv2.cvtColor (img, cv2.COLOR_RGB2BGR)
 40              img_raw = img.tobytes ()
 41              
42              exemple = tf.train.Example (= caractéristiques tf.train.Features (feature = {
 43                  " img " : tf.train. caractéristique (bytes_list = tf.train.BytesList (value = [img_raw])),
 44                  "étiquette " : tf.train.Feature (int64_list = tf.train.Int64List (value = [label])),
 45                  }))
 46              
47              writer.write (example.SerializeToString ())             
 48              
49              si i% 10 000 == 0 :
 50                  impression ( ' % d images traitées ' % i, " temps: " , time.time () - commencer)
 51  
52  
53  si  __name__ == " __main__ " :
 54  
55      parser = arg_parse ()
 56 
57      save_dir = parser.save_dir
 58      read_dir = parser.read_dir
 59  
60      begin = time.time ()
 61      
62      main ()
Afficher le code

 

Par le code ci-dessus, les données de formation est converti en format de données mxnet le format TFRecord.

 

analyse des pertes ArcFace et le code , voir insightface introduction,

Je suppose que tu aimes

Origine www.cnblogs.com/xjlearningAI/p/12459464.html
conseillé
Classement