博文

RankIQA-论文笔记

图片
RankIQA          RankIQA是2017年的一篇应用于无参考图像质量评价领域的优秀论文,它发表于当年的ICCV。文章创新性地将 Siamese网络的相关思想应用于图像质量评价模型的预训练中,并提出了一系列用于预训练IQA模型以及优化Siamese网络的实用方法。读完之后受益颇深,且引发了进一步思考。本文接下来将结合原论文并根据自身理解详细介绍RankIQA图像质量评价模型的训练全过程。 主要思想:          近些年来由于深度神经网络在图像数据处理的各个领域均取得了显著成效获得可观成果,因此越来越多的学者开始尝试将深度神经网络应用于图像质量评价,但与其他图像处理识别任务不同,对图像质量的评定带有很强的主观因素且需要评定者有很强的专业素养,因此大多数的图像质量评价数据集均由相关专业的群体包含几百的专业人士根据给定的参考图像进行打分,这是一件十分耗费人力的工作同时也导致数据集的构建成本十分高昂,因此目前图像质量评价领域的相关数据集均为小型数据集,将其直接用于特大深度神经网络模型的训练极易引发过拟合,无法真正地表达出其他图像的质量水平。因此作者受到启发,虽然标注有明确质量信息的相关数据很难获得但通过给图像添加干扰获得一系列的受损图像却可以根据添加的干扰多少对其进行排序,通过这种排序好的数据集进行预训练就可以解决目前状态下质量评价数据集缺少的问题。          首先本文中作者预训练时使用的 Siamese网络为共享权重的孪生神经网络,在实际代码中用于对比的两个失真图像实际上也是经过同一个网络进行正向传播获得输出并进行对比的,对于文中的Siamese网络而言它的两个分支完全相同且属于一个图像将获得一个对应的标量输出,这一标量就表示了模型对于输入图像质量分数的预测,在预训练阶段标注信息是图像的质量排名,而Siamese网络也将对比这一标量并对模型进行优化,而在最后的微调阶段这一标量将用于拟合图像的质量分数标注,并通过MSE损失计算相关误差。本文接下来的内容将详细介绍预训练阶段Siamese网络的训练实现。 Hinge Loss(折页损失函数,铰链损失)      ...

ML-K近邻算法

图片
  一.k近邻算法的基本概念,原理以及应用 k近邻算法是一种 基本分类和回归方法 。本篇文章只讨论分类问题的k近邻法。 K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例 最邻近 的K个实例, 这K个实例的多数属于某个类 ,就把该输入实例分类到这个类中。( 这就类似于现实生活中少数服从多数的思想 )根据这个说法,咱们来看下引自维基百科上的一幅图: 如上图所示,有 两类 不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是 待分类的数据 。这也就是我们的目的,来了一个新的数据点,我要得到它的类别是什么?好的,下面我们根据k近邻的思想来给绿色圆点进行分类。 如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形, 少数从属于多数, 基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。 如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形, 还是少数从属于多数, 基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。 从上面例子我们可以看出,k近邻的算法思想非常的简单,也非常的容易理解,那么我们是不是就到此结束了, 该算法的原理我们也已经懂了,也知道怎么给新来的点如何进行归类,只要找到离它最近的k个实例,哪个类别最多即可。 哈哈,没有这么简单啦,算法的核心思想确实是这样,但是要想一个算法在实际应用中work,需要注意的不少额~ 比如k怎么确定的,k为多少效果最好呢?所谓的最近邻又是如何来判断给定呢? 哈哈,不要急,下面会一一讲解! 二.k近邻算法中k的选取以及特征归一化的重要性 选取k值以及它的影响 k近邻的k值我们应该怎么选取呢? 如果我们选取较小的k值,那么就会意味着我们的整体模型会变得复杂,容易发生过拟合! 恩~结论说完了,太抽象了吧你,不上图讲解号称通俗讲解的都是流氓 ~好吧,那我就上图来讲解 假设我们选取k=1这个极端情况,怎么就使得模型变得复杂,又容易过拟合了呢? 假设我们有训练数据和待分类点如下图: 上图中有俩类,一个是 黑色的圆点 ,一个是 蓝色的长方形 ,现在我们的待分类点是 红色的五边形。 好,根据我们的k近邻算法步骤来决定待分类点应该归为哪一类。我们由图中可以得到, 很容易我们能够看出来五边形离黑色的圆点最近,k又等于...

SROCC, KROCC, PLCC, RMSE

图片
 SROCC, KROCC, PLCC, RMSE     在机器学习以及深度学习方法的学习过程中有两个指标经常被我混淆,模型的准确性以及模型的误差,其实从根本上来说这两个指标都在不同程度上描述了当前模型的优越程度,但从实际意义上来说模型误差由于参数取值,计算方式等原因并不能直接用于模型之间好坏的对比,而更偏向使用于模型的训练。与之相反,模型的准确性是人们根据特定的规则使用模型的输出计算出的一种分值,它不能直接用于模型的训练但由于其规则统一,计算方法固定。因此更加适用于模型间好坏程度的比较。本文今天所涉及的四种方法:SROCC、KROCC、PLCC以及RMSE就是应用于图像质量评价领域对相关模型进行打分的四种不同的标准。 SROCC(Spearman rank-order correlation coefficient) 当SROCC取1表示算法性能很好,-1表示很差。值越接近1,IQA算法性能越好。 KROCC(Kendall rank-order correlation coefficient) KROCC的数值越大, 说明两个数据之间的相关性越好,IQA算法性能越好;值越小说明相关性越差,IQA算法性能一般。 PLCC(Pearson’s linear correlation coefficient) PLCC 描述两组数据之间的线性相关性,其取值范围为 -1~1。当 PLCC 的值为零时,表示两组数据完全不相关(图像的客观质量分数和主观质量分数相差很大);当 PLCC 值为 1 或 -1 时,表明两组数据完全相关(图像的客观质量分数和主观质量分数一样)。PLCC 描述算法的客观评价分与人眼主观打分之间的相关性,衡量了IQA算法预测的准确性。 参考一   参考二 RMSE(root mean square error) 均方根误差越接近于 0,IQA算法性能越好。

Visual Mechanisms Inspired Efficient Transformers for Image and Video Quality Assessment

图片
Image and video quality assessment based on swin-transformer     这是一篇2022年发表于CVPR的一篇文章,文中作者受到swin-transformer中多层注意力机制的启发,构造了一种能在多个维度层面对图像质量进行评价的图像质量评价方法。并将这一方法应用于视频片段中帧图像的质量评定。最终不论是文中提出的图像质量评定方法还是视频质量评价方法都获得了巨大的成效成为全新的标杆性方法。     在图像质量评价方面,由于使用了swin-transformer作为基础框架,作者在进行图像预处理时 对该领域所要求的高分辨率图像与swin-transformer所要求的固定分辨率图像输入中做了折中,摒弃了传统图像分类、目标检测中所做的裁剪预处理转而采用池化层对高分辨率图像的全局信息进行提取并以提取出的信息作为输入放入swin-transformer框架中进行处理。在往常的计算机视觉任务中深度学习框架往往更偏向于提取空间域或时域中的相关信息,但作者提出在图像质量评价任务中频域信息(图像中亮度/对比度的变化快慢)同样值得关注。虽然图像的频域信息在深度学习框架中很难准确地进行表示但是在每层swin-transformer的输出中各个chanel之间的相对信息可以从某种意义上展现出该图片的频域信息因此作者提出了channel attention对原有swin-transformer框架进行了改进提出了一种适用于图像质量评价的swin-transformer(multi-stage channel attention model using Swin Transformer as backbone for IQA)其框架如上图一所示。此外作者认为本文提出的这种channel attention在swin-transformer的各个层之间的注意力表现应当是近乎相同的,同时也为了减少模型的运算数据量,作者决定采用权重共享的方式为原有的swin-transformer添加channel attention机制。由于在swin-transformer各个层的输出中他们的channel数量并不相同,作者引入包含固定数量(K)的滤波器以及1×1卷积核的bottleneck卷积层对各个层的输出进行变...

Swin-transformer

图片
Swin Transformer A Hierarchical Vision Transformer using Shifted Windows         swin-transformer是2021年微软亚洲研究院的相关学者为了尝试构造一种能够同时应用于计算机视觉与自然语言处理领域的通用性基础框架而做出的一种改良性研究并取得了非凡的成就。在swin-transformer之前2020年Google研究院就有相关的研究将自然语言处理领域广泛应用的transformer框架进行一定程度的改写,使其能够应用于计算机视觉领域。不过问题依旧存在。改写后的算法并不能完全胜任所有的计算机视觉任务。在本文中作者分析了其中的困难并提出移动窗口以及分层注意等机制使得改进后的transformer在计算机视觉领域内的各个任务都获得了巨大的成功。 计算机视觉与自然语言处理任务的不同(困难) 首先第一个不同就在于输入的规模,与自然语言处理中每个输入token都是一个单词不同在计算机视觉领域(图像分类,目标检测以及实例分割。。)中由于照片拍摄角度以及距离等等因素的影响,每张照片当中包含的实例大小所占像素的多少都是不同的也因此我们需要将照片按各个规格进行划分并分别进行attention计算以此获得其在各个大小的相关性信息。这对于transformer框架的应用是一个不小的挑战。 第二,与自然语言处理不同,在计算机视觉领域尤其是目标检测、实力分割或者多目标检测等任务上我们的算法常常要处理高分辨率图像,但是在传统的transform框架中模型计算量的大小往往是图像分辨率大小的平方级水平,这样的计算量无论是在模型训练还是在实际预测中进行应用都是无法接受的。 解决方案 面对第一个问题,传统主流的CNN网络往往通过在模型中采用多种不同大小的卷积核实现对图像不同层次的感知。因此本文中的作者同样借鉴了这样的思路,在模型中设置了多个swin-transformer模块并为他们分别设置了多层不同大小的patch作为输入进而达到对不同图像中不同大小的物体进行识别的目的。 为了解决第二个问题,减小模型在训练以及预测过程中的计算量,本文的作者舍弃了在传统transformer中所使用的全局注意而改用局部注意力进行计算。因此被处理图像在刚刚进入模型并分割为patch之...

vision transformer

图片
  简介 从深度学习暴发以来,CNN一直是CV领域的主流模型,而且取得了很好的效果,相比之下,基于self-attention结构的Transformer在NLP领域大放异彩。虽然Transformer结构已经成为NLP领域的标准,但在计算机视觉领域的应用还非常有限。 ViT(vision transformer)是Google在2020年提出的直接将Transformer应用在图像分类的模型,通过这篇文章的实验,给出的最佳模型在ImageNet1K上能够达到88.55%的准确率(先在Google自家的JFT数据集上进行了预训练),说明Transformer在CV领域确实是有效的,而且效果还挺惊人。 Embedding层详解 从图中看,Transformer Encoder读入的是一小块一小块这样的图片。这样做的原因是:将一个个小块图像视为token(token可以理解为NLP中的一个字或词),在Transformer中计算每个token之间的相关性。这一点就和卷积神经网络有很大区别了。以往的CNN,以卷积 + 池化的方式不断下采样,这样理论上模型可以通过加深模型深度,达到增大感受野的目的。不过这样会有两个缺点: 实际结果中显示,CNN对边缘的响应很弱。这也非常好理解,越靠边缘的像素,因为被卷积次数少,自然在梯度更新时,贡献更少。 CNN只能和临近像素计算相关性。由于其滑窗卷积的特性,无法对非领域的像素共同计算,例如左上角的像素无法和右下角的像素联合卷积。这就导致了某些空间信息是无法利用的。同时根据MAE论文中所说的,自然图像具有冗余性,即相邻像素点代表的信息是差不多的,所以只计算领域像素无法最大化利用图像特征。 回到ViT中,仅仅把图像拆分成小块(patch)是不够的,Transformer Encoder需要的是一个向量,shape为[num_token, token_dim]。对于图片数据来说,shape为[H,W,C]是不符合要求的,所以就需要转换,要将图片数据通过这个Embedding层转换成token。以ViT-B/16为例: 假设输入图像为224x224x3,一个token原始图像shape为16x16x3,那这样就可以将图像拆分成(224/16)^2 = 196个patch,然后将每个patch线性映射至一维向量中,那么这个一维向量的长度即为...

An overview of gradient descent optimization algorithms.

图片
  Gradient descent variants     在平时的应用过程中共有三种主流的梯度下降算法:batch gradient decent、stochastic gradient decent、mini-batch gradient decent. 其中第一种和第三种首先分别计算每一个样本的损失函数梯度之后对它们求平均作为更新依据。 Challenges Choosing a proper learning rate can be difficult.  Additionally, the same learning rate applies to all parameter updates. If our data is sparse and our features have very different frequencies, we might not want to update all of them to the same extent, but perform a larger update for rarely occurring features. Another key challenge of minimizing highly non-convex error functions common for neural networks is avoiding getting trapped in their numerous suboptimal local minima. Dauphin et al.  [3]  argue that the difficulty arises in fact not from local minima but from saddle points, i.e. points where one dimension slopes up and another slopes down. These saddle points are usually surrounded by a plateau of the same error, which makes it notoriously hard for SGD to escape, as ...