4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chainer/CuPyAdvent Calendar 2018

Day 16

Chainerを使ってM3ナットをカウントしてみる

Last updated at Posted at 2018-12-15

はじめに

 Chainer meetup #8で発表させていただいた内容(スライド)の内、「DiscoGANを使って「教師なし」でお米を数えてみる」の続き部分を文章にしたものなります。なので、初めて見られる方は前の投稿の方もみていただけると助かります。

 あと、meetupの動画がyoutube上がっているので、そちらの方がわかりやすいかもしれません。

今回のデータとやりたいこと

 今回はM3ナットをデジカメで撮影したサンプルのサンプルを二つ(16個と108個)用意しました。これらをDiscoGAN使ってカウントしやすいガウス球ドメインに変換し、その後カウントします。お米の時は、ランダムにばらまくガウス球の数は「見た目」でだいたいオーダだけを合わせていたのですが、どの程度適応できる範囲があるかわからないのでランダムにばらまく数(13個、26個、52個、131個)を変えてテストしてみました。
スライド1.PNG

ばらまく数を変えた結果

 この表は16個のナット画像に対し、平均13個のガウス球をばらまいたもので学習させるとカウントが20回中5回成功したという見方をします。画像のナットの数に対して、オーダがずれるとカウントが失敗する傾向があります。
スライド2.PNG

 どんな風に失敗したかというと、ナット16個 << ガウス球52個 のような場合は1個のオブジェクトに対して多くの球が生成されるようになり、ナット108個 >> ガウス球26個 のような場合は黒を生成しやすくなる傾向になりました。
スライド3.PNG

 また、4種類のランダム画像をそれぞれ25%の確率で学習したものもうまく学習されませんでした。
スライド4.PNG

ディーラ(仮)を使ったネットワーク

 そこで4種類のランダム画像を調整して配るような「ディーラ(仮)」を使ったネットワークを作成して、学習させてみました。ディーラは1⇒4個のネットワークで、ChainerにFunctionとして実装させているGunbel-Softmaxを使ってサンプリングを行うことで、簡単に逆伝播もできるようになります。変換器と同様にディーラ側のロスも識別機をだます方にしてあるので、結果として変換器の出力とディーラの選ぶランダムガウス球画像が似通ってくれるのを期待しています。
 ChainerだとFunctionとLinkをつなげさえすれば簡単に逆伝播できるので、とても楽です。
スライド5.PNG

ディーラを使った結果

こちらはナット16個の動画
こちらはナット108個の動画

 学習が進むにつれ、ディーラ(仮)がナット画像の数に近い数のランダムガウス球画像を出すように調整してくれるため、カウントがある程度うまくいくようになりました。
スライド6.PNG

さいごに

 本当はもう少ししっかりしたデータを出したかったのですが、現状不安定で、meetupに間に合わせるために、最初にうまくいった例を出さざる負えなかった感はあります。なのでもうすこし時間をかけてデータを整えていきたいと思っています。

 また、コードこちらに置いておきました

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?