はじめに
現在転職活動中の近藤です。
先日、TensorFlow 1系ベースでKeras実装されたSSD(Single Shot MultiBox Detector)をTensorFlow 2.18.0仕様に修正し、学習・検証を行いました。
今回の記事では、モデルの学習の経過と推論結果を可視化し、精度の課題と改善点をまとめた内容を共有します。
今回のプロジェクトのソースコードやデータはこちらにアップしています👇
🔧 https://github.com/tech-kondo/ssd_keras/tree/tf2-baseline
🖥️ 使用環境
項目 | 内容 |
---|---|
実行環境 | Google Colab(学習GPU: Tesla T4) |
TensorFlow | 2.18.0 |
Python | 3.11.12 |
データセット | VOC2007 trainval / test |
モデル構成 | SSD300(VGG16ベース) |
📉 学習の様子
- 30epochを実行
- 学習時間は約17時間
-
loss
: 約2.5 → 1.9 に収束 -
val_loss
: 2.95 → 2.90前後で停滞(収束せず)
🔍 推論結果と評価
🧪 検証条件
- 使用モデル:val_loss最小の 13epochモデル
- モデルの検出クラス:'Aeroplane', 'Bicycle', 'Bird', 'Boat', 'Bottle',
'Bus', 'Car', 'Cat', 'Chair', 'Cow', 'Diningtable',
'Dog', 'Horse','Motorbike', 'Person', 'Pottedplant',
'Sheep', 'Sofa', 'Train', 'Tvmonitor'の20クラス - 検証データ:VOC2007 test
- NMSしきい値:0.45 → 0.3 に調整
- 判定確信度:0.6以上 のみ表示
✅ 判定できた画像(うまく検出)
❌ 判定失敗画像(誤検出・過検出)
数百枚を目視確認した結果、全体の精度は 約40〜50%程度 でした。
🔥 課題と改善ポイント
1.VOC2012の学習データを追加
→SSDの論文ではVOC2007だけでなく、VOC2012も学習データとして使用していたので、同じようにVOC2012の学習データを追加する。
2.クラスごとの学習枚数を調整
→クラスによって精度の偏りが大きい。学習データが少ないクラスにはaugmentationで水増ししてデータ量のバランスを調整する。
3.learning_rateの調整
→途中で学習率を下げて後半でうまく収束させる
✨ 得られた学び
- TF2環境で旧コードを動かすための修正力とデバッグ力が身についた
- 修正作業を通じてモデルの構造に触れ、学ぶことができた
- 学習・推論結果の可視化を通じて、課題を得る経験ができた
🔗 詳細記事はこちら
🔗 【物体検出】ColabでSSD-Keras(TF1)を動かすためにTensorFlow 2対応した全作業記録
✍️ おわりに
ここまで読んでくださってありがとうございました!
現在GoogleColabのGPUの使用制限が来てしまい、モデルの精度改善作業に取り掛かれずにいたので備忘録として成果と考察をまとめてみました🌱
はやく制限が解除されてVOC2012の学習データを追加した再学習結果を更新したいです💥
この記事がTF1→TF2対応や物体検出モデルの再利用を試みる方の参考になれば幸いです。
いいね・ストック・フォローしてもらえるととても励みになります!