特徴点マッチングを特徴量ではなく、AIで実行するSuperGlue(SuperGlue: Learning Feature Matching with Graph Neural Networks)をVisual Studio Codeで実験してみましたので、その方法についてご紹介します。
まず、Python環境の構築です。SuperGlueで使用する機械学習ライブラリPyTorchが現時点ではPython3.10までしか対応していないので、Python3.10.9をインストールします。PythonのページからWindows 64bit用インストーラをダウンロードします。ここでは python-3.10.9-amd64.exe をダウンロードして実行します。
インストーラの起動画面で、[Add python.exe to PATH]にチェックを入れます。
[Install Now]をクリックしてインストールを実行します。
今回、Python開発環境の仮想環境としてVirtualenvを利用します。PowerShellを起動します。プロンプト上で下記でVirtualenvを作成するフォルダを作成、作成したフォルダに移動します。
cd ~/ mkdir Envs cd Envs
インストールしたPython 3.10.9の仮想環境を下記コマンドで作成します。
py -3.10 -m pip install virtualenv py -3.10 -m virtualenv my_py3_10
スクリプトが実行できるように実行ポリシーを下記コマンドで変更します。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
作成した仮想環境のフォルダに移動して、仮想環境に入ります。
cd .\my_py3_10\ .\Scripts\activate.ps1
仮想環境に無事入れると、プロンプトが下記のように変わります。
(my_py3_10) PS C:\Users\xxxx\Envs\my_py3_10>
SuperGlue実行に必要なPythonモジュールを先にインストールしておきます。matplotlib、OpenCV、PyTorchの順に下記のようにインストールします。
pip install matplotlib pip install opencv-python pip install torch
SuperGlueのソースコードをGitHubからクローンします。
cd c:\git git clone https://github.com/magicleap/SuperGluePretrainedNetwork.git
実際に実験に使用する画像を準備します。上記でクローンしたフォルダC:\git\SuperGluePretrainedNetwork\assetsの下にtestフォルダを作成します。作成したtestフォルダ直下にimageフォルダを作成し、そこに実験で使用する画像ファイルをコピーします。ここでは下記のような6つの画像ファイルを置きました。
作成したtestフォルダにimage_pairs.txt("C:\git\SuperGluePretrainedNetwork\assets\test\image_pairs.txt")というテキストファイルを作成します。中身は下記のように編集します。例えば1行目は画像ファイルjaguar00_0006.jpg と jaguar00_0005.jpg の間で特徴点抽出とマッチングを実行するよう指定することを意味します。
jaguar00_0006.jpg jaguar00_0005.jpg
jaguar00_0006.jpg jaguar00_0004.jpg
jaguar00_0006.jpg jaguar00_0003.jpg
jaguar00_0006.jpg jaguar00_0002.jpg
jaguar00_0006.jpg jaguar00_0001.jpg
ここからはVisual Studio Codeでの操作になります。Visual Studio Codeはインストール済みの前提で進めさせていただきます。
まず、Visual Studio Codeで[File]-[Open Folder]メニューを実行します。
ここでは、クローンしたフォルダ C:\git\SuperGluePretrainedNetwork を指定します。
Ctrl+Shift+X キーを押下してEXTENSIONSを実行します。”python”を検索して「Python extension for Visual Studio Code」を選択して[Install]を実行します。
左側画面[EXOLORER]でソースファイル models\match_points.py を選択して開きます。
Visual Studio Codeのデバッグで使用するPythonを上記で作成した仮想環境に変更します。Visual Studio Code画面右下にあるPythonバージョンを表示している部分をクリックします。
上記で作成した仮想環境を選択します。
次にPython実行時の引数を指定するためのConfigurationファイルを生成します。Visual Studio Codeメニューで[Run]-[Add Configuration]を実行します。
生成されたlaunch.json ファイルに下記の「args」の部分を追記します。
メニューの[Run]-[Start Debugging]を実行します。
下記のような画面が表示されるので「Python ファイル」を選択します。
Visual Studio Code下側画面のTERMINALに実行中の表示が出ます。image_pairs.txtに指定した画像ファイルのマッチングが全て完了したら下記のように終了します。
--vizオプションを設定しているので、resultsフォルダにマッチング結果の画像ファイルが生成されているのを確認します。このような感じで2つの画像間のマッチする特徴点に線が引かれているのが確認できます。
jaguar00_0006_jaguar00_0005_matches.png
jaguar00_0006_jaguar00_0004_matches.png
jaguar00_0006_jaguar00_0003_matches.png
jaguar00_0006_jaguar00_0002_matches.png
jaguar00_0006_jaguar00_0001_matches.png
以上でSuperGlueのVisual Studio Codeによる実験に関する説明を終わります。