应用:
边缘检测算子中的数字用于进行边缘检测 计算机视觉不一定要去使用那些研究者们所选择的这九个数字,而是将这 9 个数字当成学习参数
valid:不填充,卷积后尺寸变小 same:填充,卷积后尺寸不变
这也是为什么通常将卷积核设置为奇数的充分原因
卷积操作:向下取整
按照计算机视觉的惯例,当你的输入有特定的高宽和通道数时,你的过滤器可以有不同的高,不同的宽,但是必须一样的通道数。
注意:
参数计算: (每个卷积核的参数+1个bias) * 卷积核的个数
逐层提取特征,在最后一层进行特征展开,为一个向量,输入到逻辑回归或者softmax分类器,得到最终分类结果。
除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。
最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。
池化层的反向传播 需要保证传递的loss(或者梯度)总和不变
和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。
在计算机视觉任务中表现良好的神经网络框架往往也适用于其它任务, 完全可以借鉴别人的神经网络框架来解决自己的问题。
左往右看,随着网络越来越深,图像的高度和宽度在缩小,从最初的 32×32 缩小到 28×28,再到 14×14、10×10,最后只有 5×5。与此同时,随着网络层次的加深,通道数量一直在增加,从 1 增加到 6 个,再到 16 个。 一种模式至今仍然经常用到,就是一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出,这种排列方式很常用。
* AlexNet
在残差网络中有一点变化,我们将?[?]直接向后,拷贝到神经网络的深层,在 ReLU 非线性激活函数前加上?[?],这是一条捷径。?[?]的信息直接到达神经网络的深层,不再沿着主路径传递。 ?[?+2] = ?(?[?+2] + ?[?])
为什么效果好:
作用:
使用 same 卷积,保持维度不变
28×28×256 的输出。通道连接实际就是把所有方块连接在一起的操作。
当训练计算机视觉模型的时候,数据增强会有所帮助。
提升基准测试或者竞赛:
算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是定位分类问题
目标检测在原有的图像分类基础上又增加了几个输出:边界框??,??, ?ℎ和??,这四个数字是被检测对象的边界框的参数化表示。 标签 :
第一个组件??表示是否含有对象,如果对象属于前三类(行人、汽车、摩托车),则?? = 1,如果是背景,则图片中没有要检测的对象,则?? = 0。我们可以这样理解??,它表示被检测对象属于某一分类的概率,背景分类除外。
?? = 1,同时输出?1、?2和?3,表示该对象属于 1-3 类中的哪一类。
损失函数:
神经网络可以通过输出图片上特征点的(?, ?)坐标来实现对目标特征的识别
准备一个卷积网络和一些特征集,将人脸图片输入卷积网络,输出 1 或 0, 1 表示有人脸,0 表示没有人脸,然后输出(?1?,?1?)……直到(?64?,?64?)。这里我用?代表一个特征,这里有129 个输出单元,其中1表示图片中有人脸,因为有64个特征,64×2=128,所以最终输出 128+1=129 个单元
人体姿态检测,你还可以定义一些关键特征点,如胸部的中点,左肩,左肘,腰等。然后通过神经网络标注人物姿态的关键特征点,再输出这些标注过的特征点,就相当于输出了人物的姿态动作。
滑动窗检测:
滑动窗口目标检测算法接下来会继续处理第二个图像,即红色方框稍向右滑动之后的区域,并输入给卷积网络,因此输入给卷积网络的只有红色方框内的区域,再次运行卷积网络,然后处理第三个图像,依次重复操作,直到这个窗口滑过图像的每一个角落。
不需要把输入图像分割成四个子集,分别执行前向传播, 而是把它们作为一张图片输入给卷积网络进行计算,其中的公共区域可以共享很多计算。
在滑动窗口法中,你取这些离散的位置集合,然后在它们上运行分类器,在这种情况下,这些边界框没有一个能完美匹配汽车位置。 yolo算法可以获得准确的方格。在图像上放一个网格。基本思路是使用图像分类和定位算法。对于每个格子都指定一个标签y
普通的卷积网络,卷积层,最大池化层等等,最后你会有这个,选择卷积层和最大池化层,这样最后就映射到一个 3×3×8 输出尺寸。所以你要做的是,有一个输入?,就是这样的输入 图像,然后你有这些 3×3×8 的目标标签?。
优点在于神经网络可以输出精确的边界框,但是每个格子只能有一个对象
注意:
读不懂研究论文的时候,必须去读源代码,或者联系作者之类的才能弄清楚这些算法的细节
一般约定,在计算机检测任务中,如果??? ≥ 0.5,就说检测正确,如果预测器和实际边界框完美重叠,loU 就是 1,因为交集就等于并集。但一般来说只要??? ≥ 0.5,那么结果是可以接受的,看起来还可以。
非极大值抑制这个方法可以确保你的算法对每个对象只检测一次
会对同一个对象做出多次检测,所以非极大值抑制做的就是清理这些检测结果。这样一辆车只检测一次,而不是每辆车都触发多次检测。
pc*c1、c2、c3
先用阈值丢弃一些结果 然后去掉所有剩下的边界框,任何没有达到输出标准的边界框,之前没有抛弃的边界框,把这些和输出边界框有高重叠面积和上一步输出边界框有很高交并比的边界框全部抛弃
预先定义两个不同形状的 anchor box,或者 anchor box 形状,你要做的是把预测结果和这两个 anchor box 关联起来。
观察哪一个 anchor box 和实际边界框(编号1,红色框)的交并比更高,不管选的是哪一个,这个对象不只分配到一个格子,而是分配到一对,即(grid cell,anchor box)对,这就是对象在目标标签中的编码方式。所以现在输出 ? 就是 3×3×16,上一张幻灯片中你们看到 ? 现在是 16 维的,或者你也可以看成是3×3×2×8,因为现在这里有 2 个 anchor box,而 ? 是 8 维的。 anchor box 这个概念,是为了处理两个对象出现在同一个格子的情况
对于每个类别单独运行非极大值抑制,处理预测结果所属类别的边界框,用非极大值抑制来处理行人类别,用非极大值抑制处理车子类别,然后对摩托车类别进行非极大值抑制,运行 三次来得到最终的预测结果。所以算法的输出最好能够检测出图像里所有的车子,还有所有的行人
人脸验证与人脸识别的区别
人脸验证问题:如果你有一张输入图片,以及某人的 ID 或者是名字,这个系统要做的是,验证输入图片是否是这个人。有时候也被称作 1 对 1 问题,只需要弄明白这个人是否和他声称的身份相符 人脸识别问题:比人脸验证问题难很多,是1对k的问题
需要通过单单一张图片或者单单一个人脸样例就能去识别这个人, 训练样本只有一个。 不再是分类问题,而是要学习一个能够衡量二者区别的函数
输入不再是一个图片,而是图片对。输出二者的维度为128维,然后比较二者的距离。
损失函数可以:
应用三元组损失函数,你需要比较成对的图像。一个 Anchor图片,想让 Anchor 图片和 Positive 图片(Positive 意味着是同一个人)的距离很接近。然而,当 Anchor 图片与 Negative图片(Negative 意味着是非同一个人)对比时,会想让其距离离得更远一点。
anchor与正样本之间的距离小于anchor与负样本之间的距离 为了确保网络对于所有的编码不会总是输出 0,也为了确保它不会把所有的编码都设成互相相等的
?是另一个超参数,这个就可以阻止网络输出无用的结果。 损失函数:
如何构建训练样本:
最后两个特征进行相减后,再送入logist回归,输出0/1
将使用?来表示内容图像,?表示风格图像,?表示生成的图像
代价函数:
模型:
内容代价函数:
风格代价函数 利用风格矩阵表示各自的风格,然后计算二者矩阵差,求和求均值
训练