第5章

画像分類の結果を評価する

前章の衣服分類の結果を振り返り、混同行列や適合率・再現率を使って間違い方を調べます。

この章で学ぶこと

  • CNNの学習から誤分類の確認までを体験する
  • 混同行列、正解率、適合率、再現率を読み取る
  • モデルの出力と実際の正しさを区別する

1. 衣服画像の分類結果を振り返る

前章のニューラルネットワークで衣服の画像を分類するで得た結果を使います。すでに実行した人は、保存した画像と評価結果を用意してください。まだ実行していない人は、前章の環境構築、完成コードのダウンロード、実行手順に沿って準備します。

初めて実行する場合の手順は次の通りです。結果がそろっていれば、下の記録表から進めます。

  1. リンク先の手順で仮想環境と必要なライブラリを準備する。
  2. 完成コードを保存し、画像の形状とラベルを確認する。
  3. python fashion_mnist_cnn.py を実行する。
  4. 学習用と検証用の正解率、最後のテスト正解率を記録する。
  5. 出力された fashion_mnist_errors.png を開き、正解と予測が違う画像を観察する。

記録には次の表を使えます。値は実行結果を記入し、教材の数値に合わせることを目標にしないでください。

記録する項目 実行結果・観察
最後のエポックの学習正解率
最後のエポックの検証正解率
テスト正解率
間違えた種類の組み合わせ
判断しにくかった画像の特徴

学習回数などを比較するときは検証用データで選びます。リンク先の完成コードは実行ごとにテスト評価も行うため、繰り返して試す場合も、そのテスト値を設定選択の基準にしないでください。

2. 正解率だけでは見えないこと

ここからは計算しやすい別の架空の例を使います。衣服分類の実行結果ではありません。不良品10個、良品90個の合計100個を評価すると、すべてを「良品」と答えるだけで正解率は90%になります。しかし、不良品は一つも見つけられません。

混同行列は、正解と予測の組み合わせを数えた表です。不良品を検出するあるモデルが、次の結果になったとします。行が正解、列が予測です。

正解 \ 予測 不良品と予測 良品と予測 合計
実際に不良品 8 2 10
実際に良品 9 81 90
合計 17 83 100

不良品を「陽性」とすると、8個は正しく検出した真陽性、2個は見逃した偽陰性、9個は誤って検出した偽陽性、81個は正しく除外した真陰性です。

指標 この例の計算 分かること
正解率(accuracy) (8 + 81) / 100 = 89% 全体でどれだけ正しかったか
適合率(precision) 8 / (8 + 9) ≈ 47.1% 不良品と予測した中で、本当に不良品だった割合
再現率(recall) 8 / (8 + 2) = 80% 実際の不良品をどれだけ見つけたか

すべてを良品と答える方法より正解率は低くても、不良品を検出できています。見逃しと誤検出のどちらが重要かは用途で変わります。分母が0になる場合は指標をそのまま計算できないので、件数と計算時の扱いを明記します。

3. 確信度と判断のしきい値

モデルの出力が0.9でも、実際に90%正しいとは限りません。学習で見ていない種類の画像にも、高い値を出すことがあります。衣服10種類の分類器に動物の画像を渡しても、自動的に「対象外」と答えられるわけではありません。

不良品のスコアが一定以上なら検出する、という方式では、その境界をしきい値と呼びます。同じ評価画像とスコアでしきい値を下げると、検出する数が増え、見逃しは減るか変わらない一方、誤検出は増えるか変わりません。しきい値は検証用データで選び、最後にテスト用で確認します。

4. 実際の写真へ広げる前に

衣服分類の実習は、小さなグレースケール画像が対象です。スマートフォンの写真では、背景、照明、角度、対象の大きさが異なります。単に28×28へ縮小するだけでは、実習と同じ条件にはなりません。

自分の課題へ進むときは、利用時に近い画像を集め、対象の種類ごと・撮影条件ごとに間違い方を調べます。判断しにくい画像や対象外の入力を、人が確認できるようにすることも設計の一部です。

やってみよう

  1. 表のモデルが見逃した不良品は何個ですか。
  2. すべてを良品と予測した場合、不良品に対する再現率はいくつですか。
  3. 衣服分類の誤分類例を三つ選び、画像から分かる事実と、間違いの原因についての仮説を分けて書いてください。
  4. ペンと消しゴムの分類を作るなら、どの背景や撮影条件で評価するか計画してください。

解答例

  1. 実際に不良品なのに良品と予測した2個です。
  2. 0 / 10 = 0% です。
  3. 事実は「シャツをTシャツと予測した」、仮説は「袖や襟の形が小さな画像では判別しにくかった」などです。原因を確かめるには、追加の比較が必要です。
  4. 明るい机と暗い机、異なる角度、未知の個体などを含めます。学習用と評価用で同じ個体や連写画像を共有しないようにします。

次のステップ

次章からはOpenCVによる画像処理へ進みます。画像全体の分類から、YOLOによる複数物体の検出、位置関係、カメラ自身の位置・姿勢の推定へと広げていきましょう。