前回の記事(YOLOとEfficientNetの違いとは?物体検出AIと画像分類AIを分かりやすく解説)では、
- YOLO(物体検出AI)
- EfficientNet(画像分類AI)
の違いについて紹介しました。
実は、現在の構成は最初から決まっていたわけではありません。
開発当初は、
「YOLOだけで全部できるのでは?」
と考えていました。
YOLOは物体検出だけでなく、物体の種類まで分類できます。
つまり、
「牌を見つける」
「何の牌なのかを判断する」
この2つを1つのAIで行うことができます。
実際に私も、この方法で開発を始めました。
しかし、開発を進めていくうちに、もっと開発しやすい方法があることに気付きました。
今回は、その試行錯誤について紹介します。
最初はYOLOだけで牌認識しようとしていた
YOLOは物体検出AIですが、
クラスを設定することで、
- 一萬
- 二萬
- 東
- 白
など、それぞれの牌を直接認識できます。
つまり、構成としてはとてもシンプルです。
カメラ
↓
YOLO
(検出+分類)
↓
CPU
AIが1つなので、
実装もシンプルになりそうでした。
実際に私も、この構成で学習を進めていました。
YOLOだけでも動く。でも改善しづらかった
YOLOだけでも、牌の検出と分類は十分可能です。
実際に認識もできますし、学習を繰り返せば精度も向上していきます。
しかし、開発を進める中で、
「改善のしやすさ」
という別の問題が見えてきました。
例えば、
「二萬と認識された」
という結果になったとします。
もちろん、デバッグ用に出力を確認すれば、
- YOLOが正しく牌を検出できたのか
- 分類で間違えたのか
といった原因を判断することはできます。
ただ、毎回その確認を行うのが面倒でした。
YOLOが検出と分類の両方を担当していると、
認識ミスが起こるたびに、
「検出が悪かったのか」
「分類が悪かったのか」
を確認する必要があります。
学習を繰り返すたびにこの作業を続けるのは、思っていた以上に手間がかかりました。
まずは「14枚を見つける」ことだけに集中する
そこで、
YOLOには
牌を検出することだけ
を担当してもらうことにしました。
つまり、
カメラ
↓
YOLO
(牌を検出)
↓
牌画像を切り出し
ここまでをYOLOの役割にしました。
まずは、
「14枚の牌を安定して検出できること」
だけを目標にします。
牌をきちんと切り出せるようになれば、
分類精度はあとから何度でも改善できます。
つまり、
- まず物体検出を完成させる
- 次に分類モデルを育てる
というように、段階的に開発を進められるようになりました。
分類AIもさらに2段階に分けた
さらに現在は、
分類AIも2段階に分けています。
現在の構成は次のようになっています。
カメラ
↓
YOLO
(牌を検出)
↓
牌画像を切り出し
↓
EfficientNet①
(萬子・筒子・索子・字牌)
↓
EfficientNet②
(1〜9・東南西北白發中)
↓
CPU
最初の分類AIでは、
- 萬子
- 筒子
- 索子
- 字牌
という大まかな種類だけを判定します。
その後、
萬子なら萬子モデル、
字牌なら字牌モデル、
というように、それぞれ専用の分類モデルへ渡します。
こうすることで、
一度にすべての牌を分類するよりも、
学習しやすく、改善もしやすい構成になりました。
AIを分けたことで得られたメリット
現在の構成にして良かったと感じていることは、大きく3つあります。
① 開発を段階的に進められる
まずはYOLOだけ完成させる。
その後、分類モデルだけ改善する。
というように、
目標を小さく分けながら開発できるようになりました。
② デバッグしやすくなった
認識ミスが起きても、
まずは
「YOLOは正しく牌を切り出せているか」
だけを確認します。
もし切り出しが正しければ、
分類モデルだけを改善すれば済みます。
原因の切り分けが非常にシンプルになりました。
③ 分類モデルだけ何度でも育てられる
YOLOが安定して牌を切り出せるようになれば、
分類モデルだけを再学習できます。
YOLOを毎回学習し直す必要がないため、
認識精度の改善もしやすくなりました。
この考え方は、次回紹介する「再学習」の仕組みにもつながっています。
まとめ
最初は、
YOLOだけですべて認識しようと考えていました。
しかし、実際に開発を進めると、
AIを役割ごとに分けた方が、
開発もしやすく、
改善もしやすいことが分かりました。
現在は、
- YOLO(牌を検出)
- EfficientNet①(牌種を分類)
- EfficientNet②(牌を分類)
という3つのAIが、それぞれ得意な役割を担当しています。
一見すると少し遠回りな構成ですが、
結果として、この方法が最も開発しやすく、認識精度も向上させやすい構成になりました。



コメント