スタディ 02 · コンピュータービジョン・画像分類
ResNetで服の写真を分類するモデル
2021年・学部研究生K-Fashionの衣類写真をドレス・アウター・パンツ・トップスに分類するモデルを学習し、クラス別の誤りを分析しました。
- 1衣類の画像4種
最も少ないクラスの数に合わせてサンプリング
- 2ResNet50V2
ImageNet辞書学習の重みから始める
- 3クラス別のエラー分析
精度、再現率、混同行列
ImageNet辞書学習ResNet50V2の活用
担当した役割と成果
- 担当する役割
- 事前学習済みのResNet50V2を用いた衣類分類の学習コードと、クラスごとのサンプリング・評価フローを実装し、混同行列(コンフュージョンマトリックス)を用いて誤分類を分析しました。
- 成果
- K-Fashionの写真をドレス・アウター・パンツ・トップスに分類する学習・分析パイプラインを作りました。その後、公開データFashion-MNISTで設定を一つずつ変え、データ拡張とショートカット接続が予測に与える影響を切り分けて確認しました。
自ら実装・分析したもの
- ResNet50V2分類学習コード
- 学習データおよび検証データをクラスごとにダウンサンプリング
- クラス別の指標と混同行列の検討
- ドレスとアウターにおけるエラー事例の分析
ベースとなった研究・公開モデル
- ImageNet 事前学習 ResNet50V2 重み
- K-Fashionデータ
元の研究で分析されたデータ
実験結果と試行錯誤
予測の偏りの原因を拡張設定とショートカットの誤りに見つけました
公開データセット「Fashion-MNIST」で同じコードを実行したところ、予測結果が一方に偏ってしまいました。原因は、データ拡張(オーグメンテーション)の設定とショートカット接続の誤りでした。
- RTX A6000
- TensorFlow 2.15
- Fashion-MNISTの4クラス(ドレス、コート、ズボン、Tシャツ)
- 10 epoch

- 48.9% → 94.4%拡張(オーグメンテーション)のみオフにした比較 · Fashion-MNIST · seed 0
- +29.8%pショートカット接続のみ修正 · 同じシード値 0
- 0%元の設定におけるコートの再現率 · シード値0(同一)
問題と解決策
問題衣類の種類ごとに画像数が異なるため、学習サンプルが一部のクラスに偏っています。
解決学習データと検証データのそれぞれにおいて、サンプル数が最も少ないクラスに合わせてダウンサンプリングを行いました。
問題合計スコアだけでは、どのオブジェクトが混同されているのかを判断するのは困難です。
解決クラスごとの適合率(Precision)・再現率(Recall)および混同行列(Confusion Matrix)を記録し、ドレスとアウターの取り違えといった誤分類の事例を、写真とともに分析しました。
問題予測が一方に偏っても、原因がデータなのかコード設定なのかを見分けにくいです。
原因分析Fashion-MNISTで拡張・ショートカット・正則化の設定を一つずつ変えて比較し、偏りの原因をコードの設定に見つけました。
実験の比較と詳細な結果

| 変更された設定 (1つずつ) | テストの精度 | 最も多く予測されたクラスの割合 |
|---|---|---|
| 元の設定 | 48.9% / 39.1% | 36% / 49% |
| 拡張(オーグメンテーション)オフ | 94.4% / 94.3% | 26% / 26% |
| ショートカット接続の修正 | 78.7% / 63.1% | 35% / 53% |
| L2係数0.01→0.0001 | 39.4% | 48% |
| ブレンド精度:オフ | 52.2% | 51% |
| モメンタム 0.1 → 0.9 | 24.9% | 99.9% |
| ショートカットの修正 + オーグメンテーション(拡張)オフ + L2 0.0001 | 96.4% | 25% |
観察された原因と残された課題
- 拡張(オーグメンテーション)が意図よりも強かった
軽度の拡張(オーグメンテーション)を意図していましたが、実際には±72°の回転、上下反転、半分のサイズへの縮小として動作しました。また、キャッシュの影響により、最初のエポックで行われた変形がそのまま最後まで固定されてしまいました。
- ショートカット接続エラー
identity ショートカットが元の入力の代わりにBNとReLUを経た値を渡しました。 ImageNetの重みはエラーなしに入り、一見明らかになりませんでした。
- 評価方法
READMEのリコールは0.5しきい値基準であり、評価に検証データを書き直しました。ここで上げた精度は、重複しないテストセットで測定した値です。
結果の読み方
- READMEの評価は検証データを書き換えて独立テストではありません
- エラーの原因(不均衡、撮影構図など)までは検証しません。
- 以下の数値はFashion-MNISTの4クラスで10エポック学習した結果
クラスごとにエラーを分けて見て、評価用の分割が何を意味するのかを検討した経験は今も続いています。CAD加工フィーチャのモデルでも、クラスごとのエラーを個別に確認し、形状系列を基準にデータを分けて評価しています。
3Dモデルを読み、加工戦略まで設計するAI
