インペインティング機能を使う分にはIOPaintというアプリで使えます。
注)今のところ成功していません。
環境
Windows11(WSL2)+Ubuntu22.04
CUDA 11.08
RTX4070(VRAM12GB)
Python3.8導入
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.8 python3.8-venv python3.8-distutils python3.8-dev git build-essential curl
リポジトリのクローン
git clone https://github.com/advimman/lama.git
cd lama
venv環境を構築
python3.8 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
pipでパッケージインストール
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r requirements.txt
・requirements.txtの内容
cat requirements.txt
pyyaml
tqdm
numpy<1.20
easydict==1.9.0
scikit-image==0.17.2
scikit-learn==0.24.2
opencv-python
tensorflow
joblib
matplotlib
pandas
albumentations==0.5.2
hydra-core==1.1.0
pytorch-lightning==1.2.9
tabulate
kornia==0.5.0
webdataset
packaging
scikit-learn==0.24.2
wldhx.yadisk-direct
試行錯誤することになります。numpyなどを古いバージョンに置き換えたりしたと思います。
トーレーニングデータ準備
・基本的にリポジトリのREADMEの通りファイルをダウンロード
~/git/lama$ ls
LICENSE big-lama hub tb_logs
LaMa_inpainting.ipynb big-lama.zip models test_large.tar
LaMa_models bin output train_large_places365standard.tar
LaMa_models.zip celeba-hq-dataset outputs val_large.tar
LaMa_perceptual_loss_models.zip conda_env.yml paper_data.zip venv
LaMa_test_images configs places_standard_dataset wget-log
LaMa_test_images.zip docker requirements.txt
README.md experiments requirements.txt.org
ade20k fetch_data saicinpainting
・環境に合わせて調整したスクリプト
ファイル名:fetch_data/places_standard_test_val_gen_masks.sh
mkdir -p places_standard_dataset/val/
mkdir -p places_standard_dataset/visual_test/
# Places の元画像は jpg 想定なので --ext jpg を付ける
python3 bin/gen_mask_dataset.py \
"$(pwd)"/configs/data_gen/random_thick_512.yaml \
places_standard_dataset/val_hires/ \
places_standard_dataset/val/ \
--ext jpg
python3 bin/gen_mask_dataset.py \
"$(pwd)"/configs/data_gen/random_thick_512.yaml \
places_standard_dataset/visual_test_hires/ \
places_standard_dataset/visual_test/ \
--ext jpg
ファイル名:fetch_data/places_standard_test_val_prepare.sh
mkdir -p places_standard_dataset/original/test/
tar -xvf test_large.tar --strip-components=1 -C places_standard_dataset/original/test/
mkdir -p places_standard_dataset/original/val/
tar -xvf val_large.tar --strip-components=1 -C places_standard_dataset/original/val/
ファイル名:fetch_data/places_standard_test_val_sample.sh
mkdir -p places_standard_dataset/val_hires/
mkdir -p places_standard_dataset/visual_test_hires/
# randomly sample images for test and vis(リストを作る)
OUT=$(python3 fetch_data/sampler.py)
echo "${OUT}"
# test のサンプルを val_hires へコピー
while IFS= read -r i; do
cp "$i" places_standard_dataset/val_hires/
done < places_standard_dataset/original/test_random_files.txt
# val のサンプルを visual_test_hires へコピー
while IFS= read -r i; do
cp "$i" places_standard_dataset/visual_test_hires/
done < places_standard_dataset/original/val_random_files.txt
トレーニングコマンド
export TORCH_HOME=$(pwd); export PYTHONPATH=$(pwd)
CUDA_VISIBLE_DEVICES=0 \
python3 bin/train.py -cn lama-fourier \
location=places_standard \
trainer.kwargs.gpus=1 trainer.kwargs.accelerator=null
現在実行中、10時間ぐらいかかるようです。
1Epochが9時間みたいです。何Epochあるんだろう?
40Epochとのこと、40×9時間で360時間ということは現在のPCでは15日間ぐらいかかる計算に成ります。そのような日数、メインPCを占有されてると厳しいのでサブPCで環境を構築して仕切り直ししたいと思います。
1Epochトレーニング
CUDA_VISIBLE_DEVICES=0 python3 bin/train.py -cn lama-fourier \
location=places_standard \
trainer.kwargs.gpus=1 trainer.kwargs.accelerator=null \
trainer.kwargs.max_epochs=1
vhdxの縮小
サブPCで環境構築していたところ、学習用の画像のデータセットを展開したら、WSLのイメージファイルのvhdxが肥大化し、ストレージをパンクさせました。以前もストレージをパンクさせているので、まったく学習していないですね。近年ストレージの空き容量を気にしながら作業をすることが無くなってきたのもありますが、512GB~1TBぐらいの容量SSDでは、すぐに容量不足になるのは厳しいですね。
対策として、WSLからOSのイメージをエクスポートし、容量の大きなストレージでインポートして再構築という手順が使えます。
ただ、この方法エクスポートに書き出される容量と同程度の空き容量がストレージに必要なため、パンクしたストレージでは実施不可です。
イメージファイルを縮小する方法を試してみます。
ディストリビューションを開始できませんでした。エラー コード: 6、エラーステップ: 2
エラー コード: Wsl/Service/CreateInstance/E_FAIL
diskpartで圧縮
select vdisk file="D:\wsl\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
小さくならない。
NTFS圧縮⇒小さくなった⇒WSLでOSが起動する。⇒大きなファイルを削除し作業再開⇒再び限界まで使ってしまいOSが起動不可
また、パンクさせてしまいました。まったく、学習していませんね。
機械学習
学習と推論があり、推論はそこそのスペックのPCでも実行できますが、学習(トレーニング)は出来る限りハイスペックのPCが欲しい。場合によってはVRAMの不足で学習プログラムが実行出来なかったり、極端に遅かったりします。
また、学習(トレーニング)をする場合、学習用のデータが必要となり、ストレージの容量が必要となります。それと、学習結果のモデルファイルも数GBクラスの巨大なファイルになる場合もあり、ステップごとに記録するとストレージをパンクさせる恐れがあります。
追記:20250910
LaMaのトレーニングですが、
メインRTX4070からサブRTX3060にPCを変えて学習再開⇒ストレージをパンクさせる⇒復旧⇒再開し1Epoch完了。
本来40Epochの所1Epochですので、結果は期待できないですが、モデルは出来上がっているようなので、あとで試してみたいと思います。
ちなみに1Epochの処理時間がRTX4070(VRAM12G)で9時間でRTX3060(VRAM12G)で12時間といった感じです。
もし40Epochを実行する場合、中断と再開する方法を確立するか、ホストOSのWindows11をスリープで運用を確認する必要がありそう。
最終的に学習データを自前で用意して、自分がよく使う画像に特化したモデルを作成することが目標となります。
機械学習には夢がありますね。
学習したモデルで推論(インペイント)
1Epoch学習したモデルの作成が完了したので、試してみました。
コマンド
python3 bin/predict.py model.path=$(pwd)/experiments/ユーザー名_日時_train_lama-fourier_/ indir=$(pwd)/places_standard_dataset/evaluation/random_thick_512/ outdir=$(pwd)/inference/random_thick_512 model.checkpoint=last.ckpt
・元画像
・マスク(白い部分がインペイントの対象)
・インペイント後
モデルが機能している感じします。
学習用データセットのパスの設定
以下のファイルにパスが設定されている。
configs/training/location/places_standard.yaml
データセットのディレクトリ(data_root_dir)は、places_standard_datasetが設定されていました。
トレーニング用の画像は、places_standard_dataset/train以下にjpgファイルをセットすれば良いみたいです。
コメント