【AI】ディープラーニングを使用して物体検出の方法

AI AI

ディープラーニングの物体検出してみたので、その時の内容をまとめます。

物体検出は、自動運転や、工場での不良品の検出、また、めざましテレビのAI天気(リアルタイムに歩いている人のコート着用率がいくつか判定)などいろいろなところで使われており、注目されている技術です。

なぜこれを作ったのかというと、物体検出するには、どういうことをやらないといけないのか、どのような難しさがあるのかを身に着けるために、このアプリを作成しました。

この記事を読んでいただいている方には、ディープラーニング使えば、こんなことができるんだと、興味を持っていただければと考えています。

アプリケーションの概要

どのようなアプリを作ったのかというと、スマホで硬貨を撮影して、その内容をWebへアップし、どこにどの硬貨が移っているのかを検出し、その合計金額を表示するというアプリを作成しました。

物体検出は、SSD(Single Shot MultiBox Detector)を使用しています。

動作デモ

アプリケーション構成

アプリケーションの構成は以下の通りです。

アプリケーション構築の流れ

アプリケーションの流れは以下の通りです。

詳細は、次の章以降で説明しています。

教師データ作成

単純な分類問題と違うのは、教師データの作成の部分です。画像の「どこに」、「どれくらいの大きさで」「どの種類の」硬貨が写っているかを教師データとして用意する必要があります。一つ一つその情報を人力でやってもいいですが、今回は、単一の硬貨の画像を用意して、ランダム位置に硬貨をランダム枚数配置した画像および、硬貨の位置を保持するXMLを出力するスクリプトを作成して、教師データの量産をしました。

Deep Learning

KerasでSSDのモデルを使用して、ディープラーニングし、学習済みモデルを作成しています。

Web

Webの部分は以下の通りです。

作って思ったこと

教師データを自動生成することはデータの量産が簡単にできるため、効率的です。

ただし、作成した教師データは、白色の背景の上に、硬貨の画像をランダム配置したものなので、想定していない状況下の画像データではうまく判定できないなどの問題が起こります。

そのため、自動的に教師用データを作る場合は、想定される背景であったり、影、また硬貨の重なりなどいろいろなシチュエーションを考慮したスクリプトを組む必要があると感じました。

また、人力でやる場合、まずデータ用意が大変、人の手でアノテーションしないといけない、また、人がやるばあいはミスする場合がある(硬貨の種類を間違えるなど)のでこれはこれでコストかかるなと感じました。

コメント