特征和深度学习的关系?
答:
至今为止特征没有万能和精确的定义。特征的精确定义往往由问题或者应用类型决定。特征是一个数字图像中“有趣”的部分,它是许多计算机图像分析算法的起点。因此一个算法是否成功往往由它使用和定义的特征决定。
因此特征提取最重要的一个特性是“可重复性”:同一场景的不同图像所提取的特征应该是相同的。
对于一张图片,我们人理解图像中的内容,其实就是根据图像的各个层级特征来理解的,如图像的低级特征、图像的中级特征、图像的高级特征。
那我们究竟要计算机学习什么东西?答案当然是图像特征了。
将一张图像看做是一个个像素值组成的矩阵,那么对图像的分析就是对矩阵的数字进行分析,而图像的特征,就隐藏在这些数字规律中。
深度学习对外推荐自己的一个很重要的点——深度学习能够自动提取特征,不需要人工设计。那么它是如何做到不需要人工设计特征检测和描述算子,而可以自动提取图像中各个层级特征并进行理解呢?
(利用大量的卷积核提取图像特征,并通过真值和预测值之间的差异,反向传播自动更新卷积核的参数大小。使得最终的卷积核,提取出来的特征,其映射的预测值,无比接近于图片的真值。卷积核的参数就是权重参数,需要不断更新(学习))
卷积神经网络中各层作用?
答:
卷积层:用它来进行特征提取
池化层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征
激活函数:是用来加入非线性因素的,因为线性模型的表达能力不够。RELU是对每个像素值进行非线性处理。
全连接层(fully connected layers,FC):在整个卷积神经网络中起到“分类器”的作用,全连接层将学到的“分布式特征表示”映射到样本标记的空间。
卷积层其实就是在spatial上部分连接,在channel上全连接的结构。因此如果舍弃在spatial上的部分连接,将卷积核换成1x1的,那么就只有在channel上全连接。这个时候卷积层=全连接层。
这就是为什么imagenet分类最后一层是pooling+fc。pooling完之后feature就1x1xC的了,这时候再做fc就是对channel进行全连接,把feature映射到label上
层顺序:BN -> conv -> 激活层
感受野:即特征图上的每个像素点能够映射到原始图像多大的区域。通过卷积层可以扩大感受野,越深层的特征图,其感受野越大。
卷积层提取特征的原理过程?反向传播的过程?
答:
一个图像矩阵经过一个卷积核的卷积操作后,得到了另一个矩阵,这个矩阵叫做特征映射(feature map)。
每一个卷积核都可以提取特定的特征,不同的卷积核提取不同的特征。
举个例子,现在我们输入一张人脸的图像,使用某一卷积核提取到眼睛的特征,用另一个卷积核提取嘴巴的特征等等。而特征映射就是某张图像经过卷积运算得到的特征值矩阵。
卷积核,又叫特征矩阵。作用是与image进行比对,从而提取想要的特征。(卷积核表示图片中的局部特征)
卷积后的特征图,图中的值越接近为1,表示对应位置和卷积核代表的特征越接近,越是接近-1,表示对应位置和卷积核代表的反向特征越匹配,而值接近0的表示对应位置没有任何匹配或者说没有什么关联。
对于图像中某个我们想提取特征的部分,我们可以自己设计卷积核,该卷积核可以提取与其相匹配的图像中的特征。这个卷积核在图像中一次扫描,进行卷积,每到一个位置,就与该部分图像进行卷积,得到一个特征值。特征值越接近1,表示该部分图像与该卷积核想提取的特征越接近;越接近-1,表示该部分图像与该卷积核想提取的反向特征越接近;越接近0,表示该部分图像与卷积核想提取的特征没什么关系。卷积核扫描一遍之后,得到一个图像矩阵,通过该矩阵中的数字,就可以看出卷积核想提取特征所在的位置。该图像矩阵称为feature map特征映射。只不过在深度学习中,由于图像存在GT标签,我们设计的卷积核参数可以通过反向传播进行自动更新,直到更新为我们想要的参数。
参考1:CNN的可视化:https://mp.weixin.qq.com/s/9epJCr9WcMH8EfTMnPkLBg
卷积核大小,卷积核通道数,卷积核个数,对于图片特征提取的意义?
答:
卷积核大小:卷积核越小,越能提取小特征。有1×1卷积核,3×3卷积核,5×5卷积核。
卷积核通道数:如输入图片有RGB三个通道,一个特征被分解成三个通道。卷积核需要分别提取,再相加,可得到RGB彩色图片上的一个特征。所以卷积核的通道数等于输入特征图的通道个数。
卷积核个数:卷积核个数越多,提取的特征数就越多。例如1个卷积核是指其大小为3×3,通道数为3。对于一张图片其中的一块3×3矩阵,如果用32个卷积核提取该区域的特征,那么对于该区域,我们可以提取出32个特征。对于输入特征图为7×7×3(宽×高×通道数),步长为1,卷积核为32×3×3×3(个数×通道数×尺寸),我们对每个区域都提取32种特征。卷积核的个数就是我们可以提取图片的特征种类数。(注:如果想提取图像的不同特征,则用不同的卷积核,个数越多,能提取的特征种类越多。)
输入特征图的通道个数 = 卷积核通道个数
卷积核个数 = 输出特征图的通道个数
卷积层数:卷积层数越深,越能提取图片中更高层的特征信息,而不简单是角点、边缘等低层特征。高层特征是抽象的,比如图片中的动物。
卷积神经网络的每一层的设计(卷积核大小、个数,卷积层数),层与层之间的连接的原理是什么?(重点)
答:
这个问题目前在深度学习领域没有具体的解决方法,大多是凭经验来设计神经网络模型。
这也是VGG、VGG、RESNET、GoogleNet大量不同网络涌现出来的原因。
参考1:https://blog.csdn.net/demm868/article/details/103052695
参考2:https://blog.csdn.net/weixin_44111292/article/details/106113010
池化层的作用?最大池化和平均池化的区别?
答:
池化就是将输入图像的尺寸进行缩小,减少像素信息,只保留重要信息。
通常情况下,池化都是22大小,比如对于最大池化max-pooling来说,就是取输入图像中22大小的块中的最大值,作为结果的像素值,相当于将原始图像缩小了4倍。
因为最大池化保留了每一个小块内的最大值,所以它相当于保留了这一块最佳的匹配结果(因为值越接近1表示匹配越好)。这也就意味着它不会具体关注窗口内到底是哪一个地方匹配了,而只关注是不是有某个地方匹配上了。这也就能够看出,CNN能够发现图像中是否具有某种特征,而不用在意到底在哪里具有这种特征。这也就能够帮助解决之前提到的计算机逐一像素匹配的死板做法。
卷积网络中为什么一个核要同时计算所有输入通道?(重点)
答:
在一个卷积层中,一个核卷积出的特征图,表示原图的每个像素点在这个核所代表的特征下的评分值。
那么为什么在网络的中间层,卷积核要同时计算上一层特征图所有通道的加权和呢?上一层输出的每一张特征图都表示不同的特征的分值,那么把几张特征图的同一位置进行求加权和,该怎么理解呢??
比如输入特征图的两个通道,一张图表示圆形的位置,一张图表示方形的位置,那么把这两张图一起算卷积,含义在哪呢??
对于feature map,一个通道就是对某个特征的检测,通道中某一处数值的强弱表示对当前特征强弱的反应。在对该层的feature map再进行卷积操作时,会将多个通道表示的特征进行相加,即将多个特征组合出来,抽取成一个特征,获得下一个特征图。这样做的目的是生成高层特征,即高级语义信息。(不理解为什么这么做就能得到高层语义信息?)
(如提取的水平特征图和垂直特征图相加,可以得到两个特征图的组合,变成一个特征图,既有水平特征,也有垂直特征)
CNN的高维与低维特征
答:
1、靠近输入层,也就是CNN网络的浅层,一般CNN filter数量少,维度低,feature map的尺寸大,分辨率高,感受野小,所以主要包含的是局部的细节特征。
2、靠近输出层,也就是CNN网络的深层,一般CNN filter数量多,维度高,feature map的尺寸小,抽象程度高,感受野大,所以主要包含的是全局的信息。
3、我觉得这里的低维和高维,可以从feature map的channel数量也就是CNN filter数量去理解,一般我们的CNN网络都是filter数量越来越多的,而feature map经过下采样,尺寸越来越小,感受野越来越大。
低层特征分辨率高,feature map上的像素容易和原图对齐,这样分割才会准确。假设一种极端的情况,经过一系列pooling等下采样操作之后,feature map的分辨率变成1×1,这样肯定很难和原图对齐。
进行反卷积就是为了能从低分辨率的feature map中恢复分辨率信息,但是上面讲到,低分辨率的feature map很难和原图对齐,所以即使进行反卷积,恢复效果也很有限。所以现在的主流语义分割网络都有大量的横向连接,把低层的高分辨率信息引入到后面层中,这样就可以较好地和原图对齐。
常见问题
1.什么是扩张卷积?
2.如何调参?
答:
参考:https://blog.csdn.net/qq_20259459/article/details/70316511
3.什么是端到端的训练或学习?
答:
传统的图像识别问题往往通过分治法将其分解为预处理,特征提取和选择,分类器设计等若干步骤。
分治法的动机是将图像识别的母问题分解为简单、可控且清晰的若干小的子问题。
不过分步解决子问题时,尽管可以在子问题上得到最优解,但子问题上的最优解并不意味着就能得到全局问题的最后解。
深度学习提供了一种端到端的学习范式,整个学习的流程并不进行人为的子问题划分,而是完全交给深度学习模型直接学习从原始数据到期望输出的映射。
对深度模型而言,其输入数据是未经任何人为加工的原始样本形式,后续则是堆叠在输入层上的众多操作层,这些操作层整体可以看作一个复杂的函数FCNN, 最终的损失函数由数据损失data loss和模型参数的正则化损失(regularization loss)共同组成,模型深度的训练则是在最终损失驱动下对模型进行参数更新并将误差反向传播至网络各层。
4.分类和回归
答:
机器学习的问题大致可以分为分类问题和回归问题:
分类问题是数据属于哪一个类别的问题。比如,区分图像中的人是男性还是女性,
这就是分类问题。
回归问题是根据某个输入预测一个(连续的)数值的问题。比如,根据一个人的图像预测这个人的体重(类似“57.4kg”这样的预测),这就是回归问题。
2)在输出层激活函数的使用上,分类和回归存在不同:
回归问题可以使用恒等函数;
二元分类问题可以使用sigmoid函数,多元分类问题可以使用softmax函数。
5.激活函数
答:
恒等函数是输入多少,输出就为多少。
softmax函数的输出是0.0到1.0之间的实数,且softmax函数的输出值的总和是1。softmax函数的输出,其物理意义为“概率”。
sigmoid函数,当函数输入小时,输出接近0,随着输入增大,输出向1靠近。其物理意义是,当输入信号为重要信息时,sigmoid函数会输出较大的值,当输入信号为不重要的信息时,输出较小的值。不管输入信号为多少,输出信号的值都在0到1之间。
6.目标检测中的mAP(暂时不明白)
答:
明确问题: 大背景是object detection, 我就以正在学的RetinaNet应用背景为例, 识别出来的每一个框都有N+1个score, 对应着N个class和1个background, 我们会选score最高的那个作为最终的判断。
基本定义: precision和recall的含义, preicision是在你认为的正样本中, 有多大比例真的是正样本, recall则是在真正的正样本中, 有多少被你找到了。
问题核心:
我们需要一个对于score的threshold, 为什么呢? 比如在一个bounding box里, 我识别出来鸭子的score最高, 可是他也只有0.1, 那么他真的是鸭子吗? 很可能他还是负样本。 所以我们需要一个阈值, 如果识别出了鸭子而且分数大于这个阈值才真的说他是正样本, 否则他是负样本那么threshold到底是怎么影响precision和recall的呢? 我们还是用鸭子的例子如果threshold太高, prediction非常严格, 所以我们认为是鸭子的基本都是鸭子,precision就高了;但也因为筛选太严格, 我们也放过了一些score比较低的鸭子, 所以recall就低了如果threshold太低, 什么都会被当成鸭子, precision就会很低, recall就会很高这样我们就明确了threshold确实对鸭子的precision和recall产生影响和变化的趋势, 也就带来了思考, precision不是一个绝对的东西,而是相对threshold而改变的东西, recall同理, 那么单个用precision来作为标准判断, 就不合适。 这是一场precision与recall之间的trade off, 用一组固定值表述不够全面, 因为我们根据不同的threshold, 可以取到不同(也可能相同)的precision recall值。 这样想的话对于每个threshold,我们都有(precision, recall)的pair, 也就有了precision和recall之间的curve关系有了这么一条precision-recall curve, 他衡量着两个有价值的判断标准, precision和recall的关系, 那么不如两个一起动态考虑, 就有了鸭子这个class的Average Precision, 即curve下的面积, 他可以充分的表示在这个model中, precision和recall的总体优劣。 最后, 我们计算每个class的Average Precision, 就得到了mean Average Precision。