はじめに
前回の記事では Azure Machine Learning Studio の Notebook 上で Anomalib を使い、PatchCore による画像の異常検知モデルを学習させました。今回はその続編として、「学習済みの重みを使って推論まで持っていく」までのメモです。
-
やりたいこと:学習済み PatchCore モデル (
model.ckpt) を使って、任意の画像を推論したい - 最初の試み:Docker 環境で実行 → 依存関係インストールに時間がかかり断念
- 切り替え:Google Colab に移行して実行。なんとか成功
異常検知の PoC や検証で「まず一枚だけでもいいから推論してみたい」ときに、参考になればうれしいです。
対象読者
ValueError: Category 'bottle' not found in the input path で詰まった方へ
実行環境
| 項目 | 内容 |
|---|---|
| 実行環境 | Google Colab(GPUなしでも動作) |
| モデル重み | /content/drive/MyDrive/Colab Notebooks/ckpts/model.ckpt |
| 入力画像 | /content/drive/MyDrive/Colab Notebooks/dataset-hack.png |
1. ローカル Docker でやろうとした話(うまくいかなかった)
まずは手元の Docker 環境で実行しようとしました。
依存関係は anomalib の pyproject.toml から引っ張ってきてインストール。…しかし、時間がかかりすぎて断念。
回線がのんびり屋さんでした。素直に Colab に切り替えることに。
2. Colab セットアップ(省略)
依存関係のインストールなどはここでは割愛。PyTorch、lightning、anomalib、timm あたりを揃えれば動きます。
3. モデル読み込み & 推論用データセット作成
以下のように、事前に学習した重みを読み込み、単一画像を PredictDataset に包んで推論しました。
from anomalib.models import Patchcore
from anomalib.data import PredictDataset
from anomalib.engine import Engine
from pathlib import Path
# モデル読み込み
ckpt_path = "/content/drive/MyDrive/Colab Notebooks/ckpts/model.ckpt"
model = Patchcore.load_from_checkpoint(ckpt_path)
# 単一画像のデータセット化
image_path = "/content/drive/MyDrive/Colab Notebooks/dataset-hack.png"
dataset = PredictDataset(
path=Path(image_path),
image_size=(256, 256), # 学習時と合わせる
)
# 推論実行
engine = Engine()
predictions = engine.predict(model=model, dataset=dataset)
4. 結果の保存先と可視化
推論結果の画像は以下のようなパスに保存されていました:
/content/results/Patchcore/MVTec/bottle/latest/images/dataset-hack.png
おわりに:得られたことと次のステップ
- PatchCore の学習済み重みを Colab 上で読み込み、任意画像 1 枚の推論まで確認できた
- 推論結果の保存先も特定でき、可視化まで一通り完了
- 次は、Docker 環境でもサクッと推論できるように整えていきたい