ネット用にstylegan2を使って自分に似た実在しない顔画像を作る

#はじめに

ネット用に顔写真を載せなきゃいけなくなったけど、ネットに個人情報なんて載せたくないということがありますよね。

そこで学習済みのstylegan2を使って自分の画像に近い存在しない画像を簡単に生成できるようにしたものをgoogle colablatoryに公開しました。

google colablatoryとはgoogleが提供するもので、googleアカウントさえあれば無料でブラウザ上でGPUを使える神サービスです。

作ったものがこちらになります。

https://colab.research.google.com/drive/1xz1-gc1AJ08IMT7P4CIvRROEqOHyoMFh?usp=sharing





#どんな画像が作れるの？

![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/07d0b2f7-f8ac-f8fd-be25-cffc64ad3bab.png)
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/81be223b-b462-b7c4-fee3-79313a07ad5c.png)
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/9ea9e14f-0129-1aee-d8e6-3fdda3daa4ae.png)

上から

* 元画像
* 元画像を切り取ったもの
* 生成された存在しない顔

となっています。
stylegan2のすごいところは1024x1024の高画質画像を生成できるところです。

また、おまけでgif動画も作れます。

![anime_256 (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/dbc1dce2-5db2-5660-7975-8ed438e17e76.gif)


#元となったコード

このコードはstylegan2を試すものであり、 
cedro様（@jun40vn）の「GANの潜在空間に新垣結衣は住んでいるのか？」

http://cedro3.com/ai/search-for-yui/

https://qiita.com/jun40vn/items/e58974c2aa9839d25a57

の記事内の「Search_for_Yui.ipynb」

https://github.com/cedro3/stylegan2/blob/master/Search_for_Yui.ipynb

をベースとして、自分の写真で実行しやすいように改良したものです。

@jun40vn 様の公開されたColab Notebooksがなければ作れませんした。心より感謝申し上げます。

改良点ついては適宜Colab Notebooks内で説明していますが、重要な部分は、

* 画像をアップロードできるようにした
* 探索回数を指定できるようにした
* 探索中の画像の保存回数を指定できるようにした。

です。


また写真はすべて
フリー素材ぱくたそ（ www.pakutaso.com ）
から使用しています。







#使い方

##1.まず公開したColab Notebooksにアクセスします。（googleアカウントにログインしてください。）

https://colab.research.google.com/drive/1xz1-gc1AJ08IMT7P4CIvRROEqOHyoMFh?usp=sharing


##2.実行する
上部の「ランタイム」→「すべてのセルを実行」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/0b4b4f30-84a4-294d-3e8f-a6865e806c4d.png)


##3.画像をアップロードする

画像のアップロードという項に、以下のような「ファイルの選択」が現れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/00c3e112-b102-bf9f-0bd3-58ef71e9363c.png)

なので生成したい画像の素となる画像をアップロードしてください。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/1353365e-ad59-abda-ba75-5a183c97e295.png)


このようにドラックアンドドロップすることもできます。

![vlcsnap-2022-01-13-12h39m50s812 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/a899f0a6-7a15-d316-b411-ff95e6f7b4f6.png)

##4.探索を待つ

探索に一番時間がかかります。
気長に待ってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/fe7396a2-8c63-1abc-2e4f-ac004bb27d7d.png)



##5.画像の表示

学習が終わったら順次画像が表示されていきます。

###元画像と最終的な結果の表示

上から

* 元画像
* 元画像を切り取ったもの
* 生成された存在しない顔

となっています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/9cb4d48d-3b0d-a627-32a7-9a71b962e48b.png)

###探索中の生成画像の変化
ここで、左に行くほど初期の生成画像となっています。

:::note warn
一番右は元となった画像なので注意してください。
:::



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/bf0835e9-5190-9e56-723c-388ae6d08d42.png)


###高画質画像

1024x1024の高画質画像が表示されます。
右クリックで保存できます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/9eb926ac-9dec-452d-17a1-f2ab1118887a.png)


##6.おまけ

###パラメータの変化

探索回数を**num_steps**で変更できます。（デフォルトで300）
大きくするとよりアップロードした画像に近づきますが、実行時間が長くなります。

探索中の画像の表示回数は**number_snapshots**で変更できます。（デフォルトで5）
大きくしてもあまり実行時間が変わったりしませんが、大きすぎると割り当てられたRAMやディスクを使い果たしてしまうかもしれません。



###GPU
使用するGPUについては、Colab Notebooksの上のほうに表示されています。
詳しくは「google colab GPU ガチャ」で検索
Tesla T4がおそらく当たりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/4ca156f5-c4da-4caa-277d-473223015751.png)


https://qiita.com/koshian2/items/d33edc963ed6cfcad77e


###gif
複数枚アップロードした場合は、順番に変化していくgif動画を作れます。

![anime_256 (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/993303/dbc1dce2-5db2-5660-7975-8ed438e17e76.gif)

#注意

###表示範囲

今回のプログラムでは、目の位置が中心になるように画像を切り取っています。（うろ覚え、詳しくは元となった記事を読んでください。）
そのため、場合によっては頭の上が切れてしまうことがあります

###複数人

複数人写っていると人数分切り取られます。
しかし私の改良したプログラムでは、アップロードした枚数分しか学習やら表示やらをしません。
また顔でない部分が顔と認識されてしまうこともあります。
そこらへんはうまくやってください。

###顔が認識されない

顔が認識されないこともありますがどうしようもありません。
他の画像を使用してください。



#まとめ

写真に近い存在しない画像を生成する方法を説明しました。
ぜひ試してみてください。

そして改めて、@jun40vn 様の公開されたColab Notebooksがなければ作れませんした。心より感謝申し上げます。