本記事では、faceswapを使用し、ブラウザだけで動画に映る人の顔を入れ替える方法を紹介します。
概要
DeepFake
DeepFakeとは、ディープラーニングなど高度な合成技術を用いて作られる、本物と見分けがつかないような、偽物の動画を生成する技術を指します。
主に、人間の顔の合成を指すことが多く、大別すると下記の4種類で構成されています。
- 顔全体の合成(Entire Face Synthesis)
- 属性操作(Attribute Manipulation)
- 顔の交換(Identity Swap)
- 表情の交換(Expression Swap)
DeepFakeを構成する4つの技術に関する詳細は以下の記事をご覧ください
[DeepFake]ディープフェイクとは?ディープフェイクの概要と種類を一挙解説
ディープフェイクの概要や、ディープフェイクを実現する技術要素について網羅的に解説します
faceswap
本記事で紹介するfaceswapは顔の交換(Identity Swap)に属する技術です。
テレビ番組や、YouTubeなどでも著名人の顔を交換した映像をご覧になった方も多いかと思います。
本記事ではGoogle Colaboratoryを使ってGPUを持っていない人でもfaceswapを使用する方法を紹介していきます。
faceswapの取り扱いに関する免責事項
faceswapならびに、DeepFakeの技術は悪用によって逮捕者も出ている技術です。
技術そのものに罪はありませんが、厳格な倫理観を持って取り扱うべき技術です。
これからご紹介する技術はあくまでご自身の顔画像処理技術の理解を深めるためにのみご活用ください。本記事を参考にして生じたいかなる損害に関しても当ブログは責任を負いません。
デモ(Colaboratory)
早速デモ環境を動かしていきます。
動作環境
ChromeなどのブラウザがインストールされているPCであればスペックは問いません
ソースコードは全てGoogle Colaboratory上で動作します。
また、モデルをトレーニングするにあたり、学習経過を保存するためにGoogle
Driveを使用します。
顔の交換を行う動画によって増減しますが、Google Driveに約3GBほど空き容量を確保してください。
なお、ソースコードは全て以下のGitHubで取得可能です。
GitHub - faceswap Colaboratory demo
GPU付属のPC環境をお持ちの場合は、以下の記事でfaceswapの使い方を紹介していますのでご参照ください。
GPU搭載のPC環境でのfaceswapの使い方はこちら
[DeepFake]faceswapの自作モデルをトレーニングする[使い方解説]
エンジニアのエンジニアによるエンジニアのための記事を掲載しております
Colaboratory上で精度はそこそこに、早くFaceSwapの出力を得たい場合はこちら。
[SberSwap] ブラウザで高速にFaceswapを試す [使い方解説]
SberSwapと呼ばれる機械学習手法を使って従来より高速、且つ、ブラウザ上でFaceSwapを行う方法を紹介します。
環境セットアップ
はじめにColaboratoryを開きます。以下のリンクからfaceswapが実装されたColaboratoryを開くことができます。
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
おすすめの書籍
[初心者向け] Pythonで機械学習を始めるまでに読んだおすすめ書籍一覧
本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。
おすすめのオンライン講座
[初心者向け] 機械学習がゼロから分かるおすすめオンライン講座
本記事では、機械学習エンジニアとして働く筆者が、AI・機械学習をまったく知らない方でも取り組みやすいおすすめのオンライン講座をご紹介しています。
それでは動かしていきます。
Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。
faceswapに必要な作業は、以下の通りソースコードを実行するだけです。
あとはセルの出力結果に従って適宜、顔を交換したい動画をアップロードしていきます。
以降は各セルの詳細を記載していきます。
Google Driveのマウント
ColaboratoryからGoogle Driveを参照できるようにマウントします。
Google Driveには、顔交換前の動画、学習モデル、顔交換後の動画などを保存します。
以下のようなアクセス許可のダイアログが表示されるため「Googleドライブに接続」を選択し、Google Driveをマウントしてください。
動画のアップロード(顔使用)
次に顔を使用したい動画をアップロードします。
ここでアップロードした動画の顔が、次にアップロードされる動画に使用されます。
動画のサイズが大きい場合アップロードに時間がかかるため注意してください。
本記事では、以下のフリー素材を使用します。
顔を使用する動画
フレーム分割
アップロードした動画をffmpegを使用してフレームごとの画像に変換します。
この処理によって動画がフレームごとの画像に分割されます。
顔抽出(extract)
次にフレーム画像から顔部分を抽出します。
フレーム画像から顔部分のみが抽出されます。
顔以外を使用する動画も同様の処理を行います。本記事では、以下のフリー素材を使用します。
顔以外を使用する動画
モデルのトレーニング
モデルをトレーニングしていきます。
動画の長さや顔の映り方にも左右されますが、face_a、face_bのlossが共に、0.01未満になるまでに約10時間ほどかかります。気長に待ちましょう。
もし、途中で学習が止まってしまった場合はランタイムから再度「すべてのセルを実行」を行ってください。Google
Driveにモデルが保存されていれば途中から学習が再開します。
顔の交換
最後に顔の交換を行います。始めに、フレーム画像の顔を交換します。
動画作成
最後に顔交換済みのフレーム画像を動画に変換します。
出力結果は以下の通りです。
体の動きに合わせて目線などが自然に移動していますね。
まとめ
本記事では、Colaboratory上でfaceswapを使用し動画の顔を交換する方法を紹介しました。
学習速度や、連続使用ができない点など無料ならではの不便さがあるものの、無料でGPUを使用してモデルをトレーニングできるので、とりあえず動かしてみたい、機械学習に触れてみたいという方にはぴったりですね。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
参考文献
1. 論文 - DeepFakes and Beyond: A Survey of Face Manipulation and Fake Detection
0 件のコメント :
コメントを投稿