本文目录一览:
计算机视觉中的物体检测方法
本文适合刚入门物体检测的人群学习,不涉及公式推理。
相比于图像分类,图像中物体检测是计算机视觉中一个更加复杂的问题,因为图像分类只需要判断出图像属于哪一类就行,而在物体检测中,图像里可能有多个物体,我们需要对所有物体进行种类判别和位置确定,所以比图像分类更具有挑战性,应用于物体检测的深度学习模型也会更加复杂。本文将会着重介绍几种基于深度学习的物体检测方法。
待识别的物体有20类:
person
bird, cat, cow, dog, horse, sheep
aeroplane, bicycle, boat, bus, car, motorbike, train
bottle, chair, dining table, potted plant, sofa, tv/monitor
Detection Label (Ground truth)格式:
提交结果文件格式:
有YOLO、SSD、rcnn、fast rcnn及faster rcnn等
注:后边部分内容会对算法进行详细介绍
针对单个物体实例而言,通常由于图像采集过程中光照条件、拍摄视角、距离的不同,物体自身的非刚体形变以及其他物体的部分遮挡使得物体实例的表观特征产生很大的变化,给视觉识别算法带来了极大的困难。
属于同一类的物体表观特征差别比较大,其原因有前面提到的各种实例层次的变化,但这里更强调的是类内不同实例的差别,例如图 3(a)所示,同样是椅子,外观却是千差万别;其次是类间模糊性,即不同类的物体实例具有一定的相似性,如图 3(b)所示,左边的是一只狼,右边的是一只哈士奇,但我们从外观上却很难分开二者;再次是背景的干扰,在实际场景下,物体不可能出现在一个非常干净的背景下,往往相反,背景可能是非常复杂的、对我们感兴趣的物体存在干扰的,这使得识别问题的难度大大加大。
困难与挑战与图像的视觉语义相关,这个层次的困难往往非常难以处理,特别是对现在的计算机视觉理论水平而言。一个典型的问题称为多重稳定性。如图所示,图 3(c)左边既可以看成是两个面对面的人,也可以看成是一个燃烧的蜡烛;右边则同时可以解释为兔子或者小鸭。同样的图像,不同的解释,这既与人的观察视角、关注点等物理条件有关,也与人的性格、经历等有关,而这恰恰是视觉识别系统难以很好处理的部分。
bounding box:矩形框
SPP:Spatial Pyramid Pooling
SVM:支持向量机
RPN:Region Proposal Network
区域检测模块主要处理图像检测区域窗口的问题。根据获得区域待检测窗口方法的不同,物体检测方法大致可分为稠密检测窗提取(蛮力搜索)和稀疏检测窗两类方法。稠密检测窗提取方法,比如滑动窗法,相对比较简单,它是通过使用训练好的模板在输入图像的多个尺度上图像金字塔上进行滑动扫描,通过确定最大响应位置找到目标物体的矩形窗口。稀疏检测窗提取方法,则一般利用某些先验或其他图像任务的结果,选择最有可能成为物体的检测窗口,比如选择性搜方法,对图像分割的结果进行利用,通过区域融合生产目标检测窗。(算法具体内容自行了解,比如边缘盒算法,选择性算法)
这是最重要和最关键的步骤,传统的特征提取方法,比如HOG、SIFT特征,通过计算图像局部区域的梯度特征,得到图像边缘或角点特征。相比现在深度学习的提取特征方法,这些方法都是根据图像的某些性质通过人工设计相应的特征。缺点很明显,第一人工设计很麻烦,第二很具有局限性,特征提取不够完整,而深度卷积神经网络就可以客服这些不足。
分类器模块是物体图像检测与分类系统的结果输出,用于评价整个检测系统的性能。在模式识别和机器学习领域中,常用的分类器包括:逻辑回归、softmax、SVM、ada-boost等。在深度学习模型中一般采用SVM和softmax。
暂时略
既然传统的物体检测方法局限性很大,此时随着深度学习的发展,基于深度学习的物体检测算法R-CNN横空出世了。
Fast-RCNN主要贡献在于对R-CNN进行加速,只有速度够快,才能做到实时处理。那么Fast-RCNN是改进了R-CNN哪些地方提高了处理速度呢?
SPP:Spatial Pyramid Pooling(空间金字塔池化)
它有两个特点:
1.结合空间金字塔方法实现CNNs的多尺度输入。
一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。SPP Net的第一个贡献就是将金字塔思想加入到CNN,实现了数据的多尺度输入。在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。
2.只对原图提取一次卷积特征
在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框zaifeature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间。
Fast-RCNN正是通过融合了SPP的设计(这一层称之为ROI Pooling),有了以上这两个优点,使得Fast-RCNN比R-CNN快多了。
原来的方法:许多候选框(比如两千个)--CNN(两千次卷积)--得到每个候选框的特征(不同尺度特征图不行)--分类+回归
现在的方法:一张完整图片--CNN(一次卷积)--得到每张候选框的特征(可以不同尺度特征图不行,因为这里加了一层SSP net 称之为ROI Pooling)--分类+回归
其还有个贡献是多任务Loss层:将分类和边框回归进行合并(又一个开创性的思路),通过多任务Loss层进一步整合深度网络,统一了训练过程,从而提高了算法准确度。
Fast-RCNN虽然加快了不少速度,但是其选择性搜索,找出所有的候选框,这个也非常耗时,于是有人就在Fast-RCNN的基础上解决了这个问题,提出了更快的Faster-RCNN。
Faster-RCNN特点(创新点):候选框提取不一定要在原图上做,特征图上同样可以,在低分辨率上做意味着计算量减小。
那么怎么在特征图上做候选框提取呢:于是有人提出了用神经网络去做,加入一个边缘提取的神经网络,称之为Region Proposal Network(RPN)。
具体加入方法:
• 将RPN放在最后一个卷积层的后面
• RPN训练好后能使用其直接得到候选区域
暂时略
1. .
2. .
3. .
4.黄凯奇,任伟强,谭铁牛.图像物体分类与检测算法综述,中国科学院自动化研究所模式识别国家重点实验室智能感知与计算研究中心,12(36),2013:1225-1240.
5.夏源.基于深度学习的图像物体检测与分类,北京邮电大学,2016.
6.
7.
8.
【中级】图像特征工程:HOG 特征描述符
英文原文:
边翻译边学习
特征工程是机器学习算法领域重要的角色。这是进行最多次试验的地方:从现有特征中设计新特征并提高我们模型的性能。世界上一些顶级数据科学家们依靠特征工程来提高他们在黑客马拉松中的排行榜分数。我相信你甚至会在结构化数据上使用各种特征工程技术。
我们能否将此技术扩展到非结构化数据,比如图像?对于计算机视觉爱好者来说,这是一个有趣的问题,我们将在本文中解释它。准备好以特征提取的形式对图像数据进行特征工程吧!
我假设你已经阅读了: 【初级】使用 Python 从图像数据中提取特征
在本文中,我将向您介绍一种流行的图像特征提取技术——定向梯度直方图( Histogram of Oriented Gradients 或 HOG)。我们将了解什么是 HOG 特征描述符,它的工作原理(算法背后的完整数学),最后,将会在 Python 中实现它。
下面的两个图像。你能区分图像中的物体吗?
我们可以清楚地分辨右图有一只狗,左图有一辆汽车。现在让这个任务稍微复杂一点,识别下图中显示的物体:
我想你还是可以分辨出吧?图1 有包含很多信息,比如物体的形状、颜色、边缘、背景等。而图2 的信息相对少得多(只有形状和边缘),但足以区分两个图像。
我想你已经对特征描述符有一些感觉了吧?在图2 中,我们很容易区分对象,因为它具有识别对象所需的必要信息。这正是特征描述符的作用: 它是图像的简化表示,仅包含有关图像的最重要信息 。
以下是一些最受欢迎特征描述符的:
在本文中,我们将重点介绍 HOG (定向梯度直方图)特征描述符及其工作原理。让我们开始吧!
HOG,是一种特征描述符,常用于从图像数据中提取特征。它广泛用于计算机视觉任务中的目标检测。
让我们看一下 HOG 与其他特征描述符不同的一些重要方面:
对此进行正式定义: HOG 特征描述符是计算图像局部梯度方向的出现次数 。
我们现在应该对 HOG 特征描述符是什么有了一个基本的了解。是时候深入研究其背后的核心思想了。让我们开始讨论计算 HOG 的分步过程。
考虑以下尺寸 (180 x 280) 的图像。让我们详细了解一下如何为该图像创建 HOG 特征:
这是大多数人都非常熟悉的步骤。预处理数据是任何机器学习项目中的关键步骤,处理图像时也不例外。
我们需要对图像进行预处理并将宽高比降低到 1:2。图像大小最好是 64 x 128。这是因为我们将把图像分成 8 8 和 16 16 块来提取特征。具有指定的大小 (64 x 128) 将使我们所有的计算变得非常简单。事实上,这是 原始论文 中使用的确切值。
回到我们的例子,让调整原图像为 64 x 128。这是调整后的图像:
下一步是计算图像中每个像素的梯度。梯度是 x 和 y 方向的微小变化。这里将从图像中取出一小块并计算其梯度:
我们将获得此区域的像素值。假设我们在给定的区域生成以下像素矩阵(此处显示的矩阵仅用作示例,这些不是给定区域的原始像素值):
这里突出显示了像素值 85。首先确定 x 方向的梯度(或变化),我们需要从右侧的像素值中减去左侧的值。同样,为了计算 y 方向的梯度,我们将从所选像素上方的像素值中减去下方的像素值。
因此,该像素在 x 和 y 方向上的梯度为:
这个过程会给我们两个新矩阵——一个存储 x 方向上的梯度,另一个存储 y 方向上的梯度。这类似于使用大小为 1 的 Sobel Kernel。 当强度发生急剧变化时,例如边缘周围,幅度会更高 。
我们分别计算了 x 和 y 方向的梯度。对图像中的所有像素重复相同的过程。下一步是使用这些值找到大小和方向。
使用我们在上一步中计算的梯度,我们现在将确定每个像素值的大小和方向。在这一步中,我们将使用毕达哥拉斯定理,如下图所示:
梯度分为是水平和竖直,对于前面的示例,我们将 和 设为 11 和 8。应用勾股定理来计算总梯度幅度:
接下来计算其方向:
因此,角度的值将是:
计算结果是 36。对于每个像素值,我们都能计算出其梯度值和方向。我们需要使用这些梯度值和方向生成直方图。
直方图是显示一组连续数据的频率分布的图。x 轴表示数据值,y 轴表示其频率。在这里,我们将用x 轴表示角度,用y 轴表示频率。
让我们从最简单的生成直方图的方法开始。我们将获取每个像素值,找到像素的方向并更新频率表。还是讨论图三中的红色像素 85。由于该像素的方向是 36,我们将在角度值 36 上添加一个数字,表示频率:
对所有像素值做重复相同的操作,我们最终得到一个频率表,表示角度和这些角度在图像中的出现次数。此频率表可用于生成 x 轴上的角度值和 y 轴上的频率的直方图。这是创建直方图的一种方法。由于每个桶的是1,所以此处生成了180个大小相同的桶。
这种方法与前面的方法类似,不同之处在于这里的每个桶的大小为 20。因此,在这里得到的桶数为 9。同样,对于每个像素,我们将检查方向,并以 9 x 1 矩阵的形式存储方向值的频率。绘制这将为我们提供直方图:
在这里,我们将像素梯度的贡献添加到像素梯度任一侧的 bin 中。更高的贡献应该是对更接近方向的 bin 值。
在 HOG 特征描述符中创建的直方图不是为整个图像生成的。相反,图像被分成 8×8 个单元格,并为每个单元格计算定向梯度的直方图。通过这样做,我们获得了较小块的特征(或直方图),这些块又代表了整个图像。我们当然可以在这里将这个值从 8 x 8 更改为 16 x 16 或 32 x 32。如果我们将图像分成 8×8 个单元格并生成直方图,我们将为每个单元格得到一个 9 x 1 的矩阵。该矩阵是使用我们在上一节中讨论的方法 3 生成的。
一旦我们为图像中的 8×8 块生成了 HOG,下一步就是对直方图进行归一化。
我们在了解这是如何完成之前,首先了解为什么要这样做很重要。尽管我们已经为图像的 8×8 单元创建了 HOG 特征,但图像的梯度对整体照明很敏感。这意味着对于特定图片,图像的某些部分与其他部分相比会非常亮。我们无法从图像中完全消除这一点。但是我们可以通过采用 16×16 块对梯度进行归一化来减少这种光照变化。这是一个可以解释如何创建 16×16 块的示例:
在这里,我们将组合四个 8×8 的单元格来创建一个 16×16 的块。我们已经知道每个 8×8 单元格都有一个 9×1 的直方图矩阵。因此,我们将有四个 9×1 矩阵即一个 36×1 矩阵。为了标准化这个矩阵,我们将这些值中的每一个除以这些值的平方和的平方根进行归一化,结果将是大小为 36×1 的归一化向量。
我们现在处于为图像生成 HOG 特征的最后一步。到目前为止,我们已经为图像的 16×16 块创建了特征。现在,我们将结合所有这些来获得最终图像的特征。
您能猜出给定图像的特征总数是多少吗?我们首先需要找出一张 64×128 的图像有多少这样的 16×16 块?我们将有 105 (7×15) 个 16×16 的块。这 105 个块中的每一个都有一个 36×1 的向量作为特征。因此,图像的总特征将为 105 x 36×1 = 3780 个特征。我们现在将为单个图像生成 HOG 特征,并验证我们最终是否获得相同数量的特征。
我们将看到如何在单个图像上生成 HOG 特征,以及是否可以将其应用于更大的数据集。
如果不进行 resize,结果如下:
这时我们就提取出了对象识别时输入到机器学习中的图片HOG特征了。
图像的特征提取都有哪些算法
图像的经典特征提取方法:
1 HOG(histogram of Oriented Gradient,方向梯度直方图)
2 SIFT(Scale-invariant features transform,尺度不变特征变换)
3 SURF(Speeded Up Robust Features,加速稳健特征,对sift的改进)
4 DOG(Difference of Gaussian,高斯函数差分)
5 LBP(Local Binary Pattern,局部二值模式)
6 HAAR(haar-like ,haar类特征,注意haar是个人名,haar这个人提出了一个用作滤波器的小波,为这个滤波器命名为haar滤波器,后来有人把这个滤波器用到了图像上,就是图像的haar特征)
图像的一般提取特征方法:
1 灰度直方图,颜色直方图
2 均值,方差
3 信号处理类的方法:灰度共生矩阵,Tamura纹理特征,自回归纹理特征,小波变换。
4 傅里叶形状描述符,小波描述符等,
HOG算法什么意思
特征梯度直方图算法,现在非常流行的一种行人检测的算法,一般配合LBP和SVM分类器效果很好。你要想具体了解可以去WIKI 或者 navneet的网站看看专业解释。
不过HOG函数已经集成在了OPENCV库里面,因此其实没有必要非要搞懂这个算法。。。
在python怎么调用hog特征
1.对原图像gamma校正,img=sqrt(img); 2.求图像竖直边缘,水平边缘,边缘强度,边缘斜率。 3.将图像每16*16(取其他也可以)个像素分到一个cell中。对于256*256的lena来说,就分成了16*16个cell了。 4.对于每个cell求其梯度方向直方图。