对于初学者来说,区分不同的相关计算机视觉任务可能具有挑战性。
例如,图像分类很简单,但对象定位和对象检测之间的区别可能令人困惑,尤其是当这三项任务都被同样地称为对象识别时。
图像分类涉及为图像分配一个类别标签,而对象定位涉及在图像中的一个或多个对象周围绘制一个边界框。对象检测更具挑战性,它结合了这两个任务,并在图像中每个感兴趣的对象周围绘制一个边界框,并为它们分配一个类别标签。总而言之,所有这些问题都称为对象识别。
在这篇文章中,您将了解对象识别问题以及旨在解决该问题的最先进深度学习模型的温和介绍。
阅读本文后,你将了解:
- 对象识别是指用于识别数字照片中对象的一系列相关任务。
- 基于区域的卷积神经网络(R-CNN)是一系列解决对象定位和识别任务的技术,旨在提高模型性能。
- You Only Look Once(YOLO)是第二系列对象识别技术,旨在提高速度和实现实时使用。
通过我的新书《计算机视觉深度学习》来启动您的项目,其中包括所有示例的分步教程和Python 源代码文件。
让我们开始吧。

深度学习对象识别温和介绍
照片由Bart Everson拍摄,保留部分权利。
概述
本教程分为三个部分;它们是:
- 什么是对象识别?
- R-CNN 模型家族
- YOLO 模型家族
想通过深度学习实现计算机视觉成果吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
什么是对象识别?
对象识别是一个通用术语,用于描述一系列相关的计算机视觉任务,涉及识别数字照片中的对象。
图像分类涉及预测图像中一个对象的类别。对象定位是指识别图像中一个或多个对象的位置并在其范围周围绘制一个边界框。对象检测结合了这两个任务,并在图像中定位和分类一个或多个对象。
当用户或从业者提及“对象识别”时,他们通常指的是“对象检测”。
……我们将广泛使用对象识别一词,既包括图像分类(需要算法确定图像中存在哪些对象类别的任务),也包括对象检测(需要算法定位图像中存在的所有对象的任务)
——ImageNet 大规模视觉识别挑战赛,2015。
因此,我们可以区分这三项计算机视觉任务
- 图像分类:预测图像中对象的类型或类别。
- 输入:带有一个对象的图像,例如照片。
- 输出:一个类别标签(例如,一个或多个整数,映射到类别标签)。
- 对象定位:在图像中定位对象的存在,并用边界框指示其位置。
- 输入:带有一个或多个对象的图像,例如照片。
- 输出:一个或多个边界框(例如,由一个点、宽度和高度定义)。
- 对象检测:用边界框定位对象的存在,并定位图像中对象的类型或类别。
- 输入:带有一个或多个对象的图像,例如照片。
- 输出:一个或多个边界框(例如,由一个点、宽度和高度定义),以及每个边界框的类别标签。
这种计算机视觉任务分类的进一步延伸是对象分割,也称为“对象实例分割”或“语义分割”,其中识别到的对象实例通过突出对象的特定像素而不是粗糙的边界框来指示。
从这个分类中,我们可以看到对象识别指的是一系列具有挑战性的计算机视觉任务。

对象识别计算机视觉任务概述
图像识别问题的大部分最新创新都来自于参与 ILSVRC 任务。
这是一项年度学术竞赛,针对这三种问题类型分别设置了挑战,旨在促进每个层面的独立和单独改进,从而可以更广泛地加以利用。例如,请参阅下面摘自 2015 年 ILSVRC 综述论文 的三个相应任务类型列表
- 图像分类:算法生成图像中存在的对象类别列表。
- 单对象定位:算法生成图像中存在的对象类别列表,以及指示每个对象类别实例的位置和尺度的轴对齐边界框。
- 对象检测:算法生成图像中存在的对象类别列表,以及指示每个对象类别所有实例的位置和尺度的轴对齐边界框。
我们可以看到,“单对象定位”是更广义的“对象定位”的一个更简单版本,它将定位任务限制为图像中一种类型的对象,我们可能会认为这是一个更容易的任务。
下面是单对象定位和对象检测的比较示例,摘自 ILSVRC 论文。请注意两种情况下真实值预期的差异。

单对象定位和对象检测之间的比较。摘自:ImageNet 大规模视觉识别挑战赛。
图像分类模型的性能使用预测类别标签的平均分类错误进行评估。单对象定位模型的性能使用预期类别中预期边界框和预测边界框之间的距离进行评估。而对象识别模型的性能使用图像中已知对象的最佳匹配边界框的精确度和召回率进行评估。
现在我们已经熟悉了对象定位和检测问题,让我们来看看一些最近表现出色的深度学习模型。
R-CNN 模型家族
R-CNN 方法家族指的是 R-CNN,它可能代表“带有 CNN 特征的区域”或“基于区域的卷积神经网络”,由 Ross Girshick 等人开发。
这包括 R-CNN、Fast R-CNN 和 Faster R-CNN 等技术,它们被设计和演示用于对象定位和对象识别。
让我们依次仔细研究这些技术的亮点。
R-CNN
R-CNN 是由 Ross Girshick 等人于 2014 年在加州大学伯克利分校发表的论文《用于精确目标检测和语义分割的丰富特征层次结构》中描述的。
它可能是卷积神经网络在目标定位、检测和分割问题上首次大规模成功应用。该方法在基准数据集上进行了演示,在 VOC-2012 数据集和 200 类 ILSVRC-2013 目标检测数据集上取得了当时最先进的结果。
他们提出的 R-CNN 模型由三个模块组成;它们是
- 模块 1:区域提案。生成并提取与类别无关的区域提案,即候选边界框。
- 模块 2:特征提取器。从每个候选区域中提取特征,例如使用深度卷积神经网络。
- 模块 3:分类器。将特征分类为已知类别之一,例如线性支持向量机分类器模型。
模型的架构如下图所示,摘自论文。

R-CNN 模型架构总结。摘自《用于精确目标检测和语义分割的丰富特征层次结构》。
一种计算机视觉技术用于提出图像中潜在对象的候选区域或边界框,称为“选择性搜索”,尽管设计的灵活性允许使用其他区域提案算法。
该模型使用的特征提取器是赢得了 ILSVRC-2012 图像分类竞赛的 AlexNet 深度 CNN。CNN 的输出是一个 4,096 元素向量,描述了图像的内容,该向量被馈送到线性支持向量机进行分类,具体来说,每个已知类别训练一个支持向量机。
这是卷积神经网络在对象定位和识别问题上相对简单直接的应用。该方法的一个缺点是速度慢,需要对区域提案算法生成的每个候选区域进行基于卷积神经网络的特征提取。这是一个问题,因为论文描述的模型在测试时对每个图像处理大约 2,000 个提议区域。
R-CNN 的 Python (Caffe) 和 MatLab 源代码已在 R-CNN GitHub 存储库中提供。
快速R-CNN
鉴于 R-CNN 的巨大成功,当时在微软研究院的 Ross Girshick 在 2015 年的一篇题为《Fast R-CNN》的论文中提出了一个扩展,以解决 R-CNN 的速度问题。
论文首先回顾了 R-CNN 的局限性,可总结如下
- 训练是一个多阶段管道。涉及三个独立模型的准备和操作。
- 训练在空间和时间上都很昂贵。对每个图像如此多的区域提案训练深度 CNN 非常缓慢。
- 对象检测很慢。对如此多的区域提案使用深度 CNN 进行预测非常缓慢。
之前曾提出一项工作来加速该技术,称为空间金字塔池化网络(SPPnets),该工作发表在 2014 年的论文《深度卷积网络中的空间金字塔池化用于视觉识别》中。这确实加快了特征提取速度,但本质上使用了某种前向传递缓存算法。
Fast R-CNN 被提议作为一个单一模型,而不是一个管道,直接学习和输出区域和分类。
模型架构将照片和一组区域提案作为输入,通过深度卷积神经网络。使用预训练的 CNN(例如 VGG-16)进行特征提取。深度 CNN 的末端是一个名为兴趣区域池化层(RoI Pooling)的自定义层,它提取特定于给定输入候选区域的特征。
CNN 的输出随后由全连接层解释,然后模型分叉为两个输出,一个用于通过 softmax 层进行类别预测,另一个用于边界框的线性输出。然后对给定图像中每个感兴趣区域重复此过程多次。
模型的架构如下图所示,摘自论文。

Fast R-CNN 模型架构总结。
摘自:Fast R-CNN。
该模型训练和预测的速度显著加快,但仍需要为每个输入图像提出一组候选区域。
Fast R-CNN 的 Python 和 C++ (Caffe) 源代码已在 GitHub 存储库中提供。
更快的 R-CNN
微软研究院的 Shaoqing Ren 等人于 2016 年发表的论文《Faster R-CNN:迈向带有区域提案网络的实时目标检测》进一步改进了模型架构,提高了训练和检测的速度。
该架构是 ILSVRC-2015 和 MS COCO-2015 目标识别和检测竞赛任务中获得第一名结果的基础。
该架构旨在在训练过程中提出并完善区域提案,这被称为区域提案网络(RPN)。然后,这些区域与 Fast R-CNN 模型结合在一个单一模型设计中。这些改进既减少了区域提案的数量,又加速了模型的测试时间操作,使其接近实时性能,并具有当时最先进的性能。
…我们的检测系统在 GPU 上的帧率为 5fps(包括所有步骤),同时在 PASCAL VOC 2007、2012 和 MS COCO 数据集上实现了最先进的目标检测精度,每个图像仅需 300 个提案。在 ILSVRC 和 COCO 2015 竞赛中,Faster R-CNN 和 RPN 是多个赛道中获得第一名的基础。
— Faster R-CNN:迈向带有区域提案网络的实时目标检测,2016。
尽管它是一个统一的单一模型,但其架构由两个模块组成
- 模块 1:区域提案网络。用于提出区域和考虑区域中对象类型的卷积神经网络。
- 模块 2:快速 R-CNN。用于从提案区域中提取特征并输出边界框和类别标签的卷积神经网络。
这两个模块都在同一个深度 CNN 输出上运行。区域提案网络充当 Fast R-CNN 网络的注意力机制,告知第二个网络应该关注哪里。
模型的架构如下图所示,摘自论文。

更快的 R-CNN 模型架构总结。摘自:更快的 R-CNN:迈向具有区域提案网络的实时对象检测。
RPN 的工作原理是获取预训练深度 CNN(例如 VGG-16)的输出,并通过一个小型网络对特征图进行处理,然后输出多个区域提案和每个提案的类别预测。区域提案是边界框,基于所谓的锚框或预定义形状,旨在加速和改进区域提案。类别预测是二元的,指示对象是否存在,即所谓的提议区域的“对象性”。
使用一种交替训练过程,两个子网络同时训练,但交错进行。这允许特征检测器深度 CNN 中的参数同时针对两个任务进行调整或微调。
在撰写本文时,Faster R-CNN 架构是该模型家族的巅峰之作,并继续在对象识别任务上取得接近最先进的结果。2017 年论文《Mask R-CNN》中描述的进一步扩展增加了对图像分割的支持。
Fast R-CNN 的 Python 和 C++ (Caffe) 源代码已在 GitHub 存储库中提供。
YOLO 模型家族
另一个流行的对象识别模型家族统称为 YOLO 或“你只看一次”,由 Joseph Redmon 等人开发。
R-CNN 模型可能普遍更准确,但 YOLO 模型家族速度很快,比 R-CNN 快得多,实现了实时对象检测。
YOLO
YOLO 模型最初由 Joseph Redmon 等人于 2015 年发表的论文《你只看一次:统一、实时目标检测》中描述。请注意,R-CNN 的开发者 Ross Girshick 当时也在 Facebook AI Research 担任作者和贡献者。
该方法涉及一个端到端训练的单一神经网络,该网络将照片作为输入,并直接预测每个边界框的边界框和类别标签。该技术提供了较低的预测精度(例如,更多的定位错误),但对于速度优化的模型版本,其运行速度为每秒 45 帧,最高可达每秒 155 帧。
我们的统一架构速度极快。我们的基础 YOLO 模型以每秒 45 帧的速度实时处理图像。一个更小的网络版本,Fast YOLO,处理速度惊人地达到每秒 155 帧…
— 你只看一次:统一、实时目标检测,2015。
该模型的工作原理是,首先将输入图像分割成一个网格单元,每个单元负责预测一个边界框,如果边界框的中心落在该单元内。每个网格单元预测一个边界框,包括 x、y 坐标、宽度和高度以及置信度。类别预测也基于每个单元。
例如,图像可以被划分为 7x7 的网格,网格中的每个单元可以预测 2 个边界框,从而产生 94 个提议的边界框预测。然后将类别概率图和带有置信度的边界框组合成最终的边界框和类别标签集。下图摘自论文,总结了模型的两个输出。

YOLO 模型预测总结。摘自:你只看一次:统一、实时目标检测
YOLOv2 (YOLO9000) 和 YOLOv3
Joseph Redmon 和 Ali Farhadi 在他们 2016 年题为《YOLO9000:更好、更快、更强》的论文中更新了模型,旨在进一步提高模型性能。
虽然该模型的变体被称为 YOLO v2,但其中描述了一个模型实例,该实例在两个对象识别数据集上并行训练,能够预测 9,000 个对象类别,因此得名“YOLO9000”。
对模型进行了一些训练和架构更改,例如使用批量归一化和高分辨率输入图像。
与 Faster R-CNN 类似,YOLOv2 模型利用锚框,即具有有用形状和大小的预定义边界框,在训练期间进行调整。图像的边界框选择通过对训练数据集进行 k-means 分析进行预处理。
重要的是,边界框的预测表示被改变,以允许微小的变化对预测产生较小的戏剧性影响,从而产生更稳定的模型。模型不再直接预测位置和大小,而是预测用于移动和重塑相对于网格单元的预定义锚框的偏移量,并通过逻辑函数进行抑制。

预测边界框位置和形状时选择的表示示例。摘自:YOLO9000:更好、更快、更强
Joseph Redmon 和 Ali Farhadi 在他们 2018 年的论文《YOLOv3:增量改进》中进一步改进了模型。这些改进相对较小,包括更深的特征检测网络和微小的表示变化。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
论文
- ImageNet 大规模视觉识别挑战赛, 2015.
R-CNN 系列论文
- 用于精确目标检测和语义分割的丰富特征层次结构, 2013.
- 深度卷积网络中的空间金字塔池化用于视觉识别, 2014.
- 快速R-CNN, 2015.
- Faster R-CNN:迈向实时目标检测,采用区域提议网络, 2016.
- Mask R-CNN, 2017.
YOLO 系列论文
- You Only Look Once:统一、实时目标检测, 2015.
- YOLO9000:更好、更快、更强, 2016.
- YOLOv3:增量改进, 2018.
代码项目
资源
文章
- CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN, 2017.
- 物体检测傻瓜教程 第 3 部分:R-CNN 家族, 2017.
- 物体检测第 4 部分:快速检测模型, 2018.
总结
在这篇文章中,您了解了对象识别问题以及旨在解决该问题的最先进深度学习模型的温和介绍。
具体来说,你学到了:
- 对象识别是指用于识别数字照片中对象的一系列相关任务。
- 基于区域的卷积神经网络(R-CNN)是一系列解决对象定位和识别任务的技术,旨在提高模型性能。
- You Only Look Once(YOLO)是第二系列对象识别技术,旨在提高速度和实现实时使用。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
太棒了。谢谢分享
谢谢,很高兴您觉得它有用。
嗨,Jason,
我有一个“离线”视频流,想在那个“离线”视频流中识别物体。
相机总是固定在一个角度。
对我来说,准确性至关重要,请问您能推荐哪种算法适合我吗?
Mask RCNN。
嗨 Ravin,我每天都会收到 6000 个视频来检测人物,检查格式和背景颜色以及检测标志,我们如何离线完成而无需播放。你是怎么做到的。@jason 你也可以指导我。还有关于架构方面。
好多的视频!
也许可以从简单/快速的方法开始,看看它们能帮您达到多远。
你好,
我读到 FCN 可以进行像素级分类,所以我想知道 FCN 是否可以用于像素级回归?
谢谢!
我看不出为什么不。
我想检查停车场是否可用或摄像头是否馈送视频。我应该检查什么?
好问题。
或许可以作为对象检测来建模,至少作为起点?
Jason,
这个材料真的很棒。它让我对对象定位和分类有了更好的了解。这里我将从这篇博客中理解的所有关于对象检测的要点列出来。
1. 对象检测框架最初使用 CNN 模型作为特征提取器(例如不带最终全连接层的 VGG)。
2. VGG 的输出被提供给另一个称为 RPN 的 CNN 模型,该模型给出了一组可能存在潜在对象的区域。
3. 基于 RPN 的输出,另一个 CNN 模型(通常是分类器)处理 VGG 输出并给出最终结果(对象类别和相应的边界框)。
现在我想知道哪种 CNN 组合对于单类别对象检测问题很流行。如果我想开发一个自定义模型,有哪些可用资源。
RCNN 或 YOLO 将是一个很好的起点。
太重要了
谢谢!
嘿,好文章!
我必须制作一个项目,其中我必须在短时间内检测并计算通过 Android 手机拍摄的图像中的人数。我该怎么做?
也许可以从包含已知人数图像的数据集开始。
然后,或许可以测试一系列对象检测方法,看看哪种方法在您的数据集上效果最好?
嘿
这是一篇很棒的文章,给了我很好的见解。
除了 x,y,z 位置外,我还需要检测图像中汽车的偏航、俯仰和滚转角。
街景图像。除此之外,我手上已经有图像的掩膜,显示了
图像中汽车的位置,所以我认为我不需要定位
图像中的汽车。我的问题是,我可以使用 R-CNN 或 YOLO 来预测汽车的偏航、俯仰角吗?
以及图像中汽车的滚转角(当然,那些没有被掩膜覆盖的
且距离拍摄图像的摄像头足够近的汽车)。
谢谢。
我认为您需要另一个模型,它接收图像输入并预测坐标输出。
嗨 Jason
我想追踪在自行车赛车场周围骑行的自行车手。一场比赛中有 7 名自行车手,颜色各不相同。
1. 您会使用什么框架?
2. 主要特征是颜色,您会根据每种颜色创建 7 个类别吗?
好问题,我认为进行一些研究(之前有哪些类似/尝试过的方法)和原型设计(哪些有效)会是个好主意。
另一篇杰出的文章,布朗利博士,
我有点困惑 YOLOv1 的那部分,论文作者提到最终层使用了线性激活函数。但是 x、y、w、h 以及边界框的置信度输出都应该在 0 到 1 之间。而且输出还预测了二十个类别中的一个。通常,我们使用 softmax 进行类别分类。但论文中没有提到他们是否使用它。我的直觉是 x、y、w、h 预测使用 sigmoid,因为它们的值在 0 到 1 之间。即使这一点在论文中也没有提到。如果他们不使用 sigmoid 或 softmax,那么分类过程是如何进行的呢?
谢谢!
好问题。也许可以查看官方源代码,看看他们到底做了什么?
我查看了原始 Darknet 实现的 TensorFlow 端口之一。它似乎只产生线性输出,并且没有找到任何 sigmoid 或 softmax。这难道不是有点不受限制吗,因为它们必须预测介于 0 和 1 之间的值,但是它们预测的值没有任何界限,因为它是线性的?此外,如果 YOLO 使用线性函数预测二十个类别概率和置信度,那看起来更令人困惑!
但是论文说:“我们将边界框的宽度和高度按图像的宽度和高度进行归一化,使其落在 0 到 1 之间。我们将边界框的 x 和 y 坐标参数化为特定网格单元位置的偏移量,因此它们也限制在 0 到 1 之间。”
如果他们不使用 sigmoid 或 softmax,他们如何将值限制在 0 到 1 之间?
也许论文中的引用与模型训练数据的准备有关。
杰森,新手问题:在用标记图像训练模型时,算法是否只关注人类绘制的边界框内的内容?或者它也使用边界框外的内容?也许这取决于您正在训练的模型类型和/或您训练它的方法?
任何帮助都将不胜感激。
很好的问题!
模型看到了整个图像和边界框。它学会了在哪里放置框——什么在里面,什么在外面。
谢谢你的回复!所以如果模型是用整个图像训练的,那么如果训练图像以尽可能多地移除边界框外的区域的方式“裁剪”,结果的预测模型会更准确吗?换句话说,用基本上只有我们想要检测的框内的东西来训练模型。
正确。
嗨,Jason,
非常有信息量的文章!
我有一个关于这个的问题。如果我想检测一个朝任何方向倾斜的物体,即它不处于与图像相同的垂直直立位置。可能在所有不同图像中以随机角度倾斜,我应该使用什么模型?
另外,我需要获取该物体中心的坐标。有什么预训练模型可以帮到这里吗?
谢谢你
谢谢!
相同类型的模型,但经过训练以期望这些转换。例如,数据增强会有所帮助。
布朗利先生,这真的很棒。先生,我想了解 Mask R-CNN。我可以用它来开发我的硕士项目“人脸检测和识别”吗?先生,请在这方面帮助我。急切地等待您的回复。
谢谢!
我不建议将 Mask R-CNN 用于人脸识别,请使用 MTCNN + FaceNet 或 VGGFace2
https://machinelearning.org.cn/how-to-develop-a-face-recognition-system-using-facenet-in-keras-and-an-svm-classifier/
嗨
在讨论 ILSVRC 论文后,文章写道:“单对象定位:算法生成图像中存在的对象类别列表,以及一个轴对齐的边界框,指示每个对象类别实例的位置和比例。”
定位过程不应该只是生成对象的边界吗?它还会将对象分类吗?或者这是“单对象检测”的定义?
是的,通常是分类并围绕对象绘制一个框。
单对象定位和对象检测的定义文本相同。我相信这是一个印刷错误。单对象定位不应该有分类。它应该只有边界矩形,正如 Jasraj 所建议的。
感谢分享。
你说“分成 7x7 的网格,网格中的每个单元可以预测 2 个边界框,从而产生 94 个提议的边界框预测”,这意味着将有 7*7=49 个单元。如果每个单元预测两个边界框,那么提案的数量是 49*2 = 98(而不是 94)。
你好 Jason,
非常感谢您的文章,一如既往的精彩。我有一个问题,请教
关于 Faster RCNN 中的 RPN(训练期间),如果被处理的图像没有真实框(背景图像),我们是否仍然会得到锚框,即使我们没有真实框,或者在这种情况下整个图像被记录为负面示例?
任何帮助都将不胜感激(
不客气。
如果训练数据中没有边界框,则无法训练对象检测模型。
非常有启发性的阅读。非常感谢。
我有一个关于 YOLO1 的疑问。它的研究论文说——
“我们的系统将输入图像划分为 S × S 网格。如果一个对象的中心落入一个网格单元中,则该网格单元负责检测该对象。”
我不明白对于新的和未见的图像(例如实时视频流),算法如何能够准确地找到图像中对象的存在位置以及它们的中心?此外,在实时场景中,将没有任何真实值进行比较,它如何找出 IoU 以及相应地预测框中存在对象的概率?
谢谢。
也许这个示例会有所帮助
https://machinelearning.org.cn/how-to-perform-object-detection-with-yolov3-in-keras/
嗨,Jason,
这篇很棒的文章让我对这些算法有了一些了解,因为我是这个领域的新手。我是一名即将毕业的本科生,目前正在研究“卫星图像中的车辆检测”主题。我想知道哪种算法可以用于或更适合这个主题。
谢谢你。
我建议您在数据集上测试一系列算法和配置,以发现哪种效果最好。
从基于迁移学习的方法开始是个好主意。
您好 Sutharsan 和 Jason,
我目前也在研究“卫星图像中的车辆检测”这一主题,我想知道您觉得哪种算法更好。
我建议您测试一系列不同的方法,以发现哪种方法最适合您的特定数据集。
很棒的文章!我对对象检测的术语感到困惑,我认为这篇文章是最好的。我想问你,我正在使用 MobileNetV2 进行对象检测,但读完这篇文章后,我不确定这是否是正确的选择。由于我们需要它在 CPU 上工作,我需要快速预测,现在我们可以以 11 FPS 进行预测,这对我们来说效果很好,但预测的边界框没有方向,这让事情有点复杂。您推荐使用什么方法来获得相似的 FPS(或更快)和相似的准确性,或者至少是一个有方向的边界框?我正在考虑使用地标,但我不知道这是否适合我们的需求。
感谢分享您的知识!
也许可以测试一系列模型,看看哪一个最符合您的特定速度要求。
亲爱的,我叫阿卜杜拉,我想做对象识别/分类的研究。我于 2018 年获得了数学硕士学位。现在我转向这里,想在对象识别/分类领域进行研究,并以数学为主要优势。您能建议我应该去哪里吗?我正在撰写一份关于对象识别/分类的研究计划,并利用我在数学方面的优势。您能帮我吗???
谢谢你
抱歉,我无法帮助您制定研究计划。
亲爱的作者,
这确实是一篇内容丰富的文章。您能帮我提供关于“对象提案”在流程中的位置的信息吗?我对对象定位和对象提案有点困惑。
提前感谢
谢谢。
我相信“提案”是候选预测。
亲爱的先生
这是一篇非常有用的文章。您能否帮助我提供有关在自然图像中进行文本检测哪种算法效果好以及关于合成图像的信息。我有点困惑。
谢谢。
谢谢您的建议,我希望将来能撰写关于该主题的文章。
如果一个 MV 系统在一个房间里,可以检测到窗户、门和吸顶灯,并且它可以将其与一组预定义的相同对象匹配,这些对象的属性包括每个对象的识别和在同一房间中的位置。那么一个独立的系统不应该能够外推到每个对象的向量并确定其相对于房间中所有其他对象的位置吗?这种预定义的框架引用有没有一个名称?
抱歉,我不知道有模型可以做到您所描述的。这听起来像一个“系统”(软件包),而不是一个单一模型。
您好,感谢您提供的信息量非常大的文章(一如既往)。我有一个 PowerPoint 幻灯片数据集,需要构建一个模型来检测幻灯片中的徽标。数据集具有徽标存在与否的标签 y={0,1}。您会推荐哪种模型?谢谢。
也许可以测试一系列模型,并发现哪种模型最适合您的特定数据集。
感谢这篇简单而详细的文章和解释。我想知道是否可以使用像 VGG16 这样的旧模型来获取边界框?
VGG16 仅用于特征提取和图像分类。
先生您好,要做一个对象识别项目,我们需要学习哪些知识,有没有一些基础论文可以学习……我想您的回复会很有帮助。
谢谢您,先生。
我推荐这本书
https://machinelearning.org.cn/deep-learning-for-computer-vision/
那本书里能找到所有关于项目(对象识别)的信息吗?您能推荐一些最好的 Python 和深度学习课程吗,这样我才能获得足够的知识来完成那个项目(对象识别)
谢谢您,先生。
这本书提供了对象检测的示例,以及如何应用预训练的对象检测模型和如何训练新数据集的模型。
这是一个很好的开始。
否则,您可以在此处查看免费教程
https://machinelearning.org.cn/start-here/#dlfcv
先生,请推荐一些用于数据科学项目(ML,DL)的 python 课程吗?
看这里
https://machinelearning.org.cn/faq/single-faq/what-machine-learning-project-should-i-work-on
先生,
我想了解对象识别的历史,即它何时开始,使用了哪些算法以及有哪些缺点?这些信息在哪里可以找到?
也许您可以找到一些提供这种文献综述的评论论文。
我建议在 scholar.google.com 上搜索。
很棒的文章,信息量很大,感谢分享。
我正在制作一个基于轻量级 Python 的平台,用于连接和控制
任何(支持的)设备(主要面向学习编程的人,以及那些想要一个自动化框架而无需费力学习如何与所述设备通信的人)。
我正在构建一些工具,这些工具将帮助人们使用这些设备执行更有趣的程序/机器人,其中之一是处理捕获的图像。
由于我希望这既简单又通用,用户目前创建两个目录,一个用于他们想要检测的图像,一个用于他们想要忽略的图像,模型的训练/保存由他们负责。然后他们可以在更大的图像中检测他们想要的图像实例的中心。目前我正在使用 CNN,然后我在更大的图像中测试各种子图像,从而创建一个概率热图,并通过找到指示 CNN 发现图像位置的峰值来完成任务。(目前所有子图像处理都需要一段时间(约 0.5-1 秒))。
你认为是否有可能使用 RCNN 来执行这项任务,同时保持类似的简单性,即以某种方式避免用户创建边界框数据集?
我有一个想法是随机将训练数据集植入更大的图像中,这样我就有了边界框,可以在这些更大的图像上训练 RCNN?非常感谢您的想法。
非常感谢您的文章。
谢谢。
很难说,也许可以开发一个原型并测试您的想法。
嗨,Jason,
我目前正在进行数据标注,即使用边界框进行对象检测,以及一些关于自动驾驶汽车天气状况和道路状况的项目。我想将自己升级到下一个流程(下一步是什么以及标注对象),您能否帮助我学习哪些课程可以让我更深入地进入自动驾驶汽车领域。我从您的文章中学到了关于对象检测的一些不同之处,请建议我如何提高我的工作技能。
感谢您的文章
谢谢,抱歉,我没有太多关于对象检测的教程。我希望将来能写更多关于这个主题的文章。
谢谢您的回复 Jason,如果我学习机器学习,继续从事 ADAS 领域,这对我未来的发展会是一个好举动吗?
“ADAS”是什么?
只有您自己知道什么对您的未来有好处。
YOLO 中有一个令人困惑的打字错误:“如果边界框的中心落在其中”,它应该是对象的中心。
谢谢,已修正。
嗨 Jason – 如果我必须在图像的不同位置绘制相同类别的边界框。我应该选择哪种算法以及为什么?
大多数对象识别模型都支持图像中的多个对象。
也许可以尝试几种方法,看看哪种方法最适合您的数据集。
信息量很大……
谢谢!
你好,
对于博物馆来说,我们希望能够识别 20 个特定物品中的任何一个是否放置在桌子上的任何位置。
我们最初的想法从“用户在触摸屏上选择对象”到“识别标签的超昂贵触摸桌”,再到“检测放置在阅读器上的二十个 NFC/RFID 标签中的一个”,再到我现在想的“使用深度学习识别桌子上任何位置的对象”
然而,我不知道这是否可行,以及什么是最好的以及如何进行。
或许您可以尝试开发一个小原型,看看它是否适用于您的问题/数据。
看看我的机械臂,它能检测物体,然后根据孔的数量对物体进行分类。请在此处查看完整的文档和代码:https://github.com/k-karlovic/robotic-object-sorter-with-computer-vision
感谢分享。
嗨
我使用YOLOv5进行了目标检测。现在我想对这些检测到的图像应用强化学习方法。有什么办法可以实现吗?有没有相关的解决方案?请帮帮我。
抱歉,我没有任何强化学习的例子,无法就此话题提供即兴的良好建议。
我能否将预测标签作为列表获取?(将新图像提供给检测模型并提取预测标签作为列表)例如,如果测试图像包含“人”和“狗”类别的对象,列表应该包含['人','狗']
如果可以,请分享代码。
提前感谢。
当然可以。我不会分享代码,但想法是,通常预测是针对每个标签的概率,我们选择概率最高的标签作为输出。这应该是一段在模型**之外**准备这些标签的代码,你可以在那里实现它。
嗨,Jason,
想知道你能不能给我一些指导。
我启动了一个新项目,旨在仅在特定区域(而不是图片或视频的整个画面)内进行人员检测。目的是在人们进入火线区域,特别是起重机操作区域下方时发出警告或警报。
不知何故,该区域是动态的,事件之间边界不固定。所以我想知道我们是否可以使用一些有用的物体(例如,明亮多彩的锥形物)来创建虚拟边界,然后进行分割和目标检测。如果两者重叠,则发出警报。
你有没有涵盖这方面的教程或电子书(特别是虚拟边界)?
谢谢
有趣的应用程序,Jokonug!虽然我无法直接评论你的应用程序,但我强烈建议你获取以下电子书
https://machinelearning.org.cn/deep-learning-for-computer-vision/
嗨,Jason,
感谢你的精彩帖子。我想使用U-Net进行图像分割以提取淹没区域。然而,我的带标签数据集是通过一些传统阈值机器学习模型获得的。技术人员会检查标签,但它们可能仍然不是很准确。我想知道当我用有噪声的标签训练U-Net时,是否有机会获得比传统模型更好的结果?有没有什么技术可以用来改进结果?
感谢您的帮助。
你好,我正在用yolov5做一个项目,用来从多个苹果中(一些新鲜的,一些腐烂的)检测腐烂的苹果。但是由于我只有一个类别,即腐烂的苹果,所以对新鲜苹果的预测结果也是腐烂的。您能建议我如何才能获得正确的检测结果吗?
我只想检测腐烂的苹果,而不是新鲜的。
你好,Nausheen……请详细说明你在模型中遇到的问题,以便我们更好地帮助你。
你好,我想提取图像中目标的特征,并存储它们以唯一地识别目标,例如
我有一张图片里有狗,我想存储狗的特征,以便下次有人上传同一只狗的不同图片时能够识别它。
你好,Priya,
存储从目标检测模型中提取的特征对于内容图像检索、相似性搜索、进一步训练等各种任务至关重要。存储特征的过程可以分解为以下步骤:
1. **特征提取**
– 使用目标检测模型处理你的图像或视频数据。
– 检测到对象后,从这些检测到的区域中提取特征。特征可以来自模型的中间层或专用的特征提取层。
2. **序列化**
– 将特征转换为易于存储的格式。常用格式包括列表、字典或NumPy数组。
3. **存储选项**
a. **平面文件 (CSV, TXT)**
– 使用Python内置的CSV模块或Pandas将特征存储为CSV格式。
– 这种方法简单明了,但对于非常大的数据集可能不是最有效的。
b. **二进制格式 (Pickle, NumPy的
.npy
)**– Python的
pickle
模块允许你序列化Python对象并将它们保存到磁盘。– 对于NumPy数组,你可以使用
numpy.save()
和numpy.load()
方法分别存储和加载数组。c. **数据库**
– **关系型数据库 (MySQL, PostgreSQL)**:将特征转换为适合数据库存储的格式,例如将数组转换为字符串或将单个元素存储在表列中。
– **NoSQL数据库 (MongoDB, Cassandra)**:这些数据库可以存储非结构化数据,这对于复杂的特征格式可能很方便。
– **时序数据库 (InfluxDB)**:如果特征与带时间戳的数据相关联,则很有用。
d. **专用存储解决方案**
– **HDF5**:一种高性能存储格式,适用于大型数据集。h5py等库允许你在Python中轻松地与HDF5文件交互。
– **Feather**:一种快速、轻量级且易于使用的二进制文件格式,用于存储数据帧。
e. **云存储 (Amazon S3, Google Cloud Storage)**
– 如果你在云环境中工作,或者想在不同机器之间共享数据集,则很有用。
4. **元数据**
– 除了特征,存储元数据通常也很有用,例如原始文件名、检测到对象的坐标、对象类别等。
– 根据你的存储解决方案,这可以是在单独的表/列中,或者与特征数据集成。
5. **压缩**
– 如果存储空间是一个问题,请考虑在存储特征之前对其进行压缩。许多存储解决方案支持内置压缩,或者你可以在Python中使用zlib或lz4等库。
6. **备份**
– 务必确保你的数据有备份,特别是如果它是耗时计算或难以重现的特征提取的结果。
7. **优化**
– 如果你经常查询或分析存储的特征,请考虑使用数据库索引或其他优化来加快这些操作。
请记住,存储解决方案的选择取决于你的具体需求、数据集大小以及你希望对存储的特征执行的操作。
老兄,你是不是从chatgpt复制的?