Face Recognition System - atualização.

1. Projeto

O sistema de reconhecimento facial projeto. Item idéia básica é a seguinte: Para a imagem de entrada, primeiro, detecção de face por rede MTCNN, a imagem do rosto adquiriu, em seguida, insightface para extração de características facial, comparação de dados no banco de dados, identificar o rosto. estrutura do item, como mostrado:

Sistema de reconhecimento de face FIG configuração 1

Primeiro precisa treinar rede mtcnn, identificar a detecção de rosto. rede de formação MTCNN no " algoritmo para compreender e implementar MTCNN foi alcançado" neste modelo pode ser usado diretamente treinados. Para insightface, a necessidade de treinamento insightface.

Este ambiente usos do projeto: ubuntu16.04 + RTX2070S.

2. processo de implementação do projeto

2.1 Processamento de Dados

2.1.1 formação de processamento de dados

Utilizado no projeto CASIA-Webface dados, os dados baixar os seguintes arquivos:

Que, train.idx e dados train.rec é usado para treinamento, eo resto dos arquivos bin são testes conjuntos de dados.

Primeiro, crie uma pasta utils, componentes comuns são armazenados dentro dos usos do projeto, que no arquivo de configuração global config.py, o código é a seguinte:

1  importação OS
 2  
3  
4  # prepare_data parâmetros 
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  # parâmetros do modelo 
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 # parâmetros de formação 25 s = 64,0
 26 m = 0,5
 27 class_num = 85742
 28 lr_steps = [40000, 60000, 80000 ]
 29 lr_values = [0,004, 0,002, 0,0012, 0,0004 ]
 30 impulso = 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 nome_do_modelo = " Arcface " 
37 train_step 1000001 =
 38 model_path = " ../model/Arcface_model " 
39 gpu_num = 2
 40 model_save_gap = 30000
 41  
42  
43  # parâmetros de avaliação 
44 eval_dropout_flag =Falsa
 45 eval_bn_flag = falsos
 46  
47  
48  # parâmetros de banco de dados cara 
49 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 "
View Code

 

Porque os dados são armazenados formato mxnet, para que você primeiro precisa converter os dados em um formato TFrecord criar o arquivo gen_tfrecord_mxdata.py no diretório raiz do projeto, o código é a seguinte:

1  importação tensorflow como tf
 2  importação mxnet como mx
 3  importação SO
 4  importação io
 5  importação numpy como np
 6  importação cv2
 7  importação tempo
 8  de scipy importação variado
 9  importação argparse
 10  de utils importar config-
 11  
12  
13  def arg_parse ():
 14  
15      analisador = argparse.ArgumentParser ()
 16     parser.add_argument ( " --read_dir " , default = config.mxdata_dir, type = str, help = ' diretório para ler dados ' )
 17      parser.add_argument ( " --save_dir " , default = config.tfrecord_dir, type = str, help = ' caminho para guardar o ficheiro TFRecord ' )
 18  
19      de retorno parser.parse_args ()
 20  
21  
22  def principal ():
 23,      
24      com tf.python_io.TFRecordWriter (save_dir) como escritor:
 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          cabeçalho, _ = mx .recordio.unpack (s)
 30          imgidx = lista (gama (1 , int (header.label [0])))
 31          etiquetas = []
 32          para i em imgidx:
 33              img_info = imgrec.read_idx (i)
 34              cabeçalho, img =mx.recordio.unpack (img_info)
 35              rótulo = int (header.label)
 36              labels.append (etiqueta)
 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              exemplo = tf.train.Example (características = tf.train.Features (funcionalidade = {
 43                  " img " : tf.train. característica (bytes_list = tf.train.BytesList (valor = [img_raw])),
 44                  "rótulo " : tf.train.Feature (int64_list = tf.train.Int64List (valor = [rótulo])),
 45                  }))
 46              
47              writer.write (example.SerializeToString ())             
 48              
49              se i% 10000 == 0 :
 50                  de impressão ( ' % d fotos processado ' % i, " tempo: " , time.time () - começar a)
 51  
52  
53  se  __name__ == " __main__ " :
 54  
55      analisador = arg_parse ()
 56 
57      save_dir = parser.save_dir
 58      read_dir = parser.read_dir
 59  
60      começam = time.time ()
 61      
62      principal ()
View Code

 

Pelo código acima, os dados de treinamento é convertido em formato de dados mxnet formato TFRecord.

 

ArcFace análise de perda e de código ver insightface introdução,

Acho que você gosta

Origin www.cnblogs.com/xjlearningAI/p/12459464.html
Recomendado
Clasificación