LoginSignup
38
40

More than 5 years have passed since last update.

DiscoGANを使って「教師なし」でお米を数えてみる

Last updated at Posted at 2017-03-26

はじめに

こちらで紹介されていたDiscoGAN(Discover Cross-Domain Relations with Generative Adversarial Networks)
https://arxiv.org/abs/1703.05192
が「教師なし」でイメージ変換ができるということで、前にやってた検出・カウントを教師なしで試してみました。

ChainerでDiscoGANをすでに実装している方がいらっしゃったので、ほぼ使わさせていただきました。
「chainerのtrainer機能を使ってDiscoGANを実装した」

やっていること

お米の数を数えるために、数えやすい形の画像に変換する「コンバータA⇒B」をつくります。
(これくらいの画像ならば、通常の画像処理を組み合わせれば簡単にカウントできますが、それは置いといて)

いままでと違うポイントは「ランダムに配置」した球の画像を1枚用意するだけで、学習ができます。
球の数は適当に決めましたが、お米の数とオーダはそれなりに合わせてあります。
お米の画像aを1枚、球の画像bを1枚を使って、学習させました。GTX1070で一晩ほどになります。

20170326_学習 (1).png

学習結果

DiscoGANでは「コンバータA⇒B」と「コンバータB⇒A」をオートエンコーダを使って学習するので、位置の情報を保持したまま変換ができるようになってくれます。
お米⇒球、球⇒お米の変換にて、そこそこ位置があったまま変換できているようになっています。
20170326_convert.png

検出・カウント

今回お米の数を数えるので、球変換後の画像abの極大値の位置を抽出して、極大点の画像を作成しています。極大点の抽出にはMaxploolingを使ってます(参考)。元の画像に対し、極大点の位置に赤円を描画してみると、少し位置がずれているのと一粒に2点検出されている部分があるので、まだまだ調整が必要なところです。
20170326_検出カウント (2).png

おわりに

ディープラーニングでは大量のデータが必要といわれることがありますが、今回も元画像は1枚(米106粒)で学習ができているので、形状が似ているものであればそれくらいのオーダで学習は可能なようです。

今回はとりあえず試しただけでしたが、この他、一部にヒントを与えたり、配置する球の間隔や数を調整することで、狙ったものを検出することもできると思います。また、今回は球は白のみですが、色を複数にすることで、複数の種類のものを同時に検出することも可能かもしれません。さらに、DiscoGANではそもそもドメインBの部分が「画像」である必要性はないはずなので、直接ほしいベクトル(例えばお米の中心点など)に変換することもできるのかもしれません。

また、作成したプログラムはこちらに置いておきます。細かいところは変更するかもしれません。
※GAN系は不安定なことが多いですが、これも何回か試すと学習に失敗することが結構あります。
https://github.com/samacoba/DiscoGAN_counter

38
40
2

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
38
40