目录
一、YOLO
1、包围框与置信度
包围框
我们有个框,每个框的 bb 个数为 𝐵,分类器可以识别出 𝐶种不同的物体,那么所有整个 ground truth 的长度为 𝑆×𝑆×(𝐵×5+𝐶)。
归一化
四个关于位置的值,分别是𝑥,𝑦,ℎ和 𝑤,均为整数,实际预测中收敛慢,因此,需要对数据进行归一化,在0~1之间。如图中的例子所示:例子是一个448*448 的图片,有 3*3 的 grid ,每个cell 是 149 。目标中心点是(220,190)。
置信度
置信度计算公式:
Pr 是一个 grid 有物体的概率;IOU 是预测的 bb 和真实的物体位置的交并比。
训练值:
需要对于模型设置训练集,实际上检测的只有中心点,再不含有中心点的cell中,张量全部设置为0,在含有中心点的cell中,在类别中设置对应类别为1,在较大的bb中,设置表示有无的为1,以及对应的位置和大小,其余量设置为0。
实际网络训练输出是不可能完全准确的,只可能是一个概率。
2、损失函数
分为5项(以YOLOv1为例)。
第二项表示物体的宽和高的误差,如果不叫根号,小物体和大物体之间的宽和高差别很大,容易造成误差之间的结果相差较大。
置信度的误差,既要包含含有物体的cell的误差计算还要包含不含物体的cell计算。
3、训练与NMS
结果中保留了很多边界框,实际物体只有一个边界框,NMS可以解决这个问题。NMS 核心思想是:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完。
1.首先丢弃概率小于预定 IOU 阈值(例如 0.5 )的所有边界框;对
于剩余的边界框:
2.选择具有最高概率的边界框并将其作为输出预测;
3.计算 “作为输出预测的边界框”,与其他边界框的相关联 IoU值;舍去 IoU 大于阈值的边界框;其实就是舍弃与“作为输出预测的边界框” 很相近的框框。
4.重复步骤 2 ,直到所有边界框都被视为输出预测或被舍弃
YOLO是一种很强大的工具,其实时性让其得到了广泛的应用。
二、语义分割和FCN
语义分割:找到同一画面中的不同类型目标区域。
首个端对端的针对像素级预测的全卷积网络。
1、语义分割基本思想
目标:对图中每一个像素进行分类,得到对应标签。
基本思想:滑动窗口。但是这种方法计算很慢,而且对于太小的窗口来说,很难分别不同的物体。
2、FCN网络结构
网络结构分为两个部分:全卷积部分和反卷积部分。全卷积部分借用了一些经典的 CNN 网络,并把最后的全连接层换成卷积,用于提取特征,形成热点图;反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
最终卷积层得到的结果是一系列分辨率很低的特征图,要得到想要的效果,得到原始图片的大小,一个很简单的思想就是把图像放大。
3、反池化
跟平均池化和最大值池化对应,还有对应位置的反池化。
4、FCN具体实现
传统卷积神经网络。注意最后的全连接层。
FCN中第 6 、7 、8 层都是通过 1×1卷积得到的第 6 层的输出是 4096×7×7第 7 层的输出是 4096×7×7 第 8 层的输出是 1000×7×7 即 1000 个大小是7×7的特征图(称为 heatmap)。
注意到反卷积实际上是对于卷积得到的结果,先通过反池化放大,再通过一个卷积核,希望得到与原始图像大小相等的图像。
最终的训练结果:
5、FCN评价指标与标注工具
接下来举一个例子说明:
第0类(标签为0)
第1类(标签为1)
第2类(标签为2)
第3类(标签为3)
第4类(标签为4)
常见标注工具:
Labelme,和百度出的EISeg。
三、循环神经网络与NLP
1、数据处理基础
实际的语言和单词需要进行编码,举一个很简单的例子。
第一列表示年龄,可以直接用年龄作为数值特征。第二列表示性别,可以用(0,1)表示,0->Male,1->Female。第三列表示国家,用数值特征来表示,已经包含了数值间的关系,实际上国家并不能进行运算关系,一般用独热编码表示。这样用一个高维的特征向量来表示一个人的特征。
文本处理:
给定一个文本片段,将文本分为单词序列:
创建一个字典,进行词频统计。为了提高搜索速度,通常使用Hash表。初始字典为空
遍历文本,并按如下更新字典:
•如果单词不再字典中,加入该单词(𝑤,1)
•否则将其词频加 1
直到完成整个遍历。
按照词频降序排列。
将词频索引化,词汇如果太多,则保留排序在前的k个单词。
将每一个词映射到索引号上,如果需要,采用独热编码(one hot)。
词典上没有的词(低频词或拼写错误,直接忽略,或编码为0)。
2、文本预处理和词嵌入
文本预处理:
这些步骤通常包括:
1.将文本作为字符串加载到内存中。
2.将字符串切分为词元(如单词和字符)。
3.建立一个字典,将拆分的词元映射到数字索引。
4.将文本转换为数字索引序列,方便模型操作。
文本预处理实例:IMDB
IMDB影评数据集
•5 万条电影评论
•每条评论可分为正面或负面
•是一个二分类问题,区分评论是正面还是负面
•2.5 万条训练数据, 2.5 万条测试数据
实际中会存在这样的问题:训练样本长度不同。
解决办法:做剪切或填充。
词嵌入:
使用独热编码把单词映射成向量,但是会导致维数过高。
词嵌入(word embedding)就是通过一个矩阵,把高维映射到低维。
就把词映射成positive或者negative。
这样的映射矩阵通过训练数据学习得到。但是这样的训练效果不好不差。
3、RNN模型
图像分类中使用:1 对 1 模型,输入和输出维度:固定。
文本处理中:输入维度不定(可能一直有单词输入);输出维度不定或者是1 (直接最终理解结果)
输入:The cat sat on the mat
循环神经网络的结构。从输入xt到输出ht的过程基本上就是一个词嵌入的过程。
使用RNN进行IMDB评论:
实际上只比之前好一点。
采用每一个的输出得到最终的输出,实际上对结果改变不大。
随着输入的增加,会产生“遗忘”问题。也就是误差反传过程中,误差在逐渐减小,当环节变得多起来,误差会趋于0,对于之前的权重没有影响,不再改变。
可以使用LSTM进行改善,类似于ResNet。
总结
介绍了YOLO和语义分割的基本思想,以及NLP的基本思想。