🍣

VLPartをgoogle colabで試してみた

2023/06/13に公開

VLPartとは

VLPartとはMetaAIから出された新しいsemantic segmentationのアルゴリズムです。
https://github.com/facebookresearch/VLPart

Semantic Segmentation Anythingでも同じことやっていましたが、それよりも精度高いことが小メモリでできてしまうという衝撃。。

リンク

Colab
github

準備

Google Colabを開き、メニューから「ランタイム→ランタイムのタイプを変更」でランタイムを「GPU」に変更します。

環境構築

インストール手順です。

!git clone https://github.com/facebookresearch/VLPart.git
%cd VLPart
!git clone https://github.com/facebookresearch/detectron2.git
%cd detectron2
!pip install -e .
%cd ..
%cd /content/VLPart
!pip install -r requirements.txt

推論

(1)モデルのダウンロード
今回はr50_pascalpartというモデルを利用していきます。

!wget https://github.com/PeizeSun/VLPart/releases/download/v0.1/r50_pascalpart.pth -P checkpoints

(2)デモ画像の準備

!wget https://221616.com/assets/img/find/img_subaru-legacytwgn.png -O input1.png

(3)推論

!python demo/demo.py --config-file configs/pascal_part/r50_pascalpart.yaml \
  --input input1.png \
  --output output_image \
  --vocabulary pascal_part \
  --confidence-threshold 0.7 \
  --opts MODEL.WEIGHTS checkpoints/r50_pascalpart.pth VIS.BOX False

結果の画像です。

車の部品をなんと分類している。恐るべき。
というかGPU使ってないし、モデルの重みが200Mくらいなんですが?ぶっ壊れ?おまけに推論速度は1.5~2[s]
ゲームチェンジャーすぎないですか?

Advanced Application

お部屋の画像を試してみます。
pascal partでやってみましたが何も検出されませんでした。おそらく部屋の画像のデータセットが学習されてないみたいです。
モデルをpacoに変えてやってみます。
(1)モデルのダウンロード

!wget https://github.com/PeizeSun/VLPart/releases/download/v0.1/r50_paco.pth -P checkpoints

(2)デモデータの準備

!wget https://d1sw4fcdq5we39.cloudfront.net/wp-content/uploads/2020/02/14174336/DSC03269.jpg -O room.jpg

(3)推論

!python demo/demo.py --config-file configs/paco/r50_paco.yaml \
  --input room.jpg \
  --output output_image \
  --vocabulary paco \
  --confidence-threshold 0.7 \
  --opts MODEL.WEIGHTS checkpoints/r50_paco.pth VIS.BOX False

(4)結果画像

from PIL import Image
display(Image.open("output_image/room.jpg"))

(5)色んなモデルを試す
なんか色々モデルがあるのでとりあえずjoint_inとかいうr50系で最強そうなモデルを利用してみます。試す画像は部屋画像です。

!wget https://github.com/PeizeSun/VLPart/releases/download/v0.1/r50_lvis_paco_pascalpart_partimagenet_inparsed.pth -P checkpoints

!python demo/demo.py --config-file configs/joint_in/r50_lvis_paco_pascalpart_partimagenet_inparsed.yaml \
  --input room.jpg \
  --output output_image \
  --vocabulary paco \
  --confidence-threshold 0.7 \
  --opts MODEL.WEIGHTS checkpoints/r50_lvis_paco_pascalpart_partimagenet_inparsed.pth VIS.BOX False
  
from PIL import Image
display(Image.open("output_image/room.jpg"))


結構結果に揺らぎがある?最大の結果数に制限があるかもです。

(6)おまけ
r50_coco

swinbase JOINTIN Parsed + paco

swinbase JOINTIN parsed + lvis

lvis_pacoはgoogle colabだとOOMになるので注意です。
部屋にはlvisが一番よかったみたい。。

(7) Custom vocabulary

!python demo/demo.py --config-file configs/joint_in/swinbase_cascade_lvis_paco_pascalpart_partimagenet_inparsed.yaml \
  --input room.jpg \
  --output output_image \
  --vocabulary custom \
  --custom_vocabulary "couch, desk, table, shelf, tv, bed, carpet, painting, lamp, cusion, chair, window" \
  --confidence-threshold 0.7 \
  --opts MODEL.WEIGHTS checkpoints/swinbase_cascade_lvis_paco_pascalpart_partimagenet_inparsed.pth VIS.BOX False

最後に

今回はMetaAIから発表されたVLPartを試してみました。色々なモデルがあって、軽量でしかも高精度、自分で指定したクラスの物体を識別できるところもすごく良いですね。なかなかのゲームチェンジャーが現れてしまいました。Semantic Anythingで喜んでいた日を懐かしく思います。(1ヶ月前、、)
LLMが盛り上がっていますが画像も3Dも急にレベルが高くなってきました。Diffusion model系も進化が著しい。おそらくシンギュラリティ突入です。

今後ともLLM, Diffusion model, Image Analysis, 3Dに関連する試した記事を投稿していく予定なのでよろしくお願いします。

Discussion