计算机视觉复习整理
计算机视觉复习整理
基本概念,经典应用,重要知识点
计算机视觉概念、相关AI,图像处理,机器学习,深度学习之间关系
滤波和边缘提取
滤波:空域频域两种滤波方法了解(步骤);不同滤波方法降噪
边缘提取:一阶差分,二阶差分,原理
卷积:图像上基本的操作;互相关之间的关系;操作的时候按互相关
深度学习框架,和numpy之间区别,框架优势
paddlepaddle使用
卷积计算、池化
SIFT,HOG,词袋模型
图像匹配,图像查找(一幅图找另外一幅图,一堆图找指定图像相似图)
直方图,所有传统计算机视觉中很重要,特点,图像直方图(像素分布),共性,统计特点
HOG,sift,图像分割,词袋模型都有直方图
论文阅读题:
综述阅读,回顾卷积神经网络发展历程,多少种卷积、不同激活函数等
经典网络,AlexNet,VGG,GoogLeNet,ResNet
轻量级网络,在边缘(计算能力不是很强的硬件)上跑:mobileNet,shuffleNet,GhostNet,基本了解
题型
全是主观题
10个简答题,5分一个
计算题,15分
论文阅读题,4个问题任选两个,15分
设计题,20分,设计思路写的尽可能详细一点,不用写代码,设计一个分类系统,用分类器,交叉验证,划分验证集训练集,各种指标衡量(实验四)
基础概念关系
计算机视觉定义
Computer Vision has a dual goal. From the biological science point of view, computer vision aims to come up with computational models of the human visual system. From the engineering point of view, computer vision aims to build autonomous systems which could perform some of the tasks, which the human visual system can perform (and even surpass it in many cases).
计算机视觉有双重目标。从生物科学的角度来看,计算机视觉的目标是构建人类视觉系统的计算模型。从工程学的角度来看,计算机视觉的目标是构建能够执行人类视觉系统可以执行的一些任务的自主系统(甚至在许多情况下超越它)。
At an abstract level, the goal of computer vision problems is to use the observed image data to infer something about the world.
在抽象层面上,计算机视觉问题的目标是使用观察到的图像数据来推断出关于世界的一些信息。
Computer vision is the automated extraction of information from images. Information can mean anything from 3D models, camera position, object detection and recognition to grouping and searching image content.
计算机视觉是从图像中自动提取信息。信息可以是从3D模型、相机位置、对象检测和识别,到分组和搜索图像内容的任何东西。
计算机视觉主要任务
图像分类
图像定位
目标检测
语义分割
实例分割
目标跟踪
机器视觉对比
机器视觉:用计算机来模拟人的视觉功能,从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制
计算机视觉:用计算机来实现人类的视觉功能,即对客观世界中三维场景的感知、加工和解释
计算机视觉更关注视觉科学问题的研究和软件的可能设计,更偏向于研究
机器视觉意味着不仅研究软件还要研究硬件环境和实际应用所需要的图像采集技术,更偏向于工程
图像处理关系
计算机视觉 (Computer Vision)
计算机视觉是指使计算机能够“看”和“理解”图像和视频中内容的技术和科学研究领域。这个领域的目的是模仿人类视觉系统的功能,使计算机能够识别和处理物体、场景和活动,从而执行诸如导航、机器人控制、事件检测、物体识别和分类等任务。
关键任务包括:
- 物体检测和识别
- 场景重建
- 视频跟踪
- 动作识别
- 图像分割
计算机视觉通常需要理解图像内容的上下文,不仅识别图像中的元素,而且还要理解这些元素之间的关系以及它们在真实世界中的功能和动态。
图像处理 (Image Processing)
图像处理主要关注于图像本身的改进、恢复和优化。它涉及对图像数据进行处理以进行增强、压缩、恢复和其他操作,以便于存储、传输或更好地视觉呈现。图像处理的目标是改善图像质量或提取信息。
常见操作包括:
- 图像增强(如对比度调整、锐化)
- 图像恢复(如去噪、去模糊)
- 图像压缩(如JPEG压缩)
- 彩色处理
- 形态学变换
图像处理技术经常作为计算机视觉任务的预处理步骤,帮助改善原始图像数据的质量,从而为后续的分析和理解任务创造更好的条件。
区别
计算机视觉是指使计算机能够“看”和“理解”图像和视频中内容的技术和科学研究领域,需要理解图像内容的上下文,不仅识别图像中的元素,而且还要理解这些元素之间的关系以及它们在真实世界中的功能和动态。
图像处理主要关注于图像本身的改进、恢复和优化。它涉及对图像数据进行处理以进行增强、压缩、恢复和其他操作,以便于存储、传输或更好地视觉呈现。图像处理的目标是改善图像质量或提取信息。
联系
一个给定的计算机视觉系统可能需要对原始输入应用图像处理,例如预处理图像:
- 对图像的光度属性进行标准化,例如亮度或颜色。
- 裁剪图像的边界,例如在照片中将对象居中。
- 从图像中去除数字噪声,例如低光照级别的数字伪影。这些都是为了使图像更适合后续的计算机视觉任务。
图像处理可以通过改善图像质量来提高计算机视觉系统的性能;而计算机视觉则通过对图像的高级理解增加了图像处理的应用范围。
与人工智能的关系
计算机视觉是:
A quest to AI(人工智能的追求)
A driving force of AI (人工智能的驱动力)
Key application of AI(人工智能的关键应用)
计算机视觉与人工智能的关系表现为相互支持和促进。计算机视觉依赖于AI的算法和模型来执行其核心任务,如图像识别和场景理解;而AI领域则通过解决计算机视觉中的具体问题,如图像分类或对象检测,来推动技术的创新和发展。
机器学习、深度学习关系
2012年前手工设计提取特征方法,通过直方图来统计数据特征,以SIFT、HOG为主
2012年后设计卷积层,使用卷积神经网络自动学习特征占主导
计算机视觉与机器学习
计算机视觉是一门研究如何使机器“看”和“理解”视觉世界的科学。机器学习提供了实现这一目标的方法和技术,尤其是通过算法自动识别和解释图像和视频数据。
- 机器学习的应用:在计算机视觉任务中,机器学习算法用于自动识别图像中的模式,进行图像分类、对象检测、场景理解等。这些算法包括支持向量机(SVM)、决策树、随机森林、以及聚类方法等。
- 特征提取与处理:传统的机器学习在计算机视觉中的应用通常依赖于手工设计的特征提取技术,如HOG(方向梯度直方图)、SIFT(尺度不变特征变换)等,这些特征随后用于训练分类器或其他学习模型。
计算机视觉与深度学习
深度学习是机器学习中的一个子领域,它使用多层神经网络来学习数据的高级抽象表示。在计算机视觉中,深度学习已成为最为关键的技术之一,尤其是卷积神经网络(CNN)在图像处理中的应用。
- 深度学习的革命:深度学习极大地改进了计算机视觉的性能,特别是在图像分类和对象识别任务中。CNN可以自动从原始图像数据中学习复杂的特征,无需人工介入。
- 端到端学习模型:深度学习允许从输入到输出构建端到端的模型,例如,从图像直接预测标签,这简化了处理流程并提高了效率。
相互影响
- 推动技术发展:计算机视觉的需求和挑战推动了机器学习和深度学习技术的发展。例如,对象检测和视觉追踪的需求促进了如R-CNN、YOLO和LSTM等特定算法的创新。
- 扩展应用场景:反过来,机器学习和深度学习在计算机视觉的成功应用也扩展了它们在其他领域的应用,如语音识别、自然语言处理和无人驾驶汽车。
滤波
空域滤波:直接在图像平面上对像素值进行操作,基于邻域处理的增强方法,它应用某一模板对每个像元与其周围邻域的所有像元进行某种数学运算得到该像元的新的灰度值,新的灰度值的大小不仅与该像元的灰度值有关,而且还与其邻域内的像元的灰度值有关。
频域滤波:频域滤波首先需要将图像从空间域转换到频率域(通常通过傅立叶变换)。在频率域中,图像的频率成分被修改后再转换回空间域。
空域滤波
线性滤波
一维情况
噪声是高斯噪声,独立同分布
将损坏的每个像素替换为其相邻像素的平均值


二维情况

二维平滑:均值滤波、高斯滤波
二维平滑注意边界处理:
- 可以忽略边界,处理结果就少一圈
- 可以拓展图像,这个有很多方法,比如加黑色边界、复制图像边界的值、图像镜像拓展、图像周期拓展
卷积
卷积与互相关

想让结果与模板一致,就要把模板翻转
卷积符号:\(*\)
互相关符号:\(\bigotimes\)
卷积和互相关是很相似的运算:

互相关就是把卷积的模板(卷积核)翻转(沿水平和垂直方向都进行翻转)
在神经网络里,说的“卷积”其实用的是“互相关”
可分离卷积
高斯滤波器是可分离的

非线性滤波
中值滤波
取中值
适合消除椒盐噪声
双边滤波
双边滤波是一种非线性的滤波方法,它结合了空间邻近度和像素差异两个因素,旨在在去噪的同时保留边缘
双边滤波能很好地保留边缘,但高斯滤波不能
模板匹配
内积
两个向量内积越大,越相关

归一化互相关模板匹配

大致过程:滑动窗口(与模板图像一样大)遍历图像中需要搜索的区域,对每个像素计算与模板平均值之差,以及相应的目标图像子图像中对应像素的值与子图像平均值之差的乘积;再进行归一化操作;最后最高的值就是匹配位置
但是,这个方法仅适合在原图中找原图的一部分
如果换成其他图像,因为归一化互相关模板匹配受光照影响大,对灰度变化、旋转、尺度、遮掩等敏感,会导致出问题
频域滤波
图像傅里叶变换


高频部分指图像边缘
低频部分指非边缘
正常傅里叶变换后,高频部分会在图像中间,低频部分会在图像四角
一般会将傅里叶变换的图像频移,把四个角的低频信息集中在中间:

频移后的图像,低频信息就会在中间,高频部分就在角落

频域滤波步骤
- 原图像\(I\)每个对应像素乘\((-1)^{r+c}\),得到新的矩阵\(I^{'}\)
- 新矩阵\(I^{'}\)右侧和下侧补0,得到实矩阵\(F\)
- 对实矩阵\(F\)进行傅里叶变换,得到复矩阵\(f\)
- 对复矩阵\(f\)与复矩阵滤波器\(Filter\)(这个滤波器矩阵一般是实矩阵)点乘,得到复矩阵\(f_{Filter}\)
- 对复矩阵\(f_{Filter}\)进行逆傅里叶变换,得到复矩阵\(f^{'}\)
- 对复矩阵\(f^{'}\)取实部,得到实矩阵\(f^{'}_{real}\)
- 对实矩阵\(f^{'}_{real}\)进行裁剪,得到实矩阵\(I^{''}\)
- 最后对这个实矩阵\(I^{''}\)每个像素乘\((-1)^{r+c}\),得到最终图像\(I_{Filter}\)

实际操作例子:








频域滤波器
注意:这里假设进行傅里叶变换后默认进行频移操作,把低配信号移动到中间,高频信号移动到四周
低通滤波
理想低通滤波器

巴特沃斯低通滤波器
巴特沃斯滤波器越高阶,越接近理想滤波器

高斯低通滤波器

振铃现象
振铃现象是指在对一幅图像进行滤波处理时,如果选用的频域滤波器具有陡峭的变化,那么滤波后的图像可能会出现“振铃”,指输出图像的灰度剧烈变化处产生的震荡,就好像钟被敲击后产生的空气震荡


因此,实际上的理想低通滤波器在实际应用中不常用
巴特沃斯滤波器也会出现振铃现象
但是高斯低通滤波没有振铃现象
高通滤波
理想高通滤波器

巴特沃斯高通滤波器
巴特沃斯滤波器越高阶,越接近理想滤波器

高斯高通滤波器

边缘提取
边缘检测的算子,所有数字加起来必须等于0
边缘检测

边缘检测的原理:一阶导数极值点对应的就是边缘,二阶导数过零点对应的就是边缘

对连续时间信号来说,是导数
对离散时间信号来说,是差分(\(\Delta k=1\))

基于一阶差分的边缘检测
Roberts边缘检测
Prewitt边缘检测
Sobel边缘检测
Canny边缘检测
核心步骤

Roberts边缘检测

方向看0的方向,0如果是45度那就反应的45度方向上灰度变化率(边界)
可以举个例子,如数字图像处理复习整理中手算sobel垂直方向模板,0是水平排列的,检测出来的就是水平边界

后面同理
Roberts边缘检测,很多噪声的强度大于边缘的强度
Prewitt边缘检测

Prewitt边缘检测的算子是可以分离的
Sobel边缘检测

Canny边缘检测
检测步骤:
- 分别使用Sobel算子的水平和垂直方向卷积核与图像做卷积,得dx,dy;
- 使用dx和dy计算各个位置的梯度方向angle=arctan2(dy,dx);
- 基于梯度方向,对每一个位置做非最大值抑制;
- 双阈值的滞后阈值处理。
具体步骤:

利用dx和dy的平方和开方得到边缘强度矩阵


注意梯度方向在\([-180,180]\)

从(1,1)开始,忽略边缘一圈
然后根据梯度方向对应位置的角度,确定参与运算的数
计算出对应的两个数,如果与边缘强度矩阵对应位置数比较


角度划分区间:


基于二阶差分的边缘检测
与一阶差分的模板不同,用到了对角
拉普拉斯边缘检测
高斯拉普拉斯边缘检测
高斯差分边缘检测
Marr-Hildreth边缘检测
拉普拉斯边缘检测

高斯拉普拉斯边缘检测

高斯差分边缘检测

Marr-Hildreth边缘检测

HOG(Histogram of Oriented Gradient)
广泛用于目标检测
特征描述子定义为:它是图像的一个简化的表示,其中仅包含图像最重要的信息
HOG特征提取步骤:
- 图像缩放
- 计算梯度dx和dy,用Sobel算子求解
- 计算边缘强度和方向(类似于Canny边缘检测,但是这里角度在\([0,180]\))
- 将图像划分为8x8的cell,并计算各个cell的梯度直方图(9维向量)
- 归一化block中的梯度(一个block为16x16,即一个block有4个cell,即一个block有36维向量)
- 获取整幅图像的特征,滑动block,获取全部block的36维向量,拼接这些向量就是最终特征向量
具体过程:




一个block有4个cell,一个cell是1x9维向量,因此一个block就是1x(4x9)=1x36维向量


角点检测
SUSAN算子
Harris
SUSAN算子

圆形模板,USAN面积倒数作为输出,判断极大值就能找出角点
Harris



图像匹配
SIFT
关键点匹配
SIFT
一种基于尺度空间的、对图像缩放、旋转甚至仿射变换保持不变性的图像局部特征描述算子-SIFT(尺度不变特征变换)
SIFT步骤:
- 构建尺度空间
- 高斯滤波,使用高斯滤波器对原始图像在不同尺度上进行平滑,生成一系列尺度变化的图像,这些图像组成了所谓的高斯金字塔
- 构建尺度空间,模拟物体尺度变换(近大远小)
- 定位关键点
- 计算DoG高斯差分金字塔,通过相邻尺度的高斯图像相减得到
- 在差分高斯金字塔(DoG金字塔)中,每个像素与其相邻的26个像素比较,找局部极大值和极小值,这些就是初步关键点
- 再在这些极值点里删除不稳定的特征点
- 指定关键点方向
- 计算关键点邻域像素的梯度方向和幅值
- 计算关键点邻域梯度直方图,共36个维度(360度,每隔10度取一次),求出主方向(有时也有辅方向,判断依据是有没有超过峰值的80%)
- 描述关键点
- 以关键点梯度方向为基准,调整邻域点梯度方向,并更新梯度方向,以实现旋转不变性
- 分解关键点邻域为16个4x4的块,每个块再统计一个8维直方图(360度,这次隔45度取一次)
- 将每个直方图槽数据串联即可得到关键点的SIFT描述,即128维特征向量

构建尺度空间
就是构建高斯金字塔,每一层的宽高都是上一层的一半
首先对原始输入图像进行适当的上采样(可选,取决于需要检测的最小特征尺度),并用一个初始的高斯核进行平滑,生成基础图像,这保证了在所有尺度上的图像特征都能被检测到
从基础图像开始,逐渐增加高斯核的\(\sigma\)值,对图像进行一系列的模糊。每次模糊都使用稍大一点的\(\sigma\),这样做生成了一系列尺度递增的图像,每个图像都比前一个更模糊
定位关键点
然后将每一层的相邻两张图做差分,得到DoG高斯差分金字塔

在差分高斯金字塔(DoG金字塔)中,每个像素与其相邻的像素(同一图像中的8个邻域像素和相邻尺度上对应的9+9个像素,共26个邻域像素)比较,以寻找局部极大值和极小值,这些就是初步关键点

再在这些极值点里删除不稳定的特征点:
- 从离散空间中估计出极值点的精确位置,借助DOG二阶泰勒展开,用值已知的点A估计点A附近的某点B的值
- 去除对比度低的关键点
- 去除处于边缘的关键点
指定关键点方向
计算关键点邻域像素的梯度方向和幅值
将一圆周360°划分成36个槽,从0°开始每槽递增10°
根据邻域点的方向、梯度的幅值以及距离特征点的远近构建上述梯度方向直方图
根据梯度直方图,直方图峰值所对应的的角度就是当前特征点A的方向
同时如果某角度的梯度幅值和>=峰值的80%,那么就产生一个新的特征点B,这个点的坐标、尺度等参数同A,但是角度不同,A点为主方向,B点等为辅方向
描述关键点
以关键点梯度方向为基准,调整邻域点梯度方向,并更新梯度方向
将关键点邻域划分为16x16,进一步将其中4x4的小块划分为一组
计算4x4小块的梯度方向直方图,只是这次直方图的槽是以45度划分的,因此每个直方图只有8个槽
统计每个4×4块的方向梯度直方图,为了去除光照对描述子的影响,对梯度直方图进行归一化处理
然后将每个直方图槽数据串联即可得到关键点的SIFT描述,即128维特征向量

关键点匹配
需要提取sift特征
深度学习
深度学习框架与numpy
深度学习框架(如TensorFlow, PyTorch, Keras等)和NumPy都是在Python生态中广泛使用的库,但它们各自的设计目标和功能强调有很大不同。以下是对它们之间的比较以及深度学习框架的优势介绍:
基本差异
- 目的:
- NumPy:提供了一个高性能的多维数组对象及相应的工具,主要用于科学计算。它的功能围绕数组计算展开,支持广播、矩阵运算等基本数学和复杂的统计操作。
- 深度学习框架:旨在简化并优化深度学习模型的构建、训练、测试和部署。这些框架提供自动微分、优化器、预定义的多层次网络结构等专为机器学习和深度学习设计的高级功能。
- 数据结构:
- NumPy:主要使用
ndarray
对象,这是一个通用的多维数组,适用于各种数值计算任务。- 深度学习框架:虽然也使用类似于NumPy的多维数组(如TensorFlow的Tensor或PyTorch的Tensor),但这些数组专为高效的机器学习计算优化,支持GPU加速和自动微分。
- 计算性能:
- NumPy:主要在CPU上执行,虽然有些操作可以用NumPy库如NumExpr、CuPy在GPU上执行,但这不是原生支持。
- 深度学习框架:天生支持在GPU和TPU等硬件上运行,这对于训练复杂的深度学习模型是必须的。
- 模型定义和训练:
- NumPy:手动实现。
- 深度学习框架:深度学习框架提供了一系列的工具和函数,使得定义和训练神经网络变得更加容易。
深度学习框架的优势
深度学习框架的优势
- 自动微分:提供自动微分技术来自动计算神经网络中的梯度。这是训练深度学习模型的关键技术,极大简化了模型的开发和训练过程。
- 模型抽象:深度学习框架提供高层次的API来定义和操作复杂的模型架构,如卷积神经网络(CNN)、循环神经网络(RNN)等。
- 优化算法:内置多种优化算法如SGD、Adam等,这些算法帮助用户轻松实现和测试不同的优化策略。
- 模型保存和恢复:支持模型的保存和加载,方便模型的部署和继续训练。
- 大规模部署:提供工具和库支持模型的大规模训练和部署,包括多GPU训练、分布式训练等。
- 社区和生态:拥有庞大的开发者和研究社区,提供大量预训练模型、教程和最佳实践。
总之,虽然NumPy在科学计算领域非常强大和灵活,但深度学习框架通过专门为深度学习优化的工具和API,提供了更适合构建、训练和部署复杂神经网络模型的环境。
深度学习中卷积和互相关的关系
在深度学习,特别是在实现卷积神经网络时:
- 互相关操作经常被称为“卷积”。这主要是出于历史和软件实现的方便,因为在深度学习中,滤波器(或称为卷积核)通常是学习得到的,而不是预先定义的。因此,是否翻转这个滤波器在数学上不会产生本质区别,因为无论如何滤波器都要通过训练来调整其值。
- 真正的卷积操作(包括翻转步骤)在深度学习框架中较少使用,因为它并不为神经网络提供额外的优势,而且会增加计算的复杂性。
尽管从理论上讲,卷积和互相关有着明确的区别,但在实际的深度学习应用中,这种区别通常是无关紧要的。无论使用哪种方法,网络在训练过程中都能学习到将输入有效映射到输出的最佳权重。因此,无论是从卷积还是互相关角度出发,最终的学习效果和网络性能应该是等价的。
这种简化使得实现更为直接,同时也使得非专业人士更易于理解和应用CNN。在实际编程实现和教学中,通常使用术语“卷积”来描述这一操作,尽管按照严格定义,它更接近于互相关。
卷积的计算
这个还是比较容易的,就是正常的模板卷积

卷积的神经网络,并不是全连接(fully connected),也因此可以权重共享


MaxPooling计算
这个也是很容易,找最大值就行



CNN步骤

原图——卷积——pooling——卷积——pooling——接入全连接神经网络
CNN参数的计算
具体例子
先看个具体的例子

设stride为1,从头开始分析:
输入图像是一个1通道28x28像素的灰度图像
用25个3x3的卷积核来卷积,每一个核的通道需要跟上一层图像的通道对应,也就是说这25个3x3的卷积核都是单通道的
卷积后一行有\(\dfrac{28-3}{1}+1=26\)个像素
第一次卷积得出的结果就是25个通道(用几个卷积核,结果就有几个通道),每个通道都是26x26个像素
然后MaxPooling,用2x2的大小,得出来的结果就是25个通道,每个通道是13x13个像素
再用50个3x3的卷积核来卷积,每一个核的通道需要跟上一层图像的通道对应,也就是说这50个3x3的卷积核都是25个通道的
卷积后一行有\(\dfrac{13-3}{1}+1=11\)个像素
第二层卷积得出的结果就是50个通道,每个通道都是11x11个像素
然后MaxPooling,用2x2的大小,得出来的结果就是50个通道,每个通道是5x5个像素
再看参数个数,一个卷积核里有多少数字就有几个参数
第一种卷积核,是3x3的单通道,一个卷积核的参数个数就是1x3x3=9
第二种卷积核,是3x3的25通道,一个卷积核的参数个数就是25x3x3=225
pooling不需要参数
参数计算公式
设输入图像,宽为\(W\),高为\(H\),维数为\(D\)
设用\(K\)个卷积核,每个卷积核都是\(F\times F\),步长stride为\(S\),padding为\(P\)
因此,产生的新图像:
新的宽:\(W^{'}=\dfrac{W-F+2P}{S}+1\)
新的高:\(H^{'}=\dfrac{H-F+2P}{S}+1\)
新的维数:\(K\)
参数:看卷积核里数字的个数
反向传播
链式法则:上流梯度*下流梯度


例如:

这里上流梯度是\(-0.53\)
下流梯度:\(f=e^x,\dfrac{df}{dx}=e^x\),下流的\(x=-1\),即下流梯度\(e^{-1}\)
链式法则:\(-0.53\times e^{-1}=-0.2\)
计算的时候写出\(f\)跟\(x\)的关系,再求导,再求梯度即可
经典神经网络
AlexNet
VGGNet

GoogLeNet


ResNet

词袋模型
BoW
词袋模型简称BoW,是一种文本特征表示方法
不管是机器学习还是深度学习,接受的数据肯定是一个向量
于是我们需要设计一个方法将文本转换为数值向量:
- 统计出所有文本数据中出现的不同单词个数NUM
- 创建一个长度为NUM的整形数组,使一个单词对应一个元素(算是统计频度的直方图)
- 遍历每个文本,对应单词数目在数组里加一(类似桶排序)
计算机视觉中的词袋模型
关键:
- 特征提取
- 构建code words dictionary
基于词袋模型的图像识别
步骤:
- 将图像裁剪成指定大小的网格,进行SIFT特征提取
- 对SIFT做聚类,得出的聚类中心就是视觉词汇,所有视觉词汇的集合就是码字词典(视觉词典)
- 图像表示,对每一幅图像以码字字典为规范,对图像的每一个SIFT特征点计算与词典中每个词汇的距离,最近的自增,就能得到这个图像的码本
- 分类器训练
- 测试分类器
基于词袋模型的图像检索
TF-IDF:TF是词频,IDF是逆文本频率指数
这个方法用以评估一个字词对一个文件集或语料库中其中一个文件的重要程度
字词的重要性会随着文件中出现的次数成正比增加,也会随着在语料库中出现的频率成反比下降
因此,基于词袋模型的图像检索就可以用这种方法来比对相似度
图像匹配
在原图中搜索原图的一部分:归一化互相关模板匹配
在别的图中搜索,比如同一本书在不同的地方出现:
SIFT
对第一个图的每一个关键点计算到第二个图的每个关键点的欧氏距离(穷举),最近的就是最匹配关键点,选出最好的前50个
简化:kd树搜索,搜索内容以目标图像的关键点为基准,搜索与目标图像特征点最邻近的原图像特征点和次邻近的原图像特征点
HOG
比对特征向量
词袋模型
建立词袋模型
使用TF-IDF对目标进行权重计算,得到关键码keys
然后比对目标和原始图像,计算他们两个key的内积得到value,value越大越相似
直方图
HOG(Histogram of Oriented Gradients)
- 体现:HOG技术的核心就是计算图像局部区域(cells)的梯度方向直方图。这些直方图描述了这些局部区域内像素点梯度的分布情况,通过统计各个方向梯度的频率(即每个方向的梯度强度总和)来构建直方图。
- 统计:8x8 cell的梯度。
- 应用:HOG特征常用于物体检测,特别是行人检测,因为它能有效捕获物体的形状和纹理信息。
SIFT(Scale-Invariant Feature Transform)
- 体现:在SIFT特征提取过程中,每个关键点周围的区域被用来计算该点的梯度直方图。这个直方图基于像素的梯度和方向,通常分为36个bin(每10度一个bin)。
- 统计:关键点邻域梯度的直方图,36维;再把关键点邻域划分为16个4x4的小块,对每个小块求梯度方向直方图,8维。
- 应用:通过这些直方图,SIFT描述符不仅能够捕获关键点的局部特征,还能够保持对尺度和旋转的不变性,使其在图像匹配和识别任务中非常有效。
图像分割
- 体现:在图像分割中,直方图用于分析图像中像素值(如灰度值或颜色通道)的分布。例如,通过灰度直方图可以识别出不同的峰值,这些峰值代表图像中的主要灰度级,可以用于区分不同的区域。
- 统计:像素灰度值直方图。
- 应用:基于直方图的阈值方法是一种常见的图像分割技术,如Otsu方法自动选择一个阈值来最大化类间方差,从而分割图像。
词袋模型(Bag of Words)
- 体现:在图像的词袋模型中,直方图用于表示图像中的视觉词汇的分布。首先,通过聚类方法(如K-means)对所有图像的特征(如SIFT特征)进行聚类,形成视觉词汇(视觉单词)。然后,对于每张图像,统计其特征落在每个聚类中心(即每个视觉单词)的频率,形成一个直方图。
- 统计:词频直方图。
- 应用:这种方法常用于图像分类和检索,通过比较图像的视觉词袋直方图来评估图像间的相似度。
总结来说,直方图作为一种统计工具,在这些技术中提供了一种简单而强大的方式来总结和比较图像中的信息,无论是梯度方向、像素强度还是特征频率。这些应用体现了直方图在图像处理和计算机视觉中的多功能性和核心地位。
论文阅读
摘要
摘要—卷积神经网络(CNN)是深度学习领域最重要的网络之一。由于CNN在包括但不限于计算机视觉和自然语言处理等多个领域取得了令人瞩目的成就,它在过去几年中吸引了工业界和学术界的广泛关注。现有的综述主要关注CNN在不同场景中的应用,没有从一个通用的角度考虑CNN,而且一些最近提出的新观点也没有涵盖。在这篇综述中,我们旨在尽可能提供这一快速发展领域中的新观点和前景。此外,我们不仅涉及到二维卷积,还涉及到一维和多维卷积。
首先,本综述从简要介绍CNN的历史开始。
其次,我们提供了CNN的概述。
第三,介绍了经典和先进的CNN模型,特别是那些使它们达到最先进结果的关键点。
第四,通过实验分析,我们得出了一些结论,并为功能选择提供了几条经验法则。
第五,涵盖了一维、二维和多维卷积的应用。
最后,讨论了CNN的一些开放性问题和有前途的方向,以作为未来工作的指南。
卷积神经网络CNN比较一般人工神经网络的优势
- 局部连接:每个神经元不再与前一层的所有神经元连接,而只连接到少数几个神经元。这种方式有效减少了参数数量,加速了收敛过程。
- 权重共享:一组连接可以共享相同的权重,这进一步减少了参数的数量。
- 降采样降维:池化层利用图像局部相关性原理对图像进行降采样,这不仅可以减少数据量,同时保留有用信息,还可以通过去除不重要的特征来减少参数数量。
这三个吸引人的特性使得CNN成为深度学习领域最具代表性的算法之一
经典CNN
LeNet-5,用于手写体字符识别
AlexNet,首次在CNN上成功地利用了ReLU激活函数、dropout(随机忽略一些神经元, 以避免过度拟合)和局部归一化(LRN)
VGGNets,增加神经网络的深度可以在一定程度上提高网络的最终性能,移除LRN
GoogLeNet,第一个通过Inception模块形成的大规模CNN
ResNet,重要贡献是由快捷连接构造的两层残差块(太深了容易导致梯度消失,梯度爆炸等问题)
DCGAN
MobileNets,轻量级模型
ShuffleNets,解决移动设备计算能力不足的问题
GhostNet,有效地降低计算成本
激活函数讨论
Sigmoid,映射到(0,1),用于二进制分类问题
tanh,映射到(-1,1),输出的平均值为 0,它可以实现一种归一化,这使得下一层更容易学习
Rectified Linear Unit(ReLU),当x小于0时,其函数值为0; 当x大于或等于0时,其函数值为x本身;显著优点是可以加快学习速度:ReLU的导函数是一个常数,而Sigmoid和tanh的导数需要除法指数运算
Leaky ReLU ,可以减少神经元失活
PReLU,负面部分的斜率是基于数据的,而不是预定义的
ELU,具有负值,因此其输出的平均值接近于0,使得收敛速度比ReLU函数快;然而,负的部分是一条曲线,需要很多复杂的导数。
选择激活函数的经验法则
对于二元分类问题,最后一层可以利用Sigmoid;对于多元分类问题。最后一层可以利用softmax
由于梯度消失,有时应避免使用Sigmoid和tanh函数。通常情况下,在隐蔽层中,ReLU或Leaky ReLU是一个不错的选择
如果你对选择激活函数没有概念,可以试试ReLU或Leaky ReLU
如果大量的神经元在训练过程中未被激活,请尝试利用Leaky ReLU、PReLU等
Leaky ReLU中的负斜率可以被设置为 0.02来加快训练速度
损失函数
常见的损失函数包括平均绝对误差(MAE) ,均方误差(MSE) ,交叉熵等
在卷积神经网络中,当处理回归问题时,我们可能会使用MAE或MSE
在卷积神经网络中,当涉及到分类任务时,最典型的一种方法是交叉熵损失法
优化器
常见的优化算法有Momentum,RMSprop,Adam等等
CNN应用
一维CNN:时间序列预测、信号识别
二维CNN:图像分类、目标检测、图像分割、面部识别
多维CNN(以三维为例):人类行为识别、物体识别/检测
CNN前景
模型压缩,将模型部署到嵌入式设备
CNN的安全
网络架构搜索
胶囊神经网络
实验四分析
HOG+SVM
设计一个基于支持向量机(SVM)的分类系统,用于分类苹果树叶的病害类型
系统将采用Histogram of Oriented Gradients (HOG) 作为特征提取方法,并使用交叉验证来优化模型参数及评估模型性能
数据准备
数据收集:收集足够的苹果树叶图像,确保包括所有感兴趣的病害类型
数据标注:对收集的图像分好文件夹或进行人工标注,分类标签包括斑点落叶病、花叶病和锈病
特征提取
使用HOG:选择HOG作为特征提取方法,因为HOG能有效地捕获图像的局部形状信息和纹理信息,适合于处理图像分类任务
数据划分
划分策略:将数据集划分为训练集、验证集和测试集。其中,训练集用于模型训练,验证集用于模型选择和调参,测试集用于最终的模型评估 交叉验证:在训练过程中采用K折交叉验证方法,以确保评估结果的稳定性和可靠性
模型选择与训练
选择SVM:选用SVM作为分类器,因其在小样本情况下表现良好,适合处理复杂的图像分类问题
性能评估
评估指标:使用多个指标来评估模型性能,包括准确度(Accuracy)、精确度(Precision)、召回率(Recall)、F1分数和混淆矩阵
混淆矩阵:特别利用混淆矩阵来可视化模型在各个类别上的性能,以识别模型可能的偏差或不足
ResNet
设计一个基于深度学习的分类系统,我们将利用预训练的ResNet模型对苹果树叶的病害类型进行分类
数据准备
数据收集:收集足够的苹果树叶图像,确保包括所有感兴趣的病害类型
数据标注:对收集的图像分好文件夹或进行人工标注,分类标签包括斑点落叶病、花叶病和锈病
数据预处理
调整图像大小至统一尺寸(64x128),以符合模型输入要求
转换图像数据类型,将图像数据转换为浮点张量,并调整通道顺序以适应PyTorch模型输入(通道、高度、宽度)
模型修改和适配
加载预训练模型:加载预训练的ResNet50模型
自定义输出层:更换ResNet的全连接层,以匹配苹果树叶病害的三个类别
参数设置:模型的最后一层采用线性变换,其输入特征数与ResNet最后一层的输出特征数相同,输出特征数为类别数(3)
训练过程
设置优化器和损失函数:使用SGD优化器和交叉熵损失函数,设置学习率和动量
批处理和迭代:利用DataLoader进行数据批处理,执行多个训练周期
损失监控:每个训练周期结束时输出损失,监控训练进度
性能评估
测试函数:设计测试函数以评估模型在测试集上的表现
准确率计算:通过比较预测标签和真实标签来计算准确率
混淆矩阵生成和可视化:生成混淆矩阵以查看各类别的分类性能,并通过热图进行可视化
参考资料
A Survey of Convolutional Neural Networks: Analysis, Applications, and Prospects