Jetbot基础教程-图像分类法实现找路功能

跟着指定路线去前进,才是真正进入有实用价值的应用。
避撞功能是智能车的最基本保护能力,Jetbot 使用深度学习的图像分类技术来模拟人眼习惯实现这个功能,但这只是智能车所展现的最入门应用而已,接下去就要提升到“循路”的功能,跟着指定路线去前进,才是真正进入有实用价值的应用。

https://developer.nvidia.com/embedded/community/jetson-projects 里有非常多精选的项目,其中的“TRANSFER LEARNING WITH JETBOT & TRAFFIC CONES”项目就是前面避撞应用的延伸,模拟无人驾驶车在道路上识别路锥所规划出的道路(如下图),然后驱动机电控制系统执行智能驾驶的功能。


Jetbot基础教程-图像分类法实现找路功能 

有能力的读者可以访问 https://www.youtube.com/watch?v=YwxSwXEjd4c ,观看整个项目的构思逻辑,事实上这个项目使用了与避撞项目相同的深度学习图像分类技术来进行路锥的识别,在“blocked”与“free”与两个分类之上再添加“left”与“right”两个分类,其他的执行逻辑与避撞项目几乎完全一样。

Jetbot基础教程-图像分类法实现找路功能 

请访问 https://github.com/dvillevald/Fi ... ze-of-traffic-cones

在 traffic_cones_driving 目录下有三个脚本,分别执行数据收集、模型训练与现场演示三部分,与避撞应用的节奏是一样的,最关键的环节也是在“数据收集(data_collection)”部分,至于模型训练(train_model)的部分则添加迁移学习的功能,而现场演示(live_demo)的部分则增加比较细腻的判断,并且提供运行过程的记录功能,便于后面进行矫正的任务。

现在根据三个步骤所需要注意的重点,提供一些参考的说明,至于执行代码的细节直接对照避撞项目的脚本就可以。

1.数据收集:

使用data_collection_cones.ipynb

这个环境同样是整个应用中最关键与最繁琐的步骤,与避撞项目相同的,我们必须使用 Jetbot 上面的 CSI 摄像头进行数据采集,并且同时进行分类,主要有以下三件需要注意的事项:

(1)虽然原创团队使用“小红锥(如上图)”作为“分道物体”去部署行进的路线,但其实也可以使用任何物体来进行体验,包括“跳棋子”、“围棋子”或用“非透明”的定位胶带(如下图),只要颜色与地面(板)有明显反差的就行,例如浅色地板就用深色物体或胶带、深色地板就用浅色物体或胶带。

Jetbot基础教程-图像分类法实现找路功能 

或者在下图这种印好赛道的板子或者塑料布上也可以,重点并不在于是否为“立体物”,而是能在图像中识别出的“明显边界”,这样就能用来执行这个数据收集的任务。

Jetbot基础教程-图像分类法实现找路功能 

(2)执行图像收集的时候,并不需要将分道物体按照指定路线进行排列,只需要排成半个圆形或方形就可以。这里需要识别的“边界状况”是固定的立体物或线条,比前面避撞项目所需要面对众多“未知物”更加简单,因此 4 个分类大约各收集 20~30 张图片也就够了。

(3)采集数据的分类,请根据“摄像头所看到的画面”去进行分类,避免从人眼去判断目前镜头图像“可能”是哪个类别,这样才不会造成误差而影响最终的识别效果。下面列出几种分道物所采集分类的图像,提供作参考。

Jetbot基础教程-图像分类法实现找路功能 

Jetbot基础教程-图像分类法实现找路功能 

Jetbot基础教程-图像分类法实现找路功能 

2.模型训练:使用train_model_cones.ipynb

这个项目名称里虽然有“Transfer Learning”在里面,不过只是在“Define the neural network”第一个步骤的“model = models.alexnet(pretrained=True)”用到 PyTorch 预训练好的 AlexNet 1000 类的分类器模型,但是这些分类与我们所使用的分道物基本没有关联,因此以使用这个模型为基础的迁移学习并没有明显的帮助。

如果想将前面的避撞功能加到这个循路应用里,有两种方法可以实现:

(1)将避撞项目收集好的 “blocked” 与 “free” 类别图像数据,分别加到这个项目的对应目录中一起进行模型训练。

(2)运用“迁移学习”技巧,在执行模型训练之前将避障项目的 best_model.pth 导进来作为训练的基础,当然您得先把避撞的 best_model.pth 模型文件复制到这个目录下。不过这个做法需要在代码上做些小幅度的修改,将“Define the neural network”第一个步骤进行以下的调整:

# 关闭原本的pretrained设置model = models.alexnet(pretrained=False)# 添加下面代码model.load_state_dict(torch.load('best_model.pth'))

这种做法的好处是,未来面向更多不同分道物的时候,可以不断往上叠加以增加Jetbot适合的使用场景。

例如第一次使用红锥做分道物,进行数据采集并训练出 best_model_cones_1.pth,等后面要使用定位胶带做分道物的时候,就能在 best_model_cones_1.pth 的基础上去训练能识别红锥与定位胶带两种分道物的 best_model_cones_2.pth 模型,真正发挥迁移学习的效果。

3.现场演示:使用live_demo_cones.ipynb

这个脚本与避撞的 live_demo 基本逻辑是一样的,项目提供一个完整的决策流程图(如下)可以参考一下。


Jetbot基础教程-图像分类法实现找路功能 

另外这里面还添加一个“第一视角(FPV, Fisrt Person View)”的视频记录功能,将循路的行进过程完整记录下来,呈现的方式如下图:

Jetbot基础教程-图像分类法实现找路功能 

这个功能在校正过程中是非常有用的,但是视频存储的工作会占用 Jetbot 不少的 CPU 计算资源以及非常紧凑的存储空间,因此完成校正之后就建议将这个功能关闭,这个功能的函数名是 “save_frames_with_telemetry” ,请使用网页搜索功能在脚本里找到位置,只要在前面加上 “#” 关闭调用就可以。

剩下的工作就是按部就班去执行,有了这个循路的功能之后,才是让 Jetbot 真正进入智能车应用的起点。
- 本文内容来自网络,如有侵权,请联系本站处理。

2022-04   阅读(13)   评论(0)
 标签: 人工智能

涨知识
串口

串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。

评论:
相关文章
K210开发环境搭建 、开发文档、常见问题、开发板选择

勘智K210采用RISC-V处理器架构,具备视听一体、自主IP核与可编程能力强三大特点,支持机器视觉与机器听觉多模态识别,可广泛应用于智能家居、智能园区、智能能耗和智能农业等场景。


Maixduino开发板介绍

Maixduino开发板是SiPEED公司MAIX产品线的一员,基于嘉楠堪智科技的边缘智能计算芯片K210(RISC-V架构 64位双核)设计的一款AIOT开发板。


《2024素质教育行业发展趋势报告》:“AI+素质教育”逐步落地

《2024素质教育行业发展趋势报告》提出十大核心趋势,为素质教育行业提供全面的方向指引和战略洞察。一起来看


Jetbot基础教程-CSI摄像头安装与测试

本文并不花时间去说明 CSI 摄像头的工作原理,主要配合 Jetbot 的安装,以及执行最简单指令去确认您手上的摄像头是否良好可用。



中小学人工智能通识课教什么

人工智能正在重塑社会生产与生活方式,中小学学生作为智能时代的“原住民”,培育他们的人工智能素养成为中小学教育的重要任务之一。


《人工智能基础(高中版)》

《人工智能基础(高中版)》是面向高中学生的教材。讲授人工智能的发展历史、基本概念以及实际应用,使学生理解人工智能的基本原理,特别是数据、算法与应用之间的相互关系。


《中小学生成式人工智能使用指南(2025年版)》全文发布 | 附解读!

近日,教育部基础教育教学指导委员会发布《中小学生成式人工智能使用指南(2025年版)》。


上海教育大动作—AI与基础教育深度融合

2024-2026年,上海将全面推动 人工智能(AI)与基础教育深度融合,从小学四年级到高中,娃的课程表里要新增 《人工智能基础》 课啦!


ESP32-TinyML:释放嵌入式微型机器学习的强大潜力!

ESP32-TinyML项目为物联网(IoT)设备带来了强大的微型机器学习能力,让您可以在资源受限的ESP32微控制器上运行复杂的机器学习模型。接下来介绍该项目,探讨其功能、使用方法以及在各种应用中的潜力。