1 概述
视觉智能是指通过一些算法对图像进行处理,识别出图像中的关键信息。一般需要认知科学、人工智能、计算图形学、信息获取、算法、硬件、图像处理、神经科学等多学科知识。
-
视觉智能常见场景
-
图像识别
-
通过对图像进行处理、分析和理解,识别不同的目标和对象
-
一般包括图像打标、场景分类、颜色识别、元素识别
-
-
目标检测
-
找出图像中目标信息,确定位置;如物体检测、行人检测、车辆检测、人脸检测等
-
-
图像检索
-
在指定的图像中搜索出相同或相似的视觉信息
-
-
图像分割
-
将采集的数字图像细分为多个子区域(像素集合)
-
-
文字识别
-
对图像文件进行检测,获取文字信息,一般分为文字检测、文字识别
-
-
人脸识别
-
一般包含人脸检测定位、人脸属性识别
-
-
-
视觉智能的标准训练方法
-
图像预处理
-
目的
-
去除图像中噪音及无效信息
-
提升视觉智能效果
-
将图像转换成更利于人工智能处理的形式
-
-
思路
-
图像清理:检查文件是否有损坏、图像尺寸、格式是否标准、清晰度是否统一
-
几何转换:平移、转置、镜像、旋转、缩放处理;改正图像采集系统的系统误差及因仪器导致的随机误差
-
图像增强:改善图像视觉效果、强调图像局部或整体特征;抑制不感兴趣的特征
-
-
方法
-
滤波去噪:通过滤波方式去除图像噪声
-
灰度化:彩色图片转换为灰度图(可以压缩图像数据量);一般可以使用平均值法、最大值法、分类法
-
二值化:彩色图像转换为黑白图(相对于灰度法进一步压缩数据量);通过设定阈值,转换为(0,1)形式
-
-
-
图像特征提取(特征点检测)
-
Harris算法
-
利用局部窗口在图像上的移动来判断图像灰度变化,一般和人的视觉理解一致
-
通常局部窗口向各个方向移动都无变化,则属于区域内部;局部窗口向一个方向移动无变化,则属于区域边缘;局部窗口向各个方向移动都有变化,则属于区域角点
-
-
Harris角点检测原理
-
通过计算一个二阶矩矩阵(也称为结构张量)来描述窗口内像素灰度的变化情况。这个矩阵的元素是由图像在和方向上的偏导数计算得到的。设是图像函数,和分别是关于和的偏导数。二阶矩矩阵的形式如下:
-
-
然后,通过计算矩阵的特征值和来判断角点。如果两个特征值都比较大,说明在这个窗口内的像素在两个方向上的变化都很剧烈,那么这个点就是角点;如果一个特征值大,一个特征值小,那么这个点可能是边缘点;如果两个特征值都很小,那么这个点可能在一个相对平坦的区域。
-
为了避免直接计算特征值带来的计算量,通常使用一个响应函数R=det(M)-k.trace2 (M)来判断角点,其中det(M)=λ1*λ2是矩阵M的行列式,trace(M)=λ1+λ2是矩阵M的迹,k是一个经验常数,通常取值在 0.04 - 0.06 之间。当R的值大于某个阈值时,就认为该点是角点。
-
参考论文:A Combined Corner and Edge Detector-------C. Harris 和 M. J. Stephens
-
-
优势
-
旋转不变性:由于特征值是基于图像的灰度变化计算的,与图像的旋转角度无关。例如,一个正方形的角点在图像旋转后依然能够被正确地检测为角点。
-
部分光照不变性:在一定程度上对光照变化不敏感。因为算法主要关注的是像素灰度的变化梯度,而不是绝对灰度值。只要光照变化是均匀的就不会对灰度变化的检测产生太大影响。比如,在一张室内照片中,稍微调整灯光的亮度,角点检测的结果通常不会有太大变化。
-
-
应用领域
-
图像配准:在医学图像配准中,将不同角度拍摄的 X 光图像或者 CT 图像进行配准;通过检测图像中的角点,可以找到图像之间的对应关系,从而实现精确的配准。
-
目标跟踪:在视频监控中的目标跟踪场景,首先检测出目标物体的角点,然后在后续的视频帧中跟踪这些角点,从而实现对目标物体的跟踪。例如,在交通监控中跟踪车辆的位置和姿态变化。
-
三维重建:从多幅二维图像重建三维物体的过程中,通过检测不同视角图像中的角点,利用三角测量等方法可以计算出物体的三维坐标。例如在建筑三维重建或者文物数字化等领域的应用。
-
-
-
FAST算法
-
FAST(Features from Accelerated Segment Test)算法是一种用于检测图像中角点的算法。核心思想是通过比较像素点与其周围像素点的灰度值来判断该点是否为角点。
-
对于图像中的一个候选点,首先选取一个半径为r(通常r=3)的圆,这个圆上有n个像素点(n=16较为常见)。然后设定一个阈值t,如果在这个圆上有连续n/2+1个像素点的灰度值与点p的灰度值之差的绝对值大于阈值t,那么点p就被判定为角点。例如,假设阈值t=20,对于一个候选点,若其周围圆上有连续 9 个点与它的灰度差值绝对值大于 20,此点就是角点。步骤如下:
-
第一步:构建候选点集合:通过对图像进行一定的采样来获取候选点集合,比如隔行隔列地选取像素点作为候选点,可以减少计算量。
-
第二步:进行角点测试:对于每个候选点,以其为中心构建圆,按照上述的灰度比较规则进行测试。例如,当半径r=3时,圆上共有 16 个像素点,若存在连续n/2+1=9个像素点与中心像素点的灰度差值大于阈值t,则初步判断该点为角点。
-
第三步:非主方向抑制(可选步骤):由于通过第二步可能会检测出一些不是真正角点的点,为了提高角点的质量,可以进行非主方向抑制。这一步主要是通过计算角点的主方向,去除那些不在主方向上的角点,使得检测出的角点更加符合实际需求。
-
-
参考论文:Machine learning for high-speed corner detection----Edward Rosten 和 Tom Drummond
-
-
优点
-
计算速度快:因为是一种基于选定候选点,然后计算差异,因此计算高效
-
参数少易于使用:只需要设置一个阈值和连续的像素点数这两个参数,就可以完成角点检测
-
资源占用低:算法的计算过程相对简单,不需要大量的中间数据存储,因此对内存的需求较低
-
对部分场景具备鲁棒性:对于一些轻微的光照变化、视角变化,FAST 算法能够在一定程度上保持角点检测的稳定性
-
-
应用领域
-
视频监控与分析
-
机器人视觉与导航
-
图像拼接与全景图生成
-
图像匹配与识别
-
自动驾驶
-
医学影像分析
-
-
-
DOG算法
-
DOG(Difference of Gaussians)算法基于高斯滤波。对于给定的一幅图像,先使用不同标准差的高斯核函数对其进行卷积操作,得到不同模糊程度的高斯滤波图像。然后将不同标准差下得到的高斯滤波图像相减,即得到 DOG 图像
-
-
优点
-
多尺度特征检测:DOG 算法通过使用不同标准差的高斯滤波器对图像进行处理,能够检测到图像在不同尺度下的特征。这意味着它可以检测到图像中各种大小的物体、纹理和结构等特征,无论是大尺度的物体轮廓还是小尺度的细节信息,都能较好地被检测到。
-
特征增强效果好:图像中的边缘和角点等特征区域在不同尺度的高斯滤波下会有不同的响应,经过差分操作后,这些特征在 DOG 图像中会被突出显示。在一定程度上,高斯滤波的过程可以减少噪声对特征检测的影响。通过对图像进行平滑处理,一些噪声会被抑制,从而使算法更专注于提取真正的图像特征。
-
计算效率高:与一些更复杂的边缘检测和特征提取算法相比,如高斯拉普拉斯(LoG)算法,DOG 算法的计算过程相对简单。它只需要进行高斯滤波和差分操作,不需要进行复杂的数学变换和计算,因此计算效率较高,能够快速地处理大量的图像数据
-
-
应用场景
-
作为基础算法:DOG 算法可以作为其他更复杂算法的基础或组成部分。例如,在尺度不变特征变换(SIFT)算法中,DOG 算法被用于构建尺度空间,以提取出具有尺度不变性的特征点,从而实现图像的匹配和识别
-
适用于多种图像类型:DOG 算法对于不同类型的图像,如灰度图像、彩色图像等,都可以进行有效的特征提取
-
-
-
HOG算法
-
HOG(Histogram of Oriented Gradients)即方向梯度直方图,是一种用于图像特征提取的算法,主要用于目标检测和图像识别
-
原理概述及步骤
-
图像预处理:首先将输入图像转换为灰度图像,去除颜色信息的干扰,只保留图像的亮度信息,以便后续计算梯度。
-
计算梯度:使用梯度算子(如 Sobel )计算每个像素点的梯度幅值和方向。梯度幅值表示像素点亮度变化的剧烈程度,梯度方向则表示亮度变化的方向。通过计算梯度,可以捕捉到图像中的边缘和轮廓等信息。
-
划分图像区域:将图像划分为多个小的、相互重叠的区域,这些区域被称为细胞(cell)。通常细胞的大小为 8×8 像素或 16×16 像素等。划分细胞的目的是对局部区域的梯度信息进行统计和分析,以便提取出更具有代表性的特征。
-
计算梯度方向直方图:对于每个细胞,统计其内部像素点的梯度方向分布情况,形成一个梯度方向直方图。将梯度方向的范围划分为若干个区间(bin),例如通常划分为 9 个区间,每个区间对应一定角度范围的梯度方向。然后,根据像素点的梯度方向,将其对应的梯度幅值累加到相应的区间中,从而得到每个区间的梯度幅值统计量。这样,每个细胞就可以用一个梯度方向直方图来表示。
-
归一化处理:将相邻的若干个细胞组合成一个更大的区域,称为块(block)。对每个块内的细胞的梯度方向直方图进行归一化处理,以减少光照变化和阴影等因素对特征的影响。常用的归一化方法有 L1 范数归一化、L2 范数归一化等。
-
特征向量生成:将图像中所有块的归一化后的梯度方向直方图串联起来,就形成了最终的 HOG 特征向量。这个特征向量可以作为图像的特征表示,用于后续的目标检测、分类等任务
-
-
-
-
优点
-
对光照变化具有鲁棒性:HOG 算法主要关注图像的梯度信息,而不是像素的绝对亮度值。因此,即使图像的光照条件发生变化,只要物体的边缘和轮廓等特征仍然存在,HOG 算法仍然能够提取出较为稳定的特征,从而对光照变化具有一定的适应性。
-
能描述物体形状和纹理:通过统计局部区域的梯度方向直方图,HOG 算法能够有效地描述图像中物体的形状和纹理信息。例如,对于行人的图像,HOG 算法可以捕捉到行人的轮廓、身体的边缘以及衣物的纹理等特征,这些特征对于行人的检测和识别非常有帮助。
-
具有多尺度适应性:可以在不同尺度上提取特征,通过调整细胞和块的大小以及梯度方向直方图的区间划分等参数,可以适应不同大小的目标。这使得 HOG 算法在处理不同尺度的图像时具有较好的灵活性和适应性。
-
易于理解和实现:HOG 算法的原理相对简单,易于理解和实现。其主要步骤包括梯度计算、直方图统计和归一化等操作。
-
-
应用场景
-
行人检测:HOG 算法在行人检测中应用广泛,能够有效地捕捉行人的特征,从而实现对行人的准确检测。许多行人检测系统都采用了 HOG 算法作为特征提取的基础,结合支持向量机(SVM)等分类器进行行人的识别和判断。
-
目标识别:可用于各种目标的识别,如车辆识别、动物识别、物体识别等。通过提取目标的 HOG 特征,并与已知目标的特征进行比较,可以实现对目标的分类和识别。
-
人脸检测:在人脸检测中,HOG 算法可以提取人脸的轮廓和纹理等特征,从而帮助确定图像中是否存在人脸以及人脸的位置和大小。
-
图像分类:对于涉及到纹理和形状信息的图像分类任务,HOG 算法可以作为一种有效的特征提取方法,为图像分类提供准确的特征。
-
-
-
-
2 常见目标检测算法
针对不同场景,为不断优化效果,出现了不同的视觉/目标检测算法,如R-CNN算法、fast R-CNN算法、faster R-CNN算法、YOLO算法、SSD算法;不同的算法实现机制和适用场景略有差异。
在此之前,先简单看下CNN(卷积神经网络):卷积神经网络(Convolutional Neural Network,CNN)是一种在计算机视觉领域取得了巨大成功的深度学习模型
在卷积神经网络中,卷积操作是指将一个可移动的小窗口(称为数据窗口,如下图绿色矩形)与图像进行逐元素相乘然后相加的操作。这个小窗口其实是一组固定的权重,它可以被看作是一个特定的滤波器(filter)或卷积核。这个操作的名称“卷积”,源自于这种元素级相乘和求和的过程。
参考博文:https://blog.csdn.net/AI_dataloads/article/details/133250229
2.1 R-CNN算法
-
背景
传统的目标检测方法主要基于手工特征,如 HOG,然后使用机器学习分类器进行分类。R - CNN 是一种基于深度学习的目标检测算法,将卷积神经网络(CNN)引入到目标检测领域,极大提升检测精度。
-
原理
-
候选区域提取:使用选择性搜索(Selective Search)算法在输入图像中生成大约 1000 - 2000 个可能包含目标物体的候选区域(Region Proposals)。选择性搜索算法基于图像的纹理、颜色等信息,通过合并相似区域来生成候选区域,这些区域大小和形状各不相同。
-
特征提取:将每个候选区域进行缩放,使其尺寸符合预训练好的卷积神经网络(如 AlexNet)的输入要求;然后将缩放后的候选区域分别输入到 CNN 中进行特征提取。CNN 会输出每个候选区域的一个固定长度的特征向量。
-
分类与回归:将提取到的特征向量输入到一系列的线性支持向量机(SVM)分类器中进行分类,每个 SVM 用于判断一个候选区域是否属于特定的类别。同时,使用一个线性回归模型对每个候选区域的边界框进行微调,以更准确地定位目标物体。
-
-
-
2.2 fast R-CNN算法
fast R - CNN 是对 R - CNN 的改进,主要创新在于提出了 ROI(Region of Interest)池化层,允许对整个图像只进行一次卷积操作,然后从该卷积特征图中提取各个候选区域(Region Proposals)的特征,大大减少了计算量
-
原理与步骤
-
第一步:特征提取:
-
把输入图像送入卷积神经网络(如 VGG16)进行卷积和池化操作。以 VGG16 为例,包含多个卷积层和池化层,通过一系列的卷积核卷积操作和池化操作,提取图像的特征信息,得到一个特征图。整个过程是对整个图像进行的,而不是像 R - CNN 对每个候选区域单独进行。
-
-
第二步:ROI 池化:
-
对于通过选择性搜索等方法生成的候选区域,将它们映射到第一步得到的特征图上。然后,使用 ROI 池化层将每个候选区域在特征图上对应的部分转换为固定大小的特征向量。例如,对于一个大小任意的候选区域,通过 ROI 池化将其在特征图上对应的部分转换为 7×7 的特征向量。
-
-
第三步:分类和回归:
-
将 ROI 池化后的特征向量输入到全连接层。在全连接层中,一方面通过 softmax 函数进行分类,计算每个候选区域属于不同类别的概率;另一方面,通过线性回归对候选区域的边界框进行微调,以更准确地定位目标物体。
-
-
-
论文地址:https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf
-
2.3 faster R-CNN
Faster R - CNN 是在 Fast R - CNN 基础上的进一步改进,主要引入了区域提议网络(Region Proposal Network,RPN),实现了端到端(end - to - end)的目标检测,极大地提高了检测速度和精度。
-
算法实现步骤
-
第一步:特征提取:将输入图像送入卷积神经网络主干网络(如 VGG - 16)进行卷积和池化操作,得到特征图。这个过程与 Fast R - CNN 中的特征提取类似,但特征图不仅用于 ROI 池化,还用于 RPN 网络。
-
第二步:区域提议生成(RPN):在特征图上滑动窗口,以每个窗口位置为中心生成多个锚点。对这些锚点进行前景 / 背景分类和边界框回归。通过这些操作,将前景概率较高的锚点对应的区域作为候选区域,这些候选区域的位置和大小通过锚点的位置偏移量计算得到。
-
第三步:ROI 池化:将 RPN 生成的候选区域映射到第一步得到的特征图上,然后通过 ROI 池化层将每个候选区域在特征图上对应的部分转换为固定大小的特征向量。
-
第四步:分类和回归:将 ROI 池化后的特征向量输入到全连接层,分别进行目标类别分类和边界框回归,最终得到每个候选区域的类别概率和精确的边界框位置。
-
-
论文地址:https://arxiv.org/pdf/1506.01497
2.4 YOLO算法
YOLO(you only look once) 是一种先进的单阶段(one - stage)目标检测算法,它将目标检测任务视为一个回归问题,与传统的两阶段(two - stage)目标检测算法(如 R - CNN 系列)相比,具有更快的检测速度,能够实时处理图像和视频中的目标检测任务。
-
算法实现步骤:
-
第一步:特征提取与网格划分:将输入图像送入 YOLO 网络,经过多个卷积层和池化层进行特征提取;同时将图像划分为 S×S 个网格单元。
-
第二步:边界框与类别概率预测:每个网格单元预测 B 个边界框及其置信度,以及 C 个类别概率(假设数据集有 C 个类别)。这样,每个网格单元会输出 B×(5 + C) 个值(5 是边界框的坐标和置信度相关的参数,具体原因没研究明白)。
-
第三步:非极大值抑制(Non - Maximum Suppression,NMS):由于每个网格单元可能会预测出多个边界框,并且不同网格单元之间的边界框也可能会重叠,因此需要通过 NMS 来去除冗余的边界框。NMS 的基本原理是根据边界框的置信度和交并比,选择置信度高且与其他边界框重叠度低的边界框作为最终的检测结果。
-
-
参考:https://www.datacamp.com/blog/yolo-object-detection-explained
2.5 SSD算法
SSD(Single Shot MultiBox Detector)算法和YOLO类似,都属于单阶段目标检测算法,但其属于一种直接预测目标类别和bounding box的多目标检测算法
-
原理
-
模型架构
-
基础网络:SSD 通常采用预训练的卷积神经网络(如 VGG16 等)作为基础网络,用于提取图像的初始特征。基础网络可以对输入的图像进行初步的特征提取,生成特征图,这些特征图包含了图像的不同层次的信息。比如 VGG16 的前几层卷积层可以提取出图像的边缘、纹理等低级特征,后面的卷积层则可以提取出更抽象的高级特征。
-
额外卷积层:在基础网络之后,SSD 添加了一些额外的卷积层。这些额外的卷积层逐步减小特征图的尺寸,使得模型能够在不同尺度上检测目标。每个额外的卷积层都能够学习到不同层次的特征,有助于检测不同大小的物体。例如,较浅层的额外卷积层可能更适合检测小目标,而较深层的额外卷积层则更适合检测大目标。
-
-
多尺度特征映射图
-
SSD 的一个关键特点是使用多尺度的特征图进行目标检测。原始图像经过基础网络和额外卷积层的处理后,会得到多个不同尺度的特征图。不同尺度的特征图对不同大小的目标具有不同的敏感度。较高分辨率的特征图包含更多的细节信息,适合检测小目标;较低分辨率的特征图则具有更广阔的视野,适合检测大目标。通过利用多尺度特征图,SSD 能够同时对不同大小的目标进行有效的检测。
-
-
先验框(Default Boxes 或 Anchor Boxes)
-
在每个特征图的每个位置上,SSD 预先定义了一系列不同尺度和长宽比的先验框,这些先验框类似于目标的候选框,覆盖了各种可能出现的目标形状和位置。先验框的尺度和长宽比是根据数据集的统计信息和经验设定的,例如常见的长宽比设置为
{1, 2, 3, 1/2, 1/3}
等。 -
每个先验框都与两个预测相关联:一是类别置信度预测,即预测该先验框中包含某个类别的物体的概率;二是边界框偏移量预测,用于调整先验框的位置和大小,使其更接近真实的目标边界框。
-
-
预测过程:
-
类别预测:对于每个先验框,SSD 使用卷积神经网络预测其属于各个类别的置信度得分。这些置信度得分表示了先验框中包含对应类别的物体的可能性。例如,如果有 20 个类别(包括背景类),那么对于每个先验框,模型会输出 20 个置信度值。
-
边界框回归:模型还会预测每个先验框相对于真实目标边界框的偏移量,包括中心点的坐标偏移以及宽度和高度的缩放比例。通过这些偏移量的调整,可以使先验框更准确地定位到目标物体。
-
-
损失函数:
-
SSD 的损失函数由两部分组成,分别是位置损失(Localization Loss)和类别置信度损失(Confidence Loss)。
-
位置损失:使用 Smooth L1 损失函数来衡量预测的边界框与真实边界框之间的位置差异。它对离真实值较近的预测值给予较小的惩罚,对离真实值较远的预测值给予较大的惩罚,这样可以使模型在训练过程中更稳定地学习边界框的位置调整。
-
类别置信度损失:采用交叉熵损失函数来计算预测的类别置信度与真实类别的差异。交叉熵损失函数能够衡量模型对每个类别的预测概率与真实标签之间的不匹配程度,促使模型学习到正确的类别分类。
-
-
后处理:
-
非极大值抑制(Non-maximum Suppression,NMS):在预测阶段,模型会为每个目标生成多个预测框,这些预测框可能存在重叠。非极大值抑制算法用于去除冗余的预测框,只保留置信度最高的预测框作为最终的检测结果。具体做法是:对于每个类别,按照置信度对预测框进行排序,然后计算每个预测框与其他预测框的交并比(IoU),如果交并比大于某个阈值,则认为该预测框与其他预测框重叠,将其删除。
-
解码:根据预测的边界框偏移量对先验框进行调整,得到最终的预测边界框。这一步骤将模型预测的相对偏移量转换为实际的边界框坐标,以便得到目标物体在图像中的准确位置。
-
-
参考博文:https://blog.csdn.net/ytusdc/article/details/86577939