本記事では、MMEditingを使用して、超解像、画像修復、前景抽出、画像生成を行う方法をご紹介します。
本記事で紹介するMMEditingは、2023年にMMagicに統合されたため現在は使用できません。以下は参考情報としてご覧ください。
MMEditing
概要
MMEditingは、Pytorchで実装されたオープンソースの画像、動画の編集ツールボックスです。
MMeditingは画像・動画編集に関係する様々なアルゴリズムをサポートしており、超解像ではBasicVSR,
ESRGAN, TDANなど様々なアルゴリズムから選択することができます。
Configファイルを変更するだけでこれらのアルゴリズムを簡単に切り替えることができるツールボックスです。
このツールボックスはOpenMMLabによって開発されています。OpenMMLabはMMEditingの他にもOCRのツールセットであるMMOCRや、姿勢推定のツールセットMMPoseなど多数のツールセットを開発しています。
本記事では、MMEditingを用いた超解像(Super
Resolution)、画像修復(Inpainting)、前景抽出(Matting)、画像生成(Generation)の基本的な使い方をご紹介します。
デモ(Colaboratory)
それでは、実際に動かしながらMMEditingを用いた超解像(Super
Resolution)、画像修復(Inpainting)、前景抽出(Matting)、画像生成(Generation)を行っていきます。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo
また、下記から直接Google Colaboratoryで開くこともできます。
なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。
環境セットアップ
それではセットアップしていきます。
Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。
「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更
INSTALLATIONを参考にGoogle ColaboratoryにMMEditingをインストールします。
まず、Pytorchをインストールします。MMEditingはPytorch 1.5以上をサポートしています。
!pip install torch==1.10.2+cu102 torchvision==0.11.3+cu102 -f https://download.pytorch.org/whl/cu102/torch_stable.html
次に、MMCV、MMEditingをインストールします。
# mmcvインストール
!pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.10/index.html
# mmlabインストール
%cd /content
!git clone https://github.com/open-mmlab/mmediting.git
%cd mmediting
!pip install -v -e .
画像表示関連のライブラリをインポートします。
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw
以上で必要なライブラリはすべてインストールされました。
環境セットアップの最後にMMEditingのバージョンを確認しておきます。
!python -c "import mmedit; print(mmedit.__version__)"
# 以下出力結果
0.13.0
前景抽出(Matting)
まずMattingから行います。
初めに学習済みモデルをダウンロードします。なおModel Zooはこちらです。
# Matting
%cd /content/mmediting
!mkdir -p models/mattors/gca
%cd models/mattors/gca
!wget https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-34.77_20200604_213848-4369bea0.pth
Mattingを行います。
%cd /content/mmediting
CONFIG_FILE = "/content/mmediting/configs/mattors/gca/gca_r34_4x10_200k_comp1k.py"
CHECKPOINT_FILE = "/content/mmediting/models/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-34.77_20200604_213848-4369bea0.pth"
IMAGE_FILE = "/content/mmediting/tests/data/merged/GT05.jpg"
TRIMAP_FILE = "/content/mmediting/tests/data/trimap/GT05.png"
SAVE_FILE = "/content/mmediting/outputs/mattors/gca/result.png"
!python demo/matting_demo.py {CONFIG_FILE} {CHECKPOINT_FILE} {IMAGE_FILE} {TRIMAP_FILE} {SAVE_FILE}
出力結果を見てみましょう。
fig = plt.figure(num=None, figsize=(18, 6), dpi=128, )
ax = fig.add_subplot(1, 3, 1, xticks=[], yticks=[])
plt.imshow(Image.open(IMAGE_FILE).convert("RGB"))
ax.set_title("IMAGE_FILE")
ax = fig.add_subplot(1, 3, 2, xticks=[], yticks=[])
plt.imshow(Image.open(TRIMAP_FILE).convert("RGB"))
ax.set_title("TRIMAP_FILE")
ax = fig.add_subplot(1, 3, 3, xticks=[], yticks=[])
plt.imshow(Image.open(SAVE_FILE).convert("RGB"))
ax.set_title("SAVE_FILE")
画像修復(Inpainting)
つづいてInpaintingを行います。同様に学習済みモデルをダウンロードします。
# Inpainting
%cd /content/mmediting
!mkdir -p models/inpainting/deepfillv2
%cd models/inpainting/deepfillv2
!wget https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth
Inpaintingを行います。
%cd /content/mmediting
CONFIG_FILE = "/content/mmediting/configs/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba.py"
CHECKPOINT_FILE = "/content/mmediting/models/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth"
MASKED_IMAGE_FILE = "/content/mmediting/tests/data/image/celeba_test.png"
MASK_FILE = "/content/mmediting/tests/data/image/bbox_mask.png"
SAVE_FILE = "/content/mmediting/outputs/inpainting/deepfillv2/result.png"
!python demo/inpainting_demo.py {CONFIG_FILE} {CHECKPOINT_FILE} {MASKED_IMAGE_FILE} {MASK_FILE} {SAVE_FILE}
出力結果を表示します。
fig = plt.figure(num=None, figsize=(18, 6), dpi=128, )
ax = fig.add_subplot(1, 3, 1, xticks=[], yticks=[])
plt.imshow(Image.open(MASKED_IMAGE_FILE).convert("RGB"))
ax.set_title("MASKED_IMAGE_FILE")
ax = fig.add_subplot(1, 3, 2, xticks=[], yticks=[])
plt.imshow(Image.open(MASK_FILE).convert("RGB"))
ax.set_title("MASK_FILE")
ax = fig.add_subplot(1, 3, 3, xticks=[], yticks=[])
plt.imshow(Image.open(SAVE_FILE).convert("RGB"))
ax.set_title("SAVE_FILE")
グレーの矩形部分が修復されています。
超解像(Super Resolution)
続いてSuper Resolutionを行います。同じく学習済みモデルをダウンロードします。
# Image Super Resolution(restoration)
%cd /content/mmediting
!mkdir -p models/restorers/esrgan
%cd models/restorers/esrgan
!wget https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth
Super Resolutionを行います。
%cd /content/mmediting
CONFIG_FILE = "/content/mmediting/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py"
CHECKPOINT_FILE = "/content/mmediting/models/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth"
IMAGE_FILE = "/content/mmediting/tests/data/lq/baboon_x4.png"
SAVE_FILE = "/content/mmediting/outputs/restorers/esrgan/result.png"
!python demo/restoration_demo.py {CONFIG_FILE} {CHECKPOINT_FILE} {IMAGE_FILE} {SAVE_FILE}
出力結果を見てみます。
fig = plt.figure(num=None, figsize=(18, 6), dpi=128, )
ax = fig.add_subplot(1, 2, 1, xticks=[], yticks=[])
plt.imshow(Image.open(IMAGE_FILE).convert("RGB"))
ax.set_title("IMAGE_FILE")
ax = fig.add_subplot(1, 2, 2, xticks=[], yticks=[])
plt.imshow(Image.open(SAVE_FILE).convert("RGB"))
ax.set_title("SAVE_FILE")
右の画像が高解像度化されています。
画像生成(Generation)
最後に、Generationを行います。同様に学習済みモデルをダウンロードします。
# Generation(synthesizers)
%cd /content/mmediting
!mkdir -p models/synthesizers/cyclegan
%cd models/synthesizers/cyclegan
!wget https://download.openmmlab.com/mmediting/synthesizers/cyclegan/cyclegan_horse2zebra_id0/cyclegan_lsgan_id0_resnet_in_1x1_266800_horse2zebra_20200524-470fb8da.pth
Generationを行います。
%cd /content/mmediting
CONFIG_FILE = "/content/mmediting/configs/synthesizers/cyclegan/cyclegan_lsgan_id0_resnet_in_1x1_266800_horse2zebra.py"
CHECKPOINT_FILE = "/content/mmediting/models/synthesizers/cyclegan/cyclegan_lsgan_id0_resnet_in_1x1_266800_horse2zebra_20200524-470fb8da.pth"
IMAGE_FILE = "/content/mmediting/tests/data/unpaired/trainA/2.jpg"
SAVE_FILE = "/content/mmediting/outputs/synthesizers/cyclegan/result.png"
UNPAIRED_IMAGE_FILE = "/content/mmediting/tests/data/unpaired/testB/6.jpg"
!python demo/generation_demo.py {CONFIG_FILE} {CHECKPOINT_FILE} {IMAGE_FILE} {SAVE_FILE} --unpaired_path {UNPAIRED_IMAGE_FILE}
出力結果を見てみます。
fig = plt.figure(num=None, figsize=(12, 6), dpi=128, )
ax = fig.add_subplot(1, 2, 1, xticks=[], yticks=[])
plt.imshow(Image.open(IMAGE_FILE).convert("RGB"))
ax.set_title("IMAGE_FILE")
ax = fig.add_subplot(1, 2, 2, xticks=[], yticks=[])
plt.imshow(Image.open(UNPAIRED_IMAGE_FILE).convert("RGB"))
ax.set_title("UNPAIRED_IMAGE_FILE")
fig = plt.figure(num=None, figsize=(12, 6), dpi=128, )
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[])
plt.imshow(Image.open(SAVE_FILE).convert("RGB"))
ax.set_title("SAVE_FILE")
馬がシマウマに、シマウマが馬に変換されました。
まとめ
本記事では、MMEditingを用いた超解像(Super Resolution)、画像修復(Inpainting)、前景抽出(Matting)、画像生成(Generation)の基本的な使い方をご紹介しました。
ツールセットとしてまとめられていると、様々なアルゴリズムを一挙に確認できるためアルゴリズム選定などに便利ですね。
これを機に機械学習に興味を持つ方が一人でもいらっしゃいましたら幸いです。
また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。
リンク
リンク
また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。
参考文献
1.
MMEDITING’S DOCUMENTATION
2. GitHub - open-mmlab/mmediting
0 件のコメント :
コメントを投稿