はじめに
「StableVideo」で自前の動画を元動画として使用する場合には事前学習が必要です。「StableVideo」については以下の記事を見て下さい。touch-sp.hatenablog.com
事前学習を行うのが「layered-neural-atlases」です。
さっそく「layered-neural-atlases」を動かしてみましょう。
環境構築
すでに前回記事を書きました。touch-sp.hatenablog.com
実行
動画の準備
今回はこちらからダウンロードした「dance26.mp4」という動画を使わせて頂きます。600x600で75フレームある動画です。
動画をJPEG画像に分解
動画を画像に分解するのですが「.jpg」が無難です。「.png」はその後の作業がうまくいきませんでした。以下のスクリプトで分解可能です。import cv2, os video_name = "dance26" os.makedirs(video_name, exist_ok=True) cap = cv2.VideoCapture(f"{video_name}.mp4") frame_no = 0 while True: ret, frame = cap.read() if ret == False: break cv2.imwrite(os.path.join(video_name, f'{frame_no}.jpg'), frame) frame_no += 1 cap.release()
セグメンテーション
画像が入った「dance26」フォルダを「layered-neural-atlases/data/」直下に配置したあと以下を実行します。python preprocess_mask_rcnn.py --vid-path data/dance26 --class_name person
オプティカルフロー抽出
python preprocess_optical_flow.py --vid-path data/dance26 --max_long_edge 600
config.jsonの書き換え
「layered-neural-atlases/config/config.json」を書き換えます。書き換え必須
"maximum_number_of_frames": 75, "resx": 600, "resy": 600, "data_folder": "data/dance26",
書き換え任意
"iters_num": 400000, "evaluate_every": 1000,
その他の項目はよくわからないので書き換えていません。
学習
python train.py config/config.json
「StableVideo」にデータを渡す
「dance26」ファルダを新たに作って、そこに画像の入った「dance26」フォルダと学習後に作成された「checkpoint」と「config.json」を配置します。dance26 ├── dance26 ├── checkpoint └── config.json
これで「StableVideo」で使用可能になります。