必要时补充图表进行说明
软件方案设计
- 根据实施方案设计软件系统架构
- 开展算力、FLASH大小、外设等需求评估,辅助硬件团队选型或设计适宜的硬件平台
- 考虑比赛环境的复杂性,做好各模块之间的通信链路设计,充分考虑通信的可靠性和稳定性。
- 加入软件测试和调试方案设计
- 根据功能复杂度,建议考虑采用一些开源软件方案,如果有多个方案,建议加入方案对比分析说明,基于优秀的开源方案做功能优化。
1.需求分析
2.硬件需求
TX2 | NX | AGX | |
---|---|---|---|
yolov4-tiny运行帧率 | 30fps | 60fps | 80fps |
模型\分辨率 | Yolov5s 640 | Yolov5n 640 | YOLOv5-Lite_c 640 | Yolox-nano 640 | Yolox-tiny 640 | Yolox-nano 416 | Yolox-tiny 416 |
---|---|---|---|---|---|---|---|
FPS | 68.1 | 96.1 | 暂无测试条件 | 124 | 74.2 | 163 | 110 |
Map@.5:0.95 | 37.2 | 28.4 | 33 | 25.8+ | 32.8+ | 25.8 | 32.8 |
考虑到实际机器学习算法的需求并综合实际情况,所以选择采用NX作为运算设备
3.软件设计
3.1 基本设计理念
模块化,结构简单宜于调试,提前交付结合电控进行同步调试和开发
3.2 参考开源方案
成熟的方案做自己的适配,参考的方案自己做实现等等
3.3 通讯设计
保障可靠性和稳定性的情况下,速度优先
采用boost库的串口通讯模块进行串口通讯,采用Protobuf3进行帧信息的封装和校验以及压缩
3.4 模块设计
通讯模块、相机模块、调试模块、算法模块(识别)、坐标转化模块、预测模块
通讯模块
- 消息收发模块
- 帧封装和校验模块
3.5接口设计
相机模块和算法模块
图像Mat
算法模块和坐标转换模块
坐标转换模块和预测模块
预测模块和通讯模块
调试模块和各个模块的衔接
4.软件调试方案
4.1 参数调试
- 参数的配置文件
- 参数调试的热切换和实时生效
- 可视化调参工具,事实根据效果进行调试
4.2 功能切换
和电控进行协议的制定,并根据串口通信内容进行模块的切换
算法方案设计
算法参考
- 根据任务目标选择合适的算法方案,确保算法的完备性。
- 深入了解所选算法的原理。
- 搭建合适的算法测试环境,确保上场效果。
1.需求分析
目标
- 静止的能量机关
- 匀速旋转的能量机关
- 正弦函数旋转的能量机关
- 静止装甲板
- 匀速运动装甲板
- 不规则运动的装甲板(小陀螺等)
实际需求
- 更快速的识别和响应
- 稳定性
- 更好的鲁棒性,增强对不同环境的适应
2.选择算法方案
几何特征识别
分析
- 识别正确击打位置正确区分激活、待激活、未开始
- 获得目标到枪口的实际位置解算坐标
- 弹道解算根据当前速度计算弹道
- 根据实际情况做出落点的预测
- 正确的延迟或滞后
- 拟合实际曲线或进行时间同步
机器学习目标检测
分析
- 针对复杂光照环境更好的鲁棒性
- 大量的数据集
- 针对需求对模型进行特异性优化
- 针对异常样本进行针对性训练和标记
3.算法流程
3.1 机器学习搭建流程简述
搭建Yolov3系列Backbone并搭配全连接层训练二分类
扩充二分类到多分类模型,并采用VOC/COCO数据集进行训练
修改后端实现预测回归目标位置
参考yolov3算法的实现,逐步增加各种小技巧
参考yolov4算法的实现,增加新的技巧
参考yolov4-tiny backbone修改网络结构
针对自身需求修改后端结构
优化模型配置,进行剪枝等一系列优化进一步提高帧率
3.2 能量机关算法流程简述
- 目标识别
- 坐标解算
- 弹道解算+距离测量
- 预测补偿
4.搭建测试环境方案
根据功能进行模块化
根据历史录制视频进行单元测试
交付模块程序给电控进行实际调试反馈问题
逐渐集成新的功能,直到整个程序完成
测试方案设计
- 根据功能设计测试case,软件、硬件、机械的同学一同参与设计,在开发的过程中留好测试接口。
- 掌握一些测试的方法论。(比如:黑白盒测试、持续集成、压力测试等)
- 进行功能逻辑、性能测试分析等
1.测试部署环境
- 开发环境尽可能和部署环境保持一致
- 检查版本库是否兼容
- 针对部分模块提前进行部署环境测试
- 进行实际部署测试
2.测试数据
单元测试
根据模块的不同有图像输入和数据输入两部分
系统测试
编写伪相机驱动,传入实际记录的图片进行测试
3.测试策略
单元测试->集成测试->系统测试->实际运行测试
3.1单元测试
传入图像/数据进行,根据输出进行黑盒测试
再次传输数据,进行白盒测试,判断程序各步骤运行是否符合预期
3.2集成测试
- 重点测试模块和模块之间的接口
- 提前交付部分完整的内容给电控进行调试
3.3系统测试
- 测试配置文件的加载和读取
- 整个系统正常运行的稳定性,及最大连续运行时间
- 传入数据,根据输出判断功能是否正常,进行黑盒测试
- 模拟串口通讯,进行白盒测试根据帧信息判断是否运行正常
4.实际测试
4.1 联调测试
- 以文档形式,规范完整的调试流程
- 记录每次程序更改的部分形成日志
- 向程序增添日志功能记录日志
4.2 通讯测试
- 检查接线问题
- 串口调试助手进行收发测试
- 检查串口参数配置
- 检查串口是否被占用
4.3 性能分析和瓶颈测试
在实际平台,效果不理想,针对各个模块进行时间记录和分析,根据二八法则,对程序性能瓶颈进行测试和分析
为下一步优化指明方向
技术方案参考文献
这个最后需要进行汇总即可