深度 神经网络 库和工具包,可在 NVIDIA jetson 平台上进行高性能推理
tkDNN is a Deep Neural Network library built with cuDNN and tensorRT primitives, specifically thought to work on NVIDIA Jetson Boards. It has been tested on TK1(branch cudnn2), TX1, TX2, AGX Xavier, Nano and several discrete GPUs. The main goal of this project is to exploit NVIDIA boards as much as possible to obtain the best inference performance. It does not allow training.
If you use tkDNN in your research, please cite the following paper. For use in commercial solutions, write at [email protected] and [email protected] or refer to https://hipert.unimore.it/ .
@inproceedings{verucchi2020systematic,
title={A Systematic Assessment of Embedded Neural Networks for Object Detection},
author={Verucchi, Micaela and Brilli, Gianluca and Sapienza, Davide and Verasani, Mattia and Arena, Marco and Gatti, Francesco and Capotondi, Alessandro and Cavicchioli, Roberto and Bertogna, Marko and Solieri, Marco},
booktitle={2020 25th IEEE International Conference on Emerging Technologies and Factory Automation (ETFA)},
volume={1},
pages={937--944},
year={2020},
organization={IEEE}
}
Inference FPS of yolov4 with tkDNN, average of 1200 images with the same dimension as the input size, on
| Platform | Network | FP32, B=1 | FP32, B=4 | FP16, B=1 | FP16, B=4 | INT8, B=1 | INT8, B=4 | | :------: | :-----: | :-----: | :-----: | :-----: | :-----: | :-----: | :-----: | | RTX 2080Ti | yolo4 320 | 118.59 | 237.31 | 207.81 | 443.32 | 262.37 | 530.93 | | RTX 2080Ti | yolo4 416 | 104.81 | 162.86 | 169.06 | 293.78 | 206.93 | 353.26 | | RTX 2080Ti | yolo4 512 | 92.98 | 132.43 | 140.36 | 215.17 | 165.35 | 254.96 | | RTX 2080Ti | yolo4 608 | 63.77 | 81.53 | 111.39 | 152.89 | 127.79 | 184.72 | | AGX Xavier | yolo4 320 | 26.78 | 32.05 | 57.14 | 79.05 | 73.15 | 97.56 | | AGX Xavier | yolo4 416 | 19.96 | 21.52 | 41.01 | 49.00 | 50.81 | 60.61 | | AGX Xavier | yolo4 512 | 16.58 | 16.98 | 31.12 | 33.84 | 37.82 | 41.28 | | AGX Xavier | yolo4 608 | 9.45 | 10.13 | 21.92 | 23.36 | 27.05 | 28.93 | | Xavier NX | yolo4 320 | 14.56 | 16.25 | 30.14 | 41.15 | 42.13 | 53.42 | | Xavier NX | yolo4 416 | 10.02 | 10.60 | 22.43 | 25.59 | 29.08 | 32.94 | | Xavier NX | yolo4 512 | 8.10 | 8.32 | 15.78 | 17.13 | 20.51 | 22.46 | | Xavier NX | yolo4 608 | 5.26 | 5.18 | 11.54 | 12.06 | 15.09 | 15.82 | | Tx2 | yolo4 320 | 11.18 | 12.07 | 15.32 | 16.31 | - | - | | Tx2 | yolo4 416 | 7.30 | 7.58 | 9.45 | 9.90 | - | - | | Tx2 | yolo4 512 | 5.96 | 5.95 | 7.22 | 7.23 | - | - | | Tx2 | yolo4 608 | 3.63 | 3.65 | 4.67 | 4.70 | - | - | | Nano | yolo4 320 | 4.23 | 4.55 | 6.14 | 6.53 | - | - | | Nano | yolo4 416 | 2.88 | 3.00 | 3.90 | 4.04 | - | - | | Nano | yolo4 512 | 2.32 | 2.34 | 3.02 | 3.04 | - | - | | Nano | yolo4 608 | 1.40 | 1.41 | 1.92 | 1.93 | - | - |
Results for COCO val 2017 (5k images), on RTX 2080Ti, with conf threshold=0.001
| CodaLab | CodaLab | CodaLab | CodaLab | tkDNN map | tkDNN map | |
|---|---|---|---|---|---|---|
| tkDNN | tkDNN | darknet | darknet | tkDNN | tkDNN | |
| MAP(0.5:0.95) | AP50 | MAP(0.5:0.95) | AP50 | MAP(0.5:0.95) | AP50 | |
| Yolov3 (416x416) | 0.381 | 0.675 | 0.380 | 0.675 | 0.372 | 0.663 |
| yolov4 (416x416) | 0.468 | 0.705 | 0.471 | 0.710 | 0.459 | 0.695 |
| yolov3tiny (416x416) | 0.096 | 0.202 | 0.096 | 0.201 | 0.093 | 0.198 |
| yolov4tiny (416x416) | 0.202 | 0.400 | 0.201 | 0.400 | 0.197 | 0.395 |
| Cnet-dla34 (512x512) | 0.366 | 0.543 | - | - | 0.361 | 0.535 |
| mv2SSD (512x512) | 0.226 | 0.381 | - | - | 0.223 | 0.378 |
This branch works on every NVIDIA GPU that supports the following (latest tested) dependencies:
sudo apt install libyaml-cpp-dev curl libeigen3-dev
To compile and install OpenCV4 with contrib us the script install_OpenCV4.sh. It will download and compile OpenCV in Download folder.
bash scripts/install_OpenCV4.sh
If you have OpenCV compiled with cuda and contrib and want to use it with tkDNN pass ENABLE_OPENCV_CUDA_CONTRIB=ON flag when compiling tkDBB
. If the flag is not passed,the preprocessing of the networks is computed on the CPU, otherwise on the GPU. In the latter case some milliseconds are saved in the end-to-end latency.
Build with cmake. If using Ubuntu 18.04 a new version of cmake is needed (3.15 or above).
On both linux and windows ,the CMAKE_BUILD_TYPE variable needs to be defined as either Release or Debug.
git clone https://github.com/ceccocats/tkDNN
cd tkDNN
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
Steps needed to do inference on tkDNN with a custom neural network.
For specific details on how to export weights see HERE.
For specific details on how to run:
For specific details on how to run tkDNN on Windows 10/11 see HERE.
| Test Name | Network | Dataset | N Classes | Input size | Weights |
|---|---|---|---|---|---|
| yolo | YOLO v21 | COCO 2014 | 80 | 608x608 | weights |
| yolo_224 | YOLO v21 | COCO 2014 | 80 | 224x224 | weights |
| yolo_berkeley | YOLO v21 | BDD100K | 10 | 416x736 | weights |
| yolo_relu | YOLO v2 (with ReLU, not Leaky)1 | COCO 2014 | 80 | 416x416 | weights |
| yolo_tiny | YOLO v2 tiny1 | COCO 2014 | 80 | 416x416 | weights |
| yolo_voc | YOLO v21 | VOC | 21 | 416x416 | weights |
| yolo3 | YOLO v32 | COCO 2014 | 80 | 416x416 | weights |
| yolo3_512 | YOLO v32 | COCO 2017 | 80 | 512x512 | weights |
| yolo3_berkeley | YOLO v32 | BDD100K | 10 | 320x544 | weights |
| yolo3_coco4 | YOLO v32 | COCO 2014 | 4 | 416x416 | weights |
| yolo3_flir | YOLO v32 | FREE FLIR | 3 | 320x544 | weights |
| yolo3_tiny | YOLO v3 tiny2 | COCO 2014 | 80 | 416x416 | [weights |
暂无开放 Issues,或尚未同步最近议题。