news: yolov5 support
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.
- yolov5s , yolov5m , yolov5l , yolov5x tutorial
- inequal net input size
- batch inference
- support FP32,FP16,INT8
- daynamic input size
- yolov4 , yolov4-tiny
- yolov3 , yolov3-tiny
- windows 10
- ubuntu 18.04
- L4T (Jetson platform)
model | gpu | precision | detect time(with pre and post process) |
---|---|---|---|
yolov3-416x416 | jetson nano (15w) | FP16 | 250ms |
yolov3-416x416 | jetson xavier nx (15w 6core) | FP32 | 120ms |
yolov3-416x416 | jetson xavier nx (15w 6core) | FP16 | 45ms |
yolov3-416x416 | jetson xavier nx (15w 6core) | INT8 | 35ms |
Prepare the pretrained .weights and .cfg model.
Detector detector;
Config config;
std::vector<BatchResult> res;
detector.detect(vec_image, res)
-
dependency : TensorRT 7.1.3.4 , cuda 11.0 , cudnn 8.0 , opencv4 , vs2015
-
build:
open MSVC sln/sln.sln file
- dll project : the trt yolo detector dll
- demo project : test of the dll
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
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";
int n_max_batch = 4;
};
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;
};