前提
Qiitaのサイトと,GitHubのコードを参考にしResNet50v2+ArcFaceのモデルを構築しました.
画像は物体の輪郭内を白塗りした白黒画像を使用しています.
発生している問題・エラーメッセージ
こちらのモデルは,学習時に画像とラベルの二つの情報を学習データとして与えて学習させたため,推論時には次のように画像とそのクラスラベルの情報を同時に与えてあげる必要があります.
python
1arcface_model = create_arcface_with_resnet50v2(input_shape, s=s_value, m=m_value) # モデル生成 2 3predictions = arcface_model.predict([img, cls]) # softmaxの値を推論(画像(img)とそのクラスラベル(cls)を入力)
こちらに例えばクラス1の画像を入力した際の出力は↓
[1.0000000e+00 0.0000000e+00 0.0000000e+00 2.3753611e-32 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 2.8887461e-28 0.0000000e+00 0.0000000e+00 1.3241292e-28 ]
期待通り,クラス1に該当する確率が1になります.
しかし,これをクラス1の画像であるのにクラスラベルを2(cls=2)として入力すると↓
[0.0000000e+00 1.0000000e+00 0.0000000e+00 1.1876997e-18 0.0000000e+00 4.6460828e-18 0.0000000e+00 0.0000000e+00 3.9981019e-35 0.0000000e+00 0.0000000e+00 0.0000000e+00 ]
とクラス1の画像なのにクラス2の確率が1になってしまします.
この現象は,画像はクラス1のままでクラスラベルを他の数字にしても必ずそのクラスの確率が1になります.
本来であれば,画像の特徴に基づいて確率を出してほしいのに全てclsの値に依存したような結果が出力されてしまうので疑問に思いました.
いったいなぜこのような現象が起きてしまうのでしょうか.
補足情報(FW/ツールのバージョンなど)
ubuntu 20.04
Python 3.8.10
tensorflow-gpu 2.5.3
keras 2.8.0
numpy 1.19.5
jupyter lab 2.3.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。