RetinaFace: Single-stage Dense Face Localisation in the Wild(论文阅读笔记)

提出RetinaFace,一种基于多任务学习的单阶段人脸检测器,利用额外监督和自监督信号,实现不同尺度人脸的精准定位。在WIDER FACE和IJB-C数据集上表现卓越,提升人脸检测和验证性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

    虽然在不受控制的人脸检测方面已经取得了巨大的进步,但是在wilder上准确有效的人脸定位仍然是一个公开的挑战。本文提出了一种鲁棒的single stage人脸检测器RetinaFace,它利用联合的额外监督和自监督多任务学习的优点,对不同尺度的人脸进行像素级定位。具体来说,我们在以下五个方面做出了贡献:(1)我们在WILDER FACE数据集中手工标注了5个人脸Landmark,并在这个额外的监督信号的帮助下,观察到在hard face检测的显著改善。(2)进一步添加自监督网格解码器(mesh decoder)分支,与已有的监督分支并行预测像素级的3D形状人脸信息(3)在WILDER FACE hard测试集上,RetinaFace的平均精度(AP)比最先进的平均精度(AP)高出1.1%(达到AP = 91.4%)(4)在IJB-C测试集上,RetinaFace使现有方法(ArcFace)能够改进人脸验证结果(FAR=1e-6, TAR=89.59%)(5)采用轻量级backbone网络,RetinaFace可以在单个CPU核上实时运行vga分辨率图像。

1,引言

    人脸自动定位是人脸图像分析的前提步骤,在人脸属性(如表情[64]、年龄[38])、人脸识别[45、31、55、11]等应用中都是必不可少的。人脸定位的狭义定义可以参考传统的人脸检测[53,62],其目的是在没有任何尺度和位置先验的情况下估计人脸边界框。然而,本文提出的人脸定位的广义定义包括人脸检测[39]、人脸对齐[13]、像素化人脸解析[48]和三维密集对应回归[2,12]。这种密集的人脸定位为所有不同的尺度提供了精确的人脸位置信息。

    受通用目标检测方法的启发[16、43、30、41、42、28、29],融合了深度学习的最新进展,人脸检测最近取得了显著进展[23、36、68、8、49]。与一般的目标检测不同,人脸检测具有较小的比率变化(从1:1到1:1.5),但更大的尺度变化(从几个像素到数千像素)。目前最先进的方法[36,68,49]集中于单阶段[30,29]设计,该设计密集采样人脸在特征金字塔[28]上的位置和尺度,与两阶段方法相比,表现出良好的性能和更快的速度[43,63,8]。在此基础上,我们改进了单阶段人脸检测框架,并利用强监督和自监督信号的多任务损失,提出了一种最先进的密集人脸定位方法。我们的想法如图1所示。

    人脸检测训练过程通常同时包含分类和box回归损失[16]。Chen等人[6](即MTCNN网络)在观察到对齐后的人脸形状为人脸分类提供了更好的特征的基础上,提出了将人脸检测和对齐结合在联合级联框架中。受[6]的启发,MTCNN[66]和STN[5]同时检测人脸和五个人脸Landmark。由于训练数据的限制,JDA[6]、MTCNN[66]和STN[5]还没有验证微小的人脸检测是否可以从额外的五个人脸Landmark的监督中获益。我们在本文中所要回答的问题之一是,能否利用由5个人脸Landmark构成的额外监控信号,在WIDER FACE的hard测试集[60]上推进目前最好的性能(90.3%[67])

    在Mask R-CNN[20]中,通过添加一个用于预测目标Mask的分支,与现有的用于边界框识别和回归的分支并行,显著提高了检测性能。这证实了密集的像素级注释也有助于改进检测。遗憾的是,对于WIDER FACE具有挑战性,无法进行密集的人脸注释(以更多的Landmark或语义段的形式)。由于有监督的信号不易获得,问题是我们能否应用无监督的方法进一步提高人脸检测。

    在FAN[56]中,提出了一种anchor-level注意图(attention map)来改进遮挡人脸检测。然而,所提出的注意图相当粗糙,不包含语义信息。近年来,自监督三维形态模型[14,51,52,70]在wilder实现了很有前景的三维人脸建模。特别是Mesh解码器[70]利用节点形状和纹理上的图形卷积[10,40]实现了超实时速度。However, 应用mesh 解码器到单级探测器的主要挑战 [70]是: (1) 相机参数难以准去地估计 , 和 (2) 联合潜在形状和纹理表示是从单个特征向量(特征金字塔上的1*1 Conv)而不是RoI池化的特征预测,这表示特征转换的风险。本文采与现有监督分支并行的用网格解码器[70(mesh decoder)]通过自监督学习预测像素级的三维人脸形状。


综上所述,我们的主要贡献如下:
1,在单阶段设计的基础上,提出了一种新的基于像素级的人脸定位方法RetinaFace,该方法采用多任务学习策略同时预测人脸评分、人脸框、五个Landmark以及每个人脸像素的三维位置和对应关系。
2,在WILDER FACE hard子集上,RetinaFace的性能比目前最先进的两阶段法(ISRN[67])的AP高出1.1% (AP等于91.4%)
3,在IJB-C数据集上,RetinaFace有助于提高ArcFace的[11]验证精度(FAR=1e-6时TAR等于89:59%)。这表明更好的人脸定位可以显著提高人脸识别。
4,通过使用轻量级backbone网络,RetinaFace可以实时运行
5,已经发布了额外的注释和代码,以方便将来的研究

 

2,相关工作

    图像金字塔 vs .特征金字塔:滑动窗口范例,其中分类器应用于密集的图像网格,可以追溯到过去的几十年。Viola-Jones[53]的里程碑式工作探索了级联链,实时有效地从图像金字塔中剔除假人脸区域,使得这种尺度不变的人脸检测框架被广泛采用[66,5]。尽管图像金字塔上的滑动窗口是主要的检测范式[19,32],随着特征金字塔[28]的出现,多尺度特征图上的滑动anchor[43][68,49]迅速主导了人脸检测。

    两阶段vs .单阶段:目前的人脸检测方法继承了一般目标检测方法的一些成果,可分为两类:两阶段方法(如Faster R-CNN[43,63, 72])和单阶段方法(如SSD[30,68]和RetinaNet[29,49])。两阶段方法采用了一种具有高定位精度的“proposal与细化”机制。相比之下,单阶段方法密集采样人脸位置和尺度,导致训练过程中positive和negative样本极不平衡。为了解决这种不平衡,广泛采用了采样[47]和重加权[29]方法。与两阶段方法相比,单阶段方法效率更高,召回率更高,但存在假阳性率更高和定位准确性降低的风险。

    上下文建模:利用特征金字塔上的上下文模块,增强模型捕捉微小人脸[23]、SSH[36]和PyramidBox[49]的上下文推理能力,扩大欧几里德网格的感受野。为了提高CNNs的非刚性变换建模能力,可变形卷积网络(deformable convolution network, DCN)[9,74]采用了一种新的可变形层对几何变换进行建模。WILDER FACE 2018[33冠军方案]表明,为了提高人脸检测的性能,刚性(expansion)和非刚性(deformation)上下文建模是互补和正交的。

    多任务学习:联合人脸检测与对齐被广泛应用[6,66,5],对齐后的人脸形状为人脸分类提供了更好的特征。在Mask R-CNN[20]中,通过添加一个并行分支来预测目标Mask,显著提高了检测性能。Densepose[1]采用Mask-RCNN的结构,在每个选定区域内获得密集的part标签和坐标。然而,[20,1]中的dense回归分支是通过监督学习训练的。此外,dense分支是一个小的FCN应用于每个RoI预测像素到像素的密集映射。

3,RetinaFace

3.1 对于任何训练anchor i ,我们减少以下多项任务的损失:

    (1)人脸分类损失, 其中 是 anchor i 为人脸的预测概率 , 对于positive anchor  是1,对于negative anchor为0。分类损失 二类 softmax 损失。(2) 人脸 box回归损失为 , 其中  和 分别表示与正 anchor 相关的预测框和 ground truth 框的坐标。我们按照[16]对box回归目标(即中心位置、宽度和高度)进行标准化,并使用  。其中 R是[16]中定义的鲁棒损失函数 (smooth-L1)。(3)人脸 Landmark 回归损失 , 其中    并且 。表示与正anchor相关的五个预测的人脸Landmark和ground truth。与box中心回归相似,五个人脸Landmark回归也采用了基于anchor中心的目标归一化。(4) Dense 回归损失 (参考 Eq. 3 ). 损失平衡参数参数  设置 为 0.25 , 0.1 和 0.01 , 这 意味着我们从监督信号中增加更好的盒子和Landmark定位的重要性。

3.2,Dense 回归分支

    Mesh 解码器:我们直接使用[70,40]中的Mesh解码器(mesh convolution and mesh up-sampling) ,这是一种基于快速局部谱滤波[10]的图卷积方法为了实现进一步的加速,我们还使用了类似于[70]中方法的联合形状和纹理解码器,而不是只解码形状的[40]。

    下面我们将简要解释图卷积的概念,并概述为什么它们可以用于快速解码。如图3(a)所示,二维卷积运算是欧几里德网格感受野内的“核加权邻域加和”。同样,图卷积也采用了图3(b)所示的相同概念。然而,邻域距离是通过计算连接两个顶点的最小边数来计算的。我们遵循[70]来定义一个着色的脸部网格(mesh), 其中  是一组包含联合形状和纹理信息的人脸顶点集合, 是一个稀疏邻接矩阵,它编码了顶点之间的连接状态。图拉普拉斯行列式定义为,其中是一个 对角 矩阵

图3。(a)二维卷积是欧氏网格感受野内核加权邻域和。每个 卷积 层 有参数.(b)图卷积也采用核加权邻域和的形式,但邻域距离是通过计算连接两个顶点的最小边数来计算的。每个卷积 层 有 参数 和 切比雪夫系数 在秩 为K时 截断。
 

遵循[10, 70 ], 图卷积的kernel 可以表示为以 K 为截断的递归Chebyshev多项式

    其中, 是一个切比雪夫系数向量, 是在缩放的拉普拉斯  中评估 k 阶的切比雪夫多项式。定义 ,循环计算   。其中。整个滤波操作非常有效,包括 K 个稀疏矩阵-向量乘法和一个密集矩阵-向量乘法

    可微的渲染器:在预测了形状和纹理参数 后,我们利用高效可微三维网格渲染器[14]将彩色网格投影到二维图像平面上,相机参数(即相机位置、相机姿态和焦距)和照明参数(即点光源的位置、颜色值及环境光的颜色)。

    Dense回归损失:一旦我们得到渲染的2D人脸 ;,我们使用以下函数比较渲染后的人脸与原始2D人脸的像素差异:

    其中 W和H分别表示anchor crop I*i,j的宽度和高度。

图1所示。提出的单阶段像素级人脸定位方法,在现有的box分类和回归分支的基础上,采用了额外监督和自监督的多任务学习。每个正anchor输出(1)一个人脸评分,(2)一个人脸框,(3)五个人脸Landmarks,(4)投影在图像平面上的密集三维人脸顶点。 

 图2。单阶段密集人脸定位方法的概述。RetinaFace是基于具有独立上下文模块的特征金字塔设计的。根据上下文模块,我们计算每个anchor的多任务损失。

4,实验

4.1 数据集

    WIDER FACE数据集[60]包括32203幅图像393703个人脸边界框,在尺度、姿态、表情、遮挡和光照方面具有高度可变性。通过随机抽取61个场景类别,将WIDER FACE数据集分为训练(40%)、验证(10%)和测试(50%)子集。基于EdgeBox的检出率[76],通过逐步合并硬样本来定义三个难度等级(Easy、Medium和Hard)。

    额外的标注:见图4和表1,我们定义五个级别的脸图像质量(根据在人脸上有多难注释Landmark)并在WIDER FACE的训练和验证子集上注释五个人脸Landmark(即眼中心,鼻子和嘴角)。我们总共在训练集上标注了84.6k个人脸,在验证集上标注了18.5k个人脸

图4。我们在可以从WIDER FACE训练和验证集进行注释(我们称它们为“可注释的”)的人脸上添加额外的5个人脸Landmark注释。
 

表1。五级人脸图像质量。在无可争辩的类别中,人们可以在不费力的情况下找到Landmark。在可注释的类别中,查找大致位置需要一些努力。 

4.2 实现细节

    特征金字塔:RetinaFace采用从P2到P6的特征金字塔levels,其中P2到P5通过使用自顶向下和横向连接计算相应的ResNet残差阶段(C2到C5)的输出,如[28,29]。P6是在C5处通过一个3x3卷积 stride=2 计算得到到。C1-C5是在ImageNet-11k数据集上预先训练好的ResNet-152[21]分类网络,P6是用“Xavier”方法[17]随机初始化的。

    上下文模块:受 SSH [36] 和 PyramidBox [49]启发, 我们 还 在五个特征金字塔levles上应用 独立 的 上下文 模块来提高 感受野并增加网络背景建模能力。教训 冠军 WIDER Face Challenge 2018 [33], 我们 也 替换 所有 3  卷积 layerswithin 外侧 连接 和 上下文 模块 变形 卷积 网络 (DCN) [9, 74 ], 进一步 加强 非 刚性 的 上下文 建模 capacity.从WIDER Face Challenge 2018 [33]的冠军中汲取教训,我们还通过可变形卷积网络(DCN)[9,74]替换横向连接和上下文模块中的所有3x3卷积层,这进一步加强了非刚性的上下文建模能力。

    损失头:对于负acnhors,只应用分类损失。对于正anchors,计算了多任务损失。我们使用 一 个跨越不同特征图   的共享损失头 (1x1 conv);对于网格解码器(mesh decoder),我们采用了预训练模型[70],这是一个很小的计算开销,允许有效的推理。

 

    Anchor 设置:如表2所示,我们在特性金字塔levels(从P2到P6)上使用特定于尺度的anchor,类似[56]。在这里,P2被设计成通过平铺小anchor来捕捉微小的人脸,这样做的代价是花费更多的计算时间和更多的误报风险。我们将scale step设置为,aspect ratio设置为1:1。输入 图像 大小 为 640*640 , anchors可以 覆盖 从16x16 到 406x406的特征金字塔levels。总共有102300个anchors,其中75%来自P2。

表2。特征金字塔的细节,RetinaNet中的步幅大小,ancho配置r。输入图像为 640*640 ,共有102300 个anchors, 75%的anchors平铺在P2上。 

    在训练过程中,当IoU大于0.5时,anchors匹配到ground-truth box,当IoU小于0.3时匹配到background。不匹配的锚在训练中被忽略。由于大多数anchor(> 99%)在匹配步骤后为负,我们采用标准OHEM[47,68]来缓解正、负训练样本之间的显著不平衡。更具体地说,我们根据损失值对负锚进行排序,并选择损失最大的anchors,这样负样本和正样本之间的比例至少为3:1。

    数据增强:由于WIDER FACE训练集中大约 有 20% 的小人脸  , 我们 遵循 [68, 49 ) 并从 原始 图像随机crop方形patches并调整 这些 patches到 640*640 产生 更 大 的 训练人脸。更具体地说,在原始图像的短边[0.3,1]之间随机裁剪正方形patches。对于crop边界上的人脸,如果面盒的中心在crop  patches内,则保持面boxes的重叠部分。除了随机裁剪,我们还通过0.5概率的随机水平翻转和光度颜色蒸馏来增加训练数据[68]。

    训练细节:我们使用 SGD 优化 器 (momentum为0.9, 权重衰减为0.0005, batch size为8*4 )训练 RetinaFace 。采用 四 个 NVIDIA Tesla P40 (24GB) GPUs.学习速率从10-3,在5个epoch后上升到10-2,然后在第55和第68个epochs时除以10。训练过程在第80个epochs结束。

    测试细节:对于WIDER FACE的测试,我们遵循[36,68]的标准做法,采用flip以及多尺度(图像的短边在[500, 800, 1100, 1400, 1700])策略。使用IoU阈值为0.4,将Box voting[15]应用于预测的人脸boxes的并集。

 

Epoch 1/20 98/98 ━━━━━━━━━━━━━━━━━━━━ 0s 552ms/step - dense_3_accuracy: 0.0282 - dense_3_loss: 3.5552 - dense_4_accuracy: 0.0313 - dense_4_loss: 3.5419 - dense_5_accuracy: 0.0259 - dense_5_loss: 3.5605 - dense_6_accuracy: 0.0296 - dense_6_loss: 3.5452 - loss: 14.2645 Epoch 0 - 验证集全匹配准确率: 0.0000 98/98 ━━━━━━━━━━━━━━━━━━━━ 62s 575ms/step - dense_3_accuracy: 0.0283 - dense_3_loss: 3.5550 - dense_4_accuracy: 0.0314 - dense_4_loss: 3.5417 - dense_5_accuracy: 0.0259 - dense_5_loss: 3.5602 - dense_6_accuracy: 0.0296 - dense_6_loss: 3.5450 - loss: 14.2641 - val_dense_3_accuracy: 0.0333 - val_dense_3_loss: 3.5351 - val_dense_4_accuracy: 0.0333 - val_dense_4_loss: 3.5258 - val_dense_5_accuracy: 0.0400 - val_dense_5_loss: 3.5363 - val_dense_6_accuracy: 0.0333 - val_dense_6_loss: 3.5032 - val_loss: 14.2117 - learning_rate: 0.0010 - val_full_match_accuracy: 0.0000e+00 Epoch 2/20 98/98 ━━━━━━━━━━━━━━━━━━━━ 0s 547ms/step - dense_3_accuracy: 0.0283 - dense_3_loss: 3.5009 - dense_4_accuracy: 0.0306 - dense_4_loss: 3.4942 - dense_5_accuracy: 0.0378 - dense_5_loss: 3.4964 - dense_6_accuracy: 0.0378 - dense_6_loss: 3.4986 - loss: 14.0956 Epoch 1 - 验证集全匹配准确率: 0.0000 98/98 ━━━━━━━━━━━━━━━━━━━━ 54s 552ms/step - dense_3_accuracy: 0.0283 - dense_3_loss: 3.5009 - dense_4_accuracy: 0.0306 - dense_4_loss: 3.4942 - dense_5_accuracy: 0.0377 - dense_5_loss: 3.4964 - dense_6_accuracy: 0.0378 - dense_6_loss: 3.4986 - loss: 14.0954 - val_dense_3_accuracy: 0.0267 - val_dense_3_loss: 3.5849 - val_dense_4_accuracy: 0.0133 - val_dense_4_loss: 3.5698 - val_dense_5_accuracy: 0.0067 - val_dense_5_loss: 3.6506 - val_dense_6_accuracy: 0.0267 - val_dense_6_loss: 3.5626 - val_loss: 14.4254 - learning_rate: 0.0010 - val_full_match_accuracy: 0.0000e+00 Epoch 3/20 98/98 ━━━━━━━━━━━━━━━━━━━━ 0s 554ms/step - dense_3_accuracy: 0.0324 - dense_3_loss: 3.4974 - dense_4_accuracy: 0.0315 - dense_4_loss: 3.4956 - dense_5_accuracy: 0.0398 - dense_5_loss: 3.4950 - dense_6_accuracy: 0.0274 - dense_6_loss: 3.4961 - loss: 14.0531 Epoch 2 - 验证集全匹配准确率: 0.0000 98/98 ━━━━━━━━━━━━━━━━━━━━ 55s 559ms/step - dense_3_accuracy: 0.0324 - dense_3_loss: 3.4974 - dense_4_accuracy: 0.0315 - dense_4_loss: 3.4956 - dense_5_accuracy: 0.0398 - dense_5_loss: 3.4950 - dense_6_accuracy: 0.0274 - dense_6_loss: 3.4961 - loss: 14.0530 - val_dense_3_accuracy: 0.0067 - val_dense_3_loss: 3.5379 - val_dense_4_accuracy: 0.0400 - val_dense_4_loss: 3.5454 - val_dense_5_accuracy: 0.0067 - val_dense_5_loss: 3.6164 - val_dense_6_accuracy: 0.0400 - val_dense_6_loss: 3.5071 - val_loss: 14.2812 - learning_rate: 0.0010 - val_full_match_accuracy: 0.0000e+00
最新发布
05-29
<think>嗯,用户想分析深度学习模型训练过程中Dense层的准确率和损失值变化。首先,我需要回忆一下Dense层的作用。Dense层是全连接层,负责整合前面层的特征,进行非线性变换,所以它的参数变化会影响整个模型的性能。接下来,用户可能想知道准确率和损失值在训练过程中如何变化,以及Dense层的设计如何影响这些指标。 我得先考虑训练初期的情况。这时候,模型参数是随机初始化的,准确率低,损失值高。可能用户会想知道为什么一开始准确率不高,是不是初始化的问题。然后,随着训练的进行,参数逐渐调整,准确率上升,损失下降。这时候可能需要解释梯度下降和反向传播的作用,尤其是Dense层如何通过优化算法更新权重。然后,用户可能关心过拟合的情况。比如,训练准确率继续上升,但验证准确率停滞或下降,这时候损失值可能开始上升。这时候需要提到正则化方法,比如Dropout或L2正则化,以及如何调整Dense层的节点数或层数来防止过拟合。另外,激活函数的选择也很重要。比如使用ReLU可能比Sigmoid更好,避免梯度消失,尤其是在深层网络中。还要考虑批量归一化(BatchNorm)对训练稳定性的影响,可能用户想知道为什么在Dense层后面加BN层会加速收敛。 用户提供的引用中有提到优化算法、损失函数、准确率评估等,可能需要结合这些信息。比如引用[2]提到损失函数计算预测和真实值的差异,反向传播更新参数。引用[4]中的history对象记录了训练过程中的loss和准确率,可以用来画图分析。还有引用[5]提到DenseNet的特征重用,可能和Dense层的设计有关联。用户可能还希望知道如何具体分析这些变化,比如通过TensorBoard或matplotlib绘制训练曲线。需要给出代码示例,展示如何从history中提取数据并可视化。此外,可能需要解释为什么有时候损失值下降但准确率停滞,比如在分类任务中,模型可能还在调整决策边界,而准确率需要一段时间才会反映出来。 还要考虑不同超参数的影响,比如学习率过大可能导致损失值震荡,过小则收敛慢。Dense层的节点数过多可能增加过拟合风险,节点数太少则模型容量不足。这些因素都会影响准确率和损失值的变化趋势。 最后,用户可能需要优化建议,比如调整层数、节点数,使用正则化,选择合适的学习率和优化器。需要结合引用中的内容,如引用[3]提到的优化器和损失函数选择,引用[5]中的DenseNet结构设计,来给出具体的建议。</think>### 深度学习模型训练中Dense层对准确率和损失值的影响分析 #### 1. Dense层的作用与训练动态 Dense层(全连接层)是深度学习模型中负责特征整合和非线性变换的核心组件。其参数更新过程直接影响损失值和准确率的变化: - **训练初期**:随机初始化的权重会导致输出不稳定,此时准确率较低(例如$50\%$以下),损失值较高(例如分类任务中交叉熵损失$>1.0$)[^2] - **中期优化**:通过反向传播算法,Dense层权重逐步调整,损失值呈现稳定下降趋势,准确率开始快速提升 - **后期收敛**:当模型接近最优解时,损失值下降速度减缓,准确率趋于稳定(可能伴随验证集过拟合现象) #### 2. 典型变化曲线分析 使用TensorFlow/Keras的`history`对象可获取训练过程数据: ```python import matplotlib.pyplot as plt plt.figure(figsize=(12,4)) plt.subplot(1,2,1) plt.plot(history.history['accuracy'], label='Train Acc') plt.plot(history.history['val_accuracy'], label='Val Acc') plt.title('Accuracy Curves') plt.subplot(1,2,2) plt.plot(history.history['loss'], label='Train Loss') plt.plot(history.history['val_loss'], label='Val Loss') plt.title('Loss Curves') ``` ##### 健康训练状态特征: - 训练/验证准确率同步上升 - 训练/验证损失同步下降 - 最终验证准确率接近训练准确率(差距$<5\%$) ##### 异常情况分析: | 现象 | 可能原因 | 解决方案 | |-------|---------|---------| | 训练准确率高但验证准确率低 | Dense层过拟合 | 增加Dropout层/L2正则化 | | 损失值震荡不收敛 | 学习率过大 | 降低学习率或使用自适应优化器 | | 准确率长期停滞 | 层数不足/激活函数失效 | 增加Dense层数/改用ReLU | #### 3. Dense层设计优化建议 1. **激活函数选择**: - 中间层推荐使用ReLU:$f(x) = \max(0,x)$,缓解梯度消失问题 - 输出层根据任务选择Softmax(分类)或Linear(回归) 2. **参数初始化**: - He初始化:$W \sim \mathcal{N}(0, \sqrt{2/n_{in}})$,适合ReLU激活函数 - Xavier初始化:$W \sim \mathcal{N}(0, \sqrt{1/n_{in}})$,适合Sigmoid/Tanh 3. **批量归一化实践**: 在Dense层后添加BatchNorm层可加速收敛: ```python model.add(Dense(256)) model.add(BatchNormalization()) model.add(Activation('relu')) ``` #### 4. 案例分析:CIFAR10数据集上的DenseNet表现 引用[^5]中DenseNet在CIFAR10上达到$90.07\%$测试准确率,其成功原因包括: - 密集连接结构增强梯度流动 - 特征重用机制提升参数效率 - Transition层控制特征图尺寸 $$ \text{DenseBlock输出} = \bigoplus_{i=0}^{L}H_l([x_0,x_1,...,x_{l-1}]) $$ 其中$H_l(\cdot)$表示第$l$层的非线性变换,$\oplus$表示通道拼接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值