AIを使った画像認識と聞くと、「AIが全部まとめて判断してくれる」というイメージを持つ方も多いのではないでしょうか。
実は、画像認識AIにもさまざまな種類があり、それぞれ得意な役割が異なります。
今回開発している麻雀CPUでも、1つのAIですべてを処理しているわけではありません。
・麻雀牌が「どこにあるのか」を見つけるAI
・麻雀牌が「何の牌なのか」を判断するAI
この2種類のAIを組み合わせて牌認識を行っています。
この記事では、AI初心者の方にも分かりやすく、
・物体検出とは?
・画像分類とは?
・YOLOとは?
・EfficientNetとは?
・麻雀CPUではどのように使っているのか
について紹介します。
AIにもさまざまな種類がある
AIと一言でいっても、その役割はさまざまです。
例えば、
・写真に猫が写っているか判定するAI
・人の顔を見つけるAI
・音声を文字に変換するAI
・日本語を英語へ翻訳するAI
・文章を作成するAI
など、それぞれ得意なことが違います。
画像認識AIの中でも、
「どこにあるのか」を見つけるAI
と
「何なのか」を判断するAI
は別の種類になります。
今回私が開発している麻雀CPUでは、この2種類のAIを組み合わせています。
物体検出とは?
物体検出(Object Detection)は、
画像の中にある物体の位置を見つけるAIです。
例えば、麻雀牌が14枚並んだ画像があるとします。
物体検出AIは、
「ここに牌があります。」
「ここにも牌があります。」
というように、それぞれの牌を四角で囲みます。

この黄緑色の四角は「バウンディングボックス」と呼ばれます。
つまり物体検出AIが得意なのは、
・どこにあるのか
・いくつあるのか/何枚あるのか
を見つけることです。
画像分類とは?
画像分類(Image Classification)は、
画像が何なのかを判定するAIです。
例えば、牌を1枚だけ切り出した画像を入力すると、
「これは一萬です。」
「これは東です。」
「これは赤五萬です。」
というように、その画像が何なのかを判定します。

画像分類AIは、
・画像全体を見る
・何の画像なのかを判断する
ことが得意です。
逆に、画像の中から物体を探すことはできません。
つまり、
物体検出は「どこにあるか」を見つけるAI、
画像分類は「何なのか」を判断するAI、
という違いがあります。
YOLOとは?
今回、麻雀牌を検出するために使用しているのが
YOLO(You Only Look Once)
という物体検出AIです。
YOLOは世界中で利用されている代表的な物体検出モデルで、
・高速
・高精度
・リアルタイム処理が得意
という特徴があります。
自動運転や監視カメラなど、さまざまな分野で活用されています。
今回の麻雀CPUでは、
麻雀牌の画像を学習させることで、
画像の中から麻雀牌を検出するAI
として使用しています。
YOLOは分類もできる
実はYOLOは、物体を検出するだけでなく、物体の種類を分類することもできます。
例えば今回であれば、
・一萬
・二萬
・東
・白
といった牌の種類ごとに学習させることで、
「どこにあるか」と「何の牌か」を同時に推論することができます。
そのため、最初は私もYOLOだけで麻雀牌認識を完結させようと考えていました。
しかし、実際に開発を進める中で、別の方法の方が自分の目的には合っていると感じ、現在の構成へ変更しています。
この理由については、別の記事で詳しく紹介します。
EfficientNetとは?
牌の種類を判定するために使用しているのが
EfficientNet
という画像分類AIです。
EfficientNetは、
少ない計算量でも高い認識精度を出せることが特徴です。
今回の麻雀CPUでは、
YOLOが切り出した牌画像を1枚ずつ入力し、
・一萬
・九萬
・東
・白
・赤五萬
など、どの牌なのかを分類しています。
つまり、
YOLOが
「ここに牌があります。」
と見つけ、
EfficientNetが
「これは一萬です。」
と答えるイメージです。
麻雀CPUではどのように組み合わせて使っているのか
今回のシステム全体の流れは次のようになっています。

まずカメラで撮影した画像をYOLOへ入力します。
YOLOは画像の中から麻雀牌を検出し、それぞれの位置を取得します。
その位置情報をもとに、牌だけを1枚ずつ切り出します。
切り出した牌画像をEfficientNetへ入力すると、
「一萬」
「九萬」
「東」
など、牌の種類を判定できます。
最後に、その認識結果を麻雀CPUへ渡し、捨てる牌を考えます。
このように、
「見つけるAI」と「判断するAI」を組み合わせることで、それぞれの得意分野を活かした認識システムになっています。
まとめ
今回は、
・AIにはさまざまな種類があること
・物体検出AIと画像分類AIの違い
・YOLOとEfficientNetの役割
・麻雀CPUでの使い方
について紹介しました。
実は、この構成は最初から決まっていたわけではありません。
開発当初は、YOLOだけで牌の種類まで認識しようと考えていました。
しかし、実際に開発を進める中でさまざまな課題が見つかり、現在の構成へと改善していきました。
今後は、その試行錯誤について紹介します。



コメント