YOLO目标检测模型检测过程
一、目标检测任务简介
目标检测(Object Detection)是计算机视觉中的一项核心任务,目标是:
识别图像中的所有物体
确定每个物体的位置(用矩形框框出)
判断每个物体的类别
相比图像分类(只判断图像整体是什么),目标检测要复杂得多,因为它是分类+定位的结合体。
二、YOLO基本原理(You Only Look Once)
YOLO系列模型是端到端的目标检测方法:
将目标检测问题转化为一个回归问题,一次性预测所有的边界框和类别。
1. 输入与划分
原图被缩放为448x448x3
被划分为 S × S 的网格(YOLO v1中 S = 7)
每个格子预测 B个边界框,以及该区域包含物体的概率和物体类别
2. 网络输出结构(以YOLOv1为例)
输出张量尺寸为 S x S x (B * 5 + C)
B 个边界框,每个包括 5 个数值:中心坐标(x, y)、宽度w、高度h、置信度c
C 个类别的分类概率
YOLOv1 中:
S = 7,B = 2,C = 20 ⇒ 输出是 7x7x30 的张量
三、核心概念详解
1. 置信度计算
Confidence = Pr ( Object ) × IoU pred, truth \text{Confidence} = \Pr(\text{Object}) \times \text{IoU}_{\text{pred, truth}}
Confidence=Pr(Object)×IoU
pred, truth
预测该格子是否包含目标
预测框和真实框之间的重叠程度(IoU)
2. IoU(Intersection over Union)
用于衡量两个框(预测框与真实框)之间的重叠程度:
I o U = 预测框 ∩ 真实框 预测框 ∪ 真实框 IoU = \frac{预测框 \cap 真实框}{预测框 \cup 真实框}
IoU=
预测框∪真实框
预测框∩真实框
值越高,说明预测框越准确。
四、YOLO损失函数结构(以YOLOv1为例)
YOLO的总损失由五项组成:
位置误差:中心坐标 (x, y)
尺寸误差:宽高 (w, h),通常对w、h开平方处理
置信度误差:预测有目标 vs 无目标的概率
类别误差:分类正确性
无目标惩罚:防止大量无目标格子影响训练
λ系数用于平衡不同损失项的权重。
五、非极大值抑制(NMS)
问题:
一个目标可能被多个边界框重复检测。
NMS算法步骤:
选择置信度最高的框
计算其与其他框的IoU
去除IoU过高(重叠大)的其他框
重复,直到所有框都处理完
示例图解:
选中置信度为0.9的框;
去除IoU大于阈值(如0.5)的框;
继续选择下一个置信度最高的框。
六、YOLO训练细节
使用 ImageNet 对前几层预训练
使用 PASCAL VOC 数据集微调全网络
使用 数据增强(Data Augmentation) 和 Dropout 来防止过拟合
激活函数:Leaky ReLU(除了输出层为线性)
七、YOLO进化之路
1. YOLOv3(使用Darknet-53)
多尺度检测(13x13、26x26、52x52)
每个格子预测 3个anchor框
共生成10647个预测框
损失函数分为:位置回归、目标置信度、分类损失(正负样本分开处理)
2. YOLOv5(轻量级、速度快)
使用CSPNet结构优化主干网络
引入 Mosaic数据增强(四图拼接)
采用 CIoU损失函数 替代IoU,综合考虑:
框中心距离
框面积重叠
框宽高比例差异
CIoU损失公式:
CIoU = 1 − IoU + d 2 c 2 + α v \text{CIoU} = 1 - \text{IoU} + \frac{d^2}{c^2} + \alpha v
CIoU=1−IoU+
c
2
d
2
+αv
其中:
d dd:预测框与真实框中心点距离
c cc:最小外接矩形对角线
v vv:宽高比例一致性
八、YOLO的优缺点总结
优点 缺点
实时检测速度快 准确率不如二阶段方法(如Faster R-CNN)
结构简单、易于部署 小目标检测不敏感
端到端训练 锚框需要手动设计或聚类生成
神经网络与深度学习:语义分割与FCN
什么是语义分割?
语义分割(Semantic Segmentation)是计算机视觉中的核心任务之一,它的目标是:
对图像中每一个像素进行分类,输出每个像素所属的语义类别。
与图像分类不同,语义分割的输出是与输入图像相同尺寸的“标签图”。
与目标检测不同,语义分割不止提供目标位置(如框),而是提供精确到像素级别的轮廓信息。
任务类型 作用
图像分类 给整张图像一个标签
目标检测 给目标打框,指出位置与类别
语义分割 给每个像素打标签,指出每块区域属于哪个语义类别
实例分割 不仅识别类别,还区分每个实例(谁是谁)
语义分割的发展背景
2015年,CVPR首次提出端到端的FCN(Fully Convolutional Network)模型,是语义分割史上的重要突破。
之前的滑动窗口方法效率低,且存在大量重复计算;FCN通过“全卷积”结构实现快速高效的像素级预测。
FCN 网络结构详解
网络结构组成:
全卷积编码器(提取特征)
反卷积解码器(恢复空间分辨率)
卷积部分(编码器):
借用了VGG或ResNet等经典CNN架构。
去掉全连接层,用 1×1卷积 替代,实现特征图的通道压缩。
输出为称为 Heatmap 的特征图(每类一个通道)。
反卷积部分(解码器):
使用 转置卷积(Transposed Convolution) 或 反池化(Unpooling) 进行上采样。
为了提高分辨率,采用跳跃连接(skip connection):
FCN-32s(单步上采样)
FCN-16s(中间层融合)
FCN-8s(多层融合,更细致)
上采样原理详解
1×1卷积
用于改变通道数(类数),不改变空间分辨率。
在FCN中用于代替全连接层。
转置卷积(Deconvolution)
上采样的一种方式,实质是将特征图放大。
反池化(Unpooling)
记录池化的位置,再将最大值放回原位以恢复结构。
语义分割实例:DeepLab v3
DeepLab 是 Google 提出的一系列语义分割网络(v1, v2, v3, v3+)
实验环境:
使用 PyTorch 提供的 DeepLabV3(ResNet101为 backbone)
输入图片经过预处理、归一化 → 网络输出预测类别图 → 渲染上色后显示
关键代码步骤:
model = torch.hub.load('pytorch/vision', 'deeplabv3_resnet101', pretrained=True)
model.eval()
# 输入图像预处理
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0)
# 模型推理
with torch.no_grad():
output = model(input_batch)['out'][0]
output_predictions = output.argmax(0)
1
2
3
4
5
6
7
8
9
10
11
分割效果:
输出为每个像素的类别索引图,可通过颜色映射显示不同区域。
语义分割评价指标
指标名 说明
全局精度 所有像素中被正确分类的比例
平均精度 每个类别的准确率平均值
mIoU Mean Intersection over Union,各类IoU的平均,最常用的指标
IoU计算公式:
I o U = 预测区域 ∩ 真实区域 预测区域 ∪ 真实区域 IoU = \frac{预测区域 \cap 真实区域}{预测区域 \cup 真实区域}
IoU=
预测区域∪真实区域
预测区域∩真实区域
标注工具推荐
为训练语义分割模型,需要大量带有像素级标签的数据,推荐使用以下工具:
Labelme:Python可运行,支持多边形标注和导出JSON。
EISeg:百度推出的智能分割工具,支持AI辅助标注,适合批量处理。
深度学习与语义分割的关系
卷积神经网络(CNN)
卷积提取局部特征,是图像理解的核心。
在语义分割中用于编码图像语义信息。
FCN vs CNN
项目 CNN(分类) FCN(分割)
输出 一个分类结果 每个像素的类别
网络尾部 全连接层 全卷积层 + 上采样
应用 分类、检测 医疗图像、自动驾驶、遥感、机器人导航
语义分割应用场景
自动驾驶(车道、行人、障碍物识别)
医疗图像(器官、肿瘤分割)
卫星遥感(土地分类、城市规划)
虚拟现实、增强现实中的背景建模
总结:为什么语义分割重要?
语义分割不仅提升了机器对视觉世界的理解精度,也为更高层次的AI决策提供了基础。FCN等架构的发展为各种工业、医疗、城市领域的智能应用奠定了坚实的基石。
神经网络与深度学习 | 循环神经网络与自然语言处理(NLP)
第一部分:循环神经网络与NLP基础
为什么需要RNN(循环神经网络)?
传统神经网络(如CNN)无法建模时序性强、上下文关联密切的数据(如语言、时间序列、音乐等)。
RNN专为序列建模设计,可以“记住”历史信息,适合处理:
语言模型
情感分析
机器翻译
语音识别
序列模型与自回归建模
假设我们想预测时间序列中的当前值:
x t ∼ P ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) x_t \sim P(x_t | x_{t-1}, x_{t-2}, ..., x_1)
x
t
∼P(x
t
∣x
t−1
,x
t−2
,...,x
1
)
若假设有一阶马尔可夫性:
x t ∼ P ( x t ∣ h t ) , h t = g ( h t − 1 , x t − 1 ) x_t \sim P(x_t | h_t),\quad h_t = g(h_{t-1}, x_{t-1})
x
t
∼P(x
t
∣h
t
),h
t
=g(h
t−1
,x
t−1
)
此处,h t h_th
t
是隐藏状态,包含了“历史摘要”。
文本表示与预处理
文本处理方式
按字母切分:
S = "to be or not to be" → ['t','o',' ','b','e',...]
1
按单词切分(Tokenization):
S = "to be or not to be" → ['to','be','or','not',...]
1
文本编码方式
独热编码(One-hot Encoding):
每个单词或字符用一个全为0仅有一个1的高维向量表示。
词嵌入(Word Embedding):
将独热向量映射为低维向量。使用一个可学习的词嵌入矩阵:
Embedding Matrix ∈ R d × V \text{Embedding Matrix} \in \mathbb{R}^{d \times V}
Embedding Matrix∈R
d×V
其中,V为词表大小,d为嵌入维度(如100、300)。
RNN 模型结构与原理
基本结构:
输入序列为 x 1 , x 2 , . . . , x T x_1, x_2, ..., x_Tx
1
,x
2
,...,x
T
,RNN在每个时间步进行:
h t = f ( x t , h t − 1 ) y t = g ( h t ) h_t = f(x_t, h_{t-1}) \quad\quad y_t = g(h_t)
h
t
=f(x
t
,h
t−1
)y
t
=g(h
t
)
其中 h t h_th
t
是“记忆”,y t y_ty
t
是输出,通常是分类或回归结果。
RNN的缺陷:长期依赖与梯度消失
随着时间步增多,RNN难以保留早期信息,出现“遗忘”问题。即使网络“理论上”可记住远距离的词,但训练中难以优化。
RNN反向传播(BPTT)
RNN的训练通过反向传播算法进行梯度更新,称为通过时间反向传播(BPTT)。
在第t步的误差不仅影响当前层的权重,还会通过链式法则向前影响之前时间步的参数,代价是:
计算复杂
梯度爆炸/消失严重
第二部分:进阶RNN变体结构
GRU(门控循环单元)
为了解决RNN的遗忘问题,GRU在结构中引入了门控机制。
GRU结构公式:
更新门:
Z t = σ ( W x z X t + W h z H t − 1 + b z ) Z_t = \sigma(W_{xz}X_t + W_{hz}H_{t-1} + b_z)
Z
t
=σ(W
xz
X
t
+W
hz
H
t−1
+b
z
)
重置门:
R t = σ ( W x r x t + W h r h t − 1 + b r ) R_t = \sigma(W_{xr}x_t + W_{hr}h_{t-1} + b_r)
R
t
=σ(W
xr
x
t
+W
hr
h
t−1
+b
r
)
候选隐状态:
H ~ t = tanh ( W x h X t + ( R t ⊙ H t − 1 ) W h h + b h ) \tilde{H}_t = \tanh(W_{xh}X_t + (R_t \odot H_{t-1})W_{hh} + b_h)
H
~
t
=tanh(W
xh
X
t
+(R
t
⊙H
t−1
)W
hh
+b
h
)
最终隐状态:
H t = Z t ⊙ h t − 1 + ( 1 − Z t ) ⊙ H ~ t H_t = Z_t \odot h_{t-1} + (1 - Z_t) \odot \tilde{H}_t
H
t
=Z
t
⊙h
t−1
+(1−Z
t
)⊙
H
~
t
特点:
保留长期信息
结构简单(比LSTM少参数)
性能优于标准RNN
LSTM(长短期记忆网络)
LSTM 是RNN的重要变体,其引入了记忆单元Cell State,通过三种门控结构对信息进行筛选。
LSTM结构核心:
遗忘门:
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)
f
t
=σ(W
f
⋅[h
t−1
,x
t
]+b
f
)
值为0:什么都记不住(0通过)
值为1:全记住(全部通过)
输入门:
i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) C ~ t = tanh ( W C ⋅ [ h t − 1 , x t ] + b C ) i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \quad \tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)
i
t
=σ(W
i
⋅[h
t−1
,x
t
]+b
i
)
C
~
t
=tanh(W
C
⋅[h
t−1
,x
t
]+b
C
)
i t i_ti
t
确定传送带C ~ t \tilde{C}_t
C
~
t
的那些值
新值C ~ t \tilde{C}_t
C
~
t
加到C t − 1 C_{t-1}C
t−1
上
状态更新:
C t = f t ⋅ C t − 1 + i t ⋅ C ~ t C_t = f_t \cdot C_{t-1} + i_t \cdot \tilde{C}_t
C
t
=f
t
⋅C
t−1
+i
t
⋅
C
~
t
输出门:
o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) h t = o t ⋅ tanh ( C t ) o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) \quad h_t = o_t \cdot \tanh(C_t)
o
t
=σ(W
o
⋅[h
t−1
,x
t
]+b
o
)h
t
=o
t
⋅tanh(C
t
)
特点:
更强的记忆能力
适合处理长文本、时间序列
参数量是RNN的4倍(计算开销较大)
双向与深层循环神经网络(BiRNN & Deep RNN)
双向RNN:同时利用前向与后向的上下文信息,适合命名实体识别、机器翻译等任务。
深层RNN:将多个RNN层堆叠,提高模型表达能力。
性能对比总结:
模型 表现 复杂度
RNN 易训练,简单 易遗忘
GRU 表现优良 参数较少
LSTM 表现更佳 参数最多
BiRNN 利用上下文 参数双倍
总结:
为什么RNN擅长处理语言?
因为语言是典型的时序信号,前后文之间强相关。
什么是词嵌入?
词嵌入将语言中的离散单词映射为稠密的连续向量,是深度学习理解语言的第一步。
RNN vs LSTM vs GRU谁更好?
小模型:GRU效率更高
长文本:LSTM更稳定
快速部署:RNN结构简单,但准确率可能低
应用场景举例
文本分类:IMDB情感分析、新闻分类
对话系统:ChatGPT、客服机器人
机器翻译:中英文互译、神经翻译引擎
语音识别:Siri、语音助手
图文生成:图像描述文本生成(图像→RNN→文本)
蹦迪猪猪侠
关注
9
10
0
分享
深度学习知识点全面总结
热门推荐
专注大数据与人工智能技术分享,欢迎私信加群互相学习!
32万+
本文详细介绍深度学习概念及原理,参考网上相关资料汇总,内容包含众多章节,包括神经网络基础及常见深度学习网络结构介绍,用于个人学习总结,适合深度学习初学者学习。同时介绍机器学习常见的分类算法:SVM、神经网络、随机森林、逻辑回归、KNN、贝叶斯。常见的监督学习算法:感知机、SVM、人工神经网络、决策树、逻辑回归.........
深度学习极简教程——神经网络、模式识别、图像处理、语音处理、计算语言学、统计学等基础入门
AI天才研究院
1029
人工智能(Artificial Intelligence,AI)旨在使机器模拟人类智能,执行诸如学习、推理、解决问题等任务。机器学习(Machine Learning,ML)是实现人工智能的一种途径,其核心思想是让机器从数据中学习规律,并利用学到的规律对未知数据进行预测。深度学习的核心算法是反向传播算法(Backpropagation Algorithm),其作用是根据模型的输出误差,自动调整模型参数,使得模型的预测结果更加准确。将输入数据输入到神经网络中,计算网络的输出。
学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇
Morganfs的博客
11万+
深度学习笔记——CNN卷积神经网络理论篇。主要包括CNN的概念、基本原理、类型综述。算是比较完善的一篇文章了。
PyTorch计算机视觉实战:目标检测、图像处理与深度学习
Hello大家好,我是Dream,如果帮得到你,那我深感荣幸!想进粉丝福利群及免费送书群,直接私信我拉你。交流学习、商务合作:https://bbs.youkuaiyun.com/topics/614347534
7046
本书基于真实数据集,全面系统地阐述现代计算机视觉实用技术、方法和实践,涵盖50多个计算机视觉问题。全书分为四部分:di一部分(第13章)介绍神经网络和PyTorch的基础知识,以及如何使用PyTorch构建并训练神经网络,包括输入数据缩放、批归一化、超参数调整等;第二部分(第410章)介绍如何使用卷积神经网络、迁移学习等技术解决更复杂的视觉相关问题,包括图像分类、目标检测和图像分割等;第三部分(第1113章)介绍各种图像处理技术,包括自编码器模型和各种类型的GAN模型;第四部分(第14。
深度学习实战——循环神经网络(RNN、LSTM、GRU)
转载请标明出处,完整项目/代码详见github:https://github.com/yiru1225
9324
本篇博客主要介绍几种循环神经网络的原理,并进行了代码实践与优化(内含代码与数据集)。
深度学习与计算机视觉系列(下)--目标检测&图像分割
Well~
1万+
深度学习与计算机视觉入门系列(下) 数据嗨客最近发布了一个深度学习系列,觉得还不错,主要对深度学习与计算机视觉相关内容做了系统的介绍,看了一遍,在这里做一下笔记。 目录 深度学习与计算机视觉入门系列(下) 目录 深度学习第8期:深度学习的常见框架 深度学习第9期:强化学习的基本概念 深度学习第10期:基于Q的强化学习(上) 深度学习第11期:基于Policy的强化学习 深度学习...
【深度学习】05-Rnn循环神经网络-01- 自然语言处理概述/词嵌入层/循环网络/文本生成案例精讲
weixin_41645791的博客
2312
自然语言处理(Natural Language Processing, NLP)是计算机科学和人工智能的一个重要分支,旨在通过计算机算法分析、理解、生成和处理人类自然语言(如汉语、英语等)。自然语言具有丰富的结构、含义和上下文,难以像传统的结构化数据一样简单地进行数值化处理。在自然语言处理的任务中,循环神经网络(RNN - Recurrent Neural Network)是一个重要的深度学习模型,尤其适用于处理序列数据,如文本和语音。为了更好地理解RNN在NLP中的作用,下面是一个详细的概述。
IDL神经网络与深度学习导论+神经网络与深度学习基础
K_savo的博客
1450
常见的深度学习框架包括:TensorFlow、PyTorch、Caffe、MxNet、Keras、PaddlePaddle一般地,人工神经网络中的激活函数都选用非线性函数。原因如下:人工神经网络主要由大量的神经元以及它们之间的有向连接构成。人工神经网络由神经元模型构成,这种由许多神经元组成的信息处理网络具有并行分布结构。前馈神经网络(全连接神经网络、多层感知器)定义网络——>损失函数——>优化训练的过程就是不断更新权重w和偏置b的过程,直到找到稳定的w和b使得模型的整体误差最小。池化层也叫子采样层(Subs
神经网络与深度学习-4
sfxxd的博客
194
国家编码从1开始, 1~197,因为实际国籍有可能不填(对应0)。FCN中第6、7、8层都是通过1 × 1卷积得到的,第6层的输出是4096 × 7 × 7, 第7层的输出是4096 × 7 × 7 ,第8层的输出是1000 × 7 × 7,即1000个大小是 7 × 7的特征图(称为heatmap)。文 本 : ['twinkled', 'and', 'his', 'usually', 'pale', 'face', 'was', 'flushed', 'and', 'animated', 'the']
深度学习02-神经网络(MLP多层感知器)
liaomin416100569的专栏
8万+
神经网络是一种基于生物神经系统结构和功能特点而设计的人工神经网络模型,具有很强的自适应性和非线性映射能力。神经网络由多个神经元(或称节点)组成,这些神经元通过连接权重相互连接,构成多层的网络结构。每个神经元接收到来自其它神经元的信号,并将这些信号加权线性组合后通过激活函数进行非线性
1329

被折叠的 条评论
为什么被折叠?



