enazoe / yolo-tensorrt

TensorRT8.Support Yolov5n,s,m,l,x .darknet -> tensorrt. Yolov4 Yolov3 use raw darknet *.weights and *.cfg fils. If the wrapper is useful to you,please Star it.
MIT License
1.19k stars 315 forks source link
darknet jetson jetson-xavier-nx l4t weights yolo-tensorrt yolov3 yolov3-tiny yolov4 yolov4-tiny yolov5 yolov5l yolov5m yolov5s yolov5x

Yolov5 Yolov4 Yolov3 TensorRT Implementation

GitHub stars GitHub forks GitHub watchers Gitter

news: 2021.10.31:yolov5-v6.0 support

INTRODUCTION

The project is the encapsulation of nvidia official yolo-tensorrt implementation. And you must have the trained yolo model(.weights) and .cfg file from the darknet (yolov3 & yolov4). For the yolov5 ,you should prepare the model file (yolov5s.yaml) and the trained weight file (yolov5s.pt) from pytorch.

Features

PLATFORM & BENCHMARK

BENCHMARK #### x86 (inference time) | model | size | gpu | fp32 | fp16 | INT8 | | :-----: | :-----: | :----: | :--: | :--: | :--: | | yolov5s | 640x640 | 1080ti | 8ms | / | 7ms | | yolov5m | 640x640 | 1080ti | 13ms | / | 11ms | | yolov5l | 640x640 | 1080ti | 20ms | / | 15ms | | yolov5x | 640x640 | 1080ti | 30ms | / | 23ms | #### Jetson NX with Jetpack4.4.1 (inference / detect time) | model | size | gpu | fp32 | fp16 | INT8 | | :-------------: | :----: | :--: | :--: | :--: | :--: | | yolov3 | 416x416 | nx | 105ms/120ms | 30ms/48ms | 20ms/35ms | | yolov3-tiny | 416x416 | nx | 14ms/23ms | 8ms/15ms | 12ms/19ms | | yolov4-tiny | 416x416 | nx | 13ms/23ms | 7ms/16ms | 7ms/15ms | | yolov4 | 416x416 | nx | 111ms/125ms | 55ms/65ms | 47ms/57ms | | yolov5s | 416x416 | nx | 47ms/88ms | 33ms/74ms | 28ms/64ms | | yolov5m | 416x416 | nx | 110ms/145ms | 63ms/101ms | 49ms/91ms | | yolov5l | 416x416 | nx | 205ms/242ms | 95ms/123ms | 76ms/118ms | | yolov5x | 416x416 | nx | 351ms/405ms | 151ms/183ms | 114ms/149ms | ### ubuntu | model | size | gpu | fp32 | fp16 | INT8 | | :-------------: | :----: | :--: | :--: | :--: | :--: | | yolov4 | 416x416 | titanv | 11ms/17ms | 8ms/15ms | 7ms/14ms | | yolov5s | 416x416 | titanv | 7ms/22ms | 5ms/20ms | 5ms/18ms | | yolov5m | 416x416 | titanv | 9ms/23ms | 8ms/22ms | 7ms/21ms | | yolov5l | 416x416 | titanv | 17ms/28ms | 11ms/23ms | 11ms/24ms | | yolov5x | 416x416 | titanv | 25ms/40ms | 15ms/27ms | 15ms/27ms |

WRAPPER

Prepare the pretrained .weights and .cfg model.

Detector detector;
Config config;

std::vector<BatchResult> res;
detector.detect(vec_image, res)

Build and use yolo-trt as DLL or SO libraries

windows10

ubuntu & L4T (jetson)

The project generate the libdetector.so lib, and the sample code. If you want to use the libdetector.so lib in your own project,this cmake file perhaps could help you .

git clone https://github.com/enazoe/yolo-tensorrt.git
cd yolo-tensorrt/
mkdir build
cd build/
cmake ..
make
./yolo-trt

API

struct Config
{
    std::string file_model_cfg = "configs/yolov4.cfg";

    std::string file_model_weights = "configs/yolov4.weights";

    float detect_thresh = 0.9;

    ModelType net_type = YOLOV4;

    Precision inference_precison = INT8;

    int gpu_id = 0;

    std::string calibration_image_list_file_txt = "configs/calibration_images.txt";

};

class API Detector
{
public:
    explicit Detector();
    ~Detector();

    void init(const Config &config);

    void detect(const std::vector<cv::Mat> &mat_image,std::vector<BatchResult> &vec_batch_result);

private:
    Detector(const Detector &);
    const Detector &operator =(const Detector &);
    class Impl;
    Impl *_impl;
};

REFERENCE

Contact

微信关注公众号EigenVison,回复yolo获取交流群号