Windows10 Face Frontalization(正面顔推定)の実験

Windows10 Face Frontalization(正面顔推定)の実験

Face Frontalization(正面顔推定)

横顔を入力すると正面顔が出力される。
正面顔推定なのか正面顔変換なのか対応する日本語は分からない。
横顔や斜め顔を正面に向けたいという需要があるので実験する。

githubに良い感じのがあったのでそれを使うだけ。
https://github.com/scaleway/frontalization

pytorchで動く。

1. face frontalization GAN

今回使用するface frontalization GANはGANによって正面顔を生成するらしい。
昔見た特徴点を取ってアフィン変換するような手法に比べて現代的。

https://github.com/scaleway/frontalization によると、

これを入力すると、



こうなるらしい。



ちゃんと前を向いている。

2. 環境構築

https://github.com/scaleway/frontalization を参考にして環境構築。

2.1. ファイルダウンロード

必要なファイルをgithubからダウンロードする。
今回は自分で学習せずに学習済みモデルを使うので必要なファイルが少ない。

  • network.py
  • pretrained/generator_v0.pt

の2つだけあればいい。

2.2. conda 環境構築

専用の環境を作る。
pytorchさえあれば動くので、すでにあれば作らなくていい。

1
2
conda create -n frontalization python=3.7
conda activate frontalization

https://pytorch.org/get-started/locally/

公式に従ってpytorchを入れる。

1
conda install pytorch torchvision cpuonly -c pytorch

2.3. 実験用プログラム

githubにあるtest.pyは高機能だがそこまで求めてないし、Daliとかインストールしたくなかったので簡単なものを作る。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import torch
import torchvision
from torch.autograd import Variable
from PIL import Image
import torchvision.utils as vutils

#### Transform
transform = torchvision.transforms.Compose([
torchvision.transforms.Resize((128, 128)),
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5],),
torchvision.transforms.Lambda(lambda x: torch.reshape(x, (1, 3, 128, 128) ) ),
])

#### Config
device = "cpu" # "cuda" or "cpu"
model_path = "./pretrained/generator_v0.pt"
input_path = "test.jpg"
output_path = "out_" + input_path

#### Load CNN Model
model = torch.load(model_path, map_location=device)
model.to(device)

#### Read Image
img = Image.open(input_path)

#### Generate Frontal Image
img_tensor = transform(img)
with torch.no_grad():
generated = model(Variable(img_tensor.type("torch.FloatTensor").to(device)))

#### Save Image
vutils.save_image(generated, output_path, normalize=True)

3. 実験結果

3.1. テスト画像

デモと同じ画像を入力する。



こうなる。



いい感じになる。

3.2. オリジナル画像

拾ってきた有名人たちの画像を入力する。



こうなる。



よくない感じになる。

しわが表現できないらしい。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×