可視化(学習曲線、フィルタ、特徴マップ)

Caffeにおけるモデルの評価と推論の可視化は、学習の進行状況やネットワーク内部の挙動を理解するために非常に有用です。以下では、主に「学習曲線」「フィルタ(重み)」「特徴マップ(アクティベーションマップ)」の可視化方法について詳しく解説します。


1. 学習曲線の可視化(Loss / Accuracy)

概要

学習曲線は、エポックごとの損失関数(loss)や精度(accuracy)の変化を視覚的に確認する手段です。Caffeではログファイルにこれらの値が出力されます。

方法

  1. ログ出力: solver.prototxtdisplayパラメータにより出力間隔を設定。

  2. ログファイルの取得: caffe trainコマンドの標準出力をログファイルに保存する。

  3. 可視化ツールの使用:

    • tools/extra/parse_log.py を用いてログをCSV形式に変換。

    • Pythonのmatplotlibなどでプロット。

bash
python tools/extra/parse_log.py caffe.INFO.my_log_file python tools/extra/plot_training_log.py.example 0 output/caffe.INFO.my_log_file.train

2. フィルタ(重み)の可視化

概要

CNNにおける畳み込み層の重み(フィルタ)は画像として可視化することで、ネットワークがどのような特徴を捉えようとしているかを直感的に把握できます。

方法(Python API使用)

python
import matplotlib.pyplot as plt import numpy as np import caffe net = caffe.Net('deploy.prototxt', 'trained_model.caffemodel', caffe.TEST) weights = net.params['conv1'][0].data # フィルタの重み (N, C, H, W) # 最初の数フィルタを描画 for i in range(6): plt.subplot(2, 3, i + 1) plt.imshow(weights[i, 0], cmap='gray') plt.axis('off') plt.show()

3. 特徴マップ(Feature Map / Activation Map)の可視化

概要

ある入力画像に対して、特定の中間層が出力する**特徴マップ(活性化値)**を可視化することで、どのような情報が抽出されているかを確認できます。

方法

python
import matplotlib.pyplot as plt import caffe net = caffe.Net('deploy.prototxt', 'trained_model.caffemodel', caffe.TEST) transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2, 0, 1)) # HWC -> CHW image = caffe.io.load_image('sample.jpg') net.blobs['data'].data[...] = transformer.preprocess('data', image) net.forward() # 特徴マップの取得(例: conv1層) feature_map = net.blobs['conv1'].data[0] # 最初の数チャンネルを描画 for i in range(6): plt.subplot(2, 3, i + 1) plt.imshow(feature_map[i], cmap='gray') plt.axis('off') plt.show()

補足: 可視化の目的

  • 学習曲線: 過学習や未学習の検出

  • フィルタ: モデルが学習したエッジ検出などの基本特徴

  • 特徴マップ: 画像のどの部分に着目しているか(ネットワークの「注目」)


まとめ

可視化対象 使用技術 目的
学習曲線 parse_log.py + matplotlib 学習の進行状況確認
フィルタ net.params + matplotlib 重みの理解
特徴マップ net.blobs + 入力画像 内部処理の可視化

Caffeは他の最新フレームワークと比較すると可視化機能が少ないものの、Python APIを活用することで柔軟な可視化が可能です。分析精度を高めるためには、ログの整備と可視化コードの活用が重要です。

生成日:2025/05/23