├── CUDA [deleted] │ ├── gpu_decode.cu [deleted] //gpu后处理cu文件 │ ├── preprocess.cu [deleted] //gpu预处理cu文件 │ └── yololayer.cu [deleted] //yolo相关CUDA核函数 ├── include │ ├── ArmorDetector.h //装甲板检测器头文件 │ ├── calibrator.h [deleted] //TRT相关头文件 │ ├── CarDetector.h //车辆检测器头文件 │ ├── common.h [deleted] //TRT相关头文件 │ ├── cuda_utils.h [deleted] //TRT相关头文件 │ ├── depthProcesser.h //点云深度图映射头文件 │ ├── macros.h [deleted] //TRT相关头文件 │ ├── MovementDetector.h [untested] //点云背景分割头文件 │ ├── preprocess.h [deleted] //TRT相关头文件 │ ├── tensorRT_v5.h [deleted] //TRT主要头文件 │ ├── utils.h [deleted] //TRT相关头文件 │ └── yololayer.h [deleted] //TRT相关头文件 ├── Moudles └── src ├── ArmorDetector.cpp //装甲板检测器cpp文件 ├── calibrator.cpp [deleted] //TRT相关cpp文件 ├── CarDetector.cpp //车辆检测器cpp文件 ├── common.cpp [deleted] //TRT相关cpp文件 ├── depthProcesser.cpp //点云深度图映射cpp文件 ├── MovementDetector.cpp [untested] //点云背景分割cpp文件 └── tensorRT_v5.cpp [deleted] //TRT主要cpp文件
输入分割后图像,检测图像中存在的装甲板
ArmorDetector
- accessModelTest() 检查模型是否存在,不存在则创建
- initModel() 初始化Tensorrt模型
- infer() 检测并返回装甲板检测框
- preProcess() 图像分割预处理
- reBuildBoxs() 根据父检测框映射装甲板检测框至原图
检测图像中存在的车辆,用于图像分割
CarDetector
- accessModelTest() 检查模型是否存在,不存在则创建
- initModel() 初始化Tensorrt模型
- infer() 检测并返回车辆检测框
处理获取到的点云数据,积分深度图
DepthQueue
- pushback() 输入点云,积分深度图
处理获取到的点云数据,积分深度图
MovementDetector [deleted]
- applyMovementDetector() 应用背景分割,前期积分,后期分割
- buildBackground() 建立背景
- detectMovementTarget() 执行分割,返回Rect
- rebuildRect() 重建Rect,反栅格化
- _ifHistoryBuild() 检查背景是否建立
此方案下,由于分流了GPU运算压力,将图像分割转为CPU负载,充分利用了运算平台的富余算力,带来了进一步的性能提升。缺点是点云积分慢,分割框更新较慢且一般大于车辆实际大小,由于精度较低,所以不能使用IoU预测的方式对装甲板检测框进行消抖。
此方案下,检测负载大部分在GPU端,且显存占用较大,总线IO负载高,但是有着最佳精度且分割框更新迅速,较为准确的车辆分割框也允许了使用IoU预测的方式进行装甲板检测框消抖,是算力足够的情况下的优选。