主要内容

检测

使用YOLO v3对象检测器检测对象

描述

例子

bboxes=检测(探测器检测单个图像或图像数组中的对象;,使用你只看一次版本3 (YOLO v3)的对象检测器,探测器.图像的输入大小必须大于或等于预训练检测器的网络输入大小。检测到的对象的位置作为一组边界框返回。

例子

bboxes分数=检测(探测器还返回每个边界框的特定于类的置信度分数。

例子

bboxes分数标签=检测(探测器返回分配给边界框的标签分类数组。对象类的标签是在训练期间定义的。

例子

detectionResults=检测(探测器ds方法返回的所有图像中的对象输入数据存储的功能ds

例子

___=检测(___roi检测矩形搜索区域内的对象roi,以及来自先前语法的参数的任何组合。

___=检测(___名称,值使用一个或多个名称-值参数指定选项。

请注意

此函数需要计算机视觉工具箱™模型用于YOLO v3对象检测.您可以安装YOLO v3目标检测的计算机视觉工具箱模型从加载项资源管理器。有关安装附加组件的详细信息,请参见获取和管理附加组件.要运行此函数,您将需要Deep Learning Toolbox™。

例子

全部折叠

加载一个预训练的YOLO v3对象检测器。

= yolov3ObjectDetector(“tiny-yolov3-coco”);

读取测试图像并对测试图像进行预处理进行预处理函数。

Img = Img“sherlock.jpg”);Img =预处理(检测器,Img);

检测测试图像中的对象。

[bboxes,scores,labels] = detect(检测器,img);

显示检测结果。

结果=表(bboxes,label,scores)
结果=1×3表bboxes标签分数  ________________________ ______ _______ 133年67 283 278 0.51771的狗
detectedImg = insertobjectnotation (img,“矩形”、bboxes、标签);图imshow (detectedImg)

图包含一个轴对象。axes对象包含一个image类型的对象。

加载一个预训练的YOLOv3对象检测器。

= yolov3ObjectDetector(“tiny-yolov3-coco”);

读取测试数据并将其存储为图像数据存储对象。

Location = fullfile(matlabroot,“工具箱”“愿景”“visiondata”“汽车”);imds = imageDatastore(location);

检测测试数据集中的对象。设置阈值参数值为0.3和MiniBatchSize参数值为“32”。

detectionResults = detect(检测器,imds,“阈值”, 0.3,“MiniBatchSize”、32);

从测试数据集中读取图像并提取相应的检测结果。

Num = 10;I = readimage(imds,num);bboxes = detectionResults.Boxes{num};labels = detectionResults.Labels{num};scores = detectionResults.Scores{num};

执行非最大抑制以从重叠簇中选择最强的边界框。设置OverlapThreshold参数值为“0.2”。

[bboxes,scores,labels] = selectStrongestBboxMulticlass(bboxes,scores,labels)“OverlapThreshold”, 0.2);

显示检测结果。

结果=表(bboxes,label,scores)
结果=3×3表bboxes标签分数  ________________________ ______ _______ 14 71 52 27车0.93352 74 73 7 5车15 10车0.85313 0.65369 102 73
detectedImg = insertobjectnotation (I,“矩形”、bboxes、标签);图imshow (detectedImg)

图包含一个轴对象。axes对象包含一个image类型的对象。

加载一个预训练的YOLO v3对象检测器。

= yolov3ObjectDetector(“tiny-yolov3-coco”);

阅读测试图像。

Img = Img“highway.png”);

在测试图像中指定感兴趣区域(ROI)。

roiBox = [70 40 100 100];

检测指定ROI内的对象。

[bboxes,scores,labels] = detect(detector,img,roiBox);

显示ROI和检测结果。

img = insertobjectnotation (img,“矩形”roiBox,“投资回报”“颜色”“蓝色”);detectedImg = insertobjectnotation (img,“矩形”、bboxes、标签);图imshow (detectedImg)

图包含一个轴对象。axes对象包含一个image类型的对象。

输入参数

全部折叠

YOLO v3对象检测器,指定为ayolov3ObjectDetector对象。

测试图像,指定为大小的数字数组H——- - - - - -W——CH——- - - - - -W——C——- - - - - -T.图像必须是真实的、非稀疏的、灰度的或RGB图像。

  • H:身高

  • W宽度:

  • C:每张图像中的通道大小必须等于网络的输入通道大小。例如,对于灰度图像,C必须等于1.对于RGB彩色图像,它必须等于3.

  • T:阵列中测试镜像的个数。该函数计算数组中每个测试图像的目标检测结果。

测试图像的强度范围必须与用于训练检测器的图像的强度范围相似。例如,如果你训练检测器uint8,将测试图像重新缩放到[0,255]范围im2uint8重新调节函数。测试图像的大小必须与训练中使用的图像的大小相当。如果这些尺寸差异很大,检测器就很难检测到物体,因为测试图像中物体的尺度与检测器被训练识别的物体的尺度不同。

数据类型:uint8|uint16|int16||

测试映像,指定为aImageDatastore对象,CombinedDatastore对象,或TransformedDatastore对象,其中包含测试图像的完整文件名。数据存储中的图像必须为灰度或RGB图像。

感兴趣的搜索区域,指定为[xy宽度高度)向量。矢量以像素为单位指定区域的左上角和大小。

名称-值参数

指定可选的参数对为Name1 = Value1,…,以=家,在那里名字是参数名和吗价值是对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字在报价。

例子:检测(探测器,我,“阈值”,0.25)

检测阈值,指定为由逗号分隔的对“阈值”一个在[0,1]范围内的标量。分数低于该阈值的检测将被删除。要减少误报,请增加该值。

为每个检测到的对象选择最强的边界框,指定为由逗号分隔的对“SelectStrongest”,要么真正的

  • 真正的-返回每个对象的最强边界框。该方法调用selectStrongestBboxMulticlass函数,该函数使用非极大抑制来基于它们的置信度分数消除重叠的边界框。

    默认情况下,selectStrongestBboxMulticlass函数的调用方式如下

    selectStrongestBboxMulticlass (bboxes分数,“RatioType”“联盟”“OverlapThreshold”, 0.5);

  • —返回所有检测到的边界框。然后,您可以编写自己的自定义方法来消除重叠的边界框。

最小区域大小,指定为由逗号分隔的对“MinSize”一个形式为[的向量高度宽度]。单位是像素。最小区域大小定义包含对象的最小区域的大小。

默认情况下,MinSize1×1。

最大区域大小,指定为由逗号分隔的对最大容量的一个形式为[的向量高度宽度]。单位是像素。最大区域大小定义包含对象的最大区域的大小。

默认情况下,最大容量的设置为输入图像的高度和宽度,.为了减少计算时间,请将此值设置为可以在输入测试图像中检测到的对象的已知最大区域大小。

最小批大小,指定为由逗号分隔的对“MiniBatchSize”一个标量值。使用MiniBatchSize处理大量的图像。为了提高计算效率,将图像分组成小批量处理。增加小批量大小以减少处理时间。减小大小以使用更少的内存。

选项,在执行对象检测之前预处理测试图像,指定为由逗号分隔的对“DetectionPreprocessing”其中一个值是:

  • “汽车”—在进行目标检测之前,对测试图像进行预处理。的检测函数调用进行预处理执行这些操作的函数:

    • 将训练图像的强度值重新缩放到[0,1]的范围。

    • 将训练图像的大小调整为最接近的网络输入大小之一,并更新边界框坐标值以进行准确的训练。该函数保留了训练数据的原始纵横比。

  • “没有”—对测试图像不进行预处理,直接进行目标检测。如果选择此选项,则测试映像的数据类型必须是

数据类型:字符|字符串

输出参数

全部折叠

在输入图像中检测到的对象的位置,作为返回

  • 如果输入是单个测试图像,则为- × 4矩阵。

  • T如果输入是测试图像数组,则为-by-1 cell array。T是数组中测试图像的个数。数组中的每个单元格都包含一个- × 4矩阵,指定边界框检测。

是图像中边界框的数量。

矩阵中的每一行都是一个四元素向量,形式为[xy宽度高度]。此向量以像素为单位指定相应边界框的左上角和大小。

每个边界框的检测置信度分数,返回为

  • -元素行向量,如果输入是单个测试图像。

  • T如果输入是测试图像数组,则为-by-1 cell array。T是数组中测试图像的个数。数组中的每个单元格都包含一个-element行向量,表示相应边界框的检测分数。

在图像中检测到的边界框的数量。分数越高,表示对检测的置信度越高。

边界框的标签,返回为

  • 如果输入是单个测试图像,则使用-by-1分类数组。

  • T如果输入是测试图像数组,则为-by-1 cell array。T是数组中测试图像的个数。数组中的每个单元格都包含一个-by-1分类向量,包含对象类的名称。

在图像中检测到的边界框的数量。

检测结果,作为一个带有变量名的3列表返回,盒子分数,标签.的盒子- × 4矩阵在图像中找到的对象的边界框。每行包含一个边界框,格式为[xy宽度高度]。该格式指定相应图像中边界框的左上角位置和大小(以像素为单位)。

扩展功能

版本历史

在R2021a中引入