检测
使用YOLO v4对象检测器检测对象
语法
描述
控件返回的所有图像中检测对象detectionResults
=检测(探测器
,ds
)读
输入数据存储的函数ds
.
例子
使用预先训练的YOLO v4对象检测器检测对象
指定预训练的YOLO v4深度学习网络的名称。
name =“tiny-yolov4-coco”;
使用预训练的YOLO v4网络创建YOLO v4对象检测器。
探测器= yolov4ObjectDetector(名称);
使用预先训练的YOLO v4对象检测器检测未知图像中的对象。
Img = imread(“sherlock.jpg”);Img = im2single(imresize(Img,0.5));[bboxes,scores,labels] = detect(检测器,img,阈值=0.4)
bboxes =1×4单行向量80.9433 31.6083 398.4628 288.3917
成绩=单0.4281
标签=分类狗
显示检测结果。
detectedImg = insertObjectAnnotation(img,“矩形”、bboxes、标签);图imshow (detectedImg)
利用YOLO v4检测器检测图像数据存储中的对象
加载一个预先训练的YOLO v4对象检测器。
探测器= yolov4ObjectDetector(“csp-darknet53-coco”);
读取测试数据并将其存储为映像数据存储对象。
Location = fullfile(matlabroot,“工具箱”,“愿景”,“visiondata”,“汽车”);imds = imageDatastore(location);
检测测试数据集中的对象。设置阈值
参数值为0.4和MiniBatchSize
取值为32。
detectionResults = detect(检测器,imds,阈值=0.4,MiniBatchSize=32);
从测试数据集中读取图像,并提取相应的检测结果。
Num = 20;I = readimage(imds,num);bboxes = detectionResults.Boxes{num};labels = detectionResults.Labels{num};scores = detectionResults.Scores{num};
执行非最大抑制从重叠的集群中选择最强的边界框。设置OverlapThreshold
参数值为0.5。
[bboxes,scores,labels] = selectstronggestbboxmulticlass (bboxes,...分数,标签,OverlapThreshold = 0.5);
显示检测结果。
结果=表格(方块,标签,分数)
结果=2×3表bboxes标签分数 ____________________________________ ______ _______ 汽车17.818 69.966 23.459 11.381 0.90267 75.206 66.011 0.58296 26.134 - 23.541的车
(I,“矩形”、bboxes、标签);图imshow (detectedImg)
利用YOLO v4检测器检测ROI内的对象
加载一个预先训练的YOLO v4对象检测器。
探测器= yolov4ObjectDetector(“csp-darknet53-coco”);
读取测试图像。
Img = imread(“stopsign.jpg”);
在测试图像中指定感兴趣的区域(ROI)。
roiBox = [250 60 500 300];
检测指定ROI内的对象。
[bboxes,scores,labels] = detect(检测器,img,roiBox);
显示ROI和检测结果。
img = insertObjectAnnotation(img,“矩形”roiBox,“投资回报”颜色=“蓝色”);detectedImg = insertObjectAnnotation(img,“矩形”、bboxes、标签);图imshow (detectedImg)
输入参数
探测器
- - - - - -YOLO v4对象检测器
yolov4ObjectDetector
对象
YOLO v4对象检测器,指定为yolov4ObjectDetector
对象。
我
- - - - - -测试的图片
数字数组
测试图像,指定为大小的数值数组H——- - - - - -W——C或H——- - - - - -W——C——- - - - - -T.图像必须是实数、非稀疏、灰度或RGB图像。
H:身高
W宽度:
C:每张图像中的通道大小必须等于网络的输入通道大小。例如,对于灰度图像,C必须等于
1
.对于RGB彩色图像,它必须等于3.
.T:数组中测试图像的个数。该函数为数组中的每个测试图像计算对象检测结果。
数据类型:uint8
|uint16
|int16
|双
|单
ds
- - - - - -测试的图片
ImageDatastore
对象|CombinedDatastore
对象|TransformedDatastore
对象
测试图像,指定为ImageDatastore
对象,CombinedDatastore
对象,或TransformedDatastore
对象,该对象包含测试图像的完整文件名。数据存储中的图像必须是灰度图像或RGB图像。
roi
- - - - - -搜索感兴趣的区域
[xy宽度高度)向量
感兴趣的搜索区域,指定为[xy宽度高度)向量。这个向量以像素为单位指定了一个区域的左上角和大小。
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:检测(检测器,阈值= 0.25)
阈值
- - - - - -检测阈值
0.5
(默认)|[0,1]范围内的标量
检测阈值,指定为范围[0,1]中的标量。得分低于此阈值的检测将被删除。要减少误报,请增加此值。
SelectStrongest
- - - - - -选择最强边框
真正的
(默认)|假
为每个检测到的对象选择最强的包围框,指定为真正的
或假
.
真正的
-返回每个对象的最强边界框。方法调用selectStrongestBboxMulticlass
函数,该函数使用非最大抑制来消除重叠的边界框,基于它们的置信度得分。默认情况下,
selectStrongestBboxMulticlass
函数的调用如下selectStrongestBboxMulticlass (bboxes分数,...RatioType =“联盟”,...OverlapThreshold = 0.5);
假
—返回所有检测到的边界框。然后,您可以编写自己的自定义方法来消除重叠的边界框。
MinSize
- - - - - -最小区域大小
[1]
(默认)|形式为[的向量高度宽度]
最小区域大小,指定为形式为[的向量高度宽度].单位以像素为单位。最小区域大小定义包含对象的最小区域的大小。
默认情况下,MinSize
1×1。
最大尺寸
- - - - - -最大区域大小
大小
(我
)(默认)|形式为[的向量高度宽度]
最大区域大小,指定为形式为[的向量高度宽度].单位以像素为单位。最大区域大小定义包含对象的最大区域的大小。
默认情况下,最大尺寸
设置为输入图像的高度和宽度,我
.为了减少计算时间,将该值设置为输入测试图像中可以检测到的对象的已知最大区域大小。
MiniBatchSize
- - - - - -最小批尺寸
128
(默认)|标量
最小批处理大小,指定为标量值。使用MiniBatchSize
处理大量的图像集合。为提高计算效率,将图像分组为小批,分批处理。增加小批尺寸以减少处理时间。减小大小以使用更少的内存。
ExecutionEnvironment
- - - - - -硬件资源
“汽车”
(默认)|“图形”
|“cpu”
运行检测器的硬件资源,指定为逗号分隔的对,由“ExecutionEnvironment”
而且“汽车”
,“图形”
,或“cpu”
.
“汽车”
—如果有图形处理器,请使用图形处理器。否则,请使用CPU。“图形”
—使用GPU。要使用GPU,你必须有并行计算工具箱™和CUDA®使英伟达®GPU。如果没有合适的GPU,函数将返回一个错误。有关支持的计算功能的信息,请参见GPU计算要求(并行计算工具箱).“cpu”
—使用CPU。
加速度
- - - - - -性能优化
“汽车”
(默认)|墨西哥人的
|“没有”
性能优化,指定为逗号分隔的对组成“加速”
和以下其中之一:
“汽车”
-自动应用一些适合输入网络和硬件资源的优化。墨西哥人的
—编译并执行MEX函数。该选项仅在使用GPU时可用。使用GPU需要并行计算工具箱和CUDA支持的NVIDIA GPU。如果并行计算工具箱或合适的GPU不可用,则函数返回错误。有关支持的计算功能的信息,请参见GPU计算要求(并行计算工具箱).“没有”
—禁用所有加速。
默认选项是“汽车”
.如果“汽车”
, MATLAB®应用许多兼容优化。如果您使用“汽车”
选项,MATLAB从未生成MEX函数。
使用“加速”
选项“汽车”
而且墨西哥人的
可以提供性能优势,但以增加初始运行时间为代价。使用兼容参数的后续调用会更快。当您计划使用新的输入数据多次调用函数时,请使用性能优化。
的墨西哥人的
选项根据函数调用中使用的网络和参数生成并执行MEX函数。您可以同时拥有与单个网络相关联的多个MEX函数。清除网络变量也会清除与该网络关联的任何MEX函数。
的墨西哥人的
选项仅对指定为数值数组、数值数组的单元格数组、表或图像数据存储的输入数据可用。类型的数据存储不支持墨西哥人的
选择。
的墨西哥人的
选项仅在使用GPU时可用。您还必须安装C/ c++编译器。有关设置说明,请参见墨西哥人设置(GPU编码器).
墨西哥人的
加速并不支持所有层。有关受支持层的列表,请参见支持层(GPU编码器).
输出参数
bboxes
-检测到的物体的位置
米- by4矩阵|T-by-1单元数组
在输入图像中检测到的对象的位置,作为
米-by-4矩阵,如果输入是单个测试图像。
T如果输入是测试图像数组,则使用-by-1 cell array。T数组中测试图像的数量。数组中的每个单元格都包含米-by-4矩阵,指定边界框检测。
.米是图像中边界框的数量。
矩阵中的每一行都是一个四元素向量,形式为[xy宽度高度].这个向量指定了左上角和相应边框的大小(以像素为单位)。
分数
-检测分数
米-元素行向量|T-by-1单元数组
每个边界框的检测置信度分数,返回为
米-元素行向量如果输入是一个单一的测试图像。
T如果输入是测试图像数组,则使用-by-1 cell array。T数组中测试图像的数量。数组中的每个单元格都包含米-element行向量,表示对应边界框的检测分数。
米在图像中检测到的边界框的数量。分数越高表示检测的信心越高。
标签
—绑定框的标签
米-by-1分类向量|T-by-1单元数组
绑定框的标签,作为对象返回
米如果输入是单个测试图像,则使用-by-1分类数组。
T如果输入是测试图像数组,则使用-by-1 cell array。T数组中测试图像的数量。数组中的每个单元格都包含米-by-1包含对象类名称的分类向量。
米在图像中检测到的边界框的数量。
detectionResults
-检测结果
三栏表
检测结果作为一个包含变量名的3列表返回,盒子,分数,标签.的盒子列米-by-4矩阵米在图像中找到的对象的边框。每一行包含一个作为4元素向量的边界框,格式为[x,y,宽度,高度].该格式指定了相应图像中边界框的左上角位置和像素大小。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
的
roi
的论证检测
方法必须是代码生成常量(coder.const ()
)和一个1x4向量。只有
阈值
,SelectStrongest
,MinSize
,最大尺寸
,MiniBatchSize
的名-值对检测
都受支持。
GPU代码生成
使用GPU Coder™为NVIDIA GPU生成CUDA®代码。
的
roi
的论证检测
方法必须是代码生成常量(coder.const ()
)和一个1x4向量。只有
阈值
,SelectStrongest
,MinSize
,最大尺寸
,MiniBatchSize
的名-值对检测
都受支持。
有关如何创建yolov4ObjectDetector
对象用于代码生成,请参见为代码生成加载预先训练的网络(MATLAB编码器).
版本历史
在R2022a中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。