一.目标检测与YOLO
1.目标检测问题
1.1目标检测问题
![](https://i-blog.csdnimg.cn/blog_migrate/63d069fb9624842c7d383a5ad8f6059e.png)
1.2分类问题与目标检测
![](https://i-blog.csdnimg.cn/blog_migrate/bbbed0d8a7c6f6d184f2f8d648bddfb1.png)
数据集输出表达:
实例:实际图像中有多个目标
1.3 目标检测技术发展
YOLO家族发展:
一步法(two-stage):无需候选框,直接出最终结果。突出优点:快!
二步法(two-stage):用其他方法先把目标可能出现的地方减少。例如原来448∗448∗9,减少至2000个左右的候选框。突出问题:仍然慢!无法在线检测
YOLO V7性能:
2.目标检测基本思想
2.1滑动窗口
原理示意:
滑动窗口的问题1:
滑动次数太多,计算太慢。假设图片为𝑤宽,ℎ高,识别一幅图片需要𝑇时间,则需要:𝑤 ∗ ℎ ∗ 𝑇的总时间。例如:图片大小448 × 448,识别一个目标需要0.05s,则:总时间= 448 ∗ 448 ∗ 0.05 ≈ 10000𝑠,约3小时!
滑动窗口的问题2:
目标大小不同,每一个滑动位置需要用很多框。图片宽度和高度都不相同,比例也不相同,因此需要取很多框。例如:标准框100*50大小,
• 取50*50,50*25,200*50,200*100等不同大小,在面积和宽高比变化
• 假设面积变化3类(0.5,1,2), 宽高比3类(0.5,1,2),则共有9种。
总时间是原来的9倍:总时间= 10000 × 9 = 90000𝑠,约1天3小时!
2.2基本思路
滑动窗口的改进:
•一般图片中,大多数位置都不存在目标。
•可以确定那些更有可能出现目标的位置,再有针对性的用CNN进行检测——两步法(Region Proposal)
•两步法依然很费时!
•进一步减少出现目标的位置,而且将目标分类检测和定位问题合在一个网络里——一步法(YOLO)
2.3一步法基本思想
简化的二分类问题:只检测一类(葫芦娃脸)
分成互补重叠的cell,产生问题:目标的大小和位置?
分类问题扩展为回归+分类问题
问题1:有一个框里有多个,有个多个框里有一个,怎么办?
多个框里有一个目标,取目标中心点所在框一个框里有多个,暂不能解决 。
问题2:多类目标怎么办?
使用独热编码扩展类别数。
问题3:小目标怎么办?
使用单独网络拟合小目标,即设置多个bounding box.
3.YOLO网络结构
3.1 YOLO网络结构
YOLO网络结构概略图:
YOLO官方的模型结构图:
YOLO网络结构概略图:
3.2 YOLO模型处理
YOLO网络输入:
YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为448 × 448 × 3。实际中如为其它尺寸,需要resize或切割成要求尺寸。
YOLO模型处理:𝟕 × 𝟕网格划分
• 将图片分割为 𝑆2个grid(𝑆 = 7),每个grid cell的大小都是相等的
• 每个格子都可以检测是否包含目标
• YOLO v1中,每个格子只能检测一种物体(但可以不同大小)。
YOLO网络输出:
• 输出是一个7 × 7 × 30的张量。对应7 × 7个cell
• 每个cell对应2个包围框(boundingbox, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,分别是物体的中心位置(𝑥, 𝑦)和它的高(ℎ) 和宽 (𝑤) ,以及这次预测的置信度。
在上图中,每个框代表1个预测的bb,粗细代表不同的置信度,越粗得越高。
YOLO模型输出:
在上面的例子中,图片被分成了49个框,每个框预测2个bb,因此上面的图中有98个bb
4.包围框与置信度
4.1 YOLO包围框
YOLO的包围框:
我们有个框,每个框的bb个数为𝐵,分类器可以识别出𝐶种不同的物体,那么所有整个ground truth的长度为𝑆 × 𝑆 × (𝐵 × 5 + 𝐶).
YOLO v1中,这个数量是30
YOLO v2和以后版本使用了自聚类的anchor box为bb, v2版本为𝐵 = 5, v3中𝐵 =9
处理细节——归一化:
四个关于位置的值,分别是𝑥, 𝑦, ℎ和𝑤,均为整数,实际预测中收敛慢
因此,需要对数据进行归一化,在0-1之间。
例子是一个448*448的图片,有3*3的grid,每个cell是149。目标中心点是(220,190) 。
处理细节——置信度:
置信度计算公式:
Pr(𝑜𝑏𝑗)是一个grid有物体的概率,IOU是预测的bb和真实的物体位置的交并比。
𝐼𝑂𝑈:图中绿框为真实标注,其余五个颜色框为预测值,可计算对应𝐼𝑂𝑈
处理细节——训练值(ground truth):
Pr(𝑜𝑏𝑗) 的ground truth:三个目标中点对应格子为1,其它为0。
处理细节——训练数据与网络输出:
训练数据与网络输出
5.损失函数
5.1 YOLO损失函数:
YOLO损失函数(一共五项):
YOLO损失函数——边界框对应损失项:
为什么第2项要开根号?让误差更显著,保证回归精度。
YOLO损失函数——𝝀取值:
6.训练与NMS
6.1 非极大值抑制:
预训练与训练:
• 保留了这么多边界框,预测中一个物体可能被多个边界框包围;实际物体只对应一个边界框,如何解决个问题呢?NMS
• NMS核心思想是:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完。
NMS算法要点
1. 首先丢弃概率小于预定IOU阈值(例如0.5)的所有边界框;对于剩余的边界框:
2. 选择具有最高概率的边界框并将其作为输出预测;
3. 计算 “作为输出预测的边界框”,与其他边界框的相关联IOU值;舍去IOU大于阈值的边界框;其实就是舍弃与“作为输出预测的边界框” 很相近的框框。
4. 重复步骤2,直到所有边界框都被视为输出预测或被舍弃。
![](https://i-blog.csdnimg.cn/blog_migrate/58aad586ee24d836a16f189da0e9db40.png)
汽车不止一次被检测
1. 它首先查看与每次检测相关的概率并取最大的概率。图中选概率为0.9的方框;
2. 进一步查看图像中的所有其他框。与当前边界框较高的IOU的边界框将被抑制。因此图中0.6和0.7概率的边界框将被抑制。(此时面包车已经只剩一个边界框)
3. 从概率最高的所有边界框中选择下一个,在例子中为0.8的边界框;
4. 再次计算与该边界框相连边界框的IOU,去掉较高IOU值的边界框。
5. 重复这些步骤,得到最后的边界框:
6.2 数据集训练
预训练与训练:
• YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定位的训练和预测
• 训练中采用了drop out和数据增强来防止过拟合。
• YOLO的最后一层采用线性激活函数(因为要回归bb位置),其它层都是采用Leaky ReLU激活函数:
YOLO v1模型效果:
YOLO v3模型效果:
二.语义分割与FCN
1.语义分割要做什么
1.1 语义分割问题:
语义分割问题:找到同一画面中的不同类型目标区域
语义分割问题:和其他问题的区别
实例分割:同一类型目标要分出来具体实例(谁是谁)
目标检测:标出来外包围矩形
1.2 深度学习图像分割算法发展
2015 CVPR:首个端对端的针对像素级预测的全卷积网络,当年和其它方法相比,获得很大提升
2.语义分割基本思想
2.1 语义分割目标:
语义分割的目标:对图中每一个像素进行分类,得到对应标签
2.2 语义分割基本思想:
基本思想:滑动窗口
➢ 滑动次数太多,计算太慢,重复计算太多
FCN网络结构:
网络结构分为两个部分:全卷积部分和反卷积部分。全卷积部分借用了一些经典的CNN网络,并把最后的全连接层换成卷积,用于提取特征,形成热点图;反卷积部分则是将小尺寸的热点图上采样得到原尺寸的语义分割图像。
3.反卷积与反池化
3.1 基本概念:
卷积
上池化(unpooling),或称为反池化:
4.FCN具体实现
4.1 FCN实现结构之卷积部分:
FCN网络结构:卷积部分
传统卷积神经网络。注意最后的全连接层。
FCN中第6、7、8层都是通过1 × 1卷积得到的,第6层的输出是4096 × 7 × 7,第7层的输出是4096 × 7 × 7 ,第8层的输出是1000 × 7 × 7,即1000个大小是7 × 7的特征图(称为heatmap)。
输出的特征图(称为heatmap),颜色越贴近红色表示对应数值越大。
4.2 FCN实现结构之反卷积部分
反卷积部分:
1 跳级结构
蓝色:卷积层;绿色:Max Pooling层;黄色: 求和运算;灰色: 裁剪
2 FCN-32s
3 FCN-16s
4 FCN-8s
反卷积部分:跳级结构
5.FCN训练结果
5.1 FCN结果:
6.FCN评价指标与标注工具
6.1 常见语义分割评价指标
6.2 常见语义分割评价实例
第0类(标签为0)
第1类(标签为1)
第2类(标签为2)
第3类(标签为3)
第4类(标签为4)
全局精度:
平均精度:
mIOU
6.3 常见标注工具
Labelme
EISeg