(此为课程作业,参考价值不大,有需要可以通过链接直接阅读原文《动手学深度学习》)
深度学习的视觉应用
目标检测
目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
目标检测预备知识
数据集输出表达
交并比
目标检测基本思想
滑动窗口法的改进
进一步减少出现目标的位置,而且将目标分类检测和定位问题合在一个网络里——一步法(YOLO)。
首先将图片分成互不重叠的cell
检测每个cell中有无目标,多个框里有一个目标,取目标中心点所在框。
多类目标使用独热编码扩展类别数。
小目标使用单独网络拟合,即设置多个bounding box。
YOLO
网络结构
网络输入
输入图片为448 × 448 × 3
模型处理: 𝟕 × 𝟕网格划分
将图片分割为 𝑆2个grid(𝑆 = 7),每个grid cell的大小都是相等的,每个格子都可以检测是否包含目标。每个格子都可以检测是否包含目标。
网络输出
输出是一个7 × 7 × 30的张量。对应7 × 7个cell。每个cell对应2个包围框(bounding box, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,分别是物体的中心位置(𝑥, 𝑦)和它的高(ℎ) 和宽 (𝑤) ,以及这次预测的置信度。
包围框
我们有 𝑠2个框,每个框的bb个数为𝐵,分类器可以识别出𝐶种不同的物体,那么所有整个ground truth的长度为𝑆 × 𝑆 × (𝐵 × 5 + 𝐶)
归一化
四个关于位置的值,分别是𝑥, 𝑦, ℎ和𝑤,均为整数,实际预测中收敛慢因此,需要对数据进行归一化,在0-1之间。
置信度
置信度计算公式:
Pr(𝑜𝑏𝑗)是一个grid有物体的概率,IOU是预测的bb和真实的物体位置的交并比。
训练值
Pr(𝑜𝑏𝑗)的ground truth:三个目标中点对应格子为1,其它为0
训练数据与网络输出
损失函数
训练与NMS
非极大值抑制(NMS)
NMS核心思想是:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完。
NMS算法要点:
- 首先丢弃概率小于预定IOU阈值(例如0.5)的所有边界框;对于剩余的边界框:
- 选择具有最高概率的边界框并将其作为输出预测;
- 计算 “作为输出预测的边界框”,与其他边界框的相关联IoU值;舍去IoU大于阈值的边界框;其实就是舍弃与“作为输出预测的边界框” 很相近的框框。
- 重复步骤2,直到所有边界框都被视为输出预测或被舍弃
预训练与训练:
YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练和预测。训练中采用了drop out和数据增强来防止过拟合。YOLO的最后一层采用线性激活函数(因为要回归bb位置),其它层都是采用Leaky ReLU激活函数:
语义分割
找到同一画面中的不同类型目标区域
目标
对图中每一个像素进行分类,得到对应标签
FCN网络结构
网络结构分为两个部分:全卷积部分和反卷积部分。全卷积部分借用了一些经典的CNN网络,并把最后的全连接层换成卷积,用于提取特征,形成热点图;反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
反卷积与反池化
𝟏 × 𝟏卷积
上池化(unpooling),或称为反池化
FCN具体实现
卷积部分
FCN中第6、 7、 8层都是通过1 × 1卷积得到的, 第6层的输出是4096 × 7 × 7,第7层的输出是4096 × 7 × 7 , 第8层的输出是1000 × 7 × 7,即1000个大小是7 × 7的特征图(称为heatmap)
反卷积部分:跳级结构
蓝色:卷积层;绿色: Max Pooling层;黄色: 求和运算;灰色: 裁剪
FCN评价指标与标注工具
常见标注工具
风格迁移
两张输入图像,一张是内容图像,另一张是样式图像,我们将使用神经网络修改内容图像使其在样式上接近样式图像。
方法
首先,我们初始化合成图像,例如将其初始化成内容图像。该合成图像是样式迁移过程中唯一需要更新的变量,即样式迁移所需迭代的模型参数。
然后,我们选择一个预训练的卷积神经网络来抽取图像的特征,其中的模型参数在训练中无须更新。深度卷积神经网络凭借多个层逐级抽取图像的特征。我们可以选择其中某些层的输出作为内容特征或样式特征。
以之前放的图像为例,这里选取的预训练的神经网络含有3个卷积层,其中第二层输出图像的内容特征,而第一层和第三层的输出被作为图像的样式特征。接下来,我们通过正向传播(实线箭头方向)计算样式迁移的损失函数,并通过反向传播(虚线箭头方向)迭代模型参数,即不断更新合成图像。
损失函数
样式迁移常用的损失函数由3部分组成:
内容损失(content loss)使合成图像与内容图像在内容特征上接近
样式损失(style loss)令合成图像与样式图像在样式特征上接近
什么是风格
量化风格
隐藏层l的风格代价函数
总体风格代价函数
总体代价函数:
总变差损失(total variation loss)则有助于减少合成图像中的噪点。
最后,当模型训练结束时,我们输出样式迁移的模型参数,即得到最终的合成图像。
预处理和后处理图像
预处理函数preprocess对先对更改输入图像的尺寸;
然后再将PIL图片转成卷积神经网络接受的输入格式;
再在RGB三个通道分别做标准化;
由于预训练模型是在均值为[0.485, 0.456, 0.406]的图片数据上预训练的,所以我们要将图片标准化保持相同的均值和标准差。
后处理函数postprocess则将输出图像中的像素值还原回标准化之前的值。由于图像每个像素的浮点数值在0到1之间,我们使用clamp函数对小于0和大于1的值分别取0和1。
抽取特征
我们使用基于ImageNet数据集预训练的VGG-19模型来抽取图像特征。为了抽取图像的内容特征和样式特征,我们可以选择VGG网络中某些层的输出。
一般来说,越靠近输入层的输出越容易抽取图像的细节信息,反之则越容易抽取图像的全局信息。
为了避免合成图像过多保留内容图像的细节,我们选择VGG较靠近输出的层,也称内容层,来输出图像的内容特征。
我们还从VGG中选择不同层的输出来匹配局部和全局的样式,这些层也叫样式层。
人脸识别
人脸验证
人脸识别
构建神经网络
相似度函数
Siamese网络
对输入图片进行编码
双输入结构
相似度函数的具体定义
训练神经网络
训练目的
通过训练神经网络,我们希望同一人的两张照片间的相似度函数值尽可能小,不同人的两张片间的相似度函数值尽可能大,下以此为目标制作训练集、定义Loss函数。
制作训练集
定义代价函数
(1)符号规定:
A—待测照片
P—同一人照片
N—不同人照片
将所有样本的loss函数累加得到cost函数如下:
运行神经网络
利用人脸验证实现人脸识别
对于训练完毕的神经网络,输入照片,通过简单的for循环语句遍历数据库中存储的所有照片,依次通过相似度函数进行计算,记录遍历过程中相似程度最大的值,在遍历结束后与预先设定的阈值进行比较,得出预测结果,完成人脸识别。