DensePose in Detectron2のクイックスタート
detectron2の勉強がてら、クイックスタートを翻訳しました。
翻訳するまでもないですが、CUDAなし、CPUのみでの動作確認もできましたので、記しておきます。
DensePose を使い始める
事前学習済みモデルによる推論
モデルと設定ファイルをModel Zoo(IUV), Model Zoo(CSE)から取得します。
ここでは、densepose_rcnn_R_50_FPN_s1x.yamlを利用します。
python apply_net.py show configs/densepose_rcnn_R_50_FPN_s1x.yaml densepose_rcnn_R_50_FPN_s1x.pkl image.jpg dp_contour,bbox --output image_densepose_contour.png
ツールの詳細については、Apply Netを参照してください。
学習
まず、学習用スクリプトを実行するディレクトリ配下に以下のデータセットを配置します。
datasets/coco/
annotations/
densepose_{train,minival,valminusminival}2014.json
densepose_minival2014_100.json (optional, for testing only)
{train,val}2014/
# image files that are mentioned in the corresponding json
モデルを学習するには、train_net.pyを使用します。このスクリプトは、Model Zoo(IUV), Model Zoo(CSE)のすべてのモデルを学習するために使用されました。
8GPUにてResNet-50FPNのDensePose-RCNNで学習を開始するには、以下を実行します。
python train_net.py --config-file configs/densepose_rcnn_R_50_FPN_s1x.yaml --num-gpus 8
1GPUの場合、linear learning rate scaling ruleが利用でき、以下で実行できます。
python train_net.py --config-file configs/densepose_rcnn_R_50_FPN_s1x.yaml \
SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025
評価
モデルの評価は、コマンドオプションに--eval-onlyMODEL.WEIGHTS model.pthを追加し、学習と同じスクリプトで実行できます。
python train_net.py --config-file configs/densepose_rcnn_R_50_FPN_s1x.yaml \
--eval-only MODEL.WEIGHTS model.pth
ツール
以下のツールを提供しています。
・データセットのアノテーション付きデータを簡単に表示する
・複数の画像に推論を実行するツール
・推論結果を視覚化するツール
query_db
は、データセットのデータを視覚化するツールです。詳細については、Query DBを参照してください。
apply_net
は、推論結果を視覚化するツールです。詳細については、Apply Netを参照してください。
パッケージインストール
DensePoseは、ソフトウェアと統合するためにPythonパッケージとしてインストールできます。
以下が必要です。
Python >= 3.6
PyTorch >= 1.7
torchvision インストールしたPyTorchに対応するバージョン
DensePoseは、以下でインストールできます。
pip install git+https://github.com/facebookresearch/detectron2@main#subdirectory=projects/DensePose
インストール後、densepose
としてインポート可能になります。
以下で実際に動かしてみます。
Google Colabで試しています。
インストール
!git clone https://github.com/facebookresearch/detectron2.git
!pip install -e detectron2
!pip install av
colab上で、以下、出力されましたが、推論できます。
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
flask 1.1.4 requires click<8.0,>=5.1, but you have click 8.1.3 which is incompatible.
Successfully installed antlr4-python3-runtime-4.9.3 black-22.3.0 click-8.1.3 detectron2-0.6 fvcore-0.1.5.post20220512 hydra-core-1.2.0 iopath-0.1.9 mypy-extensions-0.4.3 omegaconf-2.2.2 pathspec-0.9.0 platformdirs-2.5.2 portalocker-2.4.0 pyyaml-6.0 typed-ast-1.5.4 yacs-0.1.8
WARNING: The following packages were previously imported in this runtime:
[pydevd_plugins]
You must restart the runtime in order to use newly installed versions.
画像とモデルダウンロード
%cd detectron2/projects/DensePose/
!wget http://images.cocodataset.org/train2017/000000117508.jpg -O image.jpg
!wget https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x/165712039/model_final_162be9.pkl -O densepose_rcnn_R_50_FPN_s1x.pkl
推論
ここでのポイントは、--opts MODEL.DEVICE cpu を追加して、CPUのみで実行しています。
!python apply_net.py show configs/densepose_rcnn_R_50_FPN_s1x.yaml densepose_rcnn_R_50_FPN_s1x.pkl image.jpg dp_contour,bbox --output image_densepose_contour.png --opts MODEL.DEVICE cpu
以上です。
Discussion