今回は、PaddleSegによるセグメンテーションの実装方法を紹介します。

人物の切り抜きを行い、背景を置換した動画を作成してみましょう。

Google colabを使用して簡単にセグメンテーションを実装することができますので、ぜひ最後までご覧ください。

今回の内容

・PaddleSegの概要

・画像セグメンテーションの実装

・人物の切り抜きと背景置換動画を作成

PaddleSegとは

PaddleSegは2020年5月に公開された、画像セグメンテーションの高効率開発ツールキットです。

PaddlePaddle (Baidu) によって開発されました。

セグメンテーションモデルの設計、モデルのトレーニング、パフォーマンスの最適化などプロセス全体における支援を提供しており、CityscapesデータセットではSoTAを達成しています。

最先端のセグメンテーションテクノロジーと組み合わせて、80以上の高品質モデルをサポートしています。

出典: https://github.com/PaddlePaddle/PaddleSeg

PaddleSegの導入

それでは早速、PaddleSegの準備をしていきましょう。

ここからはGoogle colabを使用していきます。

from google.colab import drive
drive.mount('/content/drive')
%cd ./drive/MyDrive

PaddlePaddleをインストールします。

!python -m pip install paddlepaddle-gpu==2.2.1.post101 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

PaddlePaddleが正常にインストールされたことを確認します。

import paddle
paddle.utils.run_check()
!python -c "import paddle; print(paddle.__version__)"

次にPaddleSegをインストールします。

!pip install paddleseg

必要なライブラリをインストールします。

!git clone https://github.com/PaddlePaddle/PaddleSeg

cd PaddleSeg
pip install -r requirements.txt

以上で準備が完了しました。

PaddleSegのチュートリアル

実際にチュートリアルでセグメンテーションを行なってみます。

!python predict.py \
       --config configs/quick_start/bisenet_optic_disc_512x512_1k.yml \
       --model_path https://bj.bcebos.com/paddleseg/dygraph/optic_disc/bisenet_optic_disc_512x512_1k/model.pdparams\
       --image_path docs/images/optic_test_image.jpg \
       --save_dir output/result

実行してエラーが出ていないようであれば、無事に準備ができています。

このテスト結果の画像は「PaddleSeg/output/result」に保存されています。

興味がある方は確認してみてください。

PP-HumanSegとは

ここからはPP-HumanSegについて紹介します。

PP-HumanSegは、大規模な人間データでトレーニングされた人間を対象としたセグメンテーションモデルです。

軽量なモデルから高精度なモデルまで用意されており、さまざまなシーンで使用することができます。

ここからは3つのモデルについて紹介します。

表:各モデルのパフォーマンス

ModelInput SizeFLOPSParametersLatencyModel Size
PP-HumanSeg-Server512×512114G26.8M37.96ms103Mb
PP-HumanSeg-Mobile192×192584M1.54M13.17ms5.9Mb
PP-HumanSeg-Lite192×192121M137K10.51ms543Kb
引用:https://github.com/PaddlePaddle/PaddleSeg/tree/release/2.4/contrib/PP-HumanSeg

PP-HumanSegの実装

ここからはPP-HumanSegを実装していきます。

まずはモデルとテストデータをダウンロードします。

%cd contrib/PP-HumanSeg
!python export_model/download_export_model.py
!python data/download_data.py

ここからは、人物の切り抜きを行い、背景を置換していきます。

まずは動画を用意して、人物のみの切り抜きをしてみましょう。

今回はフリー動画を使用します。

この動画から背景を削除して、人物のみの切り抜きをします。

上の動画をダウンロードして、「input_video.mp4」と名前を変更します。

変更が終わったら、「PaddleSeg/contrib/PP-HumanSeg/data」に配置します。

!python bg_replace.py --config export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax/deploy.yaml --video_path data/input_video.mp4

結果はPaddleSeg/contrib/PP-HumanSeg/output」に出力されます。

出力された動画は以下のようになります。

結果を実際に見てみると、背景が削除され、人物のみの切り抜きができています。

PP-HumanSegによる背景置換(動画+背景静止画)

background_sea.jpg

先ほどの動画と静止画の背景を組み合わせます。

ここでは上の画像を使用します。

!python bg_replace.py --config export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax/deploy.yaml  --input_shape 224 398 --video_path data/input_video.mp4 --bg_img_path data/background_sea.jpg

#--video_path メインとなる人物の動画
#--bg_img_path 背景の画像(または動画)

先ほど切り抜いた動画と背景をうまく重ね合わせることができました。

今回は人物(動画)と背景(静止画)を組み合わせました。

この他にも「人物(静止画)+ 背景(静止画)」や「人物(動画)+ 背景(動画)」といった組み合わせも可能です。

興味のある方は試してみてください。

組み合わせ別のコードを以下にまとめます。

#人物(静止画)と背景(静止画)
!python bg_replace.py --config export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax/deploy.yaml  --input_shape 224 398 --img_path ***.jpg --bg_img_path ***.jpg
#--img_path メインとなる人物の画像
#--bg_img_path 背景の画像

#人物(動画)と背景(動画)
!python bg_replace.py --config export_model/deeplabv3p_resnet50_os8_humanseg_512x512_100k_with_softmax/deploy.yaml  --input_shape 224 398 --video_path ***.mp4 --bg_video_path ***.mp4
#--video_path メインとなる人物の動画
#--bg_video_path 背景の動画

(参考)人物(動画)と背景(動画)の組み合わせの場合の動画です。

まとめ

今回は、画像セグメンテーションの実装とPaddleSegを使った人物の切り抜きと背景置換動画を作成の方法を紹介しました。
背景を置換する手法は近年増えているリモート会議などで活用されている技術となります。

実際に自分の手で実装してみることで、理解が深まったかと思います。

PaddleSegを使ったセグメンテーションにはいくつも種類がありますので、ぜひ他の記事もご覧ください。

コメントを残す