顔認識システム - 更新。

1.プロジェクト

プロジェクト顔認識システム。次のように項目基本的な考え方は次のとおり入力画像に対して、第一、MTCNNネットワーク、取得した顔画像による顔検出、次いでinsightfaceデータベース内の顔特徴抽出、データ比較のために、顔を識別します。示すように、アイテムの構造:

顔認識システムの構成図1

mtcnnネットワークを訓練するためにまず必要な、顔検出を識別します。中MTCNNトレーニングネットワーク「MTCNNを理解し、実装するためのアルゴリズムは、このモデルでは、直接訓練された使用することができます達成されました」。insightfaceについては、insightfaceトレーニングの必要性。

ubuntu16.04 + RTX2070S:このプロジェクトは、環境を使用しています。

2.プロジェクトの実施プロセス

2.1データ処理

2.1.1データ処理トレーニング

プロジェクトで使用CASIA-Webfaceのデータは、データは以下のファイルをダウンロードします。

これは、train.idxとtrain.recデータはトレーニングのために使用され、ビンファイルの残りの部分は、テストデータセットです。

まず、フォルダutilsの作成、共通コンポーネントは次のようにconfig.pyグローバルコンフィギュレーション・ファイルで、コードは、プロジェクトの使用、内部に格納されています。

1つの インポートOS
 2  
3  
4  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。ビン"" ./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  #のモデルパラメータ
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 #のトレーニングパラメータ25 S = 64.0
 26 M = 0.5
 27 = 85742 class_num
 28 lr_steps = [40000、60000、80000 ]
 29 lr_values = [0.004、0.002、0.0012、0.0004 ]
 30勢い= 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  評価パラメータ
44 eval_dropout_flag =45 eval_bn_flag = 46の 
47  
48  顔データベースパラメータ
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 "
コードの表示

 

あなたはフォーマットTFrecordにデータを変換する最初の必要性は、プロジェクトのルートディレクトリにgen_tfrecord_mxdata.pyファイルを作成するようにデータが、mxnet形式を格納しているので、以下のように、コードは次のとおりです。

1  インポートTFとしてtensorflow
 2  インポートMXとしてmxnet
 3  インポートOS
 4  インポートIO
 5  インポートNPとしてnumpyの
 6  インポートCV2
 7  インポート時間
 8  から scipyのダウンロードインポート雑貨
 9  インポートargparse
 10  から utilsのは、インポートconfigの
 11  
12  
13  DEF :arg_parse()
 14  
15      パーサ= argparse.ArgumentParser()
 16     (parser.add_argument " --read_dir "、デフォルト= config.mxdata_dir、タイプ= STR、ヘルプ= ' データを読み込むためのディレクトリ' 17      parser.add_argument(" --save_dir "、デフォルト= config.tfrecord_dir、タイプ= STR、 =ヘルプ' 保存TFRecordファイルへのパス' 18  
19      戻りparser.parse_args()
 20  
21  
22  DEF :メイン()
 23      
24      :ライターとしてtf.python_io.TFRecordWriter(SAVE_DIR)と
 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          ヘッダ、_ = MX .recordio.unpack(S)
 30          imgidx =リスト(範囲(1 、INT(header.label [0])))
 31枚の          ラベル= []
 32           I imgidx:
 33              img_info = imgrec.read_idx(I)
 34              ヘッダIMG =mx.recordio.unpack(img_info)
 35              ラベル= INT(header.label)
 36              labels.append(ラベル)
 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              例= tf.train.Example(機能= tf.train.Features(機能= {
 43                  、 " IMG ":tf.train。特徴(bytes_list = tf.train.BytesList(値= [img_raw]))、
 44                  "ラベル":tf.train.Feature(int64_list = tf.train.Int64List(値= [ラベル]))、
 45                  }))
 46              
47              writer.write(example.SerializeToString())             
 48              
49              なら%I 10000 == 0 :
 50                  プリント' %d個の写真加工'%I、" 時間:"、time.time() - 開始)
 51  
52  
53  場合 __name__ == " __main__ " 54  
55      パーサー= arg_parse()
 56 
57      SAVE_DIR = parser.save_dir
 58      read_dir = parser.read_dir
 59  
60      =始まる(time.time)を
 61      
62      (メイン)
コードの表示

 

上記のコードによって、トレーニングデータは、データフォーマットmxnet TFRecordフォーマットに変換されます。

 

ArcFace損失分析とコードを参照のinsightfaceの導入、

おすすめ

転載: www.cnblogs.com/xjlearningAI/p/12459464.html