MTCNNモデルはpythonまたはc++コードで顔の検出と位置合わせに注意すべき読み込み画像フォーマット変換を実現する
802 ワード
注意点1:
まずMTCNNの著者らは,モデルが使用するピクチャチャネル順序がRGBであり,pythonまたはc++コードでopencvで読み込まれたピクチャのデフォルトチャネル順序がBGRであるため,チャネル順序変換を行う必要がある.pythonコードは次のとおりです.
注意点2:
MTCNNの著者らの訓練モデルはmatlabのコードで訓練され,matlabにおけるデータのメモリにおける記憶方式は,[1,2,3;4,5,6]行列のような列で記憶され,メモリにおける記憶順序は[1,4,2,5,3,6]である.しかしpythonやc++ではデータの格納方式が行単位で格納されており,両者の間にはちょうど転置関係がある.pythonやc++コードでは画像は一般的にopencvで読み込まれ、opencvのデフォルトの画像shapeはheight*width*channel、caffeでテスト時に入力した画像shapeはchannel*height*widthですが、使用するモデルはmatlab(caffe)トレーニングなので、トレーニング時の画像の記憶方式と一致するために画像のshapeをchannel*width*heightに変換する必要があります.pythonコードは次のとおりです.
まずMTCNNの著者らは,モデルが使用するピクチャチャネル順序がRGBであり,pythonまたはc++コードでopencvで読み込まれたピクチャのデフォルトチャネル順序がBGRであるため,チャネル順序変換を行う必要がある.pythonコードは次のとおりです.
img = cv2.imread(img_path)
tmp = img[:, :, 2].copy() # bgr rgb
img[:, :, 2] = img[:, :, 0]
img[:, :, 0] = tmp
注意点2:
MTCNNの著者らの訓練モデルはmatlabのコードで訓練され,matlabにおけるデータのメモリにおける記憶方式は,[1,2,3;4,5,6]行列のような列で記憶され,メモリにおける記憶順序は[1,4,2,5,3,6]である.しかしpythonやc++ではデータの格納方式が行単位で格納されており,両者の間にはちょうど転置関係がある.pythonやc++コードでは画像は一般的にopencvで読み込まれ、opencvのデフォルトの画像shapeはheight*width*channel、caffeでテスト時に入力した画像shapeはchannel*height*widthですが、使用するモデルはmatlab(caffe)トレーニングなので、トレーニング時の画像の記憶方式と一致するために画像のshapeをchannel*width*heightに変換する必要があります.pythonコードは次のとおりです.
img = cv2.imread(imgpath)
img = np.swapaxes(img, 0,2)