【要約】
Windows環境でtimmライブラリを使用した画像分類の手順を説明しています。まず、前準備として、Git、Python、NVIDIA関連ソフトウェア(グラフィックスボードがある場合)、PyTorchのインストール方法を紹介しています。次に、timmのインストールと画像分類の実行方法を解説しています。具体的には、コマンドプロンプトを管理者として実行し、timmをインストールします。そして、TIMMライブラリを使用して事前学習済みのEVA-02モデルを読み込み、指定された画像のURLまたはファイルパスから画像を読み込んで推論を行い、ImageNet-1kのラベルを用いてトップ5の分類結果を表示するサンプルプログラムを作成し、実行します。Pythonプログラムの実行方法やPython開発環境についても触れています。
【目次】
Gitは,バージョン管理システム.ソースコードの管理や複数人での共同に役立つ.
【サイト内の関連ページ】
Windows での Git のインストール: 別ページ »で説明している.
【関連する外部ページ】
Git の公式ページ: https://git-scm.com/
【サイト内の関連ページ】
【関連する外部ページ】
Python の公式ページ: https://www.python.org/
【サイト内の関連ページ】
NVIDIA グラフィックスボードを搭載しているパソコンの場合には, NVIDIA ドライバ, NVIDIA CUDA ツールキット, NVIDIA cuDNN のインストールを行う.
【関連する外部ページ】
コマンドプロンプトを管理者として実行: 別ページ »で説明
PyTorch のページ: https://pytorch.org/index.html
次のコマンドを実行することにより, PyTorch 2.3 (NVIDIA CUDA 11.8 用)がインストールされる. 但し,Anaconda3を使いたい場合には別手順になる.
事前に NVIDIA CUDA のバージョンを確認しておくこと(ここでは,NVIDIA CUDA ツールキット 11.8 が前もってインストール済みであるとする).
PyTorch で,GPU が動作している場合には,「torch.cuda.is_available()」により,True が表示される.
python -m pip install -U --ignore-installed pip python -m pip uninstall -y torch torchvision torchaudio torchtext xformers python -m pip install -U torch torchvision torchaudio numpy --index-url https://download.pytorch.org/whl/cu118 python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
Anaconda3を使いたい場合には, Anaconda プロンプト (Anaconda Prompt) を管理者として実行し, 次のコマンドを実行する. (PyTorch と NVIDIA CUDA との連携がうまくいかない可能性があるため,Anaconda3を使わないことも検討して欲しい).
conda install -y pytorch torchvision torchaudio pytorch-cuda=11.8 cudnn -c pytorch -c nvidia py -c "import torch; print(torch.__version__, torch.cuda.is_available())"
【サイト内の関連ページ】
【関連する外部ページ】
コマンドプロンプトを管理者として実行: 別ページ »で説明
python -m pip install -U timm
mkdir %HOMEPATH%\timm cd %HOMEPATH%\timm notepad classify.py
このプログラムは、TIMMライブラリを使用して事前学習済みのEVA-02モデルを読み込み、指定された画像のURLまたはファイルパスから画像を読み込んで推論を行い、ImageNet-1kのラベルを用いてトップ5の分類結果を表示します。
import os import torch import timm import requests from PIL import Image from io import BytesIO # ImageNet 1kのラベル情報をダウンロード IMAGENET_1k_URL = 'https://storage.googleapis.com/bit_models/ilsvrc2012_wordnet_lemmas.txt' IMAGENET_1k_LABELS = requests.get(IMAGENET_1k_URL).text.strip().split('\n') def initialize_model(model_name, pretrained=True): model = timm.create_model(model_name, pretrained=pretrained).eval() return model def load_image(path, transform): """ 指定されたパス(URLまたはファイル名)から画像を読み込み、モデルの入力形式に変換する関数。 """ if path.startswith('http'): # URLが指定された場合 image = Image.open(requests.get(path, stream=True).raw) else: # ファイル名が指定された場合 image = Image.open(path) image_tensor = transform(image) return image_tensor def perform_inference(model, image_tensor, topk=5): """ 画像をモデルで分類し、トップkのクラスを返す関数。 """ output = model(image_tensor.unsqueeze(0)) probabilities = torch.nn.functional.softmax(output[0], dim=0) values, indices = torch.topk(probabilities, topk) return [{'label': IMAGENET_1k_LABELS[idx], 'index': idx, 'value': val.item()} for val, idx in zip(values, indices)] def main(): model_name = 'eva02_large_patch14_448.mim_in22k_ft_in1k' model = initialize_model(model_name) transform = timm.data.create_transform(**timm.data.resolve_data_config(model.pretrained_cfg)) img_path = 'https://github.com/open-mmlab/mmpretrain/raw/main/demo/demo.JPEG' image_tensor = load_image(img_path, transform) result = perform_inference(model, image_tensor) print("分類結果") print(result) if __name__ == '__main__': main()
Python プログラムの実行
Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.
Python のまとめ: 別ページ »にまとめ
プログラムを classify.pyのようなファイル名で保存したので, 「python classify.py」のようなコマンドで行う.
python classify.py