在本指南中,我们将探索YOLOE——一种计算机视觉模型,它允许你通过提示来创建自定义目标检测模型,而无需训练过程!我们将学习这种视觉模型的工作原理,以及如何在树莓派5上创建并运行自己的自定义目标检测。YOLOE是发布的最令人惊叹的YOLO模型之一,对许多创客项目来说非常实用,而且玩起来非常有趣。让我们开始吧!
本指南将使用一些Python脚本,请确保下载包含这些脚本的zip文件。
https://core-electronics.com.au/attachments/uploads/yoloe-code-core-electronics.zip
本指南还需要你安装并更新YOLO Ultralytics软件包。如果你还没有安装,可以按照我们的Conda指南进行操作。
这个套件让树莓派5运行几乎所有YOLO模型!Conda 与 Ultralytics!
YOLOE的工作原理
首先,为什么YOLOE如此令人惊叹?要回答这个问题,我们首先需要了解传统上如何使用YOLO模型。
没有YOLOE时,你需要在树莓派上下载一个视觉模型,可能是YOLO11或YOLOv8,启动它并开始检测目标。你可以检测人、椅子、键盘等,因为模型已经经过训练,可以识别这些目标。但是,如果你想识别一个自定义目标,比如你工作坊中的特定工具或精灵球,那么就需要对模型进行训练。
传统的训练过程比较复杂。你需要从不同角度拍摄数百张目标的照片,然后对这些图像进行标注,并使用它们来训练YOLO以检测这个新目标。你需要在一台性能不错的计算机上完成这一过程——即使使用高端游戏GPU,根据复杂程度,这一过程也可能需要数小时或更长时间。完成后,将新训练的模型放回你的树莓派5上,它就会开始检测自定义目标。如果你想检测另一个目标,就需要再次重复整个耗时的过程。
现在让我们看看如何使用YOLOE来完成这一任务。如果你想训练模型检测精灵球,只需更改一行代码:
names = ["Person", "Pokeball"]
运行该Python脚本,5-10秒后模型就准备好了。这就是可提示视觉模型的神奇之处。
那么,YOLOE是如何工作的呢?它是如何仅通过提示就能检测目标的?YOLOE基于其他标准YOLO模型构建,但有一个主要区别。它没有针对特定目标进行训练,而是针对视觉概念和想法进行训练。因此,它可能接受过马的图像训练,但不是被告知“这是一匹马,学习马的样子”,而是学习构成马的视觉概念。它有四条腿,是棕色的,有毛,脸长,是哺乳动物等。
因为它理解这些视觉概念和想法,所以如果你通过文本提示提出要求,它就能识别从未见过的目标。假设它从未见过斑马,但我提示它识别一个。它首先将提示分解为已知的视觉概念。它可能将“斑马”分解为:四条腿、有条纹、黑白相间、有毛。它知道所有这些视觉概念的样子,因此使用这些概念来识别斑马。
由于它具备这些更通用的视觉概念,因此可以开箱即用地识别很多目标。常规YOLO模型默认训练识别约80个特定目标。现在我们只是猜测,但YOLO-E可能可以轻松识别5000个,甚至可能数万个不同的目标,而无需进行冗长的训练过程。
当然,这并非万能解决方案,也不是计算机视觉的终极方案——它有其局限性。例如,对于非常模糊或罕见的词汇或物品,没有明确的视觉概念,它可能无法可靠地识别。例如,右图中的3D打印《我的世界》铜傀儡。我们不能只输入“Minecraft Copper Golem”,因为YOLOE不知道《我的世界》是什么,也不知道铜傀儡是什么,所以很难找到文本提示来识别这个独特的目标。
然而,YOLOE还有另一种模式,我们之前没有提到。你可以不仅用文本提示YOLO-E,还可以用图像提示。你可以给它看傀儡的图像,它将图像分解为视觉概念,然后根据这些概念识别相似的目标。我们将在本指南后面探讨这个图像提示功能。总之,YOLO-E几乎可以识别所有目标(“E”代表“Everything”),可以用文本或图像提示,可能满足你70%到80%的自定义检测需求,而且运行速度与常规YOLO模型相当。我认为你可以理解为什么这对创客的计算机视觉模型来说是一个如此令人兴奋的进步。
所需材料
要跟随本指南操作,你需要:
树莓派5——4GB、8GB或16GB型号均可。虽然理论上可以在树莓派4上完成,但速度远慢于树莓派5,体验不佳,因此我们未在树莓派4上进行测试。
树莓派散热方法。对于树莓派5,我们从未对主动散热器失望过。
树莓派摄像头——我们使用的是摄像头模块V3。
转换线——树莓派5配有不同尺寸的CSI摄像头线,你的摄像头可能配有较旧、较粗的线,因此值得仔细检查。摄像头模块V3肯定需要一条转换线。
Micro SD卡——至少32GB。
显示器和Micro-HDMI转HDMI线
鼠标和键盘
连接摄像头
将线缆较宽的一端连接到摄像头,较细的一端连接到树莓派5。这些连接器上有一个标签——抬起标签,然后将线缆插入插槽。确保线缆正确插入且方正,然后将标签推回原位以固定线缆。
注意,这些连接器只能以一个方向插入,且可能比较脆弱,因此避免过度弯曲(稍微弯曲一点没问题)。
无提示模式下运行YOLOE
在开始之前,请确保按照我们的Ultralytics安装指南进行操作。这个软件包允许我们下载并运行YOLO模型,因此请确保已安装它,并设置好Thonny以备使用——所有这些都在该指南中有所介绍。
如果你还没有,请继续下载包含我们将使用的所有Python代码的zip文件。将其解压到一个方便的位置。我们在桌面上创建了一个文件,并将所有脚本放在那里。以下过程将生成新文件,可能会非常混乱,因此将所有文件放在一个文件中很重要。
首先,在Thonny中打开文件YOLOE Run Model.py。使用Ultralytics库运行YOLO模型所需的代码并不多。代码首先导入所有必需的库,然后使用picamera 2初始化摄像头。在这里你可以设置摄像头的分辨率(默认为800x800)。注意:降低分辨率不会提高处理速度。这是捕获图像的分辨率,仅此而已。我们稍后将查看模型分辨率(确实会影响处理速度):
import cv2from picamera2 import Picamera2from ultralytics import YOLO# Set up the camera with Picampicam2 = Picamera2()picam2.preview_configuration.main.size = (800, 800)picam2.preview_configuration.main.format = "RGB888"picam2.preview_configuration.align()picam2.configure("preview")picam2.start()
然后我们加载要使用的模型。现在暂时保持默认,稍后我们将更改它:
# Load YOLOE prompt-free modelmodel = YOLO("yoloe-11s-seg-pf.pt")
接下来我们进入while True循环。代码首先从摄像头获取图像,然后通过model.predict()运行YOLOE模型进行分析。然后我们使用results.plot()将检测信息叠加到摄像头画面上。这有两个选项:boxes和masks。Boxes是你在目标识别中常见的检测边界框,masks是一个覆盖层,突出显示并填充检测到的目标。你可以根据项目需要启用或禁用这些选项。
while True:# Capture a frame from the cameraframe = picam2.capture_array()# Run YOLOE model on the captured frameresults = model.predict(frame)# Output the visual detection dataannotated_frame = results[0].plot(boxes=True, masks=False)
实际上,运行模型只需要这些代码。接下来的几行代码是可选的,仅用于计算FPS并将其叠加到预览窗口上:
# Get inference timeinference_time = results[0].speed['inference']fps = 1000 / inference_time # Convert to millisecondstext = f'FPS: {fps:.1f}'# Define font and positionfont = cv2.FONT_HERSHEY_SIMPLEXtext_size = cv2.getTextSize(text, font, 1, 2)[0]text_x = annotated_frame.shape[1] - text_size[0] - 10 # 10 pixels from the righttext_y = text_size[1] + 10 # 10 pixels from the top# Draw the text on the annotated framecv2.putText(annotated_frame, text, (text_x, text_y), font, 1, (255, 255, 255), 2, cv2.LINE_AA)# Display the resulting framecv2.imshow("Camera", annotated_frame)
最后,我们通过检查是否按下了“q”键来结束每个循环。如果是,我们将跳出while True循环,并关闭所有窗口。这样你就可以在代码运行时安全退出:
# Exit the program if q is pressedif cv2.waitKey(1) == ord("q"):break# Close all windowscv2.destroyAllWindows()
继续运行该代码!第一次运行这些脚本时,可能需要一分钟时间来下载指定的模型以及任何需要的额外软件包或依赖项。请耐心等待初始设置——后续运行将快得多。
这样,你就应该已经成功运行YOLOE检测了!
但我们到底在看什么?我们的自定义提示在哪里?我们现在运行的是所谓的“无提示模式”。本质上,这是一种YOLOE尝试检测图像中所有目标的模式,类似于常规目标检测模型的工作方式。可以将其视为YOLO-E在没有你的任何具体指导的情况下展示它所知道的内容(它根据大约4800个事物列表进行工作)。
此时,你可能还会得到一些奇怪和不准确的检测结果——这在现阶段是正常的。我们可以通过将其转换为更合适的模型格式来修复此问题并提高FPS(每秒帧数)。这也是我们将实现自定义提示的方式。
通过模型大小、分辨率和ONNX提升性能
继续打开名为Prompt-Free ONNX Conversion.py的文件。这个脚本将接受我们指定的模型,并将其转换为指定分辨率的指定模型格式。让我们逐步解释这些内容。
首先,让我们谈谈模型格式。默认情况下,YOLO模型采用PyTorch格式,文件扩展名为.pt。如果你查看我们之前运行的代码,我们告诉代码运行“yoloe-11s-seg-pf.pt”——这是一个PyTorch模型。当我们告诉YOLO使用模型时,它将首先查看我们创建的文件,看看它是否已存在——如果不存在,它将从网上下载。值得注意的是,我们的代码只能从网上下载PyTorch模型。虽然这些模型效果很好,但有些模型格式专为在树莓派5等ARM设备上更高效地运行而设计。
我们可以转换的两种主要格式是ONNX和NCNN。ONNX(Open Neural Network Exchange)是一种广泛支持的格式,倾向于在不同硬件平台上高效运行。NCNN是另一种优化格式,可以在树莓派等ARM处理器上良好运行。在我们的测试中,我们发现这两种格式在树莓派5上的性能相似,但ONNX往往更可靠一些,因此本指南将使用ONNX。在以下行中,我们指定希望将模型导出为ONNX格式:
model.export(format="onnx", imgsz=640)
这行代码还负责设置模型的处理分辨率,它决定模型分析多少像素——默认情况下,它是640x640像素。在主要的YOLOE Run Model.py脚本中,我们设置了摄像头的分辨率。代码将以该分辨率获取图像,并将其缩小到模型处理的分辨率。这就是为什么摄像头分辨率不会影响处理速度,而是模型分辨率会影响。如果我们降低处理分辨率,每帧需要分析的像素就会减少,从而每秒帧数增加。
你可以将分辨率设置为32x32到640x640之间的任何值,只要它是32的倍数即可。因此,320x320是有效分辨率,但300x300不是。通过大幅降低分辨率(比如降至128x128),你可以获得非常高的FPS。但这并非免费的性能提升,而是以有效检测距离为代价的。右图是一个例子。在完整的640x640分辨率下,它可以检测到工作室后面的手机。但当设置为128x128时,它在一米以外就很难识别了。
你的项目可能需要你调整这个数值以平衡处理速度和检测距离。以下是将分辨率设置为224x224的示例:
model.export(format="onnx", imgsz=224)
我们可以更改的最后一件事是模型大小。在转换代码中,我们告诉它将“yoloe-11s-seg-pf.pt”进行转换。该模型有三种不同大小,我们告诉它使用小版本,因此是“11s”。该模型还有中版本(“yoloe-11m-seg-pf.pt”)和大版本(“yoloe-11l-seg-pf.pt”)。你可以通过将所需模型大小输入转换代码(或任何代码)来选择要转换的模型大小。
但更改模型大小会有什么影响呢?简单来说,更大的模型在识别能力上更强大——但速度较慢,而更小的模型处理速度更快——但识别能力较弱。更大的模型有更多参数,可以将其视为神经网络(YOLO是一个神经网络)中存储的“知识”。这些额外参数可能是更多可用于分析的数据点,或对已有数据的更好理解。由于这些额外参数,模型在磁盘空间上更大(大模型约55 MB,小模型约25 MB),但由于其改进的“思考”能力,可以更准确、更多地检测目标。如果你在识别目标时遇到困难,或者可靠性不如你所愿,可以尝试使用更大的模型——它会更慢,但可能决定项目的成败。
模型格式、分辨率、模型大小……如何正确选择所有这些?事实上,没有一种放之四海而皆准的组合,每个项目可能都需要根据其需求进行调整。然而,以下是一些有用的经验法则,可帮助你做出决定:
首先使用ONNX格式。如果你喜欢,可以尝试NCNN,但ONNX将是一个安全的选择。
然后选择能够以你满意的水平检测目标的模型大小。非常常见的目标,如杯子、人、椅子、桌子等,很可能使用小模型就能工作。更复杂或不常见的目标可能需要中或大模型。
一旦你有了可用的模型大小,就找到在你要检测的范围内可靠工作的最低分辨率。如果你在摄像头非常近的地方扫描键盘,你可以将分辨率降得很低,并获得出色的fps。如果你试图在一个大后院里检测一只狗,你可能需要使用完整的640分辨率,并接受低FPS。如果你的项目根本不关心FPS,那么最好保持完整的640以获得最佳性能。
一旦你对所有设置满意,运行脚本,它将导出一个可能名为“yoloe-11s-seg-pf.onnx”的文件到脚本所在的文件夹。要运行这个新模型格式,只需返回YOLOE Run Model.py,并将要运行的模型更改为这个新模型:
# Load YOLOE prompt-free modelmodel = YOLO("yoloe-11s-seg-pf.onnx")
运行脚本,你现在应该已经以改进的性能运行无提示模式了。如果你有时间,可以尝试调整模型大小和分辨率,看看它们的影响。你能获得多少FPS,同时仍然能检测到手机,以及在什么范围内?
你现在可能也意识到,这种无提示模式有其局限性。如果你在手机上搜索老虎的图片并对准摄像头,你可能会看到它被检测为十几个其他东西,但不是老虎。让我们用一个定义明确且提示的模型来解决这个问题。
使用文本提示进行自定义目标检测
现在我们已经顺利运行了优化后的模型,是时候深入探讨YOLO-E的真正魔力了:自定义文本提示。这正是YOLO-E真正闪耀并区别于传统目标检测模型的地方。不再局限于标准YOLO模型可以检测的大约80个目标,我们现在可以提示YOLO-E去寻找几乎任何东西(或者至少尝试一下)。
在树莓派上使用YOLO-E时,有一个重要的技术细节需要注意。通常,在使用YOLOE时,你会使用PyTorch格式。使用Pytorch格式时,你会在主检测脚本(相当于我们的YOLOE Run Model.py)中指定文本提示,一切都在该脚本中运行。如果你想更改提示,你会停止代码,更改提示,然后再次运行代码。
然而,当我们把模型转换成ONNX格式时,它就失去了根据提示来寻找目标的能力。相反,我们必须在转换过程中给它提供提示。可以把它想象成硬化一个粘土物体。你按照自己喜欢的方式塑造它(给它提示),然后烘烤它,它就固定在那个形状了。如果你想要另一个形状(不同的提示),你就需要再做一个。
继续打开Text-Prompt ONNX Conversion.py,这个脚本将允许我们在转换过程中嵌入这些提示。这与之前的ONNX转换脚本几乎相同,但有一些变化。首先,我们没有使用无提示模型,你可以从模型名称中去掉“-pf”看到这一点:
model = YOLOE("yoloe-11s-seg.pt")
还有一行你可以输入想要的提示。如果你遵循语法,你可以输入任意数量的目标。以下是一些示例:
# Define your specific prompts that you want to bake into the modelnames = ["tiger", "pizza", "beard", "pokeball", "pink keyboard", "yellow and purple cup"]
继续输入一些你想测试的提示,确保输入你想要的模型大小和分辨率,然后运行代码导出文件。这将创建另一个文件,名称类似于“yoloe-11s-seg.onnx”。在运行之前,你可能想更改它的名称。如果你使用这个脚本导出另一个模型,它可能会使用相同的名称并覆盖它。你可以通过将其更改为任何你想要的名称来防止这种情况发生,只要它以“-seg.onnx”结尾即可。例如,如果我想将模型命名为“tiger”,我会称它为“tiger-seg.onnx”。更改名称是可选的,但值得知道如何防止你的模型被意外覆盖。
要运行模型,再次打开YOLOE Run Model.py,并将模型更改为你刚刚导出的模型名称。
这样,你就应该能够快速更改并运行自定义检测模型了。举起与你的提示匹配的目标或图像,看看模型的表现如何,尝试不同的提示、特定提示——尽情玩转它。你很快就会对哪种类型的提示效果好,哪种可能需要改进有感觉。
也要尝试发挥创意。YOLOE最酷的功能之一是对颜色的理解。它接受了颜色概念的训练,因此完全有可能仅根据颜色来区分相同的目标。使用以下提示:
# Define your specific prompts that you want to bake into the modelnames = ["brown box", "blue box", "clear box"]
我们能够准确检测到它们之间的差异,如下面的图像所示。
不过,要注意它的局限性。有时你会遇到一些看似应该容易检测但实际上却非常困难的目标。以黄色乐高小人头为例。你可能会提示“黄色乐高头”并得到检测结果,但模型可能实际上更多是对提示中的“黄色”部分做出反应,而不是真正理解在这个上下文中“乐高”或“头”是什么意思。右图显示了一个乐高头和一个黄色盒子被检测为一个。
这就是实验的价值所在。尝试你的提示的不同变体:“黄色塑料头”、“圆形黄色物体”或“玩具头”。有时,更通用的描述比非常具体的描述效果更好。
如果你在使用文本提示时难以获得良好的检测结果,或者你对得到的置信度评分(目标名称旁边的0到1之间的数字)不满意,你有几个选择。你可以尝试切换到更大的模型大小,或者尝试图像提示。
使用图像提示创建自定义模型
虽然文本提示是使用YOLO-E的最佳和最可靠方法,并且应该始终是你的首选方法,但你可能会偶尔发现一些仅用文本很难检测的目标。这时图像提示可能会派上用场。
图像提示对于那些没有易于描述的视觉概念的非常特定或独特的目标特别有用。例如,我们之前提到的3D打印《我的世界》铜傀儡——真的没有一组文本提示能够可靠地识别这个自定义目标。模型不知道“《我的世界》”是什么意思,也不知道“铜傀儡”具体长什么样,因为这些都是非常小众的概念。
然而,图像提示允许我们向YOLO-E展示一个我们想要检测的目标的确切示例。模型将其分解为它理解的视觉概念——也许是金属质感、人形形状、特定比例——然后在实时摄像头画面中寻找类似的视觉模式。
值得注意的是,图像提示可能有时奏效,有时不奏效。有些目标使用这种方法效果非常好,而另一些目标则响应不可靠。成功与否往往取决于视觉特征是否独特,以及模型能否从你的参考图像中提取有意义的概念。始终先尝试文本提示,如果不起作用,再尝试图像提示——你可能会很幸运,发现它是解决你特定检测挑战的完美方案。
图像提示的第一步是获取你想要检测的目标的优质参考照片。你可以使用提供的脚本拍摄现有照片或专门为此目的拍摄一张照片。
打开Image-Prompt Capture.py。在脚本顶部,你会找到照片保存的文件名设置。将其更改为描述性的名称——我要将其更改为“golem.jpg”。
运行脚本,你将看到摄像头画面出现。将你的目标放在良好的光线下,按空格键拍摄照片。脚本会将图像保存到你项目文件夹中,并使用你指定的文件名。
如果你已经有一张用另一台相机拍摄的目标照片或从其他地方下载的照片,你可以简单地将该图像文件复制到你的项目文件夹中,而不是使用捕获脚本。只需确保图像清晰显示目标,具有良好的对比度和光线。
接下来,我们需要告诉YOLO-E图像中哪一部分包含我们想要它学习的目标。这至关重要,因为我们在框内绘制的所有内容都是模型将尝试分解为视觉概念的部分。
打开Image-Prompt Draw Box.py,并将图像路径更改为你想要使用的照片的文件名。在我的情况下,我将其设置为“golem.jpg”以匹配我刚刚拍摄的照片。
运行脚本,你将看到一个显示你的图像的窗口,并带有一个绘图工具。你想要在目标周围绘制一个紧密、精确的框。这非常重要——你的框越紧密、越准确,模型就越能理解要寻找的具体视觉特征。如果你的框中包含太多背景或其他目标,模型就会对它应该检测的具体内容感到困惑。
使用鼠标点击并拖动一个矩形围绕你的目标。尝试尽可能靠近边缘而不切掉任何重要部分。一旦你对框满意,脚本将在shell中输出一些坐标。复制这些坐标,因为我们在下一步中需要它们。
现在打开Image-Prompt ONNX Conversion.py。这个脚本是我们告诉模型要学习哪张图像以及该图像中目标的确切位置的地方。粘贴你刚刚从框绘制工具中复制的坐标。该脚本允许你根据需要训练多个不同的目标——你可以通过复制和粘贴模式添加更多图像参考及其对应的坐标。然而,在我们的示例中,我们将只关注一个目标,因此你可以删除任何额外的模板条目。
由于图像提示可能比文本提示更具挑战性,我可能会选择在这里使用更大的模型以获得更准确的检测结果。大模型更强大,更能理解细微的视觉差异,这对于处理自定义或不寻常的目标非常重要。让我们运行转换脚本并导出我们的模型。我将把这个模型称为“golem-seg.onnx”,这样我们就不会意外覆盖我们之前的任何模型,并且可以轻松识别这个模型的设计用途。
现在回到你的YOLOE Run Model.py脚本,并将模型名称更改为你刚刚创建的图像提示模型。运行脚本并使用你的目标进行测试。
你会注意到图像提示模型的一个重要区别:检测框将显示“object 0”而不是目标名称。如果你在同一模型中训练了第二个目标,它将显示为“object 1”,第三个将是“object 2”,以此类推。
这意味着当你使用图像提示模型编写自己的自定义代码时,你需要跟踪哪个数字对应哪个目标。最好在你的代码中维护一个简单的参考列表或注释,注明“object 0 = 铜傀儡”或你训练的任何目标。
计数目标和获取目标位置
我们现在接近尾声了,所以让我们看看如何在实际应用和你的项目中使用这些检测结果。核心检测只是开始——大多数项目需要对这些检测数据“做点什么”。代码下载中包含两个演示脚本,它们是你自己项目的绝佳起点。这些演示了我们在创客项目中看到的最常见用例:计数特定目标和在屏幕上跟踪目标位置。
Demo Object Counter.py
在这个脚本的顶部有一些你可以填写的变量。这将让你选择你想要计数的目标、你想要计数多少个目标后你的项目“做点什么”,以及你对它们被计数所需的置信度要求:
TARGET_OBJECT = "hand" # What object to look for (e.g., "person", "bottle", "cup")TARGET_COUNT = 1 # How many of that object should trigger the actionCONFIDENCE_THRESHOLD = 0.2 # Minimum confidence score (0.0 to 1.0)
然后代码设置摄像头、加载模型并像之前一样运行推理(分析图像)。然后它到达一个部分,在那里它循环遍历所有检测到的目标,并计算具有你指定置信度水平的指定目标的数量。在第53行左右,你将找到一个if语句,检查自信检测的数量是否达到你的目标。在这一部分,你可以放置你的自定义代码,在你的项目中“做点什么”。
if object_count >= TARGET_COUNT:print(f"Target number of objects detected! ({object_count} confident {TARGET_OBJECT}(s))")for i, obj in enumerate(confident_objects):print(f" {TARGET_OBJECT} #{i+1}: {obj['confidence']:.3f} confidence")# ADD YOUR CUSTOM ACTION HERE# Examples:# - Send a notification# - Control a servo motor# - Log data to a file# - Trigger an LED# - etc.
Demo Location.py
这段代码类似,它让你指定一个目标和一个置信度评分:
TARGET_OBJECT = "hand" # What object to look for (e.g., "person", "bottle", "cup")CONFIDENCE_THRESHOLD = 0.2 # Minimum confidence score (0.0 to 1.0)
但它跟踪的是这个目标在屏幕上的位置,并给你它的x和y坐标。这些坐标是相对的,范围从0到1.0。x轴从图像的左侧到右侧运行,0是左侧,1.0是右侧,0.5是中间点。y轴从顶部到底部运行,0是顶部,1.0是底部。在y轴上,0.25将是从屏幕顶部四分之一处。代码输出这些变量,你可以对这些位置做任何你喜欢的事情。默认情况下,我们跟踪一个置信度至少为0.2的手是否移动到屏幕的右下角:
if location['x'] > 0.5 and location['y'] > 0.5:print(f"HIGH CONFIDENCE {TARGET_OBJECT} detected in top right corner! (Confidence: {confidence:.3f})")# ADD YOUR CUSTOM ACTION HERE# - Trigger an alarm# - Move camera to center on object# - Take a photo# - Send notification# - etc.
接下来做什么?
在本指南中,我们已经取得了很大的进展。我们不仅让YOLOE运行起来了,还学会了一种仅通过文本或图像提示就能在片刻间创建完全独特的自定义目标检测模型的系统,学会了如何将模型转换为适合树莓派的高效格式,探索了模型大小和分辨率,还研究了如何在实际创客项目中应用这些技术。
正如我们之前所说,这并非魔法,你可能有些目标无法以你喜欢的质量进行检测。如果是这样,你可能想看看以“传统方式”训练你自己的YOLO11模型的过程。这有点复杂,但完全可行,而且Ultralytics有一些很棒的指南。然而,对于70%到80%的项目,这将为你提供一个足够合适的解决方案。考虑到实验和迭代的速度有多快,这是任何计算机视觉项目的绝佳第一接触点。
如果你想提高树莓派上的处理速度,YOLO将直接受益于一些超频。只是要注意,你可能会遇到系统不稳定的情况,并且如果你长时间高温运行,可能会缩短树莓派的寿命。
如果即使超频也无法带来你想要的性能,你可能想看看树莓派5的一些专用AI硬件,比如AI HAT。我们有一份关于如何使用它的指南,你可以预期FPS将提高10倍到50倍。它需要完全不同的设置和使用方法(我们有一份关于如何操作的指南),并且你需要将ONNX文件转换为HAT运行的HEF格式。
https://core-electronics.com.au/guides/raspberry-pi/yolo-object-detection-on-the-raspberry-pi-ai-hat-writing-custom-python/
如果你在本指南中涵盖的任何内容上需要帮助,或者你想展示你用这个项目制作的酷炫东西(或者你成功检测到的疯狂东西),请随时在下面的论坛中发帖。我们都是创客,乐于助人。祝你制作愉快!
很多人一直以为树莓派(Raspberry Pi)只是创客圈子里的小玩具——一块信用卡大小的开发板,用来点亮 LED、跑个 Python 脚本、或者给中学生上一堂入门编程课。然而,事实远比想象震撼:树莓派已经悄悄完成了从“教学演示”到“工业级主力”的华丽转身,正在产线、机房、实验室甚至外太空里 7×24 小时不间断服役。
原文地址:https://core-electronics.com.au/guides/raspberry-pi/custom-object-detection-models-without-training-yoloe-and-raspberry-pi/
如果觉得我们的内容不错,记得点赞+收藏+关注+转发~ 我们很乐意为您提供工业树莓派的解决方案,项目有需求请联系我们~ www.edatec.cn/cn
3087
