私的AI研究会 > MotionSeg
画像のセグメンテーションを使い静止画から動画パーツを入れ替える技術「Motion Supervised co-part Segmentation」をローカルマシンで検証する
cd /anaconda_win/workspace_2 ← Windows の場合 cd ~/workspace_2 ← Linux の場合 git clone https://github.com/AliaksandrSiarohin/motion-cosegmentation motion-co-seg・「motion-co-seg」フォルダ内にもう一つプロジェクトをダウンロードする
cd motion-co-seg git clone https://github.com/AliaksandrSiarohin/face-makeup.PyTorch face_parsing
update └─workspace_2 └─motion-co-seg ← GitHub からクローンしたプロジェクトに上書きする ├─face_parsing ← GitHub からクローンしたプロジェクトに上書きする │ └─result_save ├─results ├─results_save └─sample ├─images └─videos・解凍してできる「update/」フォルダ以下を次のフォルダの下に上書きコピーする
%matplotlib inline
カテゴリー | --config | --checkpoint | --source_image | --terget_video | --swap_index | 出力例 |
0:10seg | config/ vox-256-sem-10segments.yaml | ./sample/ vox-10segments.pth.tar | ./sample/images/ 16.png | ./sample/videos/ 04.mp4 | [2] | 赤い唇のトランプ |
./sample/images/ 26.png | ./sample/ videos/11.mp4 | {7,3] | 青い目なった女優 | |||
1:5seg | config/ 256-sem-5segments.yaml | ./sample/ vox-5segments.pth.tar | ./sample/images/ 27.png | ./sample/videos/ 02.mp4 | [3,4,5] | 金髪になった女優 |
./sample/images/ 27.png | ./sample/videos/ 04.mp4 | [3,4,5] | トランプ顔の女優 | |||
./sample/images/ 23.png | ./sample/videos/ 07.mp4 | [1] | 髭が生えた男優 | |||
2:super | config/ vox-256-sem-10segments.yaml | ./sample/ vox-first-order.pth.tar | ./sample/images/ anim16.png | ./sample/videos/ 04.mp4 | [1,2,3.. ...14,15] | 女優の顔のトランプ |
(py38_learn) python part_swap2.py --config ./config/vox-256-sem-10segments.yaml --target_video ./sample/videos/04.mp4 --source_image ./sample/images/16.png --checkpoint sample/vox-10segments.pth.tar --swap_index 2 --result_video ./result_lips.mp4 100%|████████████████████████████████████████████████████████████████████████████████| 211/211 [00:03<00:00, 66.93it/s]・GPU動作の場合(「--cpu」オプションなし)
100%|████████████████████████████████████████████████████████████████████████████████| 211/211 [00:03<00:00, 66.93it/s]
(py38_learn) python part_swap2.py --config ./config/vox-256-sem-10segments.yaml --target_video ./sample/videos/11.mp4 --source_image ./sample/images/26.png --checkpoint sample/vox-10segments.pth.tar --swap_index 7,9 --result_video ./result_eye_cor.mp4 100%|████████████████████████████████████████████████████████████████████████████████| 109/109 [00:01<00:00, 67.05it/s]・GPU動作の場合(「--cpu」オプションなし)
100%|████████████████████████████████████████████████████████████████████████████████| 109/109 [00:01<00:00, 67.05it/s]
コマンドオプション | 引数 | 初期値 | 意味 |
-c, --category | str | '0' | カテゴリー指定(必須) |
--config | str | 指定しなければ内部設定※ | 学習済みモデルの設定ファイル(.yaml) |
--checkpoint | str | 学習済みモデル・ファイル | |
--source_image | str | 静止画ファイルパス | |
--driving_video | str | 動画ファイルパス | |
--result_video | str | 出力保存ファイルパス | |
--swap_index" | list | [-1] | index of swaped parts |
--hard | bool | False | use hard segmentation labels for blending |
--use_source_segmentation | bool | False | use source segmentation for swaping |
--first_order_motion_model | bool | False | use first order model for alignment |
--supervised | bool | False | use supervised segmentation labels for blending. Only for faces. |
--cpu | bool | False | cpu mode |
コマンドオプション | -c 0 (10seg) | -c 1 (5seg) | -c 3 (super) |
--config | ./config/vox-256-sem-10segments.yaml | ./config/vox-256-sem-5segments.yaml | ./config/vox-256-sem-10segments.yaml |
--checkpoint | ./sample/vox-10segments.pth.tar | ./sample/vox-5segments.pth.tar | ./sample/vox-first-order.pth.tar |
--source_image | ダイアログによる静止画選択 | ||
--driving_video | ダイアログによる動画選択(swap_index=[-1] の時はなし) | ||
--result_video | ./result/result_10seg.mp4 | ./result/result_5seg.mp4 | ./result/result_super.mp4 |
./result/result_10seg.png 注1 | ./result/result_5seg.png 注1 | ./result/result_super.png 注1 |
(py38_learn) python motion_seg.py -c 0 --swap_index 2 Motion Supervised co-part Segmentation Ver. 0.01: Starting application... - Category : 0: ** 10-segments model ** - config : ./config/vox-256-sem-10segments.yaml - checkpoint : ./sample/vox-10segments.pth.tar - source_image : C:/anaconda_win/workspace_2/motion-co-seg/sample/images/16.png - target_video : C:/anaconda_win/workspace_2/motion-co-seg/sample/videos/04.mp4 - result_video : ./results/result_10seg.mp4 - swap_index : [2] - hard : False - use_source_segmentation : False - first_order_motion_model: False - supervised : False - cpu : False 100%|████████████████████████████████████████████████████████████████████████████████| 211/211 [00:02<00:00, 71.21it/s] Saving... → './results/result_10seg_16_04.mp4' Saving... → './results/result_10seg_16_04_a.mp4' Finished.・CPU動作の場合(「--cpu」オプション指定)
100%|████████████████████████████████████████████████████████████████████████████████| 211/211 [00:02<00:00, 71.21it/s]
(py38_learn) python motion_seg.py -c 0 --swap_index 7,9 Motion Supervised co-part Segmentation Ver. 0.01: Starting application... - Category : 0: ** 10-segments model ** - config : ./config/vox-256-sem-10segments.yaml - checkpoint : ./sample/vox-10segments.pth.tar - source_image : C:/anaconda_win/workspace_2/motion-co-seg/sample/images/26.png - target_video : C:/anaconda_win/workspace_2/motion-co-seg/sample/videos/11.mp4 - result_video : ./results/result_10seg.mp4 - swap_index : [7, 9] - hard : False - use_source_segmentation : False - first_order_motion_model: False - supervised : False - cpu : False 100%|████████████████████████████████████████████████████████████████████████████████| 109/109 [00:01<00:00, 69.68it/s] Saving... → './results/result_10seg_26_11.mp4' Saving... → './results/result_10seg_26_11_a.mp4' Finished.・CPU動作の場合(「--cpu」オプション指定)
100%|████████████████████████████████████████████████████████████████████████████████| 109/109 [00:01<00:00, 69.68it/s]
cd face_parsing
python makeup.py・「model.py」に不具合があるので変更 を加えた
コマンドオプション | 引数 | 初期値 | 意味 |
--source_image | str | 静止画ファイルパス | |
--result_image | str | '.result' | 出力保存ファイルパス |
--checkpoint | str | './cp/79999_iter.pth' | 学習済みモデル・ファイル |
(py38_learn) python makeup2.py Motion Supervised co-part Segmentation Ver. 0.01: Starting application... - source_image : C:/anaconda_win/workspace_2/motion-co-seg/face_parsing/imgs/116.jpg - result_image : ./result_116.jpg - checkpoint : ./cp/79999_iter.pth
from skimage.draw import ellipse as cricle
import imageio.v2 as imageio
import imageio.v2 as imageio import warnings warnings.simplefilter('ignore', UserWarning)
# config = yaml.load(f) config = yaml.load(f,Loader=yaml.Loader)
try: from face_parsing.resnet import Resnet18 except ImportError: from resnet import Resnet18
import warnings warnings.simplefilter('ignore')