[Deep Privacy] AIで人物写真を匿名化する [Anonymization]

2022年12月2日金曜日

Artificial Intelligence

本記事では、DeepPrivacy2と呼ばれる機械学習手法を用いて、任意の人物写真の顔や全身を別の人物に入れ替え匿名化する方法をご紹介します。

アイキャッチ

Deep Privacy2

概要

DeepPrivacy2は、人物の匿名化を行うanonymizationタスク技術です。

前身のDeepPrivacyから以下の点が改善されています。

  1. 顔の匿名化→全身の匿名化
  2. 顔の匿名化の改善
  3. StyleMCを用いたテキストプロンプトガイドによる匿名化
  4. 精度改善・トレーニング速度改善


DeepPrivacy2では、高品質で多様な編集可能な匿名化を生成するスタイルベースのGANにより、全身の匿名化を実現しています。またFDH datasetを用いて生成する画像の画質と多様性を大幅に改善させています。

アーキテクチャ
出典: DeepPrivacy2: Towards Realistic Full-Body Anonymization

詳細はこちらの論文をご参照ください。

本記事では上記手法を用いて、任意画像の顔や全身の匿名化を行っていきます。

デモ(Colaboratory)

それでは、実際に動かしながら
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

それではセットアップしていきます。 Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

初めにGithubからソースコードを取得します。

%cd /content

!git clone https://github.com/hukkelas/deep_privacy2.git

# Commits on Nov 30, 2022
%cd /content/deep_privacy2
!git checkout a06b4feaef04326504da836ce8fdecad726ba2db

次にライブラリをインストールします。

%cd /content/deep_privacy2

!pip install -e .

!pip install moviepy==0.2.3.5 imageio==2.4.1
!pip install yt-dlp

最後にライブラリをインポートします。

from yt_dlp import YoutubeDL
from moviepy.video.fx.resize import resize
from moviepy.editor import VideoFileClip

from PIL import Image
import IPython

以上で環境セットアップは完了です。

テスト画像・動画のセットアップ

匿名化を行う画像や動画をGoogle Colabにダウンロードします。

はじめに画像をダウンロードします。

%cd /content/deep_privacy2

!mkdir inputs outputs

!wget -c https://www.pakutaso.com/shared/img/thumb/ramenPAR566252447_TP_V4.jpg \
      -O ./inputs/test_01.jpg
      
%cd /content/deep_privacy2

im = Image.open('./inputs/test_01.jpg')
IPython.display.display(im)

以下の画像を使用します。

入力画像

続いて、テスト動画をダウンロードします。

video_url = 'https://www.youtube.com/watch?v=9FD-vnjrD3I' #@param {type:"string"}

#@markdown 動画の切り抜き範囲(秒)を指定してください。\
#@markdown 30秒以上の場合OOM発生の可能性が高いため注意
start_sec =  1#@param {type:"integer"}
end_sec =  6#@param {type:"integer"}

(start_pt, end_pt) = (start_sec, end_sec)

%cd /content/deep_privacy2

!mkdir test_files

download_resolution = 720
full_video_path = './inputs/full_video.mp4'
input_clip_path = './inputs/clip_video.mp4'

# 動画ダウンロード
ydl_opts = {'format': f'best[height<={download_resolution}]', 'overwrites': True, 'outtmpl': full_video_path}
with YoutubeDL(ydl_opts) as ydl:
    ydl.download([video_url])

# 指定区間切り抜き
with VideoFileClip(full_video_path) as video:
    subclip = video.subclip(start_pt, end_pt)
    subclip.write_videofile(input_clip_path)
    
# 動画の確認
clip = VideoFileClip(input_clip_path)
clip = resize(clip, height=420)
clip.ipython_display()

以下の動画を使用します。

入力動画

Anonymization

それでは、匿名化を行っていきます。

まず、全身の匿名化を行います。

%cd /content/deep_privacy2

!python3 anonymize.py \
  configs/anonymizers/FB_cse.py \
  -i ./inputs/test_01.jpg \
  -o ./outputs/FB_cse_test_01.jpg

出力結果は以下の通りです。

推論結果

続いて、顔のみの匿名化を動かしてみます。

%cd /content/deep_privacy2

!python3 anonymize.py \
  configs/anonymizers/face.py \
  -i ./inputs/test_01.jpg \
  -o ./outputs/face_test_01.jpg

出力結果は以下の通りです。

Face推論結果

最後に、動画の匿名化してみます。

%cd /content/deep_privacy2

!python3 anonymize.py \
  configs/anonymizers/face.py \
  -i ./inputs/clip_video.mp4 \
  -o ./outputs/face_clip_video.mp4

出力結果は以下の通りです。

顔が匿名化されていますが、元動画の表情までは踏襲されないようです。また、フレームごとに顔の人物が細かく変わっていることからフレーム間で匿名化された顔が共有されてはいないようです。

FaceVideo推論結果

まとめ

本記事では、DeepPrivacy2を用いて任意の画像・動画の匿名化を行いました。
目線に黒い線を入れるより強固にプライバシーを保護することができます。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1.  論文 - DeepPrivacy2: Towards Realistic Full-Body Anonymization

2. GitHub - hukkelas/deep_privacy2

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology