本記事では、GAN-Supervised Dense Visual Alignmentと呼ばれる機械学習手法を用いて、動画にフィルターをかける方法を紹介します。
GAN-Supervised Dense Visual Alignment
概要
GAN-Supervised Dense Visual Alignmentは、識別モデルとそのGAN生成トレーニングデータをエンドツーエンドで共同で学習するためのフレームワークです。
GANgealingアルゴリズムは、空間トランスフォーマー(Spatial
Transformer)をトレーニングし、非整列データでトレーニングされたGANからのランダムサンプルを共同学習されたターゲットにマッピングします。
上記説明は非常に難解に感じる方も多いかと思います。簡略化した説明としては、GANgealingアルゴリズムは下図のような非整列な画像データから平均的な画像を獲得します。
出典: https://github.com/wpeebles/gangealing |
そして、上記の平均化した画像は、その他の非整列データのテンプレートとして作用します。
つまり、平均化画像に適用したフィルターは、他の画像や動画に映る対象物に対して位置を合わせながら伝搬させることができます。
上図の例でいえば猫の平均化画像を獲得し、下図のように他の猫の画像や動画に適用したフィルターを適用できます。
GAN-Supervised Dense Visual Alignmentの導入手順
セットアップ①: conda環境構築
それでは早速、開発環境にMMOCRをセットアップしていきます。
動作確認は下記の環境で行っています。
OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
おすすめの書籍
[初心者向け] Pythonで機械学習を始めるまでに読んだおすすめ書籍一覧
本記事では、現役機械学習エンジニアとして働く筆者が実際に読んだ書籍の中でおすすめの書籍をレベル別に紹介しています。
おすすめのオンライン講座
[初心者向け] 機械学習がゼロから分かるおすすめオンライン講座
本記事では、機械学習エンジニアとして働く筆者が、AI・機械学習をまったく知らない方でも取り組みやすいおすすめのオンライン講座をご紹介しています。
それでは、GAN-Supervised Dense Visual Alignmentをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。
以上で、conda環境の構築は以上です。
注意点として、必ずgangealing
ディレクトリ配下でPYTHONPATH
を設定するようにしてください。
上記設定が抜けていると以降の処理でエラーが発生します。
平均化画像適用結果の表示(オプション)
ここでは、lsunから取得した猫の画像から生成した平均化画像をテストデータに適用した結果を表示します。
なお、動画や画像に対するフィルター適用のみ試してみたい方はこちらを飛ばしてもらっても影響はありません。
こちらの処理が完了すると以下のような動画が出力されます。
各画像の猫の顔の位置を正確に抽出していることが見て取れます。
一点実行時の注意点ですが、GeForce GTX 1080 Tiでは--output_resolution 512
でOutOfMemoryが発生しました。
--output_resolution
で解像度を調整してください。
フィルター適用(Mixed Reality)
最後に、任意の動画にフィルターを適用してみます。
本記事では、人の顔にフィルターを適用する方法を記載します。
なお、こちらも実行時に比較的多くのGPUメモリを消費するためOut of Memoryが発生する可能性があります。
適宜入力画像や、出力解像度を下げてメモリ消費量を調整してください。
上記コマンドが完了すると、以下のような動画が出力されます。 動画内の顔の正確な位置にひげが付与されています。
--label_path
に自作のフィルターを指定すれば、異なるフィルターを適用した動画を生成することも可能です。
また、学習データを用意すれば、人や、猫のみならずその他のオブジェクトに対してもフィルターを伝搬させることができます。
まとめ
本記事では、GAN-Supervised Dense Visual Alignmentを使って、動画にSnowのフィルターのような加工を行う方法を紹介しました。
日常生活で遊びとして使っているアプリケーションにも、裏では様々な技術が使われていることが良く分かりますね。
また、技術を如何に人に使ってもらうか、についても考えさせられます。
また、本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
0 件のコメント :
コメントを投稿