【 考察 】GAN(Generative Adversarial Network)の 実用途 での 「使いどころ」 を 考える

  • 33
    いいね
  • 0
    コメント

すでに多くの記事 で 注目されている GANモデル が 発揮する『機能』 は、”画像版 word2vec"

(word similarityタスク & word analogyタスク)

Chainerで学習したGeneratorのパラメタをファイルに書き出してconvnetjsで読むことで、ブラウザ上で顔生成が実験できるデモを作成しました(convnetjs改造協力: okuta氏)→こちら。

 ( 中略 )

下にスライダーがたくさんあって、ここを調整することで、画像の各特徴を強化したり弱めたり出来ます。
ここは、下記で説明する"長髪化ベクトル"と同様の仕組みで、各特徴に対応するベクトルを求めて、それをzに足し引きしています。

( 中略 )

zの空間を調べる

DCGANではzをn次元一様分布からサンプルするので、学習が成功すれば、一様分布の値域内のzならば全て、学習データと見分けがつかないような"まともな"画像を生成することが出来ます(denoising auto-encoderなどでは、デタラメに選んだzではまともな画像になることは保証されないし、実際ろくな画像が出てこないので、この点がGANやVAEの強みです)。

すると、ある2つのzをとってきたときそれらを結ぶ直線上にあるようなzも、まともな画像を生成する種となります。実際にやってみると、2つの画像の中間的な特徴を持った画像を描いてくれます。

これができるということは、「DCGANは学習データに含まれる画像を丸暗記してそのまま描いているだけなのでは?」という疑問を間接的に否定することになります。

もしそうなら、直線上の画像は連続的に変換されるのではなく、記憶1から記憶2に非連続的に切り替わるようになるはずだからです。

また、zを動かすと画像が連続的に変わっていくということは、「似たような特徴を持つ画像は、zも近い」という可能性を示唆しています。

もしそうだとすると、「長髪っぽくなるzの方向」「笑顔っぽくなるzの方向」などがあると考えられます(word2vecで男性を女性にするベクトルや、国を首都にとばすベクトルがあったように)。

実際、長髪の画像が生成されるようなzたちの平均から、短髪の画像が生成されるようなzたちの平均を引いて"長髪化ベクトル"を作ってやると、それを足すことで任意のキャラクターの髪を長くできることが分かりました。

この性質を使うと、狙った画像を作ることも可能です。ぜひ上述のwebデモでお試しください。

概念の「演算」もできる

より実用レベル の 利用価値 に 踏み込んだ記事

画像中の「特定の特徴」を識別するに至ったフィルターに着目することで、画像の自動「分類」(→推薦絞り込み) や 自動タグ付け としての利用価値 を 示唆している とも読める 記事

DCGANができたこと

それっぽい画像の生成

 ( 中略 )

Word2vecのようなベクトル演算

'メガネベクトル'や'笑顔ベクトル'など意味演算ができていました.

( 中略 )

特定のフィルターと物体

生成モデルの特定のフィルターが特定の物体を描画している.

教師なし学習での特徴量抽出器

識別モデルのフィルターが画像分類の特徴量抽出機と教師なし学習

などなどがありますが, また時間があるときに書きます. それにしてもすごい.

特定の属性を持った画像のリコメンド利用

( 以下、上記記事から一部を抜粋して引用。但し、太字は本記事投稿者による )

画像のベクトル化でアイテムを整理する

今度は逆に、一枚のワンピース画像を100次元ベクトルに変換して情報を圧縮します。
100次元でもまだ、人が理解するには難しいので、多少の正確さを犠牲にして、2次元にマッピングします。ここでは、t-SNEというアルゴリズムを利用しています。

( 中略 )

上図では、2000点程度のアイテムをマッピングしてみました。画像の分布を見てみると、領域ごとになんらかの特徴を持つことがわかります。

具体的に4箇所拡大してみました。左から【形】、【柄】、【色】、【モデル】という特徴を持ったアイテムが集まっています。

今回のモデルは、画像の特徴を上手く100次元ベクトルで表現できているようです。

このように画像データの特徴を数値で表現できると、サービスに組み込みやすくなります。
?
例えば、どの数値が【柄】と対応しているのかを把握しておくことで、花柄やボーダー柄といったタグを自動で付与することが可能になります。

また、手元にある写真の類似画像を検索する、といったタスクも少ない計算でできるようになりそうです。

ほかにも様々な切り口でアイテムを捉えることできそうなので、アイテム検索がより便利な機能になるかもしれません。

  • 「【形】、【柄】、【色】、【モデル】という特徴」を捉えた低次元ベクトル( GANの結果、得られた「画像の分散表現ベクトル」 を t-SNE で さらに次元縮退させたベクトル )

だけでなく、

  • ブログ記事「pip install deeplearning」で抽出に成功した「'メガネベクトル'や'笑顔ベクトル'」、mattyaさん記事中の「"長髪化ベクトル"」のような、画像版word2vec 意味四則演算の結果、新たに組成された「画像特徴ベクトル」

を、大量画像データ・データベース から ”欲しい画像” を 絞り込む 「抽出フィルタ」(SQLでいうwhere条件句)として利用することができるかもしれません。

機械学習モデル 学習用 類似画像生成器

(種画像セットからの類似画像の自動大量生成)

深層ニューラルネットワークモデル や 機械学習モデル の 学習用データセット の 件数 を 増幅させるツール( 類似画像生成器 )として、GAN を 活用する 利用方法もありえると思われる。


上で見た 実用的な使い方 について 理論面から 考える 上での 参考論文

⑴ 特定の特徴傾向を持った画像の生成タスク

generator に与える初期値の確率分布を変えることで、生成される画像の特徴を操作するアプローチ

By varying the conditional information provided to this extended GAN, we can use the resulting generative model to generate faces with specific attributes from nothing but random noise.

We evaluate the likelihood of real-world faces under the generative model, and examine how to determinis-tically control face attributes by modifying the conditional information provided to the model.

⑵ 画像の自動タグ付け

In this work we introduce the conditional version of generative adversarial nets, which can be constructed by simply feeding the data, y, we wish to condition on to both the generator and discriminator.

We show that this model can generate MNIST digits conditioned on class labels.

We also illustrate how this model could be used to learn a multi-modal model, and provide preliminary examples of an application to image tagging in which we demonstrate how this approach can generate descriptive tags which are not part of training labels.

スクリーンショット 2016-09-07 16.50.43.png


【 その他 参考ウェブページ 】

Vasily社ブログ で使用されていた次元圧縮アルゴリズム t-SNE について

t-SNE(t-distributed stochastic neighbor embedding)

( 原論文 )

Abstract

We present a new technique called “t-SNE” that visualizes high-dimensional data by giving each
datapoint a location in a two or three-dimensional map.

2点間の「近さ」を確率分布で表現する

このアルゴリズムの一番の特徴は、 2 点間の「近さ」を確率分布で表現するところにあります。

まとめ

  • t-SNEというデータ可視化向けの次元削減アルゴリズムがある
  • t-SNEはデータのローカル構造を意識したアルゴリズムなので、同じくローカル構造を意識したクラスタリングメソッドである>* DBSCANと相性がいい
  • DBSCANの結果をさらに決定木で分類すれば、t-SNEで可視化したデータに現れたクラスタの特徴を自動で説明できるのでは?

( DBSCANについて )

a set of points in some space, it groups together points that are closely packed together (points with many nearby neighbors), marking as outliers points that lie alone in low-density regions (whose nearest neighbors are too far away).

DBSCAN is one of the most common clustering algorithms and also most cited in scientific literrature.

scikit-learn でのクラスタリング

ポピュラーな kmeans と比較して多くのデータ点を有するコア点を見つける DBSCAN アルゴリズムは、コアが定義されると指定された半径内内でプロセスは反復します。

ノイズを多く含むデータに対して、しばしば kmeans と比較される手法です。

原著においてもこれらの手法を比較し可視化しています。さっそく試してみましょう。

( 中略 )

Python
from sklearn.cluster import DBSCAN