More Related Content
Similar to 新入社員の俺がDeepLearningのコードを書いてみたら神検出率だった件 (10)
More from Study Group by SciencePark Corp. (20)
新入社員の俺がDeepLearningのコードを書いてみたら神検出率だった件
- 11. Open Image Dataset V6からデータセットをそれぞれ取得した。
・YOLO
・117個のデータセット
・Mask-RCNN
・40個のデータセット
これらのデータセットを使って学習を行い、推論時に必要となる
モデルを生成する。
1. YOLO・ Mask-RCNNを使った学習
Editor's Notes
- 今日は、自分が入社して初めて担当したプロジェクトで学んだことを発表したいと思います。
初めてAIを使った画像認識をしてみて、自分なりに流れをまとめてみました。
AI初心者の方がDeepLearningを使った学習・推論を大まかにイメージできるようにまとめたもので、
詳しい使い方や実際のコードはネットで調べれば簡単に見つけられると思いますので、今回は紹介していません。
- 自分は今年の4月に入社しました。入社前の2年間、職業訓練校で主にC言語、javaを中心に勉強してきました。
AIに関しては、まったく初めての状態でした。
- 概要としては、まずdeepLearningとは何なのかについて話します。
そのあとに、今回のプロジェクトで扱ったYOLO,Mask-RCNNの学習・検出について話します。
- まずディープラーニングという言葉がどこに属している言葉なのかを説明します。
機械に人間っぽいことをさせるのが広義のAI・人工知能です。
次に、特定のタスクをこなせるように人間が機械に学習させるのが機械学習です。
ここには正解データと一緒に学習させる教師あり学習、正解データを与えずに学習させる教師なし学習、強化学習と大きく3つに分けられます。
次に、深層学習(DeepLearning)は人間の神経細胞・ニューロンのつながりを参考にして作ったモデル(ニューラルネットワーク)を多層化したもので、音声認識や画像認識において高い精度で検出できる手法のことです。
これは様々なニューラルネットワークが存在していますが、その中でも最も有名なのがCNNというもので、ほかのニューラルネットワークに比べて精度が高くもっとも使われています。このCNNをうまく画像認識向けに応用したのがRCNNで、今回使ったYOLOやMask-RCNNに使われている手法になります。
- 機械学習の主なプロセスは学習と推論の二つです。学習では、認識させたい物体の特徴を学習させるためにその物体の画像を読み込ませます。
次にそれらの特徴を学習したモデルを使って、初めて見た画像に対して物体の検出を行います。
例えば、機械に犬を認識させたいという場合、まず様々な種類の犬の特徴を学習させます。
その時に、物体の画像とともにその画像内にある認識させたい物体(この例では犬)の位置情報を読み込ませます。
すると、機械は大量の犬の画像を基に、犬の特徴を自分なりに定義します。
ここでは様々なデータが大量にあればあるほどより正確な特徴をとらえやすくなります。
そのあと、その定義された特徴を基にして初めて見る画像に犬がいるか、またそれはどの位置にいるのかを推論します。
- 今回はYOLO,Mask-RCNNと呼ばれる2つの物体検知アルゴリズムを使って釘の画像認識に挑戦しました。
まずは学習ですが、YOLOは物体の画像とその物体1つずつの位置情報(矩形)が必要です。
Mask-RCNNでは物体の画像とその物体の位置情報を示すマスク画像が必要になります。
- YOLOは、釘のオリジナル画像と釘それぞれの位置情報を一緒に学習させて、最終的には右上の画像のような結果が取れれば、物体をうまく検出できていることになります。
Mask-RCNNは、釘のオリジナル画像と釘それぞれの位置情報を表すマスク画像を一緒に学習させて、最終的には右下の画像のような結果が取れれば、物体をうまく検出できていることになります。
また、これらオリジナル画像と物体の位置情報を合わせたものをデータセットと呼びます。
- しかし、自分で一つ一つ、画像とその物体の位置情報を表すテキストデータやマスク画像を作るのは時間がかかります。
そこで今回はGoogleが公開しているOpenImageDatasetV6というオープンソースのデータセットを使って学習することにしました。
- 画像と矩形の位置情報が一緒になっているデータセット
- 画像とマスク画像での位置情報が一緒になっているデータセット
- Open Imageから取得したデータセット、YOLOでは117個のデータセット、Mask-RCNNでは40個のデータセットを使ってそれぞれ学習を行っていき、
推論時に必要となるモデルを生成します。
- 次にYOLOで生成されたモデルを使って検出を行いました。左側のオリジナル画像を使って推論を行った結果、右の画像ような検出結果が得られました。
かなり高い精度で検出できているのがわかると思います。
- 次にMask-RCNNで生成されたモデルを使って検出を行いました。左側のオリジナル画像を使って推論を行った結果、右の画像ような検出結果が得られました。
これもまた、かなり高い精度で検出できているのがわかると思います。
- YOLO、Mask-RCNNともに高い精度で検出することができました。
しかし、いま見せたのはすべて学習に使った画像で、実際に使われる状況では、検出は学習に使った画像だけではないので、
学習に使っていない画像で検出してみなければどれだけ正確に検出できるのかは測れないと思います。
それでは未知の画像で検出してみます。ちなみに使用した画像は自宅の周りを歩いて自分のiphoneで取ったものです。
- まずはYOLOでの検出になります。物体自体の検出はできているようです。
- こちらも検出できている数は多くないものの、かろうじて検出はできています。
- 最後の画像です。これは比較的高い精度で検出できてます。
- 次はMASK-RCNNでの検出ですが、うまく検出できていません。
- ほかの画像と同様に物体自体をうまく検知できていません。
- 所感。
YOLOは学習データに対しては神検出率で、未知のデータに対してもある程度対応することができたと思います。
Mask-RCNNは学習データに対しては神検出率だったものの、未知のデータに対しては全く対応することができませんでした。
考えられる原因は、2つあります。
1つ目は学習データ自体が量、種類ともに少なかったことです。
YOLOが117個のデータセットで学習したのに対して、Mask-RCNNは40個のデータセットしかありませんでした。
2つ目はモデルの学習回数が少ないことです。
YOLOが9000回に対してMask-RCNNは3500回しか学習しませんでした。
次回は、学習データの量、質ともに気を使いながら、できるだけ多く学習できるようにして、再挑戦したいと思います。
- 以上です。
ご清聴ありがとうございました。質問があれば受け付けます。