# YOLACT/YOLOV5
## Introduction
Yolact/Yolov5的C++实现,包括ONNX(CPU/CUDA), TensorRT版本。
## Requirements
* ONNX(CPU): ONNXRuntime 1.10.0(Build from source)
* ONNX(CUDA): ONNXRuntime 1.10.0(Build from source), CUDA 11.3, CUDNN 8.2.1
* TensorRT: TensorRT 8.0.3 GA, CUDA 11.3, CUDNN 8.2.1
* 除此之外,还需:gcc(支持C++17), CMake 2.8, OpenCV 4.5.0(Build from source)。
* OS: Linux(Ubuntu 20.04)
***其他版本的有效性未经过验证***
## Build && Install
1. 进入仓库根目录
`$ cd ./$ROOT`
2. 打开CMakeLists.txt, 设置如下项
`$ vim ./CMakeLists.txt`
* **CMAKE\_INSTALL\_PREFIX**: 安装路径
* **OpenCV_DIR**: OpenCV路径
* **WITH_TENSORRT**: 置为ON编译TensorRT, 否则编译ONNX
* **BUILD\_ONNX\_WITH\_CUDA**: 置为ON开启CUDA编译,仅在WITH_TENSORRT为OFF时有效
* **LIB_CUDA**: CUDA Lib路径
* **LIB_TENSORRT**: TensorRT Lib路径
* **LIB_ONNX**: ONNX Lib路径
* **CUDA_include**: CUDA头文件
* **TensorRT_common**: TensorRT common头文件
* **TensorRT_include**: TensorRT头文件
* **onnx_include**: ONNX头文件
* **onnx\_session\_include**: ONNX session头文件
3. 进入编译文件夹
`$ mkdir build && cd build`
4. 生成Makefile
`$ cmake ../`
5. 编译并安装
`$ make && make install`
## Run
* 执行生成的二进制文件: `$ ./main_yolov5 [img]`或`$ ./main_yolact [img]`,将img替换为待检测图像路径。程序将会输出模型基本信息,检测结果,并保存检测图像`final.jpg`至当前文件夹。
## Development
### Quick start
* 可参考`main_yolov5.cxx`及`main_yolact.cxx`。
* 将`model_path`修改为正确路径,读取检测图片,创建接收检测结果的对应`vector`变量。将上述内容作为参数,调用模型对应API,即可完成检测。
### API Reference
* 参见头文件`onnx.h` `tensorrt.h` `utils.h` `yolact.h` `yolov5.h`
### Features
* 项目使用CMake构建,编译顺序及链接规则均由CMake指定。模型推理框架:ONNX和TensorRT使用预处理方式控制,仅其中之一参与编译。
* 模型被封装进`Model`结构体,构造函数仅保存模型路径,需要调用`Model::init()`完成成员变量初始化、缓存区初始化、CUDA初始化等操作。
* `Model`析构函数会完全释放上述成员,不会出现内存泄露,GPU显存泄露等情况。
* ONNX和TensorRT的`Model`API一致,可在各自的头文件中设置CUDA_DEVICE。
* 为避免对象复制和临时变量生成,函数形参中无须改变的,均使用`const &`方式传入,需要改变的,使用`&`方式传入(原对象会被修改)。不使用返回值的方式返回函数结果,`int`型返回值均为错误码,按照惯例,0为无错误。
* `yolact.cxx/yolov5.cxx`文件头部定义了大量的`const`变量,代码中有注释,其中一部分为算法模型官方使用的变量,不要手动修改!另一部分可修改的参数,如置信度阈值、IoU阈值等。*后续开发可将该部分移到配置文件中*。
* 确保使用CUDA推理时,GPU有足够的显存空间。
* 使用ONNX CPU推理时,可手动在`onnx.h`中设置使用的线程数。
### Yolov5
* 读取图像及模型。等比例Resize图像,将高度变换为`default_height`。
* 根据图像尺寸、`overlap`等值构造`CropPadInfo`对象,切分图像。
* 调用`letterbox()`将图像变换为模型输入Tensor尺寸。
* 将`Mat`格式图像转为`vector<float>`格式的输入Tensor。
* 根据`out_size`,构造`vector<float>`格式的模型输出Tensor。
* 调用`inference()`执行推理。
* 调用`single_nms()`取出模型输出,执行小图类内NMS。
* 合并后执行大图类间NMS,返回结果。
* 调用`print_and_draw()`打印并保存结果。
### Yolact
* 读取图像及模型。等比例Resize图像,将高度变换为`default_height`。
* 调用`relief()`进行浮雕处理。
* 根据图像尺寸、`overlap`等值构造`CropPadInfo`对象,切分图像。
* 将`Mat`格式图像转为`vector<float>`格式的输入Tensor。
* 定义`vector<Mat> merged_mask(num_classes)`保存各个类别的mask检测结果,`num_classes`为类别数量。
* 根据`out_size`,构造`vector<float>`格式的模型输出Tensor。
* 调用`inference()`执行推理。
* 调用`yolact_detect()`取出mask, score等输出,先进行小图类内NMS,再根据设定的`classes_not_ccnms`进行对应类的小图类间NMS。
* 调用`post_processing()`对bbox, mask, proto等输出进行处理,得出处理后的bbox, mask。
* 调用`extract_contours()`根据合并后的mask提取contours。后续针对根部熔合线和焊道进行处理:`remove_gb_overlap()`移除根部熔合线之间的重叠, `remove_bends()`移除轮廓中的弯折,`extend_curve()`将多段轮廓连接为一个完整的轮廓。
* 返回结果。
没有合适的资源?快使用搜索试试~ 我知道了~
Yolact/Yolov5的C++实现,包括ONNX(CPU/CUDA), TensorRT版本。
需积分: 34 31 下载量 7 浏览量
2022-08-12
16:27:39
上传
评论 10
收藏 80KB GZ 举报
温馨提示
共124个文件
make:35个
cmake:20个
json:13个
Yolact/Yolov5的C++实现,包括ONNX(CPU/CUDA), TensorRT版本。
资源详情
资源评论
资源推荐
收起资源包目录
Yolact/Yolov5的C++实现,包括ONNX(CPU/CUDA), TensorRT版本。 (124个子文件)
CMakeDetermineCompilerABI_CXX.bin 16KB
CMakeDetermineCompilerABI_C.bin 16KB
CMakeCCompilerId.c 24KB
cache-v2 0B
zyh_nn.cbp 27KB
cmake.check_cache 85B
cmake_install.cmake 11KB
Makefile.cmake 11KB
CMakeCXXCompiler.cmake 5KB
CMakeCCompiler.cmake 2KB
DependInfo.cmake 890B
DependInfo.cmake 890B
DependInfo.cmake 786B
DependInfo.cmake 786B
CMakeDirectoryInformation.cmake 628B
DependInfo.cmake 560B
DependInfo.cmake 545B
DependInfo.cmake 540B
CMakeSystem.cmake 402B
cmake_clean.cmake 324B
cmake_clean.cmake 324B
cmake_clean.cmake 312B
cmake_clean.cmake 298B
cmake_clean.cmake 298B
cmake_clean.cmake 291B
cmake_clean.cmake 284B
cmakeFiles-v1 0B
codemodel-v2 0B
CMakeCXXCompilerId.cpp 24KB
utils.cxx 37KB
onnx.cxx 7KB
yolact.cxx 6KB
tensorrt.cxx 4KB
yolov5.cxx 4KB
main_yolact.cxx 2KB
main_yolov5.cxx 2KB
.gitignore 176B
utils.h 10KB
tensorrt.h 2KB
onnx.h 2KB
yolact.h 980B
yolov5.h 649B
cxx.iml 97B
cache-v2-d9134e490fd7cf56c0bf.json 55KB
cmakeFiles-v1-184b0a00a22e98c4a0d2.json 25KB
target-yolact-Debug-11ca4bad883cfe5743c8.json 9KB
target-yolov5-Debug-e8e6dc0fa6e9ff9d5c5f.json 9KB
target-main_yolact-Debug-55ff286489b13c0c695a.json 9KB
target-main_yolov5-Debug-7bc4eb3af5a998daf089.json 9KB
target-utils-Debug-bc0983abcc31e675a552.json 9KB
target-tensorrt-Debug-f9885aef05df4bdaaae9.json 3KB
directory-.-Debug-fc197b4bedc69b0b99da.json 3KB
target-onnx-Debug-c7434c0c08ad3214a8a4.json 2KB
codemodel-v2-d8806814f6abdaae920e.json 2KB
index-2022-07-25T05-28-02-0626.json 2KB
toolchains-v1-9da386607fb230eeb899.json 2KB
CMakeOutput.log 43KB
LastTest.log 121B
build.make 9KB
build.make 9KB
build.make 8KB
build.make 8KB
build.make 8KB
build.make 5KB
build.make 4KB
flags.make 460B
flags.make 460B
flags.make 459B
flags.make 438B
flags.make 438B
flags.make 411B
flags.make 407B
compiler_depend.make 114B
compiler_depend.make 114B
compiler_depend.make 111B
compiler_depend.make 109B
compiler_depend.make 109B
compiler_depend.make 108B
compiler_depend.make 107B
depend.make 95B
depend.make 95B
depend.make 92B
depend.make 90B
depend.make 90B
depend.make 89B
depend.make 88B
progress.make 45B
progress.make 45B
progress.make 44B
progress.make 43B
progress.make 43B
progress.make 43B
progress.make 43B
Makefile 15KB
Makefile2 12KB
progress.marks 3B
README.md 5KB
model_export.md 3KB
.name 6B
a.out 16KB
共 124 条
- 1
- 2
脆皮茄条
- 粉丝: 85
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0