PixelNN: Example-based Image Synthesis. They combined simple nearest neighbor with CNN preprocessing. Great results. https://t.co/xDqmW6bdVi pic.twitter.com/jyVRYp30fN
— hardmaru (@hardmaru) September 25, 2017
hardmaruさんのツイートで紹介されていたPixelNNという画像生成のアルゴリズムがとても興味深い。PixelNN自体は画像生成用のアルゴリズムだが、アイデア自体は画像生成以外の分野にも応用できそう。
最近の画像生成系のアルゴリズムはニューラルネットワークを使ったGANが多いが、PixelNNでは少し違ったアプローチが取られている。
論文のAbstractを読む
PixelNNの概要は論文のAbstractに記されている。多少自分の解釈/意訳を含んでいるが、Abstractを読んでみると下記のようなことが書いてある。
We present a simple nearest-neighbor (NN) approach that synthesizes high-frequency photorealistic images from an “incomplete” signal such as a low-resolution image, a surface normal map, or edges.
紛らわしいのだが、PixelNNのNNはNeural NetworkではなくNearest neighbor法を指している。このNearest neighbor法を使って、「不完全」な入力(低解像度な画像とか、輪郭の画像など)から、写実的な画像を作るというのが、今回の提案手法だ。
Current state-of-the-art deep generative models designed for such conditional image synthesis lack two important things: (1) they are unable to generate a large set of diverse outputs, due to the mode collapse problem. (2) they are not interpretable, making it difficult to control the synthesized output.
昨今の画像生成モデルの問題として、下記の2点が挙げられている。
- Mode Collapse問題のため、出力の多種性が低い
- 出力内容を制御するのが難しい
We demonstrate that NN approaches potentially address such limitations, but suffer in accuracy on small datasets.
Nearest neighborを使ったアプローチでは、これらの問題に対応できる可能性があるが、データセットが少ない場合は上手くいかないようだ。
We design a simple pipeline that combines the best of both worlds: the first stage uses a convolutional neural network (CNN) to maps the input to a (overly-smoothed) image, and the second stage uses a pixel-wise nearest neighbor method to map the smoothed output to multiple high-quality, high-frequency outputs in a controllable manner. We demonstrate our approach for various input modalities, and for various domains ranging from human faces to cats-and-dogs to shoes and handbags.
画像生成モデルとNearest neighborの良い部分を組み合わせ手法が、PixelNNの提案内容のようだ。具体的には、
- CNN(畳み込みニューラルネットワーク)を使って、大まかな画像の全体像を作る
- Nearest neighbor法を使って、細部を作りこんでいく
という流れをとっている。
PixelNNの何が面白いのか
- GANと違い、出力結果をコントロールしやすい
- GANよりもシンプルでわかりやすいアプローチ
- 「スムーズな大枠をニューラルネットワークで作り、詳細はコピペで作る」というアプローチは他にも応用できそう
昨今の画像生成技術は、GANを使ったものが主流だ。GANは非常に面白いアプローチで、実際興味深い成果を出しているものも多い。ただ、いざ自分でデータセットを用意してGANを走らせて画像を生成してみると、意図/期待したような画像を生成させるのが非常に難しいことに気がつく。また、全体を遠くから見れば「良さそう」に見えるレベルまで持っていくことはできたとしても、やはり細部を見ると不自然になっていることが多い。
PixelNNでは、全体像はCNNを使って生成しつつ、細部は「コピペ」で作っていくというアプローチをとっているのだが、これがとても興味深い。「コピペ」で作ることで、細部が写実的になる(当然だが)上、コピペ元のデータセットの作り方次第で、出力結果を意図通りに制御できるのだ。
PixelNNは画像生成のアルゴリズムだが、「大枠はNeural Networkで作り、細部はコピペで作る」というアイデアは、画像生成以外の分野でも応用できそうだ。