Add at new repo again
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# Getting Started with DensePose
|
||||
|
||||
## Inference with Pre-trained Models
|
||||
|
||||
1. Pick a model and its config file from [Model Zoo](MODEL_ZOO.md), for example [densepose_rcnn_R_50_FPN_s1x.yaml](../configs/densepose_rcnn_R_50_FPN_s1x.yaml)
|
||||
2. Run the [Apply Net](TOOL_APPLY_NET.md) tool to visualize the results or save the to disk. For example, to use contour visualization for DensePose, one can run:
|
||||
```bash
|
||||
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
|
||||
```
|
||||
Please see [Apply Net](TOOL_APPLY_NET.md) for more details on the tool.
|
||||
|
||||
## Training
|
||||
|
||||
First, prepare the [dataset](http://densepose.org/#dataset) into the following structure under the directory you'll run training scripts:
|
||||
<pre>
|
||||
datasets/coco/
|
||||
annotations/
|
||||
densepose_{train,minival,valminusminival}2014.json
|
||||
<a href="https://dl.fbaipublicfiles.com/detectron2/densepose/densepose_minival2014_100.json">densepose_minival2014_100.json </a> (optional, for testing only)
|
||||
{train,val}2014/
|
||||
# image files that are mentioned in the corresponding json
|
||||
</pre>
|
||||
|
||||
To train a model one can use the [train_net.py](../train_net.py) script.
|
||||
This script was used to train all DensePose models in [Model Zoo](MODEL_ZOO.md).
|
||||
For example, to launch end-to-end DensePose-RCNN training with ResNet-50 FPN backbone
|
||||
on 8 GPUs following the s1x schedule, one can run
|
||||
```bash
|
||||
python train_net.py --config-file configs/densepose_rcnn_R_50_FPN_s1x.yaml --num-gpus 8
|
||||
```
|
||||
The configs are made for 8-GPU training. To train on 1 GPU, one can apply the
|
||||
[linear learning rate scaling rule](https://arxiv.org/abs/1706.02677):
|
||||
```bash
|
||||
python train_net.py --config-file configs/densepose_rcnn_R_50_FPN_s1x.yaml \
|
||||
SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025
|
||||
```
|
||||
|
||||
## Evaluation
|
||||
|
||||
Model testing can be done in the same way as training, except for an additional flag `--eval-only` and
|
||||
model location specification through `MODEL.WEIGHTS model.pth` in the command line
|
||||
```bash
|
||||
python train_net.py --config-file configs/densepose_rcnn_R_50_FPN_s1x.yaml \
|
||||
--eval-only MODEL.WEIGHTS model.pth
|
||||
```
|
||||
|
||||
## Tools
|
||||
|
||||
We provide tools which allow one to:
|
||||
- easily view DensePose annotated data in a dataset;
|
||||
- perform DensePose inference on a set of images;
|
||||
- visualize DensePose model results;
|
||||
|
||||
`query_db` is a tool to print or visualize DensePose data in a dataset.
|
||||
Please refer to [Query DB](TOOL_QUERY_DB.md) for more details on this tool
|
||||
|
||||
`apply_net` is a tool to print or visualize DensePose results.
|
||||
Please refer to [Apply Net](TOOL_APPLY_NET.md) for more details on this tool
|
||||
@@ -0,0 +1,277 @@
|
||||
# Model Zoo and Baselines
|
||||
|
||||
# Introduction
|
||||
|
||||
We provide baselines trained with Detectron2 DensePose. The corresponding
|
||||
configuration files can be found in the [configs](../configs) directory.
|
||||
All models were trained on COCO `train2014` + `valminusminival2014` and
|
||||
evaluated on COCO `minival2014`. For the details on common settings in which
|
||||
baselines were trained, please check [Detectron 2 Model Zoo](../../../MODEL_ZOO.md).
|
||||
|
||||
## License
|
||||
|
||||
All models available for download through this document are licensed under the
|
||||
[Creative Commons Attribution-ShareAlike 3.0 license](https://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
## COCO DensePose Baselines with DensePose-RCNN
|
||||
|
||||
### Legacy Models
|
||||
|
||||
Baselines trained using schedules from [Güler et al, 2018](https://arxiv.org/pdf/1802.00434.pdf)
|
||||
|
||||
<table><tbody>
|
||||
<!-- START TABLE -->
|
||||
<!-- TABLE HEADER -->
|
||||
<th valign="bottom">Name</th>
|
||||
<th valign="bottom">lr<br/>sched</th>
|
||||
<th valign="bottom">train<br/>time<br/>(s/iter)</th>
|
||||
<th valign="bottom">inference<br/>time<br/>(s/im)</th>
|
||||
<th valign="bottom">train<br/>mem<br/>(GB)</th>
|
||||
<th valign="bottom">box<br/>AP</th>
|
||||
<th valign="bottom">dp. AP<br/>GPS</th>
|
||||
<th valign="bottom">dp. AP<br/>GPSm</th>
|
||||
<th valign="bottom">model id</th>
|
||||
<th valign="bottom">download</th>
|
||||
<!-- TABLE BODY -->
|
||||
<!-- ROW: densepose_rcnn_R_50_FPN_s1x_legacy -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_50_FPN_s1x_legacy.yaml">R_50_FPN_s1x_legacy</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.307</td>
|
||||
<td align="center">0.051</td>
|
||||
<td align="center">3.2</td>
|
||||
<td align="center">58.1</td>
|
||||
<td align="center">52.1</td>
|
||||
<td align="center">54.9</td>
|
||||
<td align="center">164832157</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x_legacy/164832157/model_final_d366fa.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x_legacy/164832157/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_101_FPN_s1x_legacy -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_101_FPN_s1x_legacy.yaml">R_101_FPN_s1x_legacy</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.390</td>
|
||||
<td align="center">0.063</td>
|
||||
<td align="center">4.3</td>
|
||||
<td align="center">59.5</td>
|
||||
<td align="center">53.2</td>
|
||||
<td align="center">56.1</td>
|
||||
<td align="center">164832182</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_s1x_legacy/164832182/model_final_10af0e.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_s1x_legacy/164832182/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
### Improved Baselines, Original Fully Convolutional Haad
|
||||
|
||||
These models use an improved training schedule and Panoptic FPN head from [Kirillov et al, 2019](https://arxiv.org/abs/1901.02446).
|
||||
|
||||
<table><tbody>
|
||||
<!-- START TABLE -->
|
||||
<!-- TABLE HEADER -->
|
||||
<th valign="bottom">Name</th>
|
||||
<th valign="bottom">lr<br/>sched</th>
|
||||
<th valign="bottom">train<br/>time<br/>(s/iter)</th>
|
||||
<th valign="bottom">inference<br/>time<br/>(s/im)</th>
|
||||
<th valign="bottom">train<br/>mem<br/>(GB)</th>
|
||||
<th valign="bottom">box<br/>AP</th>
|
||||
<th valign="bottom">dp. AP<br/>GPS</th>
|
||||
<th valign="bottom">dp. AP<br/>GPSm</th>
|
||||
<th valign="bottom">model id</th>
|
||||
<th valign="bottom">download</th>
|
||||
<!-- TABLE BODY -->
|
||||
<!-- ROW: densepose_rcnn_R_50_FPN_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_50_FPN_s1x.yaml">R_50_FPN_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.359</td>
|
||||
<td align="center">0.066</td>
|
||||
<td align="center">4.5</td>
|
||||
<td align="center">61.2</td>
|
||||
<td align="center">63.7</td>
|
||||
<td align="center">65.3</td>
|
||||
<td align="center">165712039</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x/165712039/model_final_162be9.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_s1x/165712039/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_101_FPN_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_101_FPN_s1x.yaml">R_101_FPN_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.428</td>
|
||||
<td align="center">0.079</td>
|
||||
<td align="center">5.8</td>
|
||||
<td align="center">62.3</td>
|
||||
<td align="center">64.5</td>
|
||||
<td align="center">66.4</td>
|
||||
<td align="center">165712084</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_s1x/165712084/model_final_c6ab63.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_s1x/165712084/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
### Improved Baselines, DeepLabV3 Head
|
||||
|
||||
These models use an improved training schedule, Panoptic FPN head from [Kirillov et al, 2019](https://arxiv.org/abs/1901.02446) and DeepLabV3 head from [Chen et al, 2017](https://arxiv.org/abs/1706.05587).
|
||||
|
||||
<table><tbody>
|
||||
<!-- START TABLE -->
|
||||
<!-- TABLE HEADER -->
|
||||
<th valign="bottom">Name</th>
|
||||
<th valign="bottom">lr<br/>sched</th>
|
||||
<th valign="bottom">train<br/>time<br/>(s/iter)</th>
|
||||
<th valign="bottom">inference<br/>time<br/>(s/im)</th>
|
||||
<th valign="bottom">train<br/>mem<br/>(GB)</th>
|
||||
<th valign="bottom">box<br/>AP</th>
|
||||
<th valign="bottom">dp. AP<br/>GPS</th>
|
||||
<th valign="bottom">dp. AP<br/>GPSm</th>
|
||||
<th valign="bottom">model id</th>
|
||||
<th valign="bottom">download</th>
|
||||
<!-- TABLE BODY -->
|
||||
<!-- ROW: densepose_rcnn_R_50_FPN_DL_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_50_FPN_DL_s1x.yaml">R_50_FPN_DL_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.392</td>
|
||||
<td align="center">0.070</td>
|
||||
<td align="center">6.7</td>
|
||||
<td align="center">61.1</td>
|
||||
<td align="center">65.6</td>
|
||||
<td align="center">66.8</td>
|
||||
<td align="center">165712097</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_DL_s1x/165712097/model_final_0ed407.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_DL_s1x/165712097/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_101_FPN_DL_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_101_FPN_DL_s1x.yaml">R_101_FPN_DL_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.478</td>
|
||||
<td align="center">0.083</td>
|
||||
<td align="center">7.0</td>
|
||||
<td align="center">62.3</td>
|
||||
<td align="center">66.3</td>
|
||||
<td align="center">67.7</td>
|
||||
<td align="center">165712116</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_DL_s1x/165712116/model_final_844d15.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_DL_s1x/165712116/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
### Baselines with Confidence Estimation
|
||||
|
||||
These models perform additional estimation of confidence in regressed UV coodrinates, along the lines of [Neverova et al., 2019](https://papers.nips.cc/paper/8378-correlated-uncertainty-for-learning-dense-correspondences-from-noisy-labels).
|
||||
|
||||
<table><tbody>
|
||||
<!-- START TABLE -->
|
||||
<!-- TABLE HEADER -->
|
||||
<th valign="bottom">Name</th>
|
||||
<th valign="bottom">lr<br/>sched</th>
|
||||
<th valign="bottom">train<br/>time<br/>(s/iter)</th>
|
||||
<th valign="bottom">inference<br/>time<br/>(s/im)</th>
|
||||
<th valign="bottom">train<br/>mem<br/>(GB)</th>
|
||||
<th valign="bottom">box<br/>AP</th>
|
||||
<th valign="bottom">dp. AP<br/>GPS</th>
|
||||
<th valign="bottom">dp. AP<br/>GPSm</th>
|
||||
<th valign="bottom">model id</th>
|
||||
<th valign="bottom">download</th>
|
||||
<!-- TABLE BODY -->
|
||||
<!-- ROW: densepose_rcnn_R_50_FPN_WC1_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_50_FPN_WC1_s1x.yaml">R_50_FPN_WC1_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.353</td>
|
||||
<td align="center">0.064</td>
|
||||
<td align="center">4.6</td>
|
||||
<td align="center">60.5</td>
|
||||
<td align="center">64.2</td>
|
||||
<td align="center">65.6</td>
|
||||
<td align="center">173862049</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_WC1_s1x/173862049/model_final_289019.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_WC1_s1x/173862049/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_50_FPN_WC2_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_50_FPN_WC2_s1x.yaml">R_50_FPN_WC2_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.364</td>
|
||||
<td align="center">0.066</td>
|
||||
<td align="center">4.8</td>
|
||||
<td align="center">60.7</td>
|
||||
<td align="center">64.2</td>
|
||||
<td align="center">65.7</td>
|
||||
<td align="center">173861455</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_WC2_s1x/173861455/model_final_3abe14.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_WC2_s1x/173861455/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_50_FPN_DL_WC1_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_50_FPN_DL_WC1_s1x.yaml">R_50_FPN_DL_WC1_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.397</td>
|
||||
<td align="center">0.068</td>
|
||||
<td align="center">6.7</td>
|
||||
<td align="center">61.1</td>
|
||||
<td align="center">65.8</td>
|
||||
<td align="center">67.1</td>
|
||||
<td align="center">173067973</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_DL_WC1_s1x/173067973/model_final_b1e525.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_DL_WC1_s1x/173067973/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_50_FPN_DL_WC2_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_50_FPN_DL_WC2_s1x.yaml">R_50_FPN_DL_WC2_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.410</td>
|
||||
<td align="center">0.070</td>
|
||||
<td align="center">6.8</td>
|
||||
<td align="center">60.8</td>
|
||||
<td align="center">65.6</td>
|
||||
<td align="center">66.7</td>
|
||||
<td align="center">173859335</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_DL_WC2_s1x/173859335/model_final_60fed4.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_50_FPN_DL_WC2_s1x/173859335/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_101_FPN_WC1_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_101_FPN_WC1_s1x.yaml">R_101_FPN_WC1_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.435</td>
|
||||
<td align="center">0.076</td>
|
||||
<td align="center">5.7</td>
|
||||
<td align="center">62.5</td>
|
||||
<td align="center">64.9</td>
|
||||
<td align="center">66.5</td>
|
||||
<td align="center">171402969</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_WC1_s1x/171402969/model_final_9e47f0.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_WC1_s1x/171402969/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_101_FPN_WC2_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_101_FPN_WC2_s1x.yaml">R_101_FPN_WC2_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.450</td>
|
||||
<td align="center">0.078</td>
|
||||
<td align="center">5.7</td>
|
||||
<td align="center">62.3</td>
|
||||
<td align="center">64.8</td>
|
||||
<td align="center">66.6</td>
|
||||
<td align="center">173860702</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_WC2_s1x/173860702/model_final_5ea023.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_WC2_s1x/173860702/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_101_FPN_DL_WC1_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_101_FPN_DL_WC1_s1x.yaml">R_101_FPN_DL_WC1_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.479</td>
|
||||
<td align="center">0.081</td>
|
||||
<td align="center">7.9</td>
|
||||
<td align="center">62.0</td>
|
||||
<td align="center">66.2</td>
|
||||
<td align="center">67.4</td>
|
||||
<td align="center">173858525</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_DL_WC1_s1x/173858525/model_final_f359f3.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_DL_WC1_s1x/173858525/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: densepose_rcnn_R_101_FPN_DL_WC2_s1x -->
|
||||
<tr><td align="left"><a href="../configs/densepose_rcnn_R_101_FPN_DL_WC2_s1x.yaml">R_101_FPN_DL_WC2_s1x</a></td>
|
||||
<td align="center">s1x</td>
|
||||
<td align="center">0.491</td>
|
||||
<td align="center">0.082</td>
|
||||
<td align="center">7.6</td>
|
||||
<td align="center">61.7</td>
|
||||
<td align="center">65.9</td>
|
||||
<td align="center">67.3</td>
|
||||
<td align="center">173294801</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_DL_WC2_s1x/173294801/model_final_6e1ed1.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/densepose/densepose_rcnn_R_101_FPN_DL_WC2_s1x/173294801/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
## Old Baselines
|
||||
|
||||
It is still possible to use some baselines from [DensePose 1](https://github.com/facebookresearch/DensePose).
|
||||
Below are evaluation metrics for the baselines recomputed in the current framework:
|
||||
|
||||
| Model | bbox AP | AP | AP50 | AP75 | APm |APl |
|
||||
|-----|-----|-----|--- |--- |--- |--- |
|
||||
| [`ResNet50_FPN_s1x-e2e`](https://dl.fbaipublicfiles.com/densepose/DensePose_ResNet50_FPN_s1x-e2e.pkl) | 54.673 | 48.894 | 84.963 | 50.717 | 43.132 | 50.433 |
|
||||
| [`ResNet101_FPN_s1x-e2e`](https://dl.fbaipublicfiles.com/densepose/DensePose_ResNet101_FPN_s1x-e2e.pkl) | 56.032 | 51.088 | 86.250 | 55.057 | 46.542 | 52.563 |
|
||||
|
||||
Note: these scores are close, but not strictly equal to the ones reported in the [DensePose 1 Model Zoo](https://github.com/facebookresearch/DensePose/blob/master/MODEL_ZOO.md),
|
||||
which is due to small incompatibilities between the frameworks.
|
||||
@@ -0,0 +1,130 @@
|
||||
# Apply Net
|
||||
|
||||
`apply_net` is a tool to print or visualize DensePose results on a set of images.
|
||||
It has two modes: `dump` to save DensePose model results to a pickle file
|
||||
and `show` to visualize them on images.
|
||||
|
||||
## Dump Mode
|
||||
|
||||
The general command form is:
|
||||
```bash
|
||||
python apply_net.py dump [-h] [-v] [--output <dump_file>] <config> <model> <input>
|
||||
```
|
||||
|
||||
There are three mandatory arguments:
|
||||
- `<config>`, configuration file for a given model;
|
||||
- `<model>`, model file with trained parameters
|
||||
- `<input>`, input image file name, pattern or folder
|
||||
|
||||
One can additionally provide `--output` argument to define the output file name,
|
||||
which defaults to `output.pkl`.
|
||||
|
||||
|
||||
Examples:
|
||||
|
||||
1. Dump results of a DensePose model with ResNet-50 FPN backbone for images
|
||||
in a folder `images` to file `dump.pkl`:
|
||||
```bash
|
||||
python apply_net.py dump configs/densepose_rcnn_R_50_FPN_s1x.yaml DensePose_ResNet50_FPN_s1x-e2e.pkl images --output dump.pkl -v
|
||||
```
|
||||
|
||||
2. Dump results of a DensePose model with ResNet-50 FPN backbone for images
|
||||
with file name matching a pattern `image*.jpg` to file `results.pkl`:
|
||||
```bash
|
||||
python apply_net.py dump configs/densepose_rcnn_R_50_FPN_s1x.yaml DensePose_ResNet50_FPN_s1x-e2e.pkl "image*.jpg" --output results.pkl -v
|
||||
```
|
||||
|
||||
If you want to load the pickle file generated by the above command:
|
||||
```
|
||||
# make sure DensePose is in your PYTHONPATH, or use the following line to add it:
|
||||
sys.path.append("/your_detectron2_path/detectron2_repo/projects/DensePose/")
|
||||
|
||||
f = open('/your_result_path/results.pkl', 'rb')
|
||||
data = pickle.load(f)
|
||||
```
|
||||
|
||||
The file `results.pkl` contains the list of results per image, for each image the result is a dictionary:
|
||||
```
|
||||
data: [{'file_name': '/your_path/image1.jpg',
|
||||
'scores': tensor([0.9884]),
|
||||
'pred_boxes_XYXY': tensor([[ 69.6114, 0.0000, 706.9797, 706.0000]]),
|
||||
'pred_densepose': <densepose.structures.DensePoseResult object at 0x7f791b312470>},
|
||||
{'file_name': '/your_path/image2.jpg',
|
||||
'scores': tensor([0.9999, 0.5373, 0.3991]),
|
||||
'pred_boxes_XYXY': tensor([[ 59.5734, 7.7535, 579.9311, 932.3619],
|
||||
[612.9418, 686.1254, 612.9999, 704.6053],
|
||||
[164.5081, 407.4034, 598.3944, 920.4266]]),
|
||||
'pred_densepose': <densepose.structures.DensePoseResult object at 0x7f7071229be0>}]
|
||||
```
|
||||
|
||||
We can use the following code, to parse the outputs of the first
|
||||
detected instance on the first image.
|
||||
```
|
||||
img_id, instance_id = 0, 0 # Look at the first image and the first detected instance
|
||||
bbox_xyxy = data[img_id]['pred_boxes_XYXY'][instance_id]
|
||||
result_encoded = data[img_id]['pred_densepose'].results[instance_id]
|
||||
iuv_arr = DensePoseResult.decode_png_data(*result_encoded)
|
||||
```
|
||||
The array `bbox_xyxy` contains (x0, y0, x1, y1) of the bounding box.
|
||||
|
||||
The shape of `iuv_arr` is `[3, H, W]`, where (H, W) is the shape of the bounding box.
|
||||
- `iuv_arr[0,:,:]`: The patch index of image points, indicating which of the 24 surface patches the point is on.
|
||||
- `iuv_arr[1,:,:]`: The U-coordinate value of image points.
|
||||
- `iuv_arr[2,:,:]`: The V-coordinate value of image points.
|
||||
|
||||
|
||||
## Visualization Mode
|
||||
|
||||
The general command form is:
|
||||
```bash
|
||||
python apply_net.py show [-h] [-v] [--min_score <score>] [--nms_thresh <threshold>] [--output <image_file>] <config> <model> <input> <visualizations>
|
||||
```
|
||||
|
||||
There are four mandatory arguments:
|
||||
- `<config>`, configuration file for a given model;
|
||||
- `<model>`, model file with trained parameters
|
||||
- `<input>`, input image file name, pattern or folder
|
||||
- `<visualizations>`, visualizations specifier; currently available visualizations are:
|
||||
* `bbox` - bounding boxes of detected persons;
|
||||
* `dp_segm` - segmentation masks for detected persons;
|
||||
* `dp_u` - each body part is colored according to the estimated values of the
|
||||
U coordinate in part parameterization;
|
||||
* `dp_v` - each body part is colored according to the estimated values of the
|
||||
V coordinate in part parameterization;
|
||||
* `dp_contour` - plots contours with color-coded U and V coordinates
|
||||
|
||||
|
||||
One can additionally provide the following optional arguments:
|
||||
- `--min_score` to only show detections with sufficient scores that are not lower than provided value
|
||||
- `--nms_thresh` to additionally apply non-maximum suppression to detections at a given threshold
|
||||
- `--output` to define visualization file name template, which defaults to `output.png`.
|
||||
To distinguish output file names for different images, the tool appends 1-based entry index,
|
||||
e.g. output.0001.png, output.0002.png, etc...
|
||||
|
||||
|
||||
The following examples show how to output results of a DensePose model
|
||||
with ResNet-50 FPN backbone using different visualizations for image `image.jpg`:
|
||||
|
||||
1. Show bounding box and segmentation:
|
||||
```bash
|
||||
python apply_net.py show configs/densepose_rcnn_R_50_FPN_s1x.yaml DensePose_ResNet50_FPN_s1x-e2e.pkl image.jpg bbox,dp_segm -v
|
||||
```
|
||||

|
||||
|
||||
2. Show bounding box and estimated U coordinates for body parts:
|
||||
```bash
|
||||
python apply_net.py show configs/densepose_rcnn_R_50_FPN_s1x.yaml DensePose_ResNet50_FPN_s1x-e2e.pkl image.jpg bbox,dp_u -v
|
||||
```
|
||||

|
||||
|
||||
3. Show bounding box and estimated V coordinates for body parts:
|
||||
```bash
|
||||
python apply_net.py show configs/densepose_rcnn_R_50_FPN_s1x.yaml DensePose_ResNet50_FPN_s1x-e2e.pkl image.jpg bbox,dp_v -v
|
||||
```
|
||||

|
||||
|
||||
4. Show bounding box and estimated U and V coordinates via contour plots:
|
||||
```bash
|
||||
python apply_net.py show configs/densepose_rcnn_R_50_FPN_s1x.yaml DensePose_ResNet50_FPN_s1x-e2e.pkl image.jpg dp_contour,bbox -v
|
||||
```
|
||||

|
||||
@@ -0,0 +1,105 @@
|
||||
|
||||
# Query Dataset
|
||||
|
||||
`query_db` is a tool to print or visualize DensePose data from a dataset.
|
||||
It has two modes: `print` and `show` to output dataset entries to standard
|
||||
output or to visualize them on images.
|
||||
|
||||
## Print Mode
|
||||
|
||||
The general command form is:
|
||||
```bash
|
||||
python query_db.py print [-h] [-v] [--max-entries N] <dataset> <selector>
|
||||
```
|
||||
|
||||
There are two mandatory arguments:
|
||||
- `<dataset>`, DensePose dataset specification, from which to select
|
||||
the entries (e.g. `densepose_coco_2014_train`).
|
||||
- `<selector>`, dataset entry selector which can be a single specification,
|
||||
or a comma-separated list of specifications of the form
|
||||
`field[:type]=value` for exact match with the value
|
||||
or `field[:type]=min-max` for a range of values
|
||||
|
||||
One can additionally limit the maximum number of entries to output
|
||||
by providing `--max-entries` argument.
|
||||
|
||||
Examples:
|
||||
|
||||
1. Output at most 10 first entries from the `densepose_coco_2014_train` dataset:
|
||||
```bash
|
||||
python query_db.py print densepose_coco_2014_train \* --max-entries 10 -v
|
||||
```
|
||||
|
||||
2. Output all entries with `file_name` equal to `COCO_train2014_000000000036.jpg`:
|
||||
```bash
|
||||
python query_db.py print densepose_coco_2014_train file_name=COCO_train2014_000000000036.jpg -v
|
||||
```
|
||||
|
||||
3. Output all entries with `image_id` between 36 and 156:
|
||||
```bash
|
||||
python query_db.py print densepose_coco_2014_train image_id:int=36-156 -v
|
||||
```
|
||||
|
||||
## Visualization Mode
|
||||
|
||||
The general command form is:
|
||||
```bash
|
||||
python query_db.py show [-h] [-v] [--max-entries N] [--output <image_file>] <dataset> <selector> <visualizations>
|
||||
```
|
||||
|
||||
There are three mandatory arguments:
|
||||
- `<dataset>`, DensePose dataset specification, from which to select
|
||||
the entries (e.g. `densepose_coco_2014_train`).
|
||||
- `<selector>`, dataset entry selector which can be a single specification,
|
||||
or a comma-separated list of specifications of the form
|
||||
`field[:type]=value` for exact match with the value
|
||||
or `field[:type]=min-max` for a range of values
|
||||
- `<visualizations>`, visualizations specifier; currently available visualizations are:
|
||||
* `bbox` - bounding boxes of annotated persons;
|
||||
* `dp_i` - annotated points colored according to the containing part;
|
||||
* `dp_pts` - annotated points in green color;
|
||||
* `dp_segm` - segmentation masks for annotated persons;
|
||||
* `dp_u` - annotated points colored according to their U coordinate in part parameterization;
|
||||
* `dp_v` - annotated points colored according to their V coordinate in part parameterization;
|
||||
|
||||
One can additionally provide one of the two optional arguments:
|
||||
- `--max_entries` to limit the maximum number of entries to visualize
|
||||
- `--output` to provide visualization file name template, which defaults
|
||||
to `output.png`. To distinguish file names for different dataset
|
||||
entries, the tool appends 1-based entry index to the output file name,
|
||||
e.g. output.0001.png, output.0002.png, etc.
|
||||
|
||||
The following examples show how to output different visualizations for image with `id = 322`
|
||||
from `densepose_coco_2014_train` dataset:
|
||||
|
||||
1. Show bounding box and segmentation:
|
||||
```bash
|
||||
python query_db.py show densepose_coco_2014_train image_id:int=322 bbox,dp_segm -v
|
||||
```
|
||||

|
||||
|
||||
2. Show bounding box and points colored according to the containing part:
|
||||
```bash
|
||||
python query_db.py show densepose_coco_2014_train image_id:int=322 bbox,dp_i -v
|
||||
```
|
||||

|
||||
|
||||
3. Show bounding box and annotated points in green color:
|
||||
```bash
|
||||
python query_db.py show densepose_coco_2014_train image_id:int=322 bbox,dp_segm -v
|
||||
```
|
||||

|
||||
|
||||
4. Show bounding box and annotated points colored according to their U coordinate in part parameterization:
|
||||
```bash
|
||||
python query_db.py show densepose_coco_2014_train image_id:int=322 bbox,dp_u -v
|
||||
```
|
||||

|
||||
|
||||
5. Show bounding box and annotated points colored according to their V coordinate in part parameterization:
|
||||
```bash
|
||||
python query_db.py show densepose_coco_2014_train image_id:int=322 bbox,dp_v -v
|
||||
```
|
||||

|
||||
|
||||
|
||||
Reference in New Issue
Block a user