目录
一、YOLO目标检测模型
YOLO系列算法是单阶段目标检测算法的代表,目前最新版本的YOLO算法已经更迭到YOLOv8模型,本篇介绍YOLO系列算法的最初版本,即YOLOv1。
YOLO网络结构
网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,最后接2个全连接层 。
YOLOv1在PASCAL VOC数据集上进行的训练,因此输入图片尺寸为448 × 448 × 3。实际中如为其它尺寸,需要resize或切割成要求尺寸。
YOLO预测过程
YOLO网络会将图片分割成7×7个格子,每个格子的大小都是相等的,每个格子都可以检测是否包含目标。目标的中心位于哪一个格子,哪一个格子就负责预测该目标。
网络的最终输出尺寸为7×7×30,其中7×7代表每一个格子,每一个格子会生成两个预测框,针对每一个格子的每一个预测框,网络会预测目标框的中心参数x, y和尺寸参数w, h ,还会预测一个置信度参数C,每一个格子网络还会预测目标的类别概率,对于PASCAL VOC数据集。种类有20,因此每一个格子会预测5×2+20=30个参数,因此最终输出尺寸为7×7×30。
对于参数需要说明几点注意:
目标中心参数x, y是相对于格子而言的,值介于0-1之间,目标尺寸参数w, h是相对于整幅图像而言的,也会归一化到0和1之间。
例子是一个448×448的图片,有3×3个格子,每个格子是149。目标中心点是(220,190)。
置信度计算公式:C = Pr(obj)×IOU
Pr(obj)是一个格子有物体的概率, IOU是预测框和真实的物体位置的交并比。如果格子内有物体,则Pr(obj)=1,此时置信度等于IOU。如果格子内没有物体,则Pr(obj)=0,此时置信度为0。
依据预测参数在图像上生成一系列预测框后,预测框数量过多,需要使用非极大值抑制NMS来去除多余的预测框,NMS的核心思想是选择得分最高的作为输出,与该输出重叠过大的去掉,不断重复这一过程直到所有备选处理完。
假设预测框有A、B、C、D、E、F且预测得分按照从小到大顺序排列好,NMS具体流程:
1、从最大概率框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;
2、假设B、D与F的重叠度超过阈值,那么就扔掉B、D;标记并保留F。
3、从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;E是保留下来的第二个矩形框。
4、重复这个过程,找到所有被保留下来的矩形框。
YOLO损失函数
1、边界框损失
代表这个格子里有无物体,有则为1,没有为0。w和h加根号是为了突出小尺寸目标的尺寸损失。
2、置信度损失和类别损失
YOLO的预训练和训练以及效果
YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练和预测。
训练中采用了drop out和数据增强来防止过拟合。
YOLO的最后一层采用线性激活函数(因为要回归bb位置),其它层都是采用Leaky ReLU激活函数。
模型训练效果:
二、FCN语义分割模型
语义分割简介
语义分割:找到同一画面中的不同类型目标区域。
实例分割:同一类型目标要分出来具体实例(谁是谁)。
目标检测:标出来外包围矩形,定位和分类。
发展历程:
FCN的提出(2015 CVPR,首个端对端的针对像素级预测的全卷积网络):
FCN在当年和其它方法相比,分割效果获得很大提升。
语义分割基本思想
对图中每一个像素进行分类,得到对应标签。
FCN网络结构
蓝色:卷积层;绿色:Max Pooling层;黄色: 求和运算;灰色: 裁剪。
网络结构分为两个部分:全卷积部分和反卷积部分。全卷积部分借用了一些经典的CNN网络,并把最后的全连接层换成卷积,用于提取特征,形成热点图;反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
卷积部分:
FCN中第6、7、8层都是通过1 × 1卷积得到的,第6层的输出是4096 × 7 × 7,第7层的输出是4096 × 7 × 7 ,第8层的输出是1000 × 7 × 7,即1000个大小是7 × 7的特征图(称为heatmap)。
输出的特征图(称为heatmap),颜色越贴近红色表示对应数值越大 。
FCN有FCN-32s、FCN-16s、FCN-8s三种,其中32s、16s、8s代表上采样倍数,具体结构借用网友的图。
FCN-32s
FCN-16s
FCN-8s
FCN分割效果
FCN评价指标和标注工具
三、风格迁移
风格迁移简介
摄影领域有滤镜这种图像处理方法,它能改变照片的颜色样式,从而使风景照更加锐利或者令人像更加美白。但一个滤镜通常只能改变照片的某个方面。如果要照片达到理想中的样式,经常需要尝试大量不同的组合,其复杂程度不亚于模型调参。
风格迁移是使用卷积神经网络自动将某图像中的样式应用在另一图像之上 。
需要两张输入图像,一张是内容图像,另一张是样式图像,将使用神经网络修改内容图像使其在样式上接近样式图像。
风格迁移流程
首先,初始化合成图像,例如将其初始化成内容图像。该合成图像是样式迁移过程中唯一需要更新的变量,即样式迁移所需迭代的模型参数。
然后,选择一个预训练的卷积神经网络来抽取图像的特征,其中的模型参数在训练中无须更新。深度卷积神经网络凭借多个层逐级抽取图像的特征。可以选择其中某些层的输出作为内容特征或样式特征。
以之前放的图像为例,这里选取的预训练的神经网络含有3个卷积层,其中第二层输出图像的内容特征,而第一层和第三层的输出被作为图像的样式特征。
接下来,通过正向传播(实线箭头方向)计算样式迁移的损失函数,并通过反向传播(虚线箭头方向)迭代模型参数,即不断更新合成图像。
样式迁移常用的损失函数由3部分组成:
内容损失( content loss)使合成图像与内容图像在内容特征上接近。
样式损失( style loss )令合成图像与样式图像在样式特征上接近。
总变差损失( total variation loss)则有助于减少合成图像中的噪点。
最后,当模型训练结束时,输出样式迁移的模型参数,即得到最终的合成图像。
定义内容代价函数
选定隐藏层l,用表示图片C在第l层的激活项输出,
表示图片G在第l层的激活项输出,则定义内容代价函数如下:
风格代价函数
什么是风格?相关性即使风格。
相关性计算:
使用风格矩阵(Style matrix)量化风格差异
风格矩阵的计算
其中
代表图片X在网络隐藏层l的激活输出项中高、宽和通道数分别为i, j, k的元素。
代表图片X在网络隐藏层l的激活输出项中k1和k2两通道间的相关性。
代表图片X在网络隐藏层l的风格矩阵。
隐藏层l的风格代价函数
总体风格代价函数
总体代价函数
四、人脸识别
构建神经网络
旧有思路:转化为分类问题,二分类或者多分类。
相似度函数
Siamese网络
对输入图片进行编码
双输入结构
网络的相似度函数定义:
训练神经网络
面部验证及二分类
可以预先知道下面的网络输出(预存人脸),节省识别的计算量。
训练目的
通过训练神经网络,我们希望同一人的两张照片间的相似度函数值尽可能小,不同人的两张片间的相似度函数值尽可能大,下以此为目标制作训练集、定义Loss函数。
制作训练集
符号规定:A——待测照片 P——同一人照片 N——不同人照片
定义代价函数
我们希望A与P的差距永远不超过A与N,即:
移项
更强的条件:
得到损失函数:
将所有样本的loss函数累加得到cost函数如下:
运行神经网络
利用人脸验证实现人脸识别
对于训练完毕的神经网络,输入照片,通过简单的for循环语句遍历数据库中存储的所有照片,依次通过相似度函数进行计算,记录遍历过程中相似程度最大的值,在遍历结束后与预先设定的阈值进行比较,得出预测结果,完成人脸识别。
五、循环神经网络与NLP
数据处理基础
特征编码
第1列表示年龄,是一个数值特征,第2列表示性别,是一个只有一位(0,1)的特征,0代表Male,1代表Female,第3列表示国籍,目前有197个国家,可分别用一个整数表示。
数值特征不适合表示类别,因此一般使用独热编码, 国家编码从1开始,1~197,因为实际国籍有可能不填(对应0)。
使用199维特征向量表达一个人的特征:
文本处理
第一步:文本切分
给定文本片段,如:S = “… to be or not to be…”.
将文本切分为单词序列:L = […, to, be, or, not, to, be, …],
第二步:统计词频
创建一个字典(实际中经常使用Hash表)进行词频统计,初始字典为空,遍历文本,如果单词不在字典中,加入该单词,否则将其词频加1, 直到完成整个遍历,按照词频降序进行排序,将词频索引化, 如果词汇太多,则只保留排序在前的k个单词。
第三步:独热编码
将每一个词映射到索引号上,需要时,将索引转换为独热编码。词典上没有的词(低频词或拼写错误,直接忽略,或编码为0)。
文本预处理与词嵌入
文本预处理
一篇文章可以被简单地看作一串单词序列,甚至是一串字符序列。 文本的常见预处理步骤通常包括:
1.将文本作为字符串加载到内存中。
2.将字符串切分为词元(如单词和字符)。
3.建立一个字典,将拆分的词元映射到数字索引。
4.将文本转换为数字索引序列,方便模型操作。
文本嵌入
如何将词映射成向量,直接想法是使用之前所述的独热向量。
带来的问题是维数过高。
使用词嵌入(word embedding),将独热向量映射为低维向量。
原始向量:d维;映射后:v维,d远小于v。
词嵌入训练效果
RNN模型
图像分类中使用1对1模型,输入和输出维度固定;文本处理中输入维度不定(可能一直有单词输入),输出维度不定或者是1(直接最终理解结果)。
用RNN建模序列数据,输入:The cat sat on the mat
RNN问题:随着输入的增加,会产生“遗忘”问题。
LSTM模型