スタディ一覧

スタディ 02 · コンピュータービジョン・画像分類

ResNetで服の写真を分類するモデル

2021年・学部研究生
公開コード

K-Fashionの衣類写真をドレス・アウター・パンツ・トップスに分類するモデルを学習し、クラス別の誤りを分析しました。

  1. 1衣類の画像4種

    最も少ないクラスの数に合わせてサンプリング

  2. 2ResNet50V2

    ImageNet辞書学習の重みから始める

  3. 3クラス別のエラー分析

    精度、再現率、混同行列

ImageNet辞書学習ResNet50V2の活用

TensorFlowResNet50V2Class imbalanceError analysis

担当した役割と成果

担当する役割
事前学習済みのResNet50V2を用いた衣類分類の学習コードと、クラスごとのサンプリング・評価フローを実装し、混同行列(コンフュージョンマトリックス)を用いて誤分類を分析しました。
成果
K-Fashionの写真をドレス・アウター・パンツ・トップスに分類する学習・分析パイプラインを作りました。その後、公開データFashion-MNISTで設定を一つずつ変え、データ拡張とショートカット接続が予測に与える影響を切り分けて確認しました。

自ら実装・分析したもの

  • ResNet50V2分類学習コード
  • 学習データおよび検証データをクラスごとにダウンサンプリング
  • クラス別の指標と混同行列の検討
  • ドレスとアウターにおけるエラー事例の分析

ベースとなった研究・公開モデル

  • ImageNet 事前学習 ResNet50V2 重み
  • K-Fashionデータ

元の研究で分析されたデータ

公開されているK-fashion実験における4クラスの混同行列。複数の実際のクラスに対する予測が、クラス2に集中している。
元のK-Fashion実験の混同行列です。行は実際、列は予測クラスで、0=ドレス、1=アウター、2=パンツ、3=トップスです。複数の実際のクラスがパンツ(2)と予測される偏りを確認しました。下のFashion-MNIST実験とは別の資料です。
K-Fashion 原研究のクラス 0~3 学習・検証イメージ数。クラス別のサンプル数の違いを示す棒グラフ
K-Fashionデータの本来のクラス分布です。学習・検証のそれぞれにおいて、最も少ないクラスに合わせてサンプリングを行った理由を示しています。

実験結果と試行錯誤

予測の偏りの原因を拡張設定とショートカットの誤りに見つけました

公開データセット「Fashion-MNIST」で同じコードを実行したところ、予測結果が一方に偏ってしまいました。原因は、データ拡張(オーグメンテーション)の設定とショートカット接続の誤りでした。

  • RTX A6000
  • TensorFlow 2.15
  • Fashion-MNISTの4クラス(ドレス、コート、ズボン、Tシャツ)
  • 10 epoch
Fashion-MNIST独立テストで、元の設定48.9%、ショートカット修正78.7%、増強オフ94.4%、複数の設定を一緒に修正した場合96.4%の精度比較
Fashion-MNIST 4クラスの独立テスト精度(seed 0)です。拡張を切る実験とショートカットを直す実験をそれぞれ比較し、最後の棒はショートカット・拡張・L2の設定をまとめて変えた結果です。
  • 48.9% → 94.4%拡張(オーグメンテーション)のみオフにした比較 · Fashion-MNIST · seed 0
  • +29.8%pショートカット接続のみ修正 · 同じシード値 0
  • 0%元の設定におけるコートの再現率 · シード値0(同一)

問題と解決策

  1. 問題衣類の種類ごとに画像数が異なるため、学習サンプルが一部のクラスに偏っています。

    解決学習データと検証データのそれぞれにおいて、サンプル数が最も少ないクラスに合わせてダウンサンプリングを行いました。

  2. 問題合計スコアだけでは、どのオブジェクトが混同されているのかを判断するのは困難です。

    解決クラスごとの適合率(Precision)・再現率(Recall)および混同行列(Confusion Matrix)を記録し、ドレスとアウターの取り違えといった誤分類の事例を、写真とともに分析しました。

  3. 問題予測が一方に偏っても、原因がデータなのかコード設定なのかを見分けにくいです。

    原因分析Fashion-MNISTで拡張・ショートカット・正則化の設定を一つずつ変えて比較し、偏りの原因をコードの設定に見つけました。

実験の比較と詳細な結果

Fashion-MNISTテスト写真8枚。元々設定の両コート予測はドレス・Tシャツであり、増強を引いたモデルは8枚を全て合わせた例
Fashion-MNIST写真8枚の予測例です。この画像を作成した2つのモデルの全体精度は47.2%・94.2%で、上のグラフのseed 0とは別の実行です。8枚のうちの正解数は全体精度を表すものではありません。
独立テストの精度 · クラスあたり 1,000 枚 · 2 つの値はシード 0 / 1
変更された設定 (1つずつ)テストの精度最も多く予測されたクラスの割合
元の設定48.9% / 39.1%36% / 49%
拡張(オーグメンテーション)オフ94.4% / 94.3%26% / 26%
ショートカット接続の修正78.7% / 63.1%35% / 53%
L2係数0.01→0.000139.4%48%
ブレンド精度:オフ52.2%51%
モメンタム 0.1 → 0.924.9%99.9%
ショートカットの修正 + オーグメンテーション(拡張)オフ + L2 0.000196.4%25%

観察された原因と残された課題

  1. 拡張(オーグメンテーション)が意図よりも強かった

    軽度の拡張(オーグメンテーション)を意図していましたが、実際には±72°の回転、上下反転、半分のサイズへの縮小として動作しました。また、キャッシュの影響により、最初のエポックで行われた変形がそのまま最後まで固定されてしまいました。

  2. ショートカット接続エラー

    identity ショートカットが元の入力の代わりにBNとReLUを経た値を渡しました。 ImageNetの重みはエラーなしに入り、一見明らかになりませんでした。

  3. 評価方法

    READMEのリコールは0.5しきい値基準であり、評価に検証データを書き直しました。ここで上げた精度は、重複しないテストセットで測定した値です。

結果の読み方

  • READMEの評価は検証データを書き換えて独立テストではありません
  • エラーの原因(不均衡、撮影構図など)までは検証しません。
  • 以下の数値はFashion-MNISTの4クラスで10エポック学習した結果
最近のプロジェクトに関連する点

クラスごとにエラーを分けて見て、評価用の分割が何を意味するのかを検討した経験は今も続いています。CAD加工フィーチャのモデルでも、クラスごとのエラーを個別に確認し、形状系列を基準にデータを分けて評価しています。

3Dモデルを読み、加工戦略まで設計するAI