[SC-FEGAN]AIで顔写真を自然に編集してみる

2021年10月31日日曜日

Artificial Intelligence

本記事では、SC-FEGANと呼ばれる機械学習手法を使って人の顔画像を自然に編集する方法をご紹介します。

アイキャッチ

SC-FEGANとは

SC-FEGANは、マスク、スケッチ、色などの自由な入力に対して、画像を生成する画像編集システムです。
このシステムは、End to Endの畳み込みニューラルネットワークで構成されています。
従来技術と異なり、ユーザーの自由形式の入力に対して画像を生成する点が特徴となります。

これにより、直感的なユーザーの入力を使用して高品質な合成画像を生成することを得意としています。

SC-FEGANの出力イメージ
出典: https://github.com/run-youngjoo/SC-FEGAN

見ると一目瞭然ですが、ユーザーの入力に対して、自然で高品質な画像を生成しています。

GFPGANの導入手順

セットアップ

それでは早速、開発環境にSC-FEGANをセットアップしていきます。
動作確認は下記の環境で行っています。

OS: Windows 10
CPU: Intel(R) Core(TM) i5-7300U CPU @ 2.60GHz
GPU: なし

SC-FEGANをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。

# python version 3.7のconda環境を作成
$ conda create -n gfpgan python=3.7

# 作成した環境をアクティベート
$ conda activate sc-fegan
$ cd sc-fegan

# gitからコードをclone
$ git clone https://github.com/run-youngjoo/SC-FEGAN.git
$ cd SC-FEGAN

# 学習済みモデルのダウンロード
$ mkdir ckpt
# # https://drive.google.com/drive/folders/1VPsYuIK_DY3Gw07LEjUhg2LwbEDlFpq1からファイル2つをダウンロード
# /SC-FEGAN/ckptにSC-FEGAN.ckpt.data-00000-of-00001とSC-FEGAN.ckpt.indexを格納

# 必要なライブラリをインストール
# pip3 install -r requirements.txt
# Proxy配下の場合は下記
$ pip3 install -r requirements.txt --proxy=http://"username":"password"@proxy:port

次に、SC-FEGAN/demo.yamlの設定を行います。
GPU_NUM:にお手持ちの環境のGPU数を記載します。

INPUT_SIZE: 512
BATCH_SIZE: 1

# GPUの数に応じて変更
# CPUのみの場合は0を設定
GPU_NUM: 0

# directories
CKPT_DIR: './ckpt/SC-FEGAN.ckpt'

次の設定は下記エラーが発生する場合のみ行います。
Traceback (most recent call last): File "demo.py", line 229, in <module> config = Config('demo.yaml') File "SC-FEGAN\utils\config.py", line 13, in __init__ self._cfg_dict = yaml.load(f) TypeError: load() missing 1 required positional argument: 'Loader'

このエラーが発生する場合はSC-FEGAN/utils/config.pyを編集します。

try:
  with open(filename, 'r') as f:
    # loadの代わりにsafe_loadを使用
    # self._cfg_dict = yaml.load(f)
    self._cfg_dict = yaml.safe_load(f)

以上で、セットアップは完了です。

顔の編集(Face Editing)

いよいよ顔の編集を行っていきます。
本記事ではロイヤリティフリーのこちらの画像を使用します。

顔編集対象画像

はじめに、画像を512x512ピクセルに切り出します。
切り出さずに画像を取り込むことも可能ですが、自動で512x512にリサイズされます。
このため、正方形の画像でない場合歪みが生じるため注意が必要です。

リサイズ後の顔編集対象画像

この画像を使って顔編集していきます。
早速ツールを起動します。

$ cd SC-FEGAN
$ python demo.py
ツール画面

上図のようなツールが起動したら「Open Image」を選択し、リサイズした画像をロードします。

画像ロード時の画面

次に「Mask」を選択し、編集したい領域を塗りつぶします。
ここでは、髪から耳が出ていますが、耳を髪に隠してみます。

耳をマスクした画像

いかがでしょうか?「Mask」を選択し耳を塗りつぶし「Complete」を選択しただけで自然に髪型を編集できました。

次に、髪色を変えてみます。「Mask」を選択し、髪の毛を塗りつぶし「Palette」で緑を選択し「Color」で描いていきます。

髪色変更画像

マウスで適当に書いただけですが、やや自然に変換されました。細かい作業はペンタブがあった方が良さそうです。

最後に、顔の輪郭を変えてみます。「Mask」を選択し、輪郭を塗りつぶし、「Sketches」で輪郭を描くだけです。

輪郭変更画像

いかがでしょうか。入力に対して柔軟に画像を生成できることの強力さが見て頂けたかと思います。

まとめ

本記事では、SC-FEGANで、顔編集する方法をご紹介しました。
本手法のように、入力に柔軟なモデルは利便性を向上させ、使いやすい技術の見本となります。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。

また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1. SC-FEGAN: Face Editing Generative Adversarial Network with User’s Sketch and Color

2. GitHub - run-youngjoo/SC-FEGAN

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology