当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]该项目使用了一款定制训练的 DeepLabv3+ 语义分割模型来检测摄像头画面中的路面坑洼。该模型会生成一个像素级别的掩码:一类用于背景,一类用于坑洼。您可以在 Jupyter 笔记本中对图像进行推理操作,或者在配备 AI 相机的树莓派上实时运行该模型。训练、转换和运行该模型所需的所有代码都在教程笔记本和配套的 aicamera 脚本中。

该项目使用了一款定制训练的 DeepLabv3+ 语义分割模型来检测摄像头画面中的路面坑洼。该模型会生成一个像素级别的掩码:一类用于背景,一类用于坑洼。您可以在 Jupyter 笔记本中对图像进行推理操作,或者在配备 AI 相机的树莓派上实时运行该模型。训练、转换和运行该模型所需的所有代码都在教程笔记本和配套的 aicamera 脚本中。

项目概述

它的作用/功能是

•使用定制的 DeepLabv3+ 模型(例如 RoadVis-Segmentation 数据集)对道路坑洼进行分段处理,该模型包含两个类别:背景和坑洼。

•通过应用模块库(modlib)在树莓派人工智能摄像头上运行;笔记本电脑和树莓派都使用相同的 DeepLab 模型类和 modlib 标注器。

•在每一帧上绘制分割掩码,以便您能够核实坑洼区域;在笔记本电脑上,您可对图像进行推理并保存或显示带有注释的帧;在树莓派上,有一段脚本会使用人工智能摄像头流,并显示一个带有掩码叠加的实时窗口(例如,坑洼显示为黄色)。

主要组件

1.DeepLabv3+ 模型 是一种具有两类(背景、坑洞)的语义分割模型。输入图像会被调整为 120×120 的尺寸,进行标准化处理(例如除以 256),然后通过网络进行处理。后处理程序会将模型的输出转换为单通道的掩码。

2.预处理和后处理

预处理会将图像调整至模型的输入尺寸,并对像素值进行缩放。后处理会在类别维度上应用“最大值”操作,并将背景类别映射为 -1,以便能够正确地可视化掩码。

3.可视化 在笔记本中,您需对一组图像文件(例如验证集)调用“visualize()”函数,该函数会使用 Keras 解释器并将标注后的帧保存到磁盘;随后的单独单元格会显示保存的图像。在树莓派上,您需使用教程中的笔记本文件夹“deeplab3-pothole/aicamera”中的脚本(deeplab_aicam.py),该脚本会将转换后的模型部署到 AI 相机上,并在帧上叠加分割掩码并显示实时窗口。

启动项目

你需要的东西

硬件

•树莓派(需搭配兼容的操作系统;该教程中提到可在人工智能摄像头上运行的树莓派操作系统“特里西”)

•树莓派人工智能摄像头

树莓派上的软件(用于运行模型)

•已安装 modlib 的 Python 环境(有关安装步骤,请参阅 modlib 仓库)。

•您转换后的模型输出文件(名为“packerOut.zip”的文件)或已打包的模型(文件扩展名为“.rpk”的文件),需放置在 aicamera 脚本所期望的路径中。

用于训练和转换(通常在个人电脑或 Colab 上进行)

•该教程是一个在 Colab 环境中使用 GPU 的 Jupyter 笔记本。其内容包括:安装训练库、数据集设置、训练与量化、推理与可视化、转换为 IMX500 格式以及在 Raspberry Pi AI 相机上运行。

教程和代码

所有步骤:数据集、训练、量化、转换以及推理/可视化代码——都存于本存储库中:

DeepLabv3+ 路坑修复教程(custom_deeplab.ipynb)

•数据集:RoadVis-Segmentation(版本 2),包含坑洼类别的语义分割。要使用 Roboflow 数据集,您需要拥有 Roboflow 账户并同意 Roboflow 服务条款。

•训练使用了来自 aitrios-rpi-training-samples 的“deeplab3”工具以及关于 DeepLab 的训练文档。

•该笔记本包含了 DeepLabv3 模型类、一个 Keras 解释器设备以及一个用于处理图像的可视化函数。同一个代码库还提供了适用于树莓派的脚本,位于 notebooks/deeplab3-pothole/aicamera 文件夹中,用于实现实时的人工智能摄像头可视化。

代码分解(来自教程)

该笔记本定义了一个深度学习模型包装器和一个可视化流程。以下是主要思路;如需查看完整代码,请使用该笔记本。

1. DeepLabv3 模型类

该模型类会加载权重(使用 Keras 格式或转换后的格式),并采用固定的输入尺寸 120×120 以及归一化处理(归一化均值为 0,归一化标准差为 256)。

预处理步骤:将图像调整为 120×120 的尺寸并进行归一化(除以 256),然后通过解释器添加批次维度。

后处理步骤:在输出张量的类别轴上应用最大值运算,并在掩码中将背景(类别 0)设置为 -1;返回一个“分割对象”。

2. Keras 解释器(仅适用于笔记本环境)

该笔记本使用了一个进程内解释器(InterpreterDevice,它通过 MCT 自定义对象加载 .keras 模型)。它会运行模型的预处理和后处理步骤,从而确保相同的 DeepLab 流程用于推理。该笔记本的 visualize() 函数仅接受 .keras 模型;而对于 AI 相机,您需要使用单独的 aicamera 脚本。

3. 可视化:笔记本电脑与树莓派的比较

在该笔记本中,visualize() 函数:

•接收一个.keras 模型路径、一个图像文件夹(例如验证集)以及诸如输出目录和保存图像等选项。

•使用图像(images)作为数据源,并使用 InterpreterDevice 来部署模型。

•对于每一帧:如果没有分割区域,则直接保存或显示该帧;否则,调用 annotator.annotate_segments() 函数,并传入 frame.detections 参数,然后保存或显示已标注的帧。

•若设置“save_image=True”,则会将标注后的帧保存至输出文件夹;另外还有一个单元格会显示这些已保存的图像。

在树莓派上,该教程在“notebooks/deeplab3-pothole/aicamera”文件夹中提供了“deeplab_aicam.py”文件。它使用了相同的 DeepLabv3 模型类和 modlib Annotator,但将转换后的模型(例如路径为“MODEL_CONVERTED”中的“packerOut.zip”)部署到 AI 相机中,并使用相机作为帧源。该脚本通过调用“frame.display()”显示了一个实时窗口,并在坑洼区域绘制了分割掩码。

4. 配置文件(训练)

训练使用了在笔记本中创建的两个配置文件:

•deeplab_v3p_pothole.ini:框架(基于 Keras),模型名称(DeeplabV3p),输入尺寸为 [120, 120],类别数量为 2,批次大小,训练轮数(带提前停止机制),以及 YAML 配置文件的路径。

•deeplab_v3p_pothole.yml 文件:基础架构(例如 mobilenetv2),模型参数中的 classes(0:背景,1:坑洞,2:空域),以及指向数据集的数据根路径。尽管数据集配置中列出了第三个标签(空域),但在训练过程中它被当作忽略/掩码类处理,因此模型在训练时仅被训练预测两个类别:背景和坑洞。

•对于不同的分割任务,您需要按照“DeepLab 新数据集文档”中的说明更改类别数量、类别名称以及数据集路径。

培训与转换

1. 数据集

该教程使用了 RoadVis-Segmentation 数据集。通过 Roboflow 下载后(格式为 png-mask-semantic),该笔记本会将其整理成深度学习训练器所期望的文件夹结构:train/JPEGimages、train/SegmentationClassRaw、train/label_data.txt,以及类似的结构用于 valid 和 test 文件夹。

2. 训练与量化

在该笔记本中,训练和量化操作的运行参数为:

训练采用了提前停止的策略;该笔记本指出,大约进行 75 个周期的训练就能获得可用的分割结果,而继续训练会进一步提升效果。最终输出的是一个量化后的 Keras 模型(例如:deeplab_v3p_pothole_quantized.keras)。

3. 转换与包装

将量化模型转换为 IMX500 所需的格式:

这会生成 packerOut.zip(以及其他相关文件)。按照 Raspberry Pi AI 相机文档(“打包”)中所述,为 Raspberry Pi 上的 AI 相机打包模型,并使用生成的 packerOut.zip 作为输入。

转换过程也在索尼 IMX500 转换器的使用说明书中有所记载。

在树莓派人工智能摄像头上运行

1.从教程仓库中获取 aicamera 脚本:前往 notebooks/deeplab3-pothole/aicamera 文件夹。名为 deeplab_aicam.py 的脚本使用与笔记本相同的 DeepLabv3 模型和 modlib Annotator,但将转换后的模型部署到了 AI 相机上,并显示了一个实时窗口。

2.在树莓派上安装 uv(来自 Astral)和 modlib。

3.在脚本中设置模型路径:变量“MODEL_CONVERTED”应指向您转换后的模型(例如“packerOut.zip”)。首次运行时,该应用程序可能会先将转换后的模型打包,然后部署到人工智能摄像头上。

4.将转换后的输出文件(例如“packerOut.zip”)放置在“MODEL_CONVERTED”所指向的位置(例如“~/models/deeplabv3/pothole/”)。

5.运行该应用程序(例如,在“aicamera”文件夹中执行“uv run deeplab_aicam.py”命令)。该脚本使用了 PEP 723 内联脚本元数据,因此“uv”能够自动安装依赖项。

6.将相机对准道路表面或者屏幕上的验证图像,以确认坑洼的分割情况。

查看结果

在笔记本中:在调用 visualize() 并设置 save_image=True 后,标注后的帧会保存在输出文件夹中(例如 saved_images/)。下一单元格会显示这些帧,以便您确认坑洼类是否被正确分割。如果模型训练的周期较短,某些图像可能不会显示任何检测结果。

树莓派上:aicamera 脚本会显示一个实时窗口。每一帧都会标注上分割掩码(例如,黄色区域表示坑洼区域)。利用此功能来验证坑洼区域是否如预期那样被突出显示。然后,您可以根据自己的逻辑扩展该流程(例如,发出警报或进行记录)。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

标准的 WiFi(2.4/5GHz)的覆盖范围可达 50 至 100 米。LoRa 能够覆盖一定距离,但其带宽太窄,无法传输 JPEG 图像。4G 在有信号覆盖的地方都能使用,但需要 SIM 卡以及每日重复计费的数据套餐...

关键字: LoRa 人工智能 NE101

在当今的生活中,查看天气状况或日常日程安排通常需要解锁智能手机或唤醒明亮的电脑显示器。这往往会导致“通知泛滥”现象——你查看时间,看到一条无关的电子邮件,然后突然就花了 20 分钟沉浸在负面情绪中。我们的家中布满了发光的...

关键字: 显示屏 树莓派 Flexbox

在过去的 250 年里,我们在自动化方面取得了巨大的进步。这为我们带来了远超我们想象的更多舒适与便利。很快,我们甚至还会创造出音乐、食物、娱乐、战争和爱情。目前还有一项工作尚未着手:哲学。

关键字: 机器人 树莓派 摄像头

在该项目中,我们正在利用树莓派 Pico W 构建一个自主式的“猎鹰式”目标定位系统。与简单的感应运动玩具不同,该系统采用了一个 3 区段的被动红外线运动探测器阵列来检测目标的大致方向,然后启动精确的超声波雷达扫描,以确...

关键字: 树莓派 超声波雷达 传感器

将 Kindle 变成打字机或许在实际应用上意义不大——但这是完全可行的(前提是你的 Kindle 已经被破解)。在这个过程中,这个项目会迫使你按照一定的限制条件进行操作,比如在受限的 Linux BusyBox 环境中...

关键字: Kindle 打字机 树莓派

疲劳驾驶是导致致命交通事故的最危险且报道最少的因素之一。像梅赛德斯、宝马或特斯拉那样的商用驾驶员监控系统价格高达数千欧元,并且只能安装在特定车辆上。而用于车队管理的独立系统则需要网络连接,并且还需要支付定期费用。

关键字: DrowSAFE 树莓派 边缘人工智能

从感知科学到行为改变,e络盟播客深入剖析技术如何助力释放人类潜能

关键字: 人工智能 脑科学

上篇我们完成了 BLC、LSC、AWB、CCM 的客观标定,建立了科学的成像基准。本篇将继续主观调试、IQ 文件配置、常见问题排查等,直至完整 ISP 调试流程落地。

关键字: ISP 摄像头 开发板

中国 上海,2026年5月13日——照明与传感创新的全球领导者艾迈斯欧司朗(SIX:AMS)今日宣布,推出OSLON™ Black IR:6 C系列高功率红外发射器。汽车智能化程度正日益提高,其中一个特征是驾驶辅助系统和...

关键字: 驾驶辅助系统 传感器 摄像头

湖州2026年5月12日 /美通社/ -- 5月9日,在第十个中国品牌日到来之际,由新华社品牌工作办公室指导,中国搜索主办的2026世界品牌莫干山大会"搜索•点赞•传播品牌好故事论坛"在浙江德清成功举...

关键字: 人工智能 AI 代码 多模
关闭