axinc-ai / ailia-models

The collection of pre-trained, state-of-the-art AI models for ailia SDK
2.04k stars 325 forks source link

Implement PatchCore #1293

Closed Akasan closed 1 year ago

Akasan commented 1 year ago
kyakuno commented 1 year ago

@Akasan 下記のREADME.mdとdownload_all_models.shへの追加をお願いします。 https://github.com/axinc-ai/ailia-models/blob/master/README.md https://github.com/axinc-ai/ailia-models/blob/master/scripts/download_all_models.sh

kyakuno commented 1 year ago

anomaly_detection/README.mdとanomaly_detection/LICENSEの追加もお願いします。

Akasan commented 1 year ago

@kyakuno いただいたコメントに対応しました。

モデルダウンロード時に必要なため、以下のご対応いただけますでしょうか?

現在padimのストレージに保存されているresnet18とwide_resnet50_2のモデルファイルをpatchcoreのストレージを作成してコピーいただくことは可能ですか? PaDiMのストレージ:https://storage.googleapis.com/ailia-models/padim/ PatchCoreのストレージ(作成していただきたいもの):https://storage.googleapis.com/ailia-models/patchcore/

kyakuno commented 1 year ago

対応、ありがとうございます。モデルはpadimのフォルダからダウンロード頂く形で問題ありません。

Akasan commented 1 year ago

@kyakuno それではダウンロードリンクをpadimに変更しておきます!

kyakuno commented 1 year ago

embeddingsディレクトリの作成が必要そうなので、os.makedirsを追加しました。

Getting transformed features...
Calculating distances...
Maximum distance from cluster centers is 4.89
initial embedding size :  (655424, 768)
final embedding size :  (655, 768)
Traceback (most recent call last):
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 427, in <module>
    main()
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 423, in main
    train_and_infer(net, params)
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 391, in train_and_infer
    embedding_coreset = train_from_image_or_video(net, params)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 196, in train_from_image_or_video
    train_outputs = training(
                    ^^^^^^^^^
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore_utils.py", line 358, in training
    faiss.write_index(index, "embeddings/index.faiss")
  File "/usr/local/lib/python3.11/site-packages/faiss/swigfaiss.py", line 9918, in write_index
    return _swigfaiss.write_index(*args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Error in faiss::FileIOWriter::FileIOWriter(const char *) at /Users/runner/work/faiss-wheels/faiss-wheels/faiss/faiss/impl/io.cpp:98: Error: 'f' failed: could not open embeddings/index.faiss for writing: No such file or directory
kyakuno commented 1 year ago

まだ下記のエラーが出る。

100%|██████████████████████████████████| 3136/3136 [00:00<00:00, 2465480.29it/s]
Traceback (most recent call last):
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 427, in <module>
    main()
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 423, in main
    train_and_infer(net, params)
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 402, in train_and_infer
    threshold = decide_threshold_from_gt_image(net, params, embedding_coreset, gt_imgs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 279, in decide_threshold_from_gt_image
    threshold = decide_threshold(scores, gt_imgs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyakuno/Desktop/repos/ailia-models-ax/anomaly_detection/patchcore/patchcore.py", line 251, in decide_threshold
    precision, recall, thresholds = precision_recall_curve(gt_mask.flatten(), scores.flatten())
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/sklearn/metrics/_ranking.py", line 878, in precision_recall_curve
    fps, tps, thresholds = _binary_clf_curve(
                           ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/sklearn/metrics/_ranking.py", line 749, in _binary_clf_curve
    raise ValueError("{0} format is not supported".format(y_type))
ValueError: unknown format is not supported
Akasan commented 1 year ago

@kyakuno こちら、おそらくground truth画像を設定していなかったときに起こったものだと想定されます! 実装チェックします

kyakuno commented 1 year ago

gt_masksもリポジトリへの登録が必要そうな気がしますね。

kyakuno commented 1 year ago

@Akasan trainフォルダとgt_masksフォルダが存在しない場合に、適切なエラーメッセージを表示するようにしていただけると嬉しいです。

kyakuno commented 1 year ago

動作としては問題なさそうでした。

Akasan commented 1 year ago

@kyakuno 両フォルダがない場合にエラーを出して終了させるようにしました

kyakuno commented 1 year ago

ありがとうございます!良さそうです。