# 智能视觉思考 **Repository Path**: lupuxi/intelligent-visual-thinking ## Basic Information - **Project Name**: 智能视觉思考 - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 1 - **Created**: 2025-04-16 - **Last Updated**: 2025-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 关于二十届智能车智能视觉赛题视觉部分的部分思考 #### 引言 本人为TYUTer,其实我从去年比完华北分区赛之后就没怎么关注这个赛题了,因为从去年比完华北分区赛之后就退队了,最近又开始关注是因为有友校的大一学弟有部分问题,我也就重新回忆了一下去年大一做的这个赛题,在我去年做这个赛题的时候可能是因为我是大一,我接触的很多做这个赛题的也都是第一年做或是大一,写这篇文章一部分是记录一下最近对于这个赛题做了什么,另一部分是帮助第一年参赛并且是大一的朋友更快的适应这个赛题吧,如果你已经做过这个赛题或者其他赛题或者大二大三大四的选手,那这篇文章对你可能没什么帮助。 仓库:[lkpalu/智能视觉思考](https://gitee.com/lupuxi/intelligent-visual-thinking) ### 任务 视觉的任务主要是两个部分 1.目标检测 2.分类 这两个任务对于大部分学校来说其实都已经算是已经很成熟的方案了,但对于大一学生来说自己去做这个赛题并且没人带个人感觉也是挺困难的。 # 训练前置 其实我挺推荐大家去配置一下GPU环境的,可以采用anaconda配置,我后续可能会提供一个docker镜像,tensorflow的版本2.6.0就可以,高版本对于下面代码的一些兼容性有问题 安装好anaconda配置如下 ```shell #设置清华镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ #设置bioconda conda config --add channels bioconda conda config --add channels conda-forge #设置搜索时显示通道地址 conda config --set show_channel_urls yes ``` 设置好后创建环境之后直接执行 ```shell conda install tensorflow-gpu=2.6.0 ``` 这里我自己在配的过程中发现这条命令执行完之后import tensorflow依然会有报错,根本原因是因为numpy的版本不对, 这里numpy版本我自己测得1.20.0是可以用的,1.19.5和1.19.3都是不能正常用的。 ```shell pip install numpy==1.20.0 ``` 此外还要一些其他的依赖包比如keras_tuner,matplotlib等 版本如下: ``` absl-py 0.10.0 keras-tuner 1.1.0 matplotlib 3.6.3 pandas 1.4.0 pillow 11.2.1 scikit-learn 1.3.0 opencv-python 4.5.5.64 ``` 这些安装完成之后运行下面的分类代码就不会报错了。 目标检测和分类依赖可能需要不同环境(我自己测试的环境是都可以正常运行的,不确定其他人行不行),建议使用两套,或者目标检测直接使用本地的python环境使用cpu训练即可,目标检测用cpu的训练时间还在可接受范围内。 环境配置完成之后进入python环境直接在终端执行 ```python import tensorflow as tf print(tf.test.is_gpu_available()) ``` 显示true即为配置成功 # 目标检测 对于今年目标检测来说,红色方块的特征尤其明显,对于大一学生来说能把流程跑起来才是最重要的,能跑起来流程之后就只需要关注数据集的质量了,参数调优其实在这一年并不用太关注。以下是我进行目标检测模型训练的方法。 1.我采用的代码也是逐飞提供的yolov3代码,因为我不会自己写这个的代码,而且感觉也没必要自己写,去年的实践其实数据集的好坏才是关键的。代码下载地址(逐飞官方仓库):[MCX_Vision_Library: 逐飞科技基于NXP MCXN947为核心制作的图像处理模块,MCXN947自带NPU单元可以极大提升神经网络相关的计算速度。本开源项目分享了基于MCXN947的部分基础外设例程、以及目标检测从训练到部署的全过程。](https://gitee.com/seekfree/MCX_Vision_Library) 2.下载好代码后我建议大家先按照逐飞的流程走一遍看看流程能不能走通 3.流程走通之后就到数据集的拍摄和标注了,大一学生由于没有经验对于拍摄和标注可能都不是很熟悉,对于今年的红色方块来说我建议拍摄200张左右就差不多了,拍摄效果大致如下: ![](/image/225bmp.jpg) 对于今年的赛题来说我建议只拍一个面其实就可以了,三个摄像头的摆放如下: ![](/image/摄像头摆放.png) 这样其实mcx只能看到红色方块的一个面 数据集要求背景一定要不一样的,千万不要全都放赛道上面拍,这样训出来的质量会非常差 3.数据标注 数据标注我不推荐使用逐飞提供的简易标注工具,我更推荐使用百度的easydata平台[EasyData智能数据服务平台](https://ai.baidu.com/easydata/) 这个网站是不需要付费的,非常好用(可以自动标注,也可以数据增强) 选择目标检测,图片用压缩包导入,标注名只有一个且为object(这是逐飞提供的代码限制死的,不能更改) ![](/image/标注平台.png) (这里的数据集质量不是很好,不要以这里为准,以上面我说的一个面,背景不一样为准) 4.数据增强 点击左侧任务栏的数据增强,新增任务,上面选择物体检测,全局以及标注框局部增强,选择刚才标注好的数据集,数据输出在原本的数据集上新增一个v2版本,最下面选择并行遍历,在中间选择算子即可,我个人推荐选择 ![](/image/算子1.png) ![](/image/算子2.png) ![](/image/算子3.png) 算子选择不宜过多,建议6-7个即可,上面选择的都是改变亮度或是图像遮挡情况下的算子 5.导出数据 导出刚才的v2版本数据集,导出格式为xml(第二个),本地导出,导出完下载即可 6.训练 导出的压缩包解压,解压之后的目录如下 ![](/image/解压.png) 这个Images目录的目录名需要改为JPEGImages,不然代码会报错 之后按照逐飞的训练流程走就行 逐飞的流程中少说了一个save_tflite.py的说明,这个文件可以讲h5模型量化为tflite模型,文件里面有命令参数 具体使用为: ```shell python save_tflite.py -weight 你的模型.h5 -height 160 -anchor c_anchor -tflite 要输出的模型名.tflite ``` 一般情况是不需要使用这个文件的,因为在训练代码中会进行模型的量化,但灵活度不如自己拿出来中间训练的h5模型进行量化 7.模型部署即可 # 分类模型 今年的分类主要是15分类以及0-99的数字奇偶识别 官方提供了eiq这个可视化工具,但仍然需要手动调参,这里我建议使用中石油在十七届的开源 [17届全国大学生智能汽车竞赛 中国石油大学(华东)智能视觉组 --模型训练篇_华东智能视觉-CSDN博客](https://blog.csdn.net/qtzbxjg/article/details/128621707?ops_request_misc=%7B%22request%5Fid%22%3A%2200632cfd3daa5b367d0e9e7c60512c9b%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=00632cfd3daa5b367d0e9e7c60512c9b&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-128621707-null-null.142^v102^pc_search_result_base1&utm_term=中石油智能视觉&spm=1018.2226.3001.4187) 里面使用的超模型可以自动调参,对于大一学生来说是非常友好的,如过你上面的目标检测以及跑起来了,那这里的环境应该是不需要重新配置的,这里主要说一下数据集的来源以及0-99的数字识别。 #### 1.数据集拍摄 我去年问了很多学校的佬,都建议要用openart进行拍摄,这里我觉得也是这样的效果比较好,但打印拍摄图片确实费时又费力,这里可以和小伙伴共同合作一下一起拍摄,这里的拍摄其实没什么技巧了感觉,就是直接拍摄就可以了 #### 2.0-99数字识别 这个数字识别在我刚开始想的时候想法主要是以下几种: 1.手写手拍(这种方式太无脑了,几乎不能实现) 2.把两位数的个位提取出来单独识别判断奇偶 3.把个位组合成两位数字进行训练 最后采用了第三种组合的方法进行训练(主要是我自己没有设备,第二种没有办法进行测试) 第三种方式的组合代码也提供在代码仓库里面了,里面的to01.py文件,采用的是mnist手写数字进行组合的,把mnist的图片组合完转化为rgb图片,放缩到128*128再转化为白底黑字。 **to01.py:生成分类为奇偶并且6和9不带下划线的** **to100.py生成分类为奇偶6和9带下划线的** **to0-99.py生成分类为0-99并且6和9带下划线的** 最后只需要把组合的图片和15分类图片放到一起训练就可以了,文件目录如下: ![](/image/文件目录.png) 最后在HyperMobileNetV2.py中把输出层改为17就可以了,仓库中的代码可以直接运行,不需要修改 训出来的h5模型用convert2tflite.py进行量化,在convert2tflite.py中更改需要量化的h5模型即可 我自己还添加了一个eve.py可以供大家在电脑上大致评估模型如下: ![](/image/正确.png) ![](/image/错误.png) 识别出错的图片上面会有信息 这里的图片只是一个示例,不代表真实模型效果 这里识别数字可以先训练一个十六分类的模型,就是15小分类+一个数字分类或者17分类,15小分类+数字奇偶分类,判断完是数字或者奇偶后进入判断具体数字的阶段,可以分割为两个一位数字或者训练一个100分类的模型(已验证,这个可行,模型在文件夹分类0-99中)。 这里放一张规则68截图的识别结果。 ![](/image/规则.png) # 结语 最后也是希望能够帮助到大一参加这个赛题的伙伴,对于文章中需要补充的内容大家可以给我建议,也可以向仓库中提交pr。我的联系方式QQ:2805083369,博客:[lkpalu 个人博客 - enjoy your life.](https://lkpalu.github.io/) 非常感觉去年对我帮助的学长,不同学校的佬的帮助。 也提供一个大致的进度安排来给大一参赛者一个参考 ![](/image/流程安排.png) 这个文件在仓库中也有,可以使用[Excalidraw](https://excalidraw.com/)这个网站打开。