一、基本卷积神经网络
1.1AlexNet
1.1.1网络结构
1.1.2网络说明
AlexNet包含了8个卷积层和3个全连接层。
1.1.2.1 卷积层C1
- 特征提取器:该层使用11x11的卷积核进行卷积操作,步幅为4,输出96个特征图。
- 激活函数:采用ReLU激活函数,引入了非线性。
- 参数:约有(11*11*3*6 = 34,848)个可训练参数。
1.1.2.2 最大池化层1
- 特征降维:采用3x3的池化窗口,步幅为2,对卷积层1的输出进行最大池化操作。
- 降采样:将特征图的尺寸减小一半,同时保留主要特征。
1.1.2.3 卷积层C2
- 特征提取器:与卷积层1类似,使用5x5的卷积核,输出256个特征图。
- 激活函数:同样采用ReLU激活函数。
- 参数:约有(5*5*96*256 = 614,400\)个可训练参数。
1.1.2.4 最大池化层2
- 特征降维:同样采用3x3的池化窗口,步幅为2,对卷积层2的输出进行最大池化操作。
1.1.2.5 卷积层C3
- 特征提取器:使用3x3的卷积核,输出384个特征图。
- 激活函数:同样采用ReLU激活函数。
- 参数:约有(3*3*256*384 = 884,736)个可训练参数。
1.1.2.6 卷积层C4
- 特征提取器:与卷积层3类似,输出384个特征图。
- 激活函数:同样采用ReLU激活函数。
- 参数:约有(3*3*384*384 = 1,327,104)个可训练参数。
1.1.2.7 卷积层C5
- 特征提取器:使用3x3的卷积核,输出256个特征图。
- 激活函数:同样采用ReLU激活函数。
- 参数:约有(3*3*384*256 = 884,736)个可训练参数。
1.1.2.8 最大池化层3
- 特征降维:与前两个池化层类似,对卷积层5的输出进行最大池化操作。
1.1.3 主要特点
-卷积层和池化层交替:通过多个卷积层和池化层的交替,逐步提取出图像的抽象特征。
-ReLU激活函数:引入了修正线性单元(ReLU)作为激活函数,有效缓解了梯度消失问题,并加速了训练速度。
-Dropout正则化:引入了Dropout正则化技术,随机将部分神经元置零,避免了过拟合。
-数据增强:采用了数据增强技术,如随机裁剪、水平翻转等,增加了训练数据的多样性,提高了模型的泛化能力。
1.2 VGG-16
1.2.1网络结构说明
1.2.2网络结构说明
VGG-16是由牛津大学视觉几何组(Visual Geometry Group,简称VGG)提出的一个经典深度卷积神经网络模型。它是VGG系列模型中的一种,是一个具有16个卷积层和3个全连接层的深度网络。VGG-16的网络结构非常简单且对称,整个网络由16个卷积层和3个全连接层组成,其中卷积层均采用3x3的卷积核,步幅为1,填充为1,池化层采用2x2的池化窗口,步幅为2。具体结构如下:
- 输入层:接受图像输入,通常为RGB三通道图像。
- 卷积层1-2:每个卷积层包含2个卷积层,每个卷积层都有64个卷积核。
- 池化层1:最大池化层,进行2x2的最大池化操作。
- 卷积层3-4:每个卷积层包含2个卷积层,每个卷积层都有128个卷积核。
- 池化层2:最大池化层,进行2x2的最大池化操作。
- 卷积层5-7:每个卷积层包含3个卷积层,每个卷积层都有256个卷积核。
- 池化层3:最大池化层,进行2x2的最大池化操作。
- 卷积层8-10:每个卷积层包含3个卷积层,每个卷积层都有512个卷积核。
- 池化层4:最大池化层,进行2x2的最大池化操作。
- 卷积层11-13:每个卷积层包含3个卷积层,每个卷积层都有512个卷积核。
- 池化层5:最大池化层,进行2x2的最大池化操作。
- 全连接层1-3:每个全连接层都包含4096个神经元。
1.2.3 主要特点
- 简单而有效:VGG-16模型结构简单对称,每个卷积层和池化层均采用相同的核大小和步幅,使得模型易于理解和实现。
- 多个深度卷积层:VGG-16模型有较多的深度卷积层,有利于提取输入图像的复杂特征。
- 全连接层密集:VGG-16模型中全连接层较为密集,增加了模型的参数数量,有助于对图像进行更加精细的分类。
1.3 ResNets残差网络
残差网络是由微软亚洲研究院提出的一种深度神经网络结构,其主要特点是引入了残差学习的思想。
1.3.1 残差学习
- 残差学习的核心思想是通过增加跨层连接(或者称为“捷径连接”或“跳跃连接”),允许网络直接学习残差函数。
- 残差学习通过跨层连接直接学习残差,即网络学习的是输入特征与目标输出之间的残差,从而使得网络更容易学习到恒等映射,减轻了梯度消失和梯度爆炸的问题。
1.3.2 模型结构
- ResNet主要由残差块构成,每个残差块包含了多个卷积层和跨层连接。
- 每个残差块中的跨层连接可以分为两种形式:恒等映射和投影映射。
- 常见的残差块结构包括了基本残差块和瓶颈残差块。
1.3.3 主要特点
- 深度网络:ResNet可以构建非常深的网络结构,例如ResNet-50、ResNet-101、ResNet-152等,能够有效地处理复杂的视觉任务。
- 高性能:ResNet在图像分类、目标检测等领域取得了非常好的性能,在ImageNet图像分类挑战赛中取得了远超其他模型的成绩。
- 抗梯度消失:通过引入残差学习,有效减轻了梯度消失和梯度爆炸的问题,使得网络更容易训练和优化。
- 模型复用:ResNet的结构简单且易于理解,可以作为基础模型用于各种计算机视觉任务,并且可以通过迁移学习进行模型复用。
二、数据集与评价指标
2.1数据集
2.1.1 MNIST
任务:手写数字识别
描述:MNIST数据集是一个包含了来自美国国家标准与技术研究所(NIST)的手写数字图像的数据集,每张图片都是28x28像素的灰度图像,共有10个类别,分别表示数字0到9。
应用:作为深度学习领域中最经典的数据集之一,被广泛用于验证和测试图像分类算法的性能。
2.1.2 PASCAL VOC
任务:目标检测、图像分割、物体识别
描述:PASCAL VOC数据集是一个多标签的图像数据集,包含了20个常见的物体类别,如人、狗、汽车等。该数据集提供了详细的物体边界框和分割标注。
应用:被广泛用于评估目标检测、图像分割和物体识别等算法的性能,是计算机视觉领域中的重要基准数据集之一。
2.1.3 MS COCO
任务:目标检测、图像分割、物体识别、场景分类
描述:MS COCO数据集是一个大规模的多标签图像数据集,包含了超过80个物体类别和一些场景类别。每张图片都包含了丰富的物体实例和复杂的场景信息,提供了详细的物体边界框和分割标注。
应用:被广泛用于评估目标检测、图像分割、物体识别等算法的性能,尤其在挑战性物体检测和场景理解任务上取得了较高的影响力。
2.1.4 ImageNet
任务:图像分类、目标检测、物体识别
描述:ImageNet数据集是一个庞大的图像数据集,包含了超过1400万张图片,涵盖了超过2万个类别。该数据集最著名的是ImageNet Large Scale Visual Recognition Challenge(ILSVRC),其中包含了1000个常见物体类别,是图像分类任务中的经典数据集。
应用:ImageNet数据集推动了深度学习在图像分类等领域的发展,被广泛用于评估和测试深度学习模型的性能,也成为了深度学习领域中的重要基准数据集之一。
2.2评价指标
2.2.1算法评估相关概念
TP: 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数
FP: 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数
FN:被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数
TN: 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数
混淆矩阵:
预测值=1 | 预测值=0 | |
真实值=1 | TP | FN |
真实值=0 | FP | TN |
P(精确率):TP/(TP+FP),标识“挑剔”的程度
R(召回率):TP/(TP+FN)。召回率越高,准确度越低,标识“通过”的程度
精度(Accuracy):(TP+TN)/(TP+FP+TN+FN)
P-R曲线:
表示了召回率和准确率之间的关系.
示例:
假设一个测试集,其中图片只由大雁和飞机两种图片组成:
- True positives : 飞机的图片被正确的识别成了飞机。
- False positives: 大雁的图片被错误地识别成了飞机。
- False negatives: 飞机的图片没有被识别出来,系统错误地认 为它们是大雁。
- True negatives: 大雁的图片没有被识别出来,系统正确地认 为它们是大雁。
AP计算:
mAP:均值平均准确率
其中N代表测试集中所有图片的个数,P(k)表示在能识别出k个图片的时候 Precision的值,而 Δr(k)则表示识别图片个数从k-1变化到k时(通过调整阈值)Recall值的变化情况。
三、目标检测与YOLO
3.1目标检测问题
目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。 物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图 片的任何地方,并且物体还可以是多个类别。
3.2目标检测基本思想
3.2.1 滑动窗口
在目标检测中,滑动窗口是一种常用的技术,用于在图像中搜索和定位目标对象。其基本思想是在图像上以固定大小的窗口滑动,并在每个窗口位置上应用一个分类器或检测器,以判断该窗口内是否包含感兴趣的目标。
3.2.2 滑动窗口存在问题
1、滑动次数太多,计算太慢
假设图片为w宽,ℎ高,识别一幅图片需要T时间,则需要:w ∗ ℎ ∗ T的总时间。
例如:图片大小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小时!
3.2.3 一步法基本思想
在目标检测中,滑动窗口的一步法是一种直接在输入图像上生成和预测目标检测框的方法,而不需要显式地生成候选区域或区域提议。一步法方法通常结合了卷积神经网络和目标检测头部,在单个网络中同时完成目标检测和分类任务。
1. 网络设计
- 设计一个端到端的深度卷积神经网络,通常采用了类似于图像分类任务中的卷积层、池化层和全连接层等结构。
- 网络的最后几层通常是特定于目标检测任务的检测头部,用于生成和预测目标检测框的位置和类别。
2. 卷积特征提取
- 将输入图像通过卷积神经网络进行特征提取,得到一系列特征图。
- 这些特征图通常具有较高的语义信息,能够捕获图像中的目标特征。
3. 检测头部
- 在卷积特征提取后,将检测头部应用于特征图上,用于生成和预测目标检测框的位置和类别。
- 检测头部通常由一系列卷积层和全连接层组成,用于从特征图中提取目标检测的信息。
4. 目标检测预测
- 在检测头部生成的特征图上进行目标检测的预测,通常包括了目标检测框的位置坐标(通常是边界框的中心坐标、宽度和高度)、类别预测概率等信息。
- 通过应用一些激活函数(如sigmoid函数或softmax函数)对预测结果进行处理,得到最终的目标检测结果。
5. 后处理
- 对目标检测预测结果进行后处理,例如应用阈值筛选、非极大值抑制(NMS)等方法,以过滤低置信度的检测结果和去除重叠的检测框。
3.3YOLO网络结构
3.3.1 YOLO网络结构
网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训 练,后面4个是随机初始化的卷积层,和2个全连接层。
3.3.2 YOLO模型处理
3.3.2.1 YOLO网络输入
3.3.2.2 YOLO模型处理:7*7网格划分
➢ 将图片分割为个grid(S = 7),每 个grid cell的大小都是相等的
➢ 每个格子都可以检测是否包含目标
➢ YOLO v1中,每个格子只能检测一种 物体(但可以不同大小)
3.3.2.3 YOLO网络输出
➢ 输出是一个7 × 7 × 30的张量。对应 7 × 7个cell
➢ 每个cell对应2个包围框(bounding box, bb),预测不同大小和宽高比, 对应检测不同目标。每个bb有5个分量, 分别是物体的中心位置(x, y)和它的高 (ℎ) 和宽 (w) ,以及这次预测的置信度。
在右图中,每个框代表1个预测的bb,粗细代表不同的置信度,越粗得越高。图片被分成了49个框,每个框预测2个bb,因此上面的图中 有98个bb。
3.3.3 YOLO包围框
包围框是用来定位图像中目标对象位置的重要组成部分。YOLO通过预测包围框的位置和大小来实现目标检测,每个包围框通常由五个参数组成,分别是包围框的中心坐标、宽度、高度和目标类别的置信度。
- 在YOLO中,通常使用(x,y,w,h)表示包围框,其中(x,y)是包围框的中心坐标,(w,h)是包围框的宽度和高度。
- 包围框的表示方式可以是相对坐标,也可以是绝对坐标。相对坐标是相对于图像宽度和高度的比例,而绝对坐标则是以图像的实际尺寸为单位的坐标。
我们有个框,每个框的bb个数为B,分类器可以识别出C种不同的物体, 那么所有整个ground truth的长度为S × S × (B × 5 + C)。
YOLO v1中,这个数量是30
YOLO v2和以后版本使用了自聚类的anchor box为bb, v2版本为B = 5, v3中B =9
- 每个包围框都有一个目标类别的置信度,用于表示该包围框内是否包含目标对象以及目标对象的类别。
- 置信度通常表示为一个介于0到1之间的数值,表示包围框内包含目标对象的概率。
置信度:
Pr(obj)是一个grid有物体的概率
IOU是预测的bb和真实物体的交并比
IOU:图中绿框为真实标注,其余五个颜色框为预测值,可计算对应IOU
Pr(obj)的ground truth:三个目标中点对应格子为1,其它为0
3.3.4 YOLO损失函数
代表这个grid里有无舞台,有则
,否则为0.
边界框对应损失项:
取值:
3.3.5 非极大值抑制
在YOLO等目标检测算法中,NMS通常用于对网络输出的多个目标检测框进行后处理,以提高检测结果的准确性和鲁棒性。
1. 阈值筛选
- 首先,根据预测的目标类别置信度,将所有检测框按照置信度进行排序,通常置信度高的检测框排在前面。
- 然后,设定一个置信度阈值,将置信度低于阈值的检测框舍弃,只保留置信度高于阈值的检测框。
2. 非极大值抑制
- 对剩余的检测框进行非极大值抑制处理,以去除重叠的检测框并筛选出最佳的目标检测结果。
- 非极大值抑制的基本思想是对每个目标类别的所有检测框进行遍历,依次处理每个检测框。
- 对于当前处理的检测框,首先计算它与其他所有检测框的重叠度(通常使用IoU,交并比,Intersection over Union),并将重叠度高于设定阈值的检测框视为重叠的检测框。
3. 重叠框筛选
- 对于每个检测框,只保留置信度最高的检测框(即当前处理的检测框)作为最终的目标检测结果,其他重叠的检测框将被抑制(舍弃)。
- 通过遍历所有检测框并应用非极大值抑制处理,最终得到的检测结果即为经过NMS处理后的最佳目标检测结果。
4. 参数设置
- NMS过程中的关键参数包括了置信度阈值和重叠度阈值。这两个阈值的选择会影响最终的目标检测结果,通常需要根据具体的应用场景和需求进行调整和优化。
NMS算法示例
1. 它首先查看与每次检测相关的概率并 取最大的概率。图中选概率为0.9的方框;
2. 进一步查看图像中的所有其他框。与 当前边界框较高的IOU的边界框将被抑制。 因此图中0.6和0.7概率的边界框将被抑制。 (此时面包车已经只剩一个边界框)
3. 从概率最高的所有边界框中选择下一 个,在例子中为0.8的边界框;
4. 再次计算与该边界框相连边界框的 IoU,去掉较高IoU值的边界框。
5. 重复这些步骤,得到最后的边界框:
3.3.6 预训练与训练
➢ YOLO先使用ImageNet数据集对前20层卷积网络进行预训练,然 后使用完整的网络,在PASCAL VOC数据集上进行对象识别和定 位的训练和预测
➢ 训练中采用了drop out和数据增强来防止过拟合。
➢ YOLO的最后一层采用线性激活函数(因为要回归bb位置),其它 层都是采用Leaky ReLU激活函数:
3.3.5 YOLOv3
3.3.5.1 整体网络结构
3.3.5.2 预测框
➢ 每个cell生成三个预测框(anchor),维数为85 = 5 + 80
➢ 对一个图像产生10647个预测框: 3 × (13 × 13 + 26 × 26 + 52 × 52)
3.3.5.3 损失函数
➢ 类似v1, 分为正样本回归、正样本置信度+分类和负样本置信度三部分
3.3.5.4 模型效果
3.3.6 YOLOV5
3.3.6.1 整体网络结构
3.3.6.2 预测框
➢ 对一个图像产生25200个预测框:3 × 20 × 20 + 40 × 40 + 80 × 80
➢ 根据不同的数据集来自适应计算不同训练集中的最佳锚框值。
网络有三层输出层,每层输出层有3个anchor。如何将每个标签分 配到具体的位置上进行loss的计算呢?
➢ 使用anchor和目标框的高宽比进行筛选的。具体的分配规则如下: 其中在yolov5中默认设置为4。 这代表着在grid ceil 中预测的框的大小为对应anchor的1/4或者4倍。通过上面的方式,就可确定了哪一层的哪一个 anchor对应的输出channel上的
3.3.6.3 损失函数
➢ 类 似 v 3 , 分 为 三 类
➢ 回 归 损 失 采 用 C I O U 损 失
CIOU损失
其中d为预测框和真实框中心点的距离,c为最小外接矩形的对角线距离;
v是修正因子,用于进一步调整损失函数,考虑目标框的形状和方向。具体计算方式为:
,
和
分别为目标框和预测框的宽高。
CIoU Loss最终定义为:
3.3.6.4数据预处理
数据增强
YOLOv5的输入端采用了和YOLOv4一样的Mosaic数据增强的方式,采用了4张图 片,随机缩放、随机裁剪、随机排布的方式进行拼接,使模型在更小的范围内 识别目标。
Focus结构
进入Backbone前,对图片进行切片操作,具体操作是在一张图片中 每隔一个像素拿到一个值,类似于邻近下采样,这样就拿到了四张 图片(4个通道),一共12个通道(RGB)
3.3.6.4 模型效果
如有侵权,有话好好说,我只会配合~