SlideShare a Scribd company logo
1 of 43
Download to read offline
CycleGANで顔写真を
アニメ調に変換する取り組み
機械学習 & Pythonもくもく会 + LT@秋葉原Weeyble
meow (id: meow_noisy)
2019/11/13(水)
発表概要
 CycleGANの理論の説明と使い方を説明する
 CycleGANをバックエンドにして、顔写真をアニメ調に
変換する”selfie2anime”の取り組み内容を説明する
おしながき
 GAN, CycleGANとは
 公式CycleGANの使い方
 CycleGANを用いたselfie2anime
 取り組み1: とりあえずやってみた編
 取り組み2: データを増やした編
 取り組み3: むりやり特定画像に特化させた編
 今後の取り組み
GAN, CycleGANとは
https://www.slideshare.net/
cvpaperchallenge/gan-133159239
https://www.slideshare.net/
cvpaperchallenge/gan-133159239
この目的関数を
どう実装するの?
どう目的関数を実装するのか
 式の見た目ほど難しくない。DとGを交互に学習するだけ
実画像に対する推論
fake画像に対する推論
識別器Dの学習
生成器Gのサンプルを
識別器Dに推論させる
生成器Gを学習
https://github.com/miyamotok0105/pytorch_handbook/blob/master/chapter6/train_lsgan.py
識
別
器
D
の
最
適
化
生
成
器
G
の
最
適
化
[導入]pix2pix
 入力をノイズではなく、画像にすることで画像変換を実現
https://www.slideshare.net/
cvpaperchallenge/gan-133159239
GeneratorにはU-Netを使用
pix2pixの制約
 pix2pixを使った画像変換を行うためには、ピクセル同士の
対応が必要
 下図はGoogle Mapsの航空画像とGoogle Maps地図
pix2pixの応用可能性
 一方の変換は楽に行えるが、その逆は難しいという時に
強力。復元過程をモデルが学習できる可能性がある
タスク例 処理 入力画像 出力(生成)画像
デノイジング ノイズを付与 ノイズをまぶした
画像
元の画像
(線画)彩色 カラー → グレー
(or2値)
グレー(or2値)の
画像
元の(カラー)画像
超解像 画像の解像度を落
とす
解像度を落とした
画像
元の画像
画像A 画像B
処理
簡単😄
復元
困難💀
画像Aから画像Bをつくるだけで、
画像B→画像Aへの復元過程を獲得できるかも・・・!
CycleGANとは
 pix2pixの「ピクセル同士の対応が必要」という制約を外
した、画像変換手法
 同じものは同じディレクトリ内にまとめておけばよい
元論文
https://arxiv.org/pdf/1703.10593.pdf
馬の動画を
フレームごとに
変換したgifアニメ
その他にも、面白い事例が報告されている
https://junyanz.github.io/CycleGAN/
[補足] CycleGANのloss
 Generatorの学習の際に、cycle-consistency lossを導入し、
変換した画像をもう一回逆変換させて、元の画像に戻す能
力を獲得するようにしていることが特徴
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/blob/master/models/cycle_gan_model.py
図は元論文のもの
https://arxiv.org/pdf/1703.10593.pdf
公式CycleGANの使い方
必要なもの
 Linux マシン
 GPU(グラフィックボード)必須
 Video RAMは最低限4GBはほしい
 Deep Learning 開発環境、ライブラリのインストール
 CUDA
 CuDNN
 変換元、変換先の画像
 変換元の画像を1つのディレクトリにまとめておく
 変換先の画像を1つのディレクトリにまとめておく
 お金
 Deep Learningは電気代との相談
おそらくGoogle Colaboratoryでもできると思うが未確認
セットアップ
 必要なら、pythonの仮想環境を作る
 githubから公式のCycle GANリポジトリをクローン
 https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
 pythonパッケージをインストール
 $ pip install –r requirements.txt
 自分のCUDAバージョンによっては、最新のPyTorchが入らないこ
ともある。だめだったら、torch==1.0.1にしてみる
コードの微修正
 ${repo_root}/data/image_folder.py
 画像ディレクトリへのシンボリックリンクが使えるようにする
 25行目のassert文をコメントアウトする
 27行目のos.walk()のオプション引数に”followlinks=True”を追加
画像の配置
 ${repo_root}/dataset/<データセット名>/
 変換元の画像ディレクトリをtrainAという名前にする
 シンボリックリンクでもよい
 サブディレクトリがあってもよい
 現行のコードはディレクトリ名に敏感なのでtrainAという名前は固定
 同じく変換先の画像ディレクトリもtrainBという名前にする
 AとBが逆につけてしまっても大丈夫
 A→Bだけでなく、B→Aの変換のネットワークも学習してくれる
 画像がないなら、とりあえずgoogle mapsの画像を落としてこよ
う
 $ bash ${repo_root}/datasets/download_cyclegan_dataset.sh maps
学習の実行
 $ python ${repo_root}/train.py ¥
--dataroot ./datasets/<dataset_name> ¥
--name <任意のmodelの名前> ¥
--model cycle_gan
 中間結果はhttp://localhost:8097で見れる
 lossは上下するので、学習の収束の判断基準にならない
 一定iter(デフォルトは5,000)の後、モデルのスナップショッ
トが、 ${repo_root}/checkpoints/<任意のmodelの名前>下に
吐かれる
 スナップショットを得た後、学習を中断し、再開したい場合は
“—continue_train”をオプションにつける
学習時のその他のオプション
 マシンに複数個のGPUを指しているならデータ並列の分散
学習も可能
 使用GPUとバッチサイズを増やすオプションをつければ
自動的に分散学習してくれる
 --gpu_ids=0,1,...
 --batch_size=2
 デフォルトでは1。Video RAM4GBあたり1枚増やせる感じ。
評価の実行
 ${repo_root}/dataset/<データセット名>/testA ディレク
トリを作る
 $ python ${repo_root}/test.py ¥
--dataroot ./datasets/<dataset_name> ¥
--name <任意のmodelの名前> ¥
--model cycle_gan
 結果はHTMLファイルで吐かれる
 ${repo_root}/results/<任意のmodelの名前>/test_latest/index.html
 real_A: 変換元の画像
 fake_B: real_Aを変換した画像
 rec_A: fake_Bをさらに、変換元になる変換をしたあとの画像
 基本的にはreak_Aとほぼ一致しているはず
CycleGANを用いたselfie2anime
selfie2animeとは
 顔写真をアニメ調に変換してくれるWebアプリの名前
 https://selfie2anime.com/
 無料。
 ただし、本スライドでは、この変換技術自体を、
selfie2animeと呼ぶことにする
目標
 Lennaさんのアニメ調の画像を生成すること
 理想的には右下みたいな結果になってほしい
※図は自動生成ではない
(人が描いた)事に注意
https://www.sideranch.co.jp/issue/mb8.htmlhttps://ja.wikipedia.org/wiki/真珠の耳飾りの少女
?
https://ja.wikipedia.org/wiki/レナ_(画像データ)
先行事例
 CycleGANの事例はすでに報告がある(ただし失敗とのこと)
 CycleGANはテクスチャの変換はできるが、物体のデフォルメは難しい
 https://www.youtube.com/watch?v=UDT_2lHv8o8
取り組み1: とりあえずやってみた編
 何はともあれ追試のような形でCycleGANで画像変換を
やってみよう
 selfie画像: CelebA dataset
 http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html
 CUHKのmmlabが提供する顔画像データセット
 合計約200,000枚ある
 Celebというだけあって、名の通った人(習近平主席など)が混ざっ
ているので取り扱いには注意
 アニメ画像: animeface-character-dataset
 http://www.nurs.or.jp/~nagadomi/animeface-character-dataset/
 約200名のアニメキャラクターの画像
 合計約15,000枚ある
結果①
 1epochだけ
 fake_Bが、確かにテクスチャは変わってる気がするが、大きな変
化はなし
 rec_Aの復元度合いが悪いのでepochが足りないのかと
思い、もう2epoch回したが進展なし
自分に対しての結果
灼眼っぽいものが埋め込まれる
?
取り組み2: データを増やした編
 データセットに偏り
 selfie側が20万、anime側が1.5万
 anime側のデータセットを増やしたい
 1からアニメ画像を用意するのは大変
 → 自動生成されたアニメ画像で代用しよう
TWDNEv2
 “This Waifu Does Not Exist v2”
 https://www.thiswaifudoesnotexist.net/
 Style GANで存在しないアニメキャラクターを自動生成
したものの展示サイト
 15秒おきに画像が更新される
TWDNEv2からの画像の取得
 zipのリンクはuploader側に消されていた
 htmlを見るに、ファイルが連番になっているので、インク
リメンタルにファイルをダウンロードした
 合計175,000枚をダウンロードした
 ダウンロード間隔を2.5秒開けたので数日かかった
取り組み2におけるモデル学習
 anime側にTWDNEv2を混ぜる
 また、12.5epoch回した
 部屋がデフォルト暖房状態になった
 翌月の電気代も500円くらい上がった気がする
結果②
 前と変わらず
 顔をタイトにクロップしても変わらない
帽子にツヤみたいなのができた
CelebA datasetに対する結果
 理想に近い結果が出ている。輪郭に沿ってパーツが変化。
 テクスチャしか変換できないというわけではなさそう
自分に対しての結果 again
 train画像の埋め込みっぽさはなくなった
 面白みが薄れた
その他
 画像によっては顔のパーツが消える
 これが発生する条件がわかっていない
取り組み3: むりやり特定画像に特化させた編
 lenna画像でうまく行かない原因と考えられること
 lenna画像とCelebA datasetのテクスチャが違うのでは
 → lenna画像だけをtrainAにしたディレクトリをつくり、
lenna画像に特化したGeneratorを学習しよう
trainA
結果③
 変化が起きる。特に一番近接したもの(右)はいい感じ
今後の取り組み
 顔のパーツが消える問題に対処したい
 顔のパーツ検出器を間に挟んで、検出できなかったらlossを大きく
する、的なことを考えている
 テクスチャ依存(?)問題
 CelebAというドメインを学習してしまっているのだろうが、
どうすればいいかわかっていない
 いずれ取り組みたい
ちなみに
 anime2selfieもできるヨ☆
これのARアプリ開発して
秋葉原歩いてみたい(錯乱)
まとめ
 CycleGANの理論、実践について説明した
 CycleGANはお手軽でかつ面白い結果が出る可能性があるので
オススメ
 CycleGANでselfie2animeする取り組みを説明した
 なんとかlennaの変換に成功
 もう少し安定して結果を出せるようにしたい
 興味ドリブン開発はいいぞ!
参考文献
 敵対的生成ネットワーク(GAN)/ ⽚岡 裕雄
 https://www.slideshare.net/cvpaperchallenge/gan-133159239
 GANのまとめスライド
 PyTorchニューラルネットワーク 実装ハンドブック
 https://www.shuwasystem.co.jp/book/9784798055473.html
ご清聴ありがとうございました
オタク機械学習(#otakuml)クラスタよ甦れ!

More Related Content

What's hot

画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量takaya imai
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門Takuji Tahara
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep LearningSeiya Tokui
 
【メタサーベイ】Video Transformer
 【メタサーベイ】Video Transformer 【メタサーベイ】Video Transformer
【メタサーベイ】Video Transformercvpaper. challenge
 
GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)Masahiro Suzuki
 
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion ModelsDeep Learning JP
 
[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative ModelsDeep Learning JP
 
semantic segmentation サーベイ
semantic segmentation サーベイsemantic segmentation サーベイ
semantic segmentation サーベイyohei okawa
 
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向SSII
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Yusuke Fujimoto
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII
 
Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩Hiroto Honda
 
R-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れR-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れKazuki Motohashi
 
3D CNNによる人物行動認識の動向
3D CNNによる人物行動認識の動向3D CNNによる人物行動認識の動向
3D CNNによる人物行動認識の動向Kensho Hara
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
 
深層学習によるHuman Pose Estimationの基礎
深層学習によるHuman Pose Estimationの基礎深層学習によるHuman Pose Estimationの基礎
深層学習によるHuman Pose Estimationの基礎Takumi Ohkuma
 
【チュートリアル】コンピュータビジョンによる動画認識 v2
【チュートリアル】コンピュータビジョンによる動画認識 v2【チュートリアル】コンピュータビジョンによる動画認識 v2
【チュートリアル】コンピュータビジョンによる動画認識 v2Hirokatsu Kataoka
 
Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)Kazuki Maeno
 
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向Koichiro Mori
 

What's hot (20)

画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
 
backbone としての timm 入門
backbone としての timm 入門backbone としての timm 入門
backbone としての timm 入門
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep Learning
 
【メタサーベイ】Video Transformer
 【メタサーベイ】Video Transformer 【メタサーベイ】Video Transformer
【メタサーベイ】Video Transformer
 
Group normalization
Group normalizationGroup normalization
Group normalization
 
GAN(と強化学習との関係)
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)
 
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
 
[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative Models
 
semantic segmentation サーベイ
semantic segmentation サーベイsemantic segmentation サーベイ
semantic segmentation サーベイ
 
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
SSII2021 [OS2-02] 深層学習におけるデータ拡張の原理と最新動向
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
 
Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩Deep Learningによる超解像の進歩
Deep Learningによる超解像の進歩
 
R-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れR-CNNの原理とここ数年の流れ
R-CNNの原理とここ数年の流れ
 
3D CNNによる人物行動認識の動向
3D CNNによる人物行動認識の動向3D CNNによる人物行動認識の動向
3D CNNによる人物行動認識の動向
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
 
深層学習によるHuman Pose Estimationの基礎
深層学習によるHuman Pose Estimationの基礎深層学習によるHuman Pose Estimationの基礎
深層学習によるHuman Pose Estimationの基礎
 
【チュートリアル】コンピュータビジョンによる動画認識 v2
【チュートリアル】コンピュータビジョンによる動画認識 v2【チュートリアル】コンピュータビジョンによる動画認識 v2
【チュートリアル】コンピュータビジョンによる動画認識 v2
 
Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)
 
マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向マルチモーダル深層学習の研究動向
マルチモーダル深層学習の研究動向
 

CycleGANで顔写真をアニメ調に変換する