トップ > 技術ナレッジのアーカイブ > 画像を使ったディープラーニング技術の活用例~顔置換の技術的アプローチ

2023.09.01

画像を使ったディープラーニング技術の活用例~顔置換の技術的アプローチ

#画像認識 #サイバーセキュリティ #AI #ディープラーニング #物体検出 #セマンティックセグメンテーション

顔置換とはその名の通り、顔を入れ替える技術です。
映画業界ではよく使われている技術らしく、映画「ワイルド・スピード sky mission」で撮影途中で亡くなったポール・ウォーカーの代役に顔置換技術を使うことで作品を完成させました。 映画「アバター」も同様の技術が使われていて映像業界ではメジャーな手法のようです。
今回はその技術を体感してみたいと思います。

話者紹介

type11

2013年にテクノプロ・デザイン社に中途入社。
POSレジシステムの開発・保守を約4年、WiFiとBluetooth制御ICチップを検査する専用ソフトウェアの開発・保守を2年経験。 その後、約4カ月のDST研修と2カ月OJT期間を経て現在のデータサイエンス業務に配属。 主にPoC実装・分析業務を担当。
趣味はRaspberry Pi、パン作り。


環境構築

それでは環境構築を始めたいと思います。今回はPCに負荷のかかる作業になるのでGPUアリの前提で進めます。

筆者PC構成

CPU:i9-9900K
メモリ:48GB
GPU:NVIDEA Geforce RTX2070(8GB)
OS:Windows11 Pro

構築手順

1.Dockerインストール
2.Dockerfile、docker-compose.yml作成
3.コンテナ作成(時間がかかる)
4.プログラム実行

1.Dockerインストール

Dockerのインストールについては別途調べてインストールしてください。(そのままインストールするだけなので難しくないはず) そのあとに、power shellで起動していることを確認してください。

2.Dockerfile、docker-compose.yml作成

Dockerを使い顔置換プログラム環境を作成します。
作業用のフォルダを適当に作成して2つファイルを作成します。
以下の内容で保存してください。
※Dockerfileは拡張子をなくしてください。

docker-compose.yml YAML

	  
  1. version: '3'
  2. services:
  3.  swap_face_image:
  4.   build: ./
  5.   image: swap_face_image
  6.   container_name: swap_face
  7.   command: jupyter lab --port 8888 --ip=0.0.0.0 --allow-root --NotebookApp.token='' --no-browser
  8.   deploy:
  9.    resources:
  10.    reservations:
  11.    devices:
  12.    - driver: nvidia
  13.    count: 1
  14.    capabilities: [compute, utility, graphics]
  15.   ports:
  16.    - 8888:8888

Dockerfile Text

	  
  1. #FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04
  2. FROM meadml/cuda10.1-cudnn7-devel-ubuntu18.04-python3.6:latest
  3. ENV TZ=Asia/Tokyo
  4. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  5. # GPGキーの取得
  6. # apt-get update や apt-get upgrade の前に
  7. RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub
  8. RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
  9. RUN apt update
  10. RUN apt-get update
  11. RUN apt-get install -y python3-pip
  12. RUN pip3 install -U pip
  13. RUN pip3 install --upgrade setuptools
  14. RUN apt-get install -y wget libgl1-mesa-dev libglib2.0-0 git ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
  15. RUN pip3 install jupyterlab
  16. RUN git clone https://github.com/sberbank-ai/sber-swap.git
  17. RUN pip3 install -r ./sber-swap/requirements.txt
  18. RUN sh ./sber-swap/download_models.sh
  19. RUN wget -P ./sber-swap/arcface_model https://github.com/sberbank-ai/sber-swap/releases/download/arcface/backbone.pth
  20. RUN wget -P ./sber-swap/arcface_model https://github.com/sberbank-ai/sber-swap/releases/download/arcface/iresnet.py
  21. RUN wget -P ./sber-swap/insightface_func/models/antelope https://github.com/sberbank-ai/sber-swap/releases/download/antelope/glintr100.onnx
  22. RUN wget -P ./sber-swap/insightface_func/models/antelope https://github.com/sberbank-ai/sber-swap/releases/download/antelope/scrfd_10g_bnkps.onnx
  23. RUN wget -P ./sber-swap/weights https://github.com/sberbank-ai/sber-swap/releases/download/sber-swap-v2.0/G_unet_2blocks.pth
  24. RUN wget -P ./sber-swap/weights https://github.com/sberbank-ai/sber-swap/releases/download/super-res/10_net_G.pth
  25. RUN pip3 install opencv-contrib-python
  26. RUN pip3 install opencv-python==4.4.0.46

3.コンテナ作成

以下のコマンドをpower shellで実行するとコンテナ作成できます。

	  
  1. docker compose -f (docker-compose.ymlのフルパス) up -d

例えばworkフォルダを作成してDockerfile、docker-compose.ymlを作った場合は以下のようになります。

	  
  1. docker compose -f D:\work\docker-compose.yml up -d

また、コンテナ作成には時間がかかります。(筆者環境では2~3時間)
構築が終わるまでゆっくりお過ごしください。

4.プログラム実行

エラーが発生せずに終わるとコンテナが作成されて起動状態になっています。
ブラウザから「localhost:8888」を打ち込んでアクセスするとjupyter labの画面に入れます。

画面からsber-swapフォルダに入りノートブックファイル(SberSwapInference.ipynb)を動かすと顔置換スクリプトが実行できます。

顔置換を見破る方法

今回は以下のサンプル画像を使って動かしてみました。
顔置換が分かりやすいように男女の画像を組み合わせて出しました。

この画像(Source Image)は歯を出していませんが元画像(Target Image)に合わせて歯を出した状態で顔置換されていることが分かります。

うまく言った顔置換ですが今度は見破れるかを検証したいと思います。
アナログ的な方法ですが拡大してみます。

拡大してみると顔のあたりがすごくぼかされていることがわかります。
また、生え際もよい感じで合わせていますが男性の髪色が反映されていることがわかります。細かい点相違点はほかにもありますが顔置換をなじませるためにぼかしを使っているようです。このぼかしに気づくことができれば何とか見破れるかもしれません。
ほかに有用な方法があるかもしれませんが、顔置換画像をいっぱい作って顔置換判別モデルを作ってみるのもいいかもせれませんね。

閉じる