# DetectorSamples **Repository Path**: gengsai/DetectorSamples ## Basic Information - **Project Name**: DetectorSamples - **Description**: OpenCV加载onnx实现SSD,YOLOV3,YOLOV5的推理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-04-22 - **Last Updated**: 2022-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DetectorSamples 目前SSD和YOLO是工业界使用最多的两种检测器。最近整理了一下自己实现的SSD,YOLOV3和YOLOV5推理代码,项目虽然是基于OpenCV实现的,但是由于使用的是onnx模型,所以代码可以很容易移植到TensorRT,NCNN等其他C++推理框架。在实现的过程中基本是参考了原作者的开源代码,也参考了网上的一些代码,由于记不清出处,这里无法给出参考代码的地址,这里感谢各位作者。希望自己的工作能够帮助更多初学者学习SSD和YOLO。 ## 目录 - [目录结构](#目录结构) - [构建安装](#构建安装) - [运行](#运行) - [模型转换说明](#模型转换说明) ## 目录结构 ``` ├── 3rdParty:依赖库 ├── Resource:资源文件目录,包括模型,测试图像等 │ └── Models:示例模型 │ └── TestImage:测试图像 │ └── Configuration.xml:配置文件 ├── Src │ └── Detector:检测器源码 │ └── Utility:工具 │ └── Sample.cpp:示例程序 │ └── main.cpp ├── CMakeLists.txt ├── README.md ├── requirements.txt ``` ## 构建安装 ### 安装rbuild 当前目录为工程根目录 ``` sh ./3rdParty/InstallRBuild.sh ``` ### 安装OpenCV依赖 ``` sh ./3rdParty/InstallOpenCVDependences.sh ``` 注意:根据不同的linux系统,选择脚本中相应的安装方式,默认为centos系统 ### 修改CMakeLists.txt 如果使用ubuntu系统,需要修改CMakeLists.txt中依赖库路径: 将"${CMAKE_CURRENT_SOURCE_DIR}/depend/lib64/"修改为"${CMAKE_CURRENT_SOURCE_DIR}/depend/lib/" ### 安装OpenCV并编译工程 当前目录为工程根目录 ``` rbuild build -d depend ``` ### 设置环境变量 将OpenCV库路径加入环境变量LD_LIBRARY_PATH,在~/.bashrc中添加如下语句: **Centos**: ``` export LD_LIBRARY_PATH=项目根目录/depend/lib64/:$LD_LIBRARY_PATH ``` **Ubuntu**: ``` export LD_LIBRARY_PATH=项目根目录/depend/lib/:$LD_LIBRARY_PATH ``` 然后执行: ``` source ~/.bashrc ``` ## 运行 ``` cd ./build/ ./DetectorSamples ``` 根据提示选择要运行的示例程序,比如执行 ``` ./DetectorSamples 0 ``` 运行SSD示例程序,会在当前目录下生成检测结果图像Result.jpg ## 模型转换说明 ### SSD模型 与分类模型不同,SSD模型较为复杂,而且不同训练框架实现SSD的方式不同,同时不同的推理框架支持的算子不同,这就给转换为onnx模型带来了较大困难。一般情况下我们需要对训练好的SSD模型做一些修改才能够在特定推理框架上使用,基本的思路就是:onnx模型中只包含原始网络的一部分,让onnx包含的一部分在GPU上运行,剩下的都在CPU上运行。这里提供一种修改SSD网络结构的参考方案,这种方案可以在绝大部分推理框架中使用(目前在OpenCV,TensorRT中都测试通过)。 #### 修改SSD网络结构 onnx模型中只保留到permute层的前一层,permute层以及后面的所有层全部在CPU上运行。
