Unofficial implementation of MoveNet from Google. This repo is heavily borrowed from CenterNet and TorchVision. The repo is still under development and there is still a long way to go.
I will add documents about how to run the program and specify the modification I made.
- The prediction heads under the default setting of CenterNet (as well as COCO keypoint detection task) is to estimate the bounding box and joint positions at the same time. Thus, the losses include (width, weight) regression loss and center point offset loss. The impact of these two losses can be elimintated via specifying options
--eval_oracle_offset
and--eval_oracle_wh
. I haven't used this setting, and will report the results later. - The channel size of joint local offsets is 2*k (34 for COCO), while the channel size of current implementation is 2, as the feature map is shared across different keypoints in CenterNet.
- In CenterNet, authors use pre-trained object detection model as the initial model. Here, I just use the pre-trained MobileNet v2 from ImageNet classification task, as I haven't found any available pre-trained MobileNet_v2 + FPN.
The keypoint decoding processing is quite different from MoveNet. I will modify this part as soon as possible.
- Create a standalone
SinglePoseDetector/Trainer
class for MoveNet. - Release the COCO object detection pre-trained model based on MoveNet.
- Add ONNX convertion script, and release MoveNet-based Android prototype based on Tensorflow Lite.
- Use netron to validate the network architecture.
Below is the original README from CenterNet. It's ane excellent work and I realy like it.
Object detection, 3D detection, and pose estimation using center point detection:
Objects as Points,
Xingyi Zhou, Dequan Wang, Philipp Krähenbühl,
arXiv technical report (arXiv 1904.07850)
Contact: zhouxy@cs.utexas.edu. Any questions or discussions are welcomed!
- (June, 2020) We released a state-of-the-art Lidar-based 3D detection and tracking framework CenterPoint.
- (April, 2020) We released a state-of-the-art (multi-category-/ pose-/ 3d-) tracking extension CenterTrack.
Detection identifies objects as axis-aligned boxes in an image. Most successful object detectors enumerate a nearly exhaustive list of potential object locations and classify each. This is wasteful, inefficient, and requires additional post-processing. In this paper, we take a different approach. We model an object as a single point -- the center point of its bounding box. Our detector uses keypoint estimation to find center points and regresses to all other object properties, such as size, 3D location, orientation, and even pose. Our center point based approach, CenterNet, is end-to-end differentiable, simpler, faster, and more accurate than corresponding bounding box based detectors. CenterNet achieves the best speed-accuracy trade-off on the MS COCO dataset, with 28.1% AP at 142 FPS, 37.4% AP at 52 FPS, and 45.1% AP with multi-scale testing at 1.4 FPS. We use the same approach to estimate 3D bounding box in the KITTI benchmark and human pose on the COCO keypoint dataset. Our method performs competitively with sophisticated multi-stage methods and runs in real-time.
-
Simple: One-sentence method summary: use keypoint detection technic to detect the bounding box center point and regress to all other object properties like bounding box size, 3d information, and pose.
-
Versatile: The same framework works for object detection, 3d bounding box estimation, and multi-person pose estimation with minor modification.
-
Fast: The whole process in a single network feedforward. No NMS post processing is needed. Our DLA-34 model runs at 52 FPS with 37.4 COCO AP.
-
Strong: Our best single model achieves 45.1AP on COCO test-dev.
-
Easy to use: We provide user friendly testing API and webcam demos.
Backbone | AP / FPS | Flip AP / FPS | Multi-scale AP / FPS |
---|---|---|---|
Hourglass-104 | 40.3 / 14 | 42.2 / 7.8 | 45.1 / 1.4 |
DLA-34 | 37.4 / 52 | 39.2 / 28 | 41.7 / 4 |
ResNet-101 | 34.6 / 45 | 36.2 / 25 | 39.3 / 4 |
ResNet-18 | 28.1 / 142 | 30.0 / 71 | 33.2 / 12 |
Backbone | AP | FPS |
---|---|---|
Hourglass-104 | 64.0 | 6.6 |
DLA-34 | 58.9 | 23 |
Backbone | FPS | AP-E | AP-M | AP-H | AOS-E | AOS-M | AOS-H | BEV-E | BEV-M | BEV-H |
---|---|---|---|---|---|---|---|---|---|---|
DLA-34 | 32 | 96.9 | 87.8 | 79.2 | 93.9 | 84.3 | 75.7 | 34.0 | 30.5 | 26.8 |
All models and details are available in our Model zoo.
Please refer to INSTALL.md for installation instructions.
We support demo for image/ image folder, video, and webcam.
First, download the models (By default, ctdet_coco_dla_2x for detection and
multi_pose_dla_3x for human pose estimation)
from the Model zoo and put them in CenterNet_ROOT/models/
.
For object detection on images/ video, run:
python demo.py ctdet --demo /path/to/image/or/folder/or/video --load_model ../models/ctdet_coco_dla_2x.pth
We provide example images in CenterNet_ROOT/images/
(from Detectron). If set up correctly, the output should look like
For webcam demo, run
python demo.py ctdet --demo webcam --load_model ../models/ctdet_coco_dla_2x.pth
Similarly, for human pose estimation, run:
python demo.py multi_pose --demo /path/to/image/or/folder/or/video/or/webcam --load_model ../models/multi_pose_dla_3x.pth
The result for the example images should look like:
You can add --debug 2
to visualize the heatmap outputs.
You can add --flip_test
for flip test.
To use this CenterNet in your own project, you can
import sys
CENTERNET_PATH = /path/to/CenterNet/src/lib/
sys.path.insert(0, CENTERNET_PATH)
from detectors.detector_factory import detector_factory
from opts import opts
MODEL_PATH = /path/to/model
TASK = 'ctdet' # or 'multi_pose' for human pose estimation
opt = opts().init('{} --load_model {}'.format(TASK, MODEL_PATH).split(' '))
detector = detector_factory[opt.task](opt)
img = image/or/path/to/your/image/
ret = detector.run(img)['results']
ret
will be a python dict: {category_id : [[x1, y1, x2, y2, score], ...], }
After installation, follow the instructions in DATA.md to setup the datasets. Then check GETTING_STARTED.md to reproduce the results in the paper. We provide scripts for all the experiments in the experiments folder.
If you are interested in training CenterNet in a new dataset, use CenterNet in a new task, or use a new network architecture for CenterNet, please refer to DEVELOP.md. Also feel free to send us emails for discussions or suggestions.
- CenterNet + embedding learning based tracking: FairMOT from Yifu Zhang.
- Detectron2 based implementation: CenterNet-better from Feng Wang.
- Keras Implementation: keras-centernet from see-- and keras-CenterNet from xuannianz.
- MXnet implementation: mxnet-centernet from Guanghan Ning.
- Stronger human open estimation models: centerpose from tensorboy.
- TensorRT extension with ONNX models: TensorRT-CenterNet from Wengang Cao.
- CenterNet + DeepSORT tracking implementation: centerNet-deep-sort from kimyoon-young.
- Blogs on training CenterNet on custom datasets (in Chinese): ships from Rhett Chen and faces from linbior.
CenterNet itself is released under the MIT License (refer to the LICENSE file for details). Portions of the code are borrowed from human-pose-estimation.pytorch (image transform, resnet), CornerNet (hourglassnet, loss functions), dla (DLA network), DCNv2(deformable convolutions), tf-faster-rcnn(Pascal VOC evaluation) and kitti_eval (KITTI dataset evaluation). Please refer to the original License of these projects (See NOTICE).
If you find this project useful for your research, please use the following BibTeX entry.
@inproceedings{zhou2019objects,
title={Objects as Points},
author={Zhou, Xingyi and Wang, Dequan and Kr{\"a}henb{\"u}hl, Philipp},
booktitle={arXiv preprint arXiv:1904.07850},
year={2019}
}