Top View


Author Yasuaki Hamano

Detectron2 で DensePose

2019/10/22

発表された主なもの

  • PyTorch 1.3 のリリース

    • Named Tensor のサポート
    • Quantization のサポート
    • Mobile のサポート
  • Captum
    モデル説明

  • CrypTen
    プライバシー保護

  • Detectron2
    Object Detection や Semantic Segmentation を実行するためのライブラリ

  • Fairseqにスピーチエクステンションを追加

  • TPU サポート

今回は、この中の一つ、Detectron2を使ってDensePoseの推論を行います。

DensePose とは?

DensePose は、2018年にFacebook Research が発表した論文 の中で提案されたモデルで、RGB画像から人物の3Dキーポイントの抽出を行うというものです。
コードはDetecrtonとは別プロジェクトとしてgithub2018年の6月頃に公開されていましたが、今回、Detectron2 に組み込まれました。

環境構築

実行環境

CPU: i5-4690K
メモリ: 32GB
CUDA Version: 10.1
GPU: GTX1080Ti

実行した内容

まずはDetectron2 の環境を準備します。 レポジトリをclone して、

git clone https://github.com/facebookresearch/detectron2
cd detectron2

docker-compose.yml を準備し、

version: "2.3"
services:
  d2:
    build: .
    command: tail -f /dev/null
    volumes:
      - /path/to/detectron2:/d2
    runtime: nvidia
    ports:
      - 20021-20030:20021-20030
    shm_size: '2gb'

Dockerfile に、下記の行を追加します。


WORKDIR /data
RUN wget https://dl.fbaipublicfiles.com/densepose/DensePose_ResNet50_FPN_s1x.pkl
RUN pip3 install scipy opencv-python

その後、docker-compose up -d --build を実行し、コンテナを作成します。

推論

docker-compose exec d2 bash でコンテナ内に入った後、
cd /d2/projects/DensePose で、DensePose プロジェクトに移動します。

docker cp コマンドや wget コマンドなどで画像ファイルを設置し、

python3 apply_net.py show \
  /d2/projects/DensePose/configs/densepose_R_50_FPN_s1x.yaml \
  /data/DensePose_ResNet50_FPN_s1x.pkl \ 
  /path/to/img dp_contour,dp_segm \ 
  --output /path/to/output

を実行します。
実行すると、このような画像が出力されます。

出力した画像

出力

入力した画像

出力

実行時に困った点・気になった点をあげます

nvidia/cuda:10.1-cudnn7-devel をベースイメージとしてコンテナを作成しなくてはならない

自分の環境に nvidia/cuda:10.1-cudnn7-runtime-ubuntu16.04 があったので、そのイメージを利用して環境を作ろうとしていましたが、
nvidia/cuda の runtime イメージでは nvccコマンドが実行できず、 実行には nvcc コマンドを実行できる必要があるというissueに行き着きました。
おとなしく付属のDockerfile を使っておけばよかったです。

実行結果が安定しない

推論結果が実行するたびに変わります。
今回の画像は、5回ぐらい推定を行ったうちで最も良かった結果を使ったのですが、なぜ後も変わるのかわかっていません。
オプションで渡せる --min_score(デフォルトは0.8) を調整したりしたのですが、上の図のように正常に出力される場合もあれば何も出力されない場合もありました。 画像を白黒にしていることから服の色等のコントラストが重要なのか? なども考え、コントラストが強い画像で試したりもしましたが、やはり推論結果は実行ごとに異なります。
ひとまず実行できることは確認したので、論文や実装を眺めてみて、少し調査してみようと思います。
Config にSeed を与えられるようですが、Seed を与えても決定的な振る舞いはしないようです。

Detectron2 の今後

多くの方が触っているらしく、いくつもの feature request が issue に上がっており、今後様々な機能が追加されそうです。

例を上げると、

などです。
どれも、とても楽しみです。

上述したとおり、他にもいろいろなものが発表されたので、それらも触っていこうと思います。

Yasuaki Hamano

Yasuaki Hamano

I'm a software engineer in Fukuoka, Japan. Recently, I am developing machine learning models using TensorFlow, and also developing Web services by using PHP.