post Image
取り急ぎpix2pixで遊んでみた(追記あり)

概要

  • 先日発表されたpix2pixが楽しそうだったので実際に動かしてみた。
  • 対象を絞れば学習画像が500枚程度でもそれなりに動く。
  • 結論:GANすごい。

はじめに

pix2pixとは、ざっくりと言えば、2画像間に潜む画像変換をDNNで表現してしまおう!というものです。変換前後の画像さえ用意できれば大体どんな変換でも対応可能らしく、例えば以下のようなことが可能らしいです。

  • 航空写真 → 地図画像
  • モノクロ画像 → カラー画像
  • 線画 → カラー画像
  • (上記すべて逆も可能)

何やら万能っぽい雰囲気!素晴らしいことにコードが公開されている(torchだけど)!しかも自前画像でも簡単に試せそう!
ということで試してみました。

データ

flickrから収集したラーメン画像(1,000枚)を使用。多少のゴミは無視で。公式のソースコードに合わせて、各画像を中心でクロップ&リサイズしておき、学習画像と評価画像は各500枚としました。
試した画像変換は「モノクロ画像 → カラー画像」です。
追記:「線画 → カラー画像」も試しました。線画は元画像にblurやらcannyやらをかけて適当に作りました。

実験条件

公式のソースコードそのままで変えていません。

結果

実行環境はUbuntu16.04+GTX1060。買ってて良かったGPU。
評価結果の一部を以下に載せましたが、学習画像が500枚しかないことを考えると驚くべき結果が出ているように思います。

モノクロ画像 → カラー画像

入力 出力 正解 感想
1_1_130549619_f67eb86411.jpg 1_1_130549619_f67eb86411.jpg 1_1_130549619_f67eb86411.jpg あまり違和感ない
6_5541_11200931374_031cc1a615.jpg 6_5541_11200931374_031cc1a615.jpg 6_5541_11200931374_031cc1a615.jpg あまり違和感ない
3_2249_2236609912_b14df4c866.jpg 3_2249_2236609912_b14df4c866.jpg 3_2249_2236609912_b14df4c866.jpg 肉味噌がネギ化している・・・
8_7021_6769136483_ef08be1a44.jpg 8_7021_6769136483_ef08be1a44.jpg 8_7021_6769136483_ef08be1a44.jpg つけ麺もOK
6_5513_11288220405_daa1102259.jpg 6_5513_11288220405_daa1102259.jpg 6_5513_11288220405_daa1102259.jpg テーブルの木目調も頑張ってる

追記 : 線画 → カラー画像

明らかに無茶な問題設定ですね。やっぱりモノクロ画像のカラー化に比べると出来があまり良くないです。・・・でも、この入力画像からこの出力が出せているのは凄くないですか?(親心)
学習の経過を見ているとまだまだ学習できそうな印象です(DCGANの途中結果っぽい)。デフォルトだと200epoch回す設定なんですが、もう少し増やしてみても良かったかもしれません。

入力 出力 正解 感想
1_1_130549619_f67eb86411.jpg 1_1_130549619_f67eb86411.jpg 1_1_130549619_f67eb86411.jpg 海苔どこいった?
3_2595_3741413135_d11c0303aa.jpg 3_2595_3741413135_d11c0303aa.jpg 3_2595_3741413135_d11c0303aa.jpg 正解画像とは違うけど結構自然っぽい?
8_7314_12447330995_a6b17355f9.jpg 8_7314_12447330995_a6b17355f9.jpg 8_7314_12447330995_a6b17355f9.jpg 幽体離脱・・・
6_5568_14675666478_12b9a90dce.jpg 6_5568_14675666478_12b9a90dce.jpg 6_5568_14675666478_12b9a90dce.jpg こっちは麺がネギ化してる。ネギ麺。
9_8529_8547928584_0e900a4e3a.jpg 9_8529_8547928584_0e900a4e3a.jpg 9_8529_8547928584_0e900a4e3a.jpg テーブルの情景を頑張って描こうとしているっぽい。けなげ。(親心)
さらに追記

「結果が出来すぎてる。学習データ入れたんじゃね?」「500枚少なすぎじゃね?」というもっともな声を随所で見かけたので、コメント。

  • TrainとTestはいちおう分けています。分けていますが、ラーメン画像にそもそもバリエーションが少ないので、よく似た画像は含まれていると思います。
    • 他の料理とか動物とかを混ぜると、この枚数では上手くいかないと思います。冒頭に「対象を絞れば」と書いたのは、そのためです。
    • 被写体の位置が変わるタイプの変換は苦手だと思います。単純に上下flipでも壊滅しそう。
    • ちなみに、公式サンプル(ラベル画像→建物)では、Trainはたった400枚です。
  • 学習データ数が少なくてもそれなりに上手くいく理由は、ラーメン画像の多様性が少ないから、被写体の位置が変わらない変換をやっているから、入力が乱数ではなく画像だから、等々雑に考察しております。詳しい方がいらっしゃいましたらコメント頂きたいです。
  • 参考までに、学習データの結果は↓です。「線画→カラー画像」は学習データの割にそんなに上手くいってないです(謎)。。
学習データの結果
入力 出力 正解 感想
1_6_7553134_29e2af632d.jpg 1_6_7553134_29e2af632d.jpg 1_6_7553134_29e2af632d.jpg やや赤みがかっているが、丸暗記の勢い。
1_17_23517102_5de1772da3.jpg 1_17_23517102_5de1772da3.jpg 1_17_23517102_5de1772da3.jpg 丼の色を間違えているが、丸暗記の勢い。
1_6_7553134_29e2af632d.jpg 1_6_7553134_29e2af632d.jpg 1_6_7553134_29e2af632d.jpg 色味は丸暗記してそう。でも学習データの割にショボい。
1_17_23517102_5de1772da3.jpg 1_17_23517102_5de1772da3.jpg 1_17_23517102_5de1772da3.jpg 色味は丸暗記してそう。でも学習デー(ry

おわりに

  • 簡単・便利・楽しい。万能感ありますね。
  • OpenImagesの画像をぶち込んでみたい。
  • 論文をざっと見た感じあまり特別なことはしていないようなのでchainerとかで書いてみようかなぁ。でも誰かがやってそうだなぁ。
    chainer実装が公開されてました!感謝!これでもっと自由に遊べますね。
  • 変換の種類を潜在変数的なアレで何やかんやすれば、複数の画像変換を同時に行うモデルも作れそう?
  • MSCOCOのマスク画像を使って実験中です。面白い結果が出たら新たに投稿します。

結論:GANすごい。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。