Table of Contents
発表された主なもの
-
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とは別プロジェクトとしてgithubで2018年の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 に上がっており、今後様々な機能が追加されそうです。
例を上げると、
- backbone モデルとしてEfficientNetを追加
- ONNX サポート
- Detectron2go(11月にリリース予定!)
などです。
どれも、とても楽しみです。
上述したとおり、他にもいろいろなものが発表されたので、それらも触っていこうと思います。
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.