「ZAO」かっこいいですね!ディープフェイクを使って顔を変える方法

「ZAO」かっこいいですね!ディープフェイクを使って顔を変える方法

最近、SNS上で「ZAO」と呼ばれるAI顔変換ソフトが話題になっている。人気が出る一方で、多くの疑問も生じている。詳細は「ZAO が 3 日で Apple の無料リストのトップに躍り出た、このままでは Apple は消滅する」をご覧ください。

アプリに写真をアップロードするだけで、好きなスターになれます。夢のような話に聞こえますが、実現可能なのです。

AI顔変えアプリ「ZAO」は敷居ゼロで操作も簡単…流行る遺伝子を持っている。しかし、一夜にして人気が出ましたが、その後、急速に広まり、わずか 24 時間で禁止されました。


9月3日、ZAOは公式に謝罪声明を発表した。 ZAOは、個人の顔の生体認証特徴情報を保存せず、支払いリスクを発生させないと表明した。同社は個人情報保護とデータセキュリティを非常に重視している。

「ZAO」の謝罪に関する話題はすぐに人気検索リストのトップに躍り出たが、それが引き起こしたプライバシー保護論争と反省は収まっていない。その後、工業情報化部はZAOに聞き取り調査を行い、自己点検と是正を実施し、法律に従って個人情報を収集および使用するように要求しました。

プログラマーとして、顔を変えるソフトウェアの使い方を知らないことをどうやって我慢できるでしょうか? ここでは、ディープフェイクを使用して素手で顔を変える方法を説明します。

ディープフェイクを使って顔を交換するにはどうすればいいですか?

ディープフェイクツールキットを入手する

  1. git クローン https://github.com/deepfakes/faceswap.git

依存パッケージを完了します。

  • pip インストール tqdm
  • pip インストール cv2
  • pip で opencv-contrib-python をインストールします
  • pip で dlib をインストール
  • pip keras をインストール
  • pip テンソルフローをインストール
  • pip install tensorflow-gpu (マシンに GPU がある場合)
  • 顔認識をpipでインストールする

サンプルの収集

ここでは新垣結衣さんのサンプルを選びました。100枚の写真をダウンロードするのに長い時間がかかりました。

もう一人の方はキャリー・マリガンさんです。画像を探すのが面倒だったので、「グレート・ギャツビー」の動画をそのままキャプチャして、ffmpegで画像に変換しました。全部で70枚くらいあります。

顔を掴む

サンプルを収集した後、次のコマンドを使用してサンプル画像の顔をキャプチャします。

./faceswap.py 抽出 –i 入力フォルダー/ –o 出力フォルダー/

これを行う理由は、私たちの主な焦点は顔の置き換えであるため、顔の特徴を取得するだけでよく、他の環境要因は顔の置き換えにほとんど影響を与えないからです。

顔の取得プロセスが完了すると、すべての顔画像を取得できます。ここでは、不適切なサンプル (下図の 49_1.jpg など) を手動で選別して削除することができます。

顔検出アルゴリズムHOG

ここで、顔の特徴抽出アルゴリズム HOG (Histogram of Oriented Gradient) について簡単に説明します。

厳密に言えば、HOG は実際には特徴であり、コンピューター ビジョンと画像処理におけるオブジェクト検出に使用される特徴記述要素です。 HOG 特徴と SVM 分類器を組み合わせたものは、画像認識で広く使用されています。

顔検出の簡単なプロセスは次のとおりです。

① まず、プロセスを簡素化するために、画像を白黒で表現します(顔を検出するためにカラーデータは必要ないため)。

②次に画像上の各ピクセルを1つずつスキャンします。各ピクセルについて、そのすぐ隣のピクセルを検索します。次に、この点の周りの暗闇の変化の方向を見つけます。

例えば、下の図に示すように、この点の周囲の明るい方向から暗い方向への方向は左下隅から右上隅に向かうため、そのグラデーションの方向は次の矢印で示されるようになります。

③前のステップが完了すると、画像内のすべてのピクセルを対応するグラデーションで表現できるようになります。これらの矢印は、画像全体の明るい部分から暗い部分への傾向を示しています。

これらのピクセルを直接分析すると(つまり、色ごとに分析すると)、非常に明るいポイントと非常に暗いポイントの値(RGB値)は間違いなく大きく異なります。

ただし、明るさの変化の方向のみに関心があるため、カラー画像と白黒画像から得られる最終結果は同じになり、問題解決のプロセスが大幅に簡素化されます。

④ しかし、これらすべてのグラデーションを保存するとメモリを大量に消費するため、画像全体を複数の小さな正方形に分割し、その中にいくつの異なるグラデーションがあるかを計算します。

次に、最も同一の勾配を持つ方向を使用して、この小さな正方形の勾配方向を表します。これにより、元の画像が非常に単純な表現に変換され、顔の基本的な構造がより単純な方法でキャプチャされます。

⑤画像のHOG特徴量を計算した後、この機能を使用して、多数の画像をトレーニングして得られたHOG特徴量を比較することができます。類似度が一定の閾値を超えると、顔が検出されたとみなされます。

トレーニングを始める

2 つの顔の顔情報を抽出した後、次のコマンドを直接使用してモデルのトレーニングを開始します。

  1. ./faceswap.py トレイン -A faceA_folder/ -B faceB_folder -m models/

ここで、-m はモデルが保存されるフォルダーを指定します。プレビュー モードを有効にするには、コマンドに -p パラメータを追加することもできます。

トレーニング プロセス中は、いつでも Enter キーを押してトレーニングを停止することができ、モデルはターゲット フォルダーに保存されます。

トレーニングに使用されるディープラーニング フレームワークは Tensorflow であり、チェックポイントを保存するメカニズムを提供します (もちろん、コードで使用する必要があります)。

トレーニングを停止した後は、上記のコマンドを使用して、以前のトレーニングで取得した重みパラメータをいつでも読み取り、トレーニングを続行できます。

顔を変換する

モデルをトレーニングした後(損失値が低い)、次のコマンドを使用してターゲット イメージ上の顔を交換できます。

  1. ./faceswap.py –i 入力画像フォルダ/ -o 出力画像フォルダ/ -m モデル/

ここでの例はビデオなので、まず次のコマンドを使用して、ビデオを固定周波数で画像に変換できます。

  1. ffmpeg –i video.mp4出力/video-frame-%d.png

次に、顔変換操作を実行します。最後に、変換された顔画像を組み合わせてビデオを作成します。

  1. ffmpeg –i video-frame-%0d.png -c:v libx264 -vf “fps=25, format=yuv420p”出力.mp4

以下は、顔を入れ替えた 2 つの画像です (サンプル A、画像 110 枚、サンプル B、画像 70 枚、トレーニング時間 6 時間)。

うーん...効果はあまり良くありません...サンプルサイズを増やしてトレーニング時間を延長することをお勧めします。

顔を変換するプロセス

顔を変換するプロセスについて簡単に説明しましょう。ここでは AutoEncoder (畳み込みニューラル ネットワーク) が使用され、入力画像に基づいて画像を再構築します (つまり、画像に基づいて画像を生成します)。

ここで AutoEncoder モデルが行うことは、まず Encoder を使用して画像を処理し (畳み込みニューラル ネットワークが特徴を抽出)、画像を圧縮して表現することです。その後、デコーダーは画像を復元します。

特にディープフェイクでは、1 つのエンコーダーと 2 つのデコーダーを使用します。トレーニング部分では、実際に 2 つのニューラル ネットワークをトレーニングします。両方のニューラル ネットワークは同じエンコーダを共有しますが、デコーダは異なります。

まず、エンコーダーは画像を顔の特徴に変換します (畳み込みニューラル ネットワークを通じて顔の詳細を抽出します)。デコーダーは、この顔の特徴データを使用して画像を復元します。

ここで、この変換の品質を判断するための誤差関数(損失関数)があります。モデルのトレーニングのプロセスは、この損失関数(値)を最小化するプロセスです。

最初のネットワークは画像 A のみでトレーニングされ、2 番目のネットワークは画像 B のみでトレーニングされます。エンコーダーは、画像を顔の特徴値に変換する方法を学習します。

デコーダー A は、顔の特徴値を通じて画像 A を再構築する方法を学習するために使用され、デコーダー B は、顔の特徴値を通じて画像 B を再構築する方法を学習するために使用されます。

したがって、トレーニング中は、両方の画像を同じエンコーダーに送信しますが、画像を復元するために 2 つの異なるデコーダーを使用します。

このようにして、最終的に画像 B から取得した顔を使用し、Encoder を使用して特徴を抽出し、A の Decoder を使用して復元すると、A の顔と B の表情が得られます。

<<:  データから洞察まで、IBMは企業の人工知能への取り組みを加速します

>>:  エンタープライズ AI の 4 つのトレンド: 現在地と今後の方向性

ブログ    
ブログ    

推薦する

...

7つの便利なプロンプトパラメータ

ChatGPT と Midjournal により、生成 AI のアプリケーションが急増しました。生成...

...

...

...

...

...

ChatGPTは人気を集めており、OpenAIはAIソフトウェア用のアプリストアの作成を検討している

今年 5 月、OpenAI はすべての ChatGPT Plus ユーザー向けにネットワーキングおよ...

エンタープライズ向け人工知能プラットフォームの選択ガイド

企業における人工知能の応用はますます広範になってきており、産業化される可能性もあります。既存のデータ...

7 つの重要な要素: 優れた機械学習アルゴリズムを選択するには?

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

...

鶏が先か卵が先か: ニューラルアーキテクチャ探索手法の概要

Google のプログレッシブ アーキテクチャ検索から CMU の微分化可能アーキテクチャ検索まで、...

...

ヘルスケアにおける機械学習の悪影響

Marzyeh Ghassemi 助教授は、医療データに隠れたバイアスが人工知能のアプローチにどのよ...