この記事では2021年9月に登場した、Inpainting(画像修復)のモデルであるLaMaを紹介します。

まずは下の画像をご覧ください。

出典:https://github.com/saic-mdal/lama

Inpainting(画像修復)よって、画像の中から映っている人が消えていることがわかります。
画像から指定した範囲の対象を除去した後、LamaのInpainting(画像修復)技術によって削除した範囲を修復しています。

今回はこのLamaの公式チュートリアルに沿って、テスト画像のInpainting(画像修復)を試していきます。

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

今回の目標

・LamaのInpainting(画像修復)

・Inpainting(画像修復)のチュートリアル

・オリジナル画像でInpainting(画像修復)

Lamaとは

Lamaとは「Resolution-robust Large Mask Inpainting with Fourier Convolutions」の略称で、モスクワとソウルのサムスンAIのチームが2021年9月に発表した機械学習を用いた画像修復の手法です。

WACV 2022に採択されています。

URL:https://arxiv.org/abs/2109.07161
出典:Suvorov, Roman and Logacheva, Elizaveta and Mashikhin, Anton and Remizova, Anastasia and Ashukha, Arsenii and Silvestrov, Aleksei and Kong, Naejin and Goka, Harshith and Park, Kiwoong and Lempitsky, Victor; arXiv
コード:https://github.com/saic-mdal/lama
プロジェクトページ:https://saic-mdal.github.io/lama-project/

Lamaの導入

それでは早速、Lamaを使用するための準備をしていきましょう。

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

なお、以下のボタンからコードをコピーして使用していただくことも可能です。

Open In Colab

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

%cd ./drive/MyDrive

!git clone https://github.com/saic-mdal/lama
%cd lama

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

!pip install -r requirements.txt --quiet
!pip install wget --quiet

!pip uninstall opencv-python-headless -y --quiet
!pip install opencv-python-headless==4.1.2.30 --quiet

!pip install wldhx.yadisk-direct

これでLamaを使用する準備が完了しました。

次に学習済モデルとテスト画像を用意します。

# 学習済モデル
!curl -L $(yadisk-direct https://disk.yandex.ru/d/ouP6l8VJ0HpMZg) -o big-lama.zip
!unzip big-lama.zip

# テスト画像
!curl -L $(yadisk-direct https://disk.yandex.ru/d/xKQJZeVRk5vLlQ) -o LaMa_test_images.zip
!unzip LaMa_test_images.zip

「lama/LaMa_test_images」にテスト画像、「lama/big-lama/models/」に学習済モデルが保存されています。

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

チュートリアルの実行

それでは早速チュートリアルを実行してみましょう。

先ほどダウンロードしたモデルと画像を指定しています。

!python3 bin/predict.py model.path=$(pwd)/big-lama indir=$(pwd)/LaMa_test_images outdir=$(pwd)/output

「lama/output」に結果が保存されます。

テスト画像は何回かありますが、いくつか結果を見てみましょう。

処理前画像にInpainting(画像修復)を施すことで、処理後のように人や犬が消えた画像が得られました。

なかなか綺麗に消えていますね。

「lama/output」には他の画像の結果も保存されていますので、興味がある方は確認してみましょう。

オリジナル画像でLamaの実装する

次にLamaを使用してオリジナルの画像でもInpainting(画像修復)を行なっていきましょう。

まずはお好きなオリジナル画像をご用意ください。

ここでは例として某観光地の写真から人を除去してみます。

Googleスライドでマスク画像を作成

Lamaで処理を実行するには「処理前」の画像と「マスク画像」が必要になります。

下の例をご覧ください。

元の写真に対して、人が写っている部分をマスクした画像を作成します。

ここからはGoogleスライドでマスク画像を作成する方法を紹介します。

対象物を囲う

まずはプレゼンテーションを作成して、使用する画像を挿入します。

次にスライドを複製して、「挿入」タブから「線」⇨「多角形」の順番で選択します。

「多角形」でマスクしたい対象を囲っていきます。

STEP
1

対象物を白色に変える

全ての対象物を囲い終わったら、色を白色に変更します。

さらに枠線の色も白に変更しましょう。

以下のようになっていれば問題ありません。

STEP
2

背景色を変える

次に背景画像を選択します。

「書式設定オプション」タブから「調整」を選択しましょう。

ここで明るさを-100%、コントラストを+100%にしましょう。

以下のような画像ができていれば完成です。

STEP
3

上のようなマスク画像が無事に完成しました。

このスライドは「ファイル」タブから画像として保存できます。

なお、今回はGoogleスライドを使用しましたが、PowerPointでも同様にマスク画像を作成することが可能です。

ご自身の環境に合わせて、使いやすものを使ってみてください。

オリジナル画像でInpainting(画像修復)

いよいよオリジナル画像でInpainting(画像修復)を実装します。

マスク画像のファイル名は元画像のファイル名に「_mask」をつける必要があります。

ここでは元画像のファイル名を「kiyotsukyo.png」、マスク画像を「kiyotsukyo_mask.png」とします。

これを「lama/data」にアップします。(dataというフォルダを作成しましょう)

最後に先ほどと同様に実行しましょう。

!python3 bin/predict.py model.path=$(pwd)/big-lama indir=$(pwd)/data outdir=$(pwd)/output

実行すると「lama/output」に結果が出力されます。

なお、複数枚まとめて処理をすることも可能です。

「lama/data」に他の画像もアップしてから実行しましょう。

まとめ

最後までご覧いただきありがとうございました。

今回はLamaのInpainting(画像修復)技術を紹介しました。

観光地での写真から人を消するなど、日常生活においても役に立ちそうな技術ですね。

よかったら動画もご覧ください。

参考

「predict.py」を実行するとエラーが出てしまいます。

これはsaicinpaintingが読み込めていないことが原因です。

以下のように「predict.py」を変更することで解決します。

import logging
import os
import sys
import traceback
 
# predict.pyに3行を追加
__dir__ = os.path.dirname(os.path.abspath(__file__))
sys.path.append(__dir__)
sys.path.append(os.path.abspath(os.path.join(__dir__, '../')))
 
from saicinpainting.evaluation.utils import move_to_device

コメントを残す