避撞功能是智能车的最基本保护能力,Jetbot使用深度学习的图像分类技术来模拟人眼习惯实现这个功能,但这只是智能车所展现的最入门应用而已,接下去就要提升到“循路”的功能,跟着指定路线去前进,才是真正进入有实用价值的应用。
在https://developer.nvidia.com/embedded/community/jetson-projects里有非常多精选的项目,其中的“TRANSFER LEARNING WITH JETBOT & TRAFFIC CONES”项目就是前面避撞应用的延伸,模拟无人驾驶车在道路上识别路锥所规划出的道路(如下图),然后驱动机电控制系统执行智能驾驶的功能。
有能力的读者可以访问https://www.youtube.com/watch?v=YwxSwXEjd4c,观看整个项目的构思逻辑,事实上这个项目使用的与避撞项目相同的深度学习图像分类技术来进行路锥的识别,在”blocked”与”free”与两个分类之上再添加“left”与“right”两个分类,其他的执行逻辑与避撞项目几乎完全一样。
请访问https://github.com/dvillevald/Finding-path-in-maze-of-traffic-cones,在traffic_cones_driving目录下有三个脚本,分别执行数据收集、模型训练与现场演示三部分,与避撞应用的节奏是一样的,最关键的环节也是在“数据收集(data_collection)”部分,至于模型训练(train_model)的部分则添加迁移学习的功能,而现场演示(live_demo)的部分则增加比较细腻的判断,并且提供运行过程的记录功能,便于后面进行矫正的任务。
现在根据三个步骤所需要注意的重点,提供一些参考的说明,至于执行代码的细节直接对照避撞项目的脚本就可以。
这个环境同样是整个应用中最关键与最繁琐的步骤,与避撞项目相同的,我们必须使用Jetbot上面的CSI摄像头进行数据采集,并且同时进行分类,主要有以下三件需要注意的事项:
或者在下图这种印好赛道的板子或者塑料布上也可以,重点并不在于是否为“立体物”,而是能在图像中识别出的“明显边界”,这样就能用来执行这个数据收集的任务。
这个项目名称里虽然有“Transfer Learning”在里面,不过只是在“Define the neural network”第一个步骤的“model = models.alexnet(pretrained=True)”用到PyTorch预训练好的AlexNet 1000类的分类器模型,但是这些分类与我们所使用的分道物基本没有关联,因此以这个使用这个模型为基础的迁移学习并没有明显的帮助。
如果想将前面的避撞功能加到这个循路应用里,有两种方法可以实现:
[ ] |
# 关闭原本的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模型,真正发挥迁移学习的效果。
这个脚本与避撞的live_demo基本逻辑是一样的,项目提供一个完整的决策流程图(如下)可以参考一下。
另外这里面还添加一个“第一视角(FPV, Fisrt Person View)”的视频记录功能,将循路的行进过程完整记录下来,呈现的方式如下图:
这个功能在校正过程是非常有用的,但是视频存储的工作会占用Jetbot不少的CPU计算资源与以及非常紧凑的存储空间,因此完成校正之后就建议将这个功能关闭,这个功能的函数名是 ”save_frames_with_telemetry” ,请使用网页搜索功能在脚本里找到位置,只要在前面加上 ”#” 关闭调用就可以。
剩下的工作就是按部就班去执行,有了这个循路的功能之后,才是让Jetbot真正进入智能车应用的起点。【完】
好文章,需要你的鼓励
临近年底,苹果公布了2024年App Store热门应用和游戏榜单,Temu再次成为美国下载量最多的免费应用。
云基础设施市场现在已经非常庞大,很难再有大的变化。但是,因为人们可以轻松地关闭服务器、存储和网络——就像开启它们那样,预测全球云基础设施开支可能非常困难。