top of page
概要

robolureの実現のために、カメラ画像を用いて①魚検知、②魚移動方向推定を行っていきたいと思います。

手法は今はやりのdeep learningを用いて行います。最終的には、①魚検知と、②魚移動方向検知を一つのネットワークで行うmulti-task CNNを作りたいと思いますが、まずは順番にそれぞれのタスク①、②毎にdeep learningのネットワークを作っていきます。

①魚検知
①魚検知
□概要

deep learningを用いた顔検知と同じように、魚画像と非魚画像を集めて、学習させ魚検知を行います。

結果は、まだ味見程度ですが、下図の通りになっています。岩を魚と誤検知していたり、ぼやけた魚を未検出したりと、問題はいろいろありますが、水中環境(光、濁り、魚の色、魚の向き等)を考えると、ぱっと作った割には良い結果かなぁと思います。詳細は後で述べますが、まだ学習データが少ないのが主な問題と思います。

deep learningを用いた顔検知と同じように、魚画像と非魚画像を集めて、学習させ魚検知を行います。

結果は、まだ味見程度ですが、下図の通りになっています。岩を魚と誤検知していたり、ぼやけた魚を未検出したりと、問題はいろいろありますが、水中環境(光、濁り、魚の色、魚の向き等)を考えると、ぱっと作った割には良い結果かなぁと思います。詳細は後で述べますが、まだ学習データが少ないのが主な問題と思います。

□手法

deep learningにはこちらでも紹介しているchainerというdeep learningのライブラリを用いています。基本構造はこちらのURLのものを参考にしました。ネットワークの構造はconvが4層でfull conectionが2層となっています。

deep learningにはこちらでも紹介しているchainerというdeep learningのライブラリを用いています。基本構造はこちらのURLのものを参考にしました。ネットワークの構造はconvが4層でfull conectionが2層となっています。

deep learningにはこちらでも紹介しているchainerというdeep learningのライブラリを用いています。基本構造はこちらのURLのものを参考にしました。ネットワークの構造はconvが4層でfull conectionが2層となっています。

deep learningでは何より学習データが大量に必要となります。一般的には数千から数万の画像が必要となります。現在毎週のように釣りをしながら、水中カメラでデータを集めていますが、それでは圧倒的に足りないので、google検索結果の画像を集めました。ただ予想以上に集まらず正解画像は455枚しか集まりませんでしたので、data autumantation(データ増強)を行いました。data augumantationは元画像をスケール変換、回転変換等を行う作業になります。今回は①移動、②回転、③反転、④スケール変換、⑤色の変化(青を弱くする、緑を強くする)、⑥ぼやけさせる、という処理を行いました。①~④は通常やられるdata augumantationの処理ですが、⑤、⑥は水中という環境を意識して加えてみました。data autumantatinoの例を下に示します。

 

deep learningでは何より学習データが大量に必要となります。一般的には数千から数万の画像が必要となります。現在毎週のように釣りをしながら、水中カメラでデータを集めていますが、それでは圧倒的に足りないので、google検索結果の画像を集めました。ただ予想以上に集まらず正解画像は455枚しか集まりませんでしたので、data autumantation(データ増強)を行いました。data augumantationは元画像をスケール変換、回転変換等を行う作業になります。今回は①移動、②回転、③反転、④スケール変換、⑤色の変化(青を弱くする、緑を強くする)、⑥ぼやけさせる、という処理を行いました。①~④は通常やられるdata augumantationの処理ですが、⑤、⑥は水中という環境を意識して加えてみました。data autumantatinoの例を下に示します。

 

元画像

data autumantationした画像一覧

最初に、data autumantationせずに正解画像455枚、非正解画像1820枚で学習した結果を示します。左図が正解率で、右図が誤差になります。青色が学習画像で、緑色が評価画像になります。学習画像ではすぐに100%近くの正解率、評価画像では95%ぐらいの正解率となりました。

最初に、data autumantationせずに正解画像455枚、非正解画像1820枚で学習した結果を示します。左図が正解率で、右図が誤差になります。青色が学習画像で、緑色が評価画像になります。学習画像ではすぐに100%近くの正解率、評価画像では95%ぐらいの正解率となりました。

この学習させたネットワークで検出した結果を下図に示します。

この学習させたネットワークで検出した結果を下図に示します。

全然ダメですね。学習データが圧倒的に少ないのが原因だと思いますので、data autumantationでデータを増やしたデータセットで学習を行った結果を下記に示します。まぁまぁの精度で検出できているかなと思います。ただ、これでも画像データは少ないので引き続きデータを集めていきます。

全然ダメですね。学習データが圧倒的に少ないのが原因だと思いますので、data autumantationでデータを増やしたデータセットで学習を行った結果を下記に示します。まぁまぁの精度で検出できているかなと思います。ただ、これでも画像データは少ないので引き続きデータを集めていきます。

次にfull conectionを2層から3層に変更した結果を下に示します。検出率も上がっていますが、誤検出も増えています。やはり、まずはデータを増やすのが最善の策のように思いますので、画像を逐次増やしていきます。

今は学習させたネットワークで画像を順番に切り取ってスキャンしていっているので、処理が重くなっているので、物体がありそうなところだけに対して、forward計算するR-CNNのようなものにしていきたいと思います。

□顔向き

本HPのこちらのページでは、人の顔向きを回帰式として定義し、CNNでときました。しかし、魚の顔向きは正解データを連続値として準備するのが難しいです。そのため、下図のように顔向きを大まかに14方向に分けて、14種類のクラス識別問題として、顔向きを解いていきます。

 

□データ自動作成(DCGAN)

魚画像を集めるのが大変だったため、流行りのDCGANという手法で画像の自動生成を試みました。学習画像が6000枚程度しか無かったですが、​なんとなく魚の画像を自動生成出来ました。下左図が初期の自動生成画像で、下右図が中盤の自動生成画像で、下中央図が最終的な画像になります。

 

□その他

Retinexを用いたHaze Reduction(モヤ取り)

 

http://www.matter-design.net/#!Haze-Reduction(モヤ取り)/feh4d/5739cd510cf2384bbf9562f1

 

bottom of page