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の導入、