[PaddleSeg]機械学習で背景を削除・置換する[Python]

2021年11月23日火曜日

Artificial Intelligence

本記事ではPaddleSegと呼ばれる機械学習手法を用いて、人が映る動画から背景を置換する方法を紹介します。

アイキャッチ

PaddleSegとは

PaddleSegは画像セグメンテーションの高効率開発ツールキットです。
PaddleSegは、セグメンテーションモデルの設計、モデルのトレーニング、推論速度・パフォーマンスの最適化などプロセス全体における支援を提供します。 また、約20のセグメンテーションモデルと、50を超える事前トレーニング済みモデルをサポートしています。

paddleSegの使用例
出典: https://github.com/PaddlePaddle/PaddleSeg

なかなか手厚いツールキットです。PaddleSegは、Baiduが開発しているPaddlePaddleというAIフレームワークを使用しており画像セグメンテーションの他にもAIOCRなど幅広いツールキットを提供しています。

PaddleOCR等の導入手順は以下で紹介しています。ご興味があればご参照ください。

PaddleSegの導入手順

セットアップ1: conda環境構築

それでは早速、開発環境にPaddleSegをセットアップしていきます。
動作確認は下記の環境で行っています。

OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080

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

それでは、PaddleSegをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。

conda環境構築手順を下記に記載します。
なお動作要件は下記の通りです。

  1. PaddlePaddle >= 2.0.2
  2. Python >= 3.7+
# python version 3.7のconda環境を作成
$ conda create -n paddle_human_seg python=3.7 -y
 
# 作成した環境をアクティベート
$ conda activate paddle_human_seg
$ cd paddle_human_seg
 
# Proxy配下の場合はインストール前に下記を設定
$ export http_proxy="http://"username":"password"@proxy:port"
$ export https_proxy="http://"username":"password"@proxy:port"


# paddlepaddle-gpuをインストール
# cudatoolkitのバージョンはインストールされているcudaのバージョンに合わせる
$ conda install -c conda-forge cudatoolkit=11.2 cudnn nccl six
$ conda install -c anaconda decorator

# https://anaconda.org/Paddle/paddlepaddle-gpu/filesからpython versionとcudaバージョンが一致するものをインストール
$ wget https://anaconda.org/Paddle/paddlepaddle-gpu/2.2.0/download/linux-64/paddlepaddle-gpu-2.2.0-py37_gpu_cuda11.2_many_linux.tar.bz2
$ conda install paddlepaddle-gpu-2.2.0-py37_gpu_cuda11.2_many_linux.tar.bz2

問題なくインストールできているか下記のコマンドを実行して確認します。

$ python3 -c "import paddle; print(paddle.__version__)"
2.2.0
$ python3 -c "import paddle; paddle.utils.run_check()"
PaddlePaddle works well on 2 GPUs.
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.

上記のようにバージョンが表示されチェックに成功すれば、paddlepaddle-gpuのインストールは完了です。

続いてPaddleSegをインストールします

$ pip3 install paddleseg

# codeをgit clone
$ git clone https://github.com/PaddlePaddle/PaddleSeg
$ cd PaddleSeg
# install 確認
$ python train.py --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml

上記コマンドで学習が実行させれば正常にPaddleSegがインストールされています。

セットアップ2: 学習済みモデルのダウンロード

$ cd contrib/PP-HumanSeg/

# モデルダウンロード
$ python export_model/download_export_model.py
# /export_modelにモデルがダウンロードされます

# テストデータのダウンロード
$ python data/download_data.py
# /dataにテストデータがダウンロードされます

以上でモデルのダウンロードは完了です。

背景置換(背景削除)

ここまでで準備した環境とモデルを使用して、動画の背景を削除してみます。
本記事ではフリー動画素材のこちらを使用させて頂きます。

上記の動画から背景を削除してみます。

# ディレクトリ確認
$ pwd
PaddleSeg/contrib/PP-HumanSeg

# PaddleSeg/contrib/PP-HumanSeg/dataに上記の動画(input_data.mp4)を配置
# 背景削除を実行
# --video_pathに対象の動画を指定
$ python bg_replace.py --config export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax/deploy.yaml --video_path data/input_data.mp4

上記の結果outputにavi形式の変換後の動画が出力されます。

背景削除

こちらが背景削除の結果です。動作環境にもよりますが筆者の環境では30秒の動画を約30秒ほどで変換できました。
Githubにはリアルタイムで変換しているGifも挙げられています。
リアルタイムでも十分に動作可能だと考えられます。精度においても申し分ないのではないでしょうか?

背景置換

続いて、背景を任意の画像に入れ替えてみたいと思います。 本記事ではこちらのフリー画像を使用します。

背景画像
# ディレクトリ確認
$ pwd
PaddleSeg/contrib/PP-HumanSeg

# PaddleSeg/contrib/PP-HumanSeg/dataに上記の背景画像(input_image.jpg)を配置
# 背景置換を実行
# --video_pathに対象の動画を指定
# --bg_img_pathに背景となる画像を指定
$ python bg_replace.py --config export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax/deploy.yaml --video_path data/input_data.mp4 --bg_img_path data/input_image.jpg

上記コマンドの結果は以下となります。

背景置換結果

高校球児に怒られそうですが、球場で踊る子供たちの動画を作成することができました。
環境のセットアップさえ完了してしまえばコマンド一つでこのような動画が作成できてしまいます。
またPaddleSegは学習用のコードも公開されているため学習データを用意しオリジナルのモデルをトレーニングすることも可能です。

まとめ

本記事では、PaddleSegで人物が映る動画から背景を削除する方法を紹介しました。
近年リモートワークが増えてきておりリモート会議など使う場面も多い技術ですね。
こういった技術を実際に動かしてみると、理解が深まって知的好奇心も刺激されます。

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


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

参考文献

1. 論文 - PaddleSeg: A High-Efficient Development Toolkit for Image Segmentation

2. GitHub - PaddlePaddle/PaddleSeg

AIで副業ならココから!

まずは無料会員登録

プロフィール

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

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


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology