2024 暑期集训:电赛视觉学习路线
2024 暑期集训:电赛视觉学习路线
OpenMV
OpenMV适合实现轻量级的计算机视觉任务,如颜色检测、形状识别,使用OpenMV 的 nn
库可以运行简单的目标检测算法。
必学内容
基础图像处理:灰度转换、二值化、滤波和边缘检测等 图像处理流程,了解大部分转换的作用,在不同场景下的效果
颜色检测:了解 RGB,LAB,HSV 颜色空间,能够进行相互转换,并能够对图像中的颜色做到识别,
形状识别:直线,线段,矩形、圆形等简单几何图形的识别,对识别结果进行处理,能从库函数提供的结果中得到需要的信息
ROI:会框定 ROI,在 ROI 内进行所需的操作
数据传输:了解如何将获取到的数据打包,了解OpenMV的串口收发与STM32的通讯
调试接口:学习留出调试接口,如LCD屏,串口屏,按键等,便于赛场调整颜色阈值等重要参数
特征检测&模板匹配:至少学会一种对复杂目标的检测方法,在没有办法利用算法流程检测目标时备用
提高内容
- 神经网络:掌握拍摄数据集,数据集处理,打标,训练,部署全流程,可以使用公开数据集走一遍流程,也可以自己拍摄数据(一般训练目标检测模型用的多一些)
- 分类器:HaarCascade 分类器的使用( 星瞳科技 使用的是人脸识别)这个分类器是用OpenCV 相关软件训练出的,在 OpenMV 上面使用需要一层处理(参考 GitHub 代码 生成适用于 OpenMV 的分类器文件,之后进行部署;关于如何训练,参考 OpenCV 文档
- 文件读写:OpenMV 使用 MicroPython,具有文件系统,比单片机使用 Flash 保存参数方便,所以可学文件读写,在比赛场地的 30min 准备时间中,可以把环境参数保存下来(验收中途老师不一定允许继续调试)
- 矩阵运算:使用 OpenMV 已经实现的矩阵运算库,相较于自己写循环,可以加快一些计算过程。矩阵运算库是
ulab.numpy
,可以参照 Python 的矩阵运算库numpy
来学习;
其他
OpenMV 是一块 STM32,它也可以驱动 GPIO,IIC,SPI等,可以尝试用 OpenMV 做一些不止视觉的东西。
平常多使用,了解 OpenMV 的性能,处理各种常用流程的速度,在比赛时考虑性能决定算法,根据赛题和处理方案所需的速度,合理安排 OpenMV 的计算工作
多准备一些 SD卡,便于调试过程中尝试多个版本的代码
参考链接
网站 | 网址 | 说明 |
---|---|---|
OpenMV 教程 | https://book.openmv.cc/ | |
OpenMV 官方文档 | https://docs.openmv.io/ | 尽量看英文原版,星瞳科技翻译的版本已经过时了,有些内容不适用最新 OpenMV 固件 |
OpenMV 官方教程 | https://docs.openmv.io/openmvcam/tutorial/index.html | 同上 |
星瞳科技教程 | https://www.bilibili.com/video/BV1G8411w72w/ | |
Python教程 | https://www.runoob.com/python3/python3-tutorial.html |
OpenCV
基础必学
树莓派镜像烧录和备份:要会烧录镜像,会配置环境;将镜像备份起来,如果Linux系统被搞坏了可以恢复
Linux:基本的 Linux 命令,重要的系统配置文件等;SSH 连接,SCP 文件传输等
Python:包括但不限于:NumPy,Pillow,PySerial 等库
基础图像处理:灰度转换、二值化、滤波和边缘检测等 图像处理流程,了解大部分转换的作用,在不同场景下的效果
颜色检测:了解 RGB,LAB,HSV 颜色空间,能够进行相互转换,并能够对图像中的颜色做到识别,
形状识别:直线,线段,矩形、圆形等简单几何图形的识别,对识别结果进行处理,能从库函数提供的结果中得到需要的信息
ROI:框定 ROI,了解不规则 ROI 处理的方法
数据传输:了解如何将获取到的数据打包,了解树莓派的串口收发与STM32的通讯
YOLO:使用 YOLO 进行目标检测
提高内容
- 优化算法:了解一些常用的优化算法加快处理速度,如多线程和多进程、降采样、模型量化等
- GPU:Python 环境下利用
ncnn
使用树莓派的 GPU 可以稍微加快一点速度,效果有限,可以尝试 - 项目结构:使用 OpenCV 写一些复杂的处理流程,可以适当安排项目结构,也能保证代码的可复用性
- 版本控制:如果系统坏了,或者误修改不能撤销,可以使用版本控制工具快速恢复
- 深度学习:学习 SciPy 和 sk-learn 相关的工具,在很多场景下神经网络不是唯一的选择;学习 PyTorch 框架,自己写神经网络用于一些任务(YOLO 一般会很慢)
- 分类器:使用 OpenCV 提供的
trainCascade
工具训练级联分类器并部署到树莓派
其他
- 阅读经典论文,了解经典算法,在树莓派部署了解性能
- YOLO 使用的是 PyTorch 框架,所以尽量直接学 PyTorch;而且 PyTorch 环境配置比 TensorFlow 要简单方便,不要浪费太多时间在配置环境上
- 如果想进一步加快运算速度,可以尝试使用 C++ 编写程序
- 树莓派是一个完整的 Linux 系统,灵活性很大,可以更加自由的尝试各种更复杂的算法,多尝试
- Vim 可学可不学,树莓派可以用 VS Code 做远程连接
参考链接
视觉的要求只有三个字 “快”、“准”、“稳”,全部实现也不难,到了赛场上,实际的影响因素并没有很多,比赛期间和验收的调试期间细心调试问题一般就不大。
预祝电协成员 2024年电赛取得圆满成功