本記事はfaceswapを使って、自作モデルをトレーニングする方法を解説します。
また、学習させたモデルを使用し任意の写真の顔を交換する方法を紹介します。
faceswapとは
faceswapはディープラーニングを利用した顔の入れ替え技術を実現するDeepFakeの一種です。
DeepFakeとは、ディープラーニングを使って、精巧な偽物の画像や動画を生成する技術のことを指し、主に下記の4つの技術の総称です。
- 顔全体の合成(Entire Face Synthesis)
- 属性操作(Attribute Manipulation)
- 顔の交換(Identity Swap)
- 表情の交換(Expression Swap)
本記事で紹介するfaceswapは顔の交換(Identity Swap)に属しています。
faceswapの取り扱いに関する免責事項
faceswapならびに、DeepFakeの技術は悪用によって逮捕者も出ている技術です。
技術そのものに罪はありませんが、厳格な倫理観を持って取り扱うべき技術です。
本記事を参考にして生じたいかなる損害も一切の責任を負いません。
これからご紹介する技術はあくまでご自身の顔画像処理技術の理解を深めるためにのみご活用ください。
faceswapの導入手順
セットアップ
それでは早速、開発環境にfaceswapをセットアップしていきます。
動作確認は下記の環境で行っています。
OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080
GPU付属のPC環境がない場合は、以下の記事でColaboratory(Webで使える無料の機械学習環境)でのfaceswapの使い方を紹介していますのでご参照ください。
FaceSwap結果の出力に時間がかかりますが、精度を求める場合はこちらがおすすめです。
[DeepFake] ブラウザだけでfaceswapを使って顔交換 [使い方解説]
本記事では、ブラウザだけでfaceswapを使用して動画の顔を交換する方法を紹介しています。
精度はそこそこに、早くFaceSwapの出力を得たい場合はこちらがおすすめです。
[SberSwap] ブラウザで高速にFaceswapを試す [使い方解説]
SberSwapと呼ばれる機械学習手法を使って従来より高速、且つ、ブラウザ上でFaceSwapを行う方法を紹介ししてます。
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
おすすめの書籍
[初心者向け] Pythonで機械学習を始めるまでに読んだおすすめ書籍一覧
本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。
おすすめのオンライン講座
[初心者向け] 機械学習がゼロから分かるおすすめオンライン講座
本記事では、機械学習エンジニアとして働く筆者が、AI・機械学習をまったく知らない方でも取り組みやすいおすすめのオンライン講座をご紹介しています。
それでは、faceswapをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。
まずは、以下の作業を行います。
- conda環境作成
- GitHubからソースコード取得
- ライブラリのインストール
以上で、セットアップは完了です。
顔抽出(Extract)
顔抽出(Extract)では、画像から顔を抽出し、顔部分を切り出した画像を生成します。
本記事では、ロイヤリティフリーの下記の画像の顔抽出していきます。
またここからはPythonや機械学習について基礎知識があることを前提に紹介します。
もし不安がある方は以下の書籍などがおすすめです。
[初心者向け] Pythonで機械学習を始めるまでに読んだおすすめ書籍一覧
本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。
それでは顔部分を切り出していきます。
もし、顔抽出実行時にImportError: numpy.core.multiarray failed to import
が発生した場合は、古いバージョンのnumpyがインストールされています。
pip3 install numpy --upgrade
でnumpyをアップグレードすると解消されます。
顔抽出の結果ですが以下の通りとなりました。正確に抽出できているようです。
複数人が映っている画像も試してみましたが下記の通り正確に抽出できています。
2人が映っている画像
3人以上が映っている画像
最後の画像は10人もの人が映っていますが全員の顔が抽出されています。
なかなかに正確であると言えそうです。
顔交換(Convert)モデルの学習(トレーニング)
次に顔を交換していきます。
しかし、顔交換の学習済みモデルはダウンロードできません。
これは、特定の人物に対して学習が必要である点と、簡単に悪用させないためであると考えられます。
このため学習から行っていきます。
本記事では下記左の女性の顔を、右の男性の顔に交換するようにモデルを学習させます。
material_data_a
に女性の画像を、material_data_b
に男性の画像を配置していきます。
なお、学習に必要な最低枚数が25枚以上のため、少なくとも25枚以上の顔が含まれた画像を集める必要があります。また推奨は500枚~5000枚です。
ここから学習データ用の顔のみを含んだ画像を生成します。といっても、先ほどと同じく顔抽出するのみです。
train_data_a
とtrain_data_b
に顔抽出された画像が出力されます。
この画像を使ってモデルを学習させるため、正しく抽出できていない画像があれば除いて下さい。
次にモデルを学習させます。
正常に学習が開始されれば、適宜convert_model
に学習済みモデルが出力されます。
また、下記が出力された場合は、学習データが不足しているため、素材を追加してください。
10/21/2021 12:59:39 ERROR At least one of your input folders contains fewer
than 25 images.
10/21/2021 12:59:39 ERROR You need to provide a significant number of images
to successfully train a Neural Network. Aim for between 500 - 5000 images
per side.
学習枚数にもよりますが、半日以上はかかるため就寝前などに学習開始することをお勧めします。
顔交換(Convert)
いよいよ顔交換です。
先ほど生成した学習済みモデルを使って顔交換します。
original
に顔交換対象の画像を配置します。
今回は下記の画像を使用します。
最後に顔交換を実行します
顔交換が成功するとmodifiedに顔交換後の画像が出力されます。
今回の結果は以下の通りです。
正直、精度は微妙ですね。
学習データとして使用した画像の顔交換であれば精度が良かった点を鑑みると、同一人物であれ学習させていない画像だと精度は微妙かもしれません。また、解像度の低い画像や、顔がはっきり映っていない画像は上手く学習が進みませんでした。高解像度の正面に顔が映っている画像を使用した方が良好な結果を得られます。
まとめ
本記事ではfaceswapで顔を交換するまでの手順を詳細に紹介させて頂きました。
顔画像処理系は、学習結果がエンターテインメント性があるため動かしてみて面白さを感じやすい技術です。
一方で、悪用すれば誰かを傷つけることにもつながります。再三にはなりますが正しい倫理観に基づいて利用してください。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
参考文献
1. DeepFakes and Beyond: A Survey of Face Manipulation and Fake Detection
0 件のコメント :
コメントを投稿