尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Deep Learning for Computer Vision——Training CNNs and CNN Architectures

Deep Learning for Computer Vision——Training CNNs and CNN Architectures 第一篇章CNN 的基础构建单元Layers Initialization这一部分回答“怎么搭建网络骨架”。1. 归一化层Normalization Layers让数据“稳定发力” 核心逻辑公式无论哪种归一化都遵循两步操作标准化​ 将数据拉到均值为 0方差为 1 的标准正态分布。缩放与平移是缩放因子是偏移量。注意这两个参数是模型通过梯度下降自动学习的。不同归一化层的根本区别谁来当分母想象数据是一个 4D 张量[N(样本数), C(通道数), H(高度), W(宽度)]。Batch Norm (BN)跨样本N算统计量。CNN 常用但要求 Batch Size 够大比如 32 以上。如果只有 2 张图算出来的均值毫无意义。Layer Norm (LN)跨通道C算统计量。Transformer 和 NLP 任务常用不依赖 Batch 大小适合变长序列。Instance Norm (IN)仅在自己身上H,W算统计量。主要用于图像风格迁移。Group Norm (GN)将通道 C 分成几组在组内算。它是BN 的完美替代者当显存不够Batch Size 设得很小比如为 2 时用 GN 效果极佳不会崩坏。2. 权重初始化Weight Initialization为什么不能全设 0如果你把全连接层的权重W初始化为 0那么每一层的输出都是一样的梯度更新时所有神经元也是同步更新网络无法“多样化”学习。所以必须使用随机初始化。❌ 错误案例 1权重初始化太小如标准差为 0.01现象经过 ReLU 激活后随着层数加深激活值全部坍缩到0 附近。后果梯度消失。网络后面的层根本收不到有效信息无法更新。❌ 错误案例 2权重初始化太大如标准差为 0.05现象经过 ReLU 激活后数值逐层变大到第 6 层时均值变成了109出现了NaN数值爆炸。后果梯度爆炸。网络无法收敛。✅ 正确做法Kaiming He 初始化专为 ReLU 设计不要用固定常数应该根据输入神经元的数量动态决定随机分布的大小。公式W np.random.randn(D_in, D_out) * np.sqrt(2.0 / D_in)。这里的sqrt(2.0/D_in)保证了经过 ReLU 后每一层输出的方差大致相等不会放大也不会消失。3. 激活函数Activation Functions引入非线性ReLU (Rectified Linear Unit)max(0, x)。最大的问题是小于 0 时梯度为 0会造成部分神经元永久“死亡”不会再被激活。因此后来有了Leaky ReLU小于 0 时乘以一个很小的系数如 0.01进行缓解。GELU (Gaussian Error Linear Unit)✨Transformer 的标配。它结合了 ReLU 和 Dropout 的思想在 0 附近有非常平滑的梯度没有“死神经元”的困扰模型表现更稳。第二篇章经典 CNN 架构演进Architectures这部分回答“主流模型到底长什么样”。1. VGGNet用“小滤子”堆叠出“大视野”2014核心绝招放弃了 AlexNet 的大卷积核全部使用 3×33×3 卷积步长 1边缘补 1 2×22×2 最大池化步长 2。【初学者的必考点感受野实战计算】问为什么堆叠 3 个 3×33×3 卷积等价于 1 个 7×77×7 卷积的感受野图解推导text第一层 3x3 感受野 3x3 第二层 3x3 感受野(3-1)*1 3 5x5 第三层 3x3 感受野(5-1)*1 3 7x7算力优势假设输入输出通道都是 C。1 个 7×7 卷积核的参数量 7×7×C×C49堆叠 3 个 3×33×3 卷积核的参数量 3×(3×3×C×C)27结论用了 3 个小卷积核不仅感受野一样大参数量还节省了将近一半并且多了 3 次非线性激活表达能力更强2. ResNet残差网络让网络可以“无限深”2015痛点以前大家以为网络越深越好但发现 20 层的效果比 56 层还好。原因不是过拟合而是深层网络太难优化了梯度传不到前面去。 天才解法残差连接Skip Connection传统网络yConv(x)必须强行从零学会从原始图到高级特征的全部变换。残差网络yConv(x)x。网络不需要学会“全部答案”只需要学会“答案 - 输入 残差”。为什么有效假如已经训练得很好了我们再多加几层。如果这些新加的层没什么用它只要把权重都学习成 0那么 Conv(x)0最终输出依然是 0xx。有了这条捷径梯度在反向传播时可以直接原封不动地传回浅层彻底解决了梯度消失问题ResNet 工程细节每隔几个残差块会将通道数翻倍同时用步长为 2的卷积将图片长宽减半参数量和计算量保持平衡。结构上在残差块之前先做一次 7×7 的大卷积类似“粗加工”。第三篇章如何训练出高泛化能力的 CNNTraining Tricks这部分回答“怎么让模型在没见过的测试集上表现更好”。1. 数据增强Data Augmentation凭空造出更多数据核心目的给原始图片施加随机变换让模型“看”到多样化的样本防止死记硬背提升泛化性注意训练 Loss 会变高但测试 Loss 会变低。常用手段水平翻转适合物体识别不适合 OCR 文字识别。随机裁剪与缩放让模型不依赖物体在画面中的绝对位置。颜色抖动改变亮度、饱和度、对比度。随机遮挡随机在图片上用黑块遮挡让模型学会看局部的特征。✨ 高级技巧测试时增强TTA在测试阶段把一张图裁剪成 5 种四周中间或者翻转等多种变化输入模型得出多个预测最后把所有预测结果取平均。通常能在准确率上提升1%~2%。2. 正则化 Dropout强迫模型不要“死记硬背”做法在训练的前向传播中随机把神经元比如 50%直接置为 0。背后的用意强制网络不能依赖特定的某条通路必须学会冗余特征这就好比你想考出好成绩不能只押某一题的答案必须全面复习。⚠️【初学者的易错点训练和测试的缩放机制】训练时使用了 Mask。假设 p0.5那么输出只有一半。测试时绝对不能丢弃神经元因为不丢弃所有神经元都激活输出值就是训练时的 2 倍。为了解决这个问题测试时必须把输出乘以概率 p即乘以 0.5这样才能保证测试和训练时的数值幅度一致。注现在流行的实现叫“Inverted Dropout”是在训练时除以 p这样测试时代码完全不用改动更方便。3. 迁移学习Transfer Learning站在巨人的肩膀上如果你没有几十万张图片不要自己从头训练大模型直接拿别人训练好的 ImageNet 预训练模型。情形 A小数据集且图片风格类似 ImageNet做法冻结前面的所有卷积层当作特征提取器只把最后的全连接层原本是 1000 类换成你自己任务的类别数比如 2 类只训练这最后一层。非常适合少样本学习。情形 B大数据集且图片风格类似 ImageNet做法用预训练权重做初始化替换最后一层然后解除所有层的冻结对整个网络进行微调Fine-tuning这样能获得最佳性能。情形 C如果图片风格差异极大比如医学图像做法建议多解冻早期的几层或者从零训练部分新加入的层。 总结图表课程模块核心知识点一句话总结归一化BN/LN/IN/GN统计量算错维度结果大不同BN 看样本LN 看通道激活函数ReLU / GELU解决梯度死寂GELU 是 Transformer 的王牌权重初始化Kaiming He初始值要配输入层数不能太小也不能太炸VGG架构3x3 堆叠代替 7x7感受野不变参数少一半非线性更强ResNet架构残差连接Skip允许梯度直通网络再深也不怕梯度消失Dropout训练丢弃测试缩放强制网络学冗余特征防止死记硬背迁移学习冻结 微调小数据靠预训练大数据才全量微调
返回列表