推論スクリプトの実装(Python API)

CaffeのPython API(PyCaffe)を用いた推論スクリプトの実装について、以下に詳しく説明します。Caffeでは学習済みモデルを用いて入力データに対する出力(推論結果)を得る処理を簡潔に行うことができます。


1. 前提条件

以下の準備ができていることを前提とします:

  • CaffeがPythonサポート付きでインストール済み(pycaffe

  • 学習済みモデルのファイル(.caffemodel

  • ネットワーク定義ファイル(.prototxt、通常はdeploy.prototxt

  • 入力画像などの推論対象データ


2. 必要なモジュールのインポート

python
import caffe import numpy as np import cv2 # OpenCVを使って画像を読み込む

3. 推論のためのネットワークとモデルの読み込み

python
# モデルファイルとネットワーク定義ファイルのパス model_def = 'deploy.prototxt' model_weights = 'model.caffemodel' # GPUを使用する場合(任意) # caffe.set_mode_gpu() # caffe.set_device(0) # CPUを使用する場合 caffe.set_mode_cpu() # ネットワークの読み込み net = caffe.Net(model_def, model_weights, caffe.TEST)

4. 入力画像の前処理

Caffeでは画像データをネットワークに入力する前に、モデルと同じ方法で前処理を行う必要があります:

python
# 入力画像の読み込み image = cv2.imread('input.jpg') image = cv2.resize(image, (224, 224)) # モデルに応じたサイズにリサイズ # BGR → RGB(CaffeはBGR想定のモデルが多い) # image = image[:, :, ::-1] # 画像をfloat32型に変換し、チャネルの順番を変更 image = image.astype(np.float32) image = image.transpose((2, 0, 1)) # HWC → CHW # 平均値の減算(モデル作成時に使用した平均値) mean = np.array([104, 117, 123]).reshape((3, 1, 1)) image -= mean

5. 入力データのネットワークへのセット

python
# ネットワークの入力バッチサイズを1に設定(推論用) net.blobs['data'].reshape(1, *image.shape) net.blobs['data'].data[...] = image

6. 推論の実行

python
output = net.forward()

出力はネットワークの最終層の名前をキーとする辞書です。例えば分類モデルでSoftmax層の名前が'prob'であれば、以下のように結果を取得できます:

python
predictions = output['prob'][0] top_index = predictions.argmax() print("推論結果ラベル:", top_index) print("信頼度スコア:", predictions[top_index])

7. 補足:クラスラベルのマッピング(任意)

python
# ラベルファイルを読み込んでインデックスと名前を対応付ける labels = np.loadtxt('labels.txt', str, delimiter='\n') print("予測ラベル名:", labels[top_index])

まとめ

CaffeのPython APIを用いた推論の手順は次の通りです:

  1. Netクラスでモデルとネットワークを読み込む

  2. 入力画像をモデルと一致する形式に前処理する

  3. データをネットワークに入力し、forward()で推論

  4. 出力から予測ラベルとスコアを取得

この手法を使えば、画像分類タスクなどを含む多くの応用で、Caffeの学習済みモデルを手軽に活用することができます。

生成日:2025/05/23