Colaboratory上で高速に2つの動画や画像の顔を入れ替える方法を紹介します。概要DeepFakeDeepFakeとは、ディープラーニングなど高度な合成技術を用いて作られる、本物と見分けがつかないような、にせものの動画を生成する技術を指します。人間の顔の合成を指すことが多く、大別すると下記の4種類で構成されています。Swap)DeepFakeを構成する4つの技術に関する詳細は以下の記事をご覧ください。Swap)に属する技術です。テレビ番組や、YouTubeなどでも著名人の顔を交換した映像をご覧になった方も多いかと思います。Colaboratoryを使ってGPUを持っていない人でもfaceswapを使用する方法を紹介していきます。Colabを使用してディープフェイクを作成することが禁止となりました。詳しくはよくある質問の制限事項をご参照ください。以降は、参考情報としてご覧下さい。SberSwapSberSwapはfaceswapを実現する手法の一つで、AEI-Netをベースに取り入れています。高速化にも注力しており、従来手法は交換元・交換先の2つの対象を長時間学習する必要がありましたが、この手法では、画像同士の交換であれば10秒もかからず交換することができます。パイプラインには超解像も組み込まれており、faceswapした結果を高解像度化して出力することができます。以下の記事では従来手法のfaceswapをご紹介していますが、今回の手法の方が圧倒的に早く仕上がります。[使い方解説]本記事では、ブラウザだけでfaceswapを使用して動画の顔を交換する方法を紹介しています。faceswapの取り扱いに関する免責事項faceswapならびに、DeepFakeの技術は悪用によって逮捕者も出ている技術です。技術そのものに罪はありませんが、厳格な倫理観を持って取り扱うべき技術です。これからご紹介する技術はあくまでご自身の顔画像処理技術の理解を深めるためにのみご活用ください。本記事を参考にして生じたいかなる損害に関しても当ブログは責任を負いません。デモ(Colaboratory)動作環境ChromeなどのブラウザがインストールされているPCであればスペックは問いません。ソースコードは以下のGitHubで取得可能です。Colaboratoryを開くこともできます。環境セットアップそれでは、GitのCloneなど必要な準備を行います。このデモはPythonで実装しています。Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。本記事では、機械学習エンジニアとして働く筆者が、AI・機械学習をまったく知らない方でも取り組みやすいおすすめのオンライン講座をご紹介しています。それではセットアップしていきます。Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更faceswapに必要な作業は、以下の通りソースコードを実行するだけです。「ランタイム」→「すべてのセルを実行」を選択あとはセルの出力結果に従って適宜、顔を交換したい動画・画像をアップロードしていきます。以降は各セルの詳細を記載していきます。Clone始めに、SberSwapのコードをGitから取得します。sber-swap学習済みモデルのダウンロード学習済みモデルをダウンロードします。detectorや超解像用のモデルなど計4種ダウンロードしています。https://github.com/sberbank-ai/sber-swap/releases/download/super-res/10_net_G.pthライブラリのインストール・インポート関連ライブラリをインストールします。filesモデルのビルド・ロードAEI-Netなどを定義し、学習済みモデルをロードします。Trueの記述がありますが、Trueの場合、出力結果に超解像を行います。Falseの場合、超解像処理が行われない分出力結果の画質がやや粗くなりますが、処理速度が向上します。model.netG.train()FaceSwap画像のアップロードFaceSwapしたい画像をアップロードします。画像を交換するか、動画を交換するか選択することができます。アップロードする画像や動画がない場合は、サンプルを選択すると、サンプル画像でFaceSwapを行います。サンプルを使用するか選択してください。次に顔を当てはめたい画像、または動画をアップロードしてください。videoか、imageのどちらの顔を交換するか選択してください。upload_target[0]FaceSwap選択したデータを使って、FaceSwapを行います。出力結果は、examples/results/に出力されます。result)FaceSwap結果の表示それでは、FaceSwapの結果を見ていきます。余談ですが、moviepyを使うと簡単にColab上にインラインで動画を表示できるためおすすめです。VideoFileClip(OUT_VIDEO_NAME)clip.ipython_display()本ブログでは、以下の画像を使用しました。https://www.pakutaso.com/20160337062post-7122.htmlFaceSwapの結果は以下の通りです。続いてSource画像はそのままに、Targetをこちらの動画に変更しました。https://pixabay.com/ja/videos/%E5%AD%90%E4%BE%9B-%E5%AD%90%E3%81%A9%E3%82%82%E3%81%AE%E7%AC%91%E9%A1%94-%E8%B5%A4%E3%81%A1%E3%82%83%E3%82%93-33631/動画のFaceSwap結果は以下の通りです。30秒ほどの動画の変換ですが、おおよそ1分程度で完了します。まとめ本記事では、Colaboratory上でSberSwapを使用し動画の顔を交換する方法を紹介しました。従来の手法より高速化が図られているため、素早く様々なFaceSwapを試すことができ便利になっていますね。本記事では、機械学習を動かすことにフォーカスしてご紹介しました。学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。*このブログについてホームサイトマップTeDokologyTeDokology。