手语识别损失函数

当前手语识别训练用的是多分类交叉熵损失函数

python 复制代码
criterion = nn.CrossEntropyLoss()

位置在:

train_sign.py

训练时是这样算的:

python 复制代码
logits = model(keypoints, valid_mask)
loss = criterion(logits, labels)

也就是:

text 复制代码
模型输出 logits: [B, 500]
真实标签 labels: [B]
交叉熵损失 loss

为什么用 CrossEntropyLoss

你的任务是:

text 复制代码
CSL2018 500 类孤立手语识别

每个样本只属于一个类别,比如:

text 复制代码
label = 0
label = 128
label = 499

这是标准的单标签多分类任务,所以用交叉熵是合理的。

logits 是什么

模型最后输出:

text 复制代码
[B, 500]

例如一个 batch 有 32 个样本:

text 复制代码
[32, 500]

每一行是一个样本对 500 个手语类别的原始分数:

text 复制代码
[类别0分数, 类别1分数, ..., 类别499分数]

注意这里不是概率,还没经过 softmax。

CrossEntropyLoss 内部会自动做:

text 复制代码
softmax + negative log likelihood

所以代码里不需要手动写 softmax

labels 是什么

labels 形状是:

text 复制代码
[B]

例如:

python 复制代码
labels = [0, 12, 88, 499]

表示每个样本的真实类别编号。

损失函数想让模型学什么

交叉熵的目标是:

text 复制代码
让真实类别的预测分数尽量高
让其他类别的预测分数尽量低

例如某个样本真实类别是 128,模型输出 500 个类别分数,交叉熵会推动:

text 复制代码
第 128 类分数升高
其他类别分数降低

你的训练输出里的 loss 是什么

例如:

text 复制代码
train_loss=0.2942
val_loss=0.8619

含义是:

text 复制代码
train_loss:训练集平均交叉熵损失
val_loss:验证集平均交叉熵损失

一般来说:

text 复制代码
loss 越低越好
top1 越高越好

但论文里通常主要报告:

text 复制代码
Top-1 Accuracy
Top-5 Accuracy

loss 更多用于观察训练是否收敛、是否过拟合。

当前损失函数有没有改进空间

有。现在是最基础的:

python 复制代码
nn.CrossEntropyLoss()

后续可以考虑:

python 复制代码
nn.CrossEntropyLoss(label_smoothing=0.1)

也就是 label smoothing,标签平滑。

它的作用是缓解模型过度自信,对你这种 500 类任务可能有帮助,尤其你之前出现过:

text 复制代码
train_top1 很高
val_top1 明显低一些

说明有一定过拟合。

不过现在论文实验建议先保持基础交叉熵作为主设置,后续可以把 label smoothing 作为优化实验或正则化实验。

Label Smoothing Cross Entropy 本质上是在防止模型对训练标签过度自信

普通交叉熵里,标签是 one-hot:

text 复制代码
真实类别 = 3

目标分布:
类别0: 0
类别1: 0
类别2: 0
类别3: 1
类别4: 0

也就是说,模型被要求把真实类别概率推到 1.0,其他类别全部推到 0.0

但在手语识别里,很多类别动作很像,关键点也可能有噪声。如果模型被迫对训练样本"绝对自信",就容易记住训练集细节,验证集泛化变差。

Label Smoothing 会把硬标签变软。比如 label_smoothing=0.1,500 类任务里大概变成:

text 复制代码
真实类别: 0.9 左右
其他类别: 分到很小的一点概率

它表达的意思是:

text 复制代码
这个样本主要属于正确类别,但不要认为其他类别概率必须绝对为 0。

对你的项目来说,它主要解决三个问题:

  1. 缓解过拟合

    你之前 FULL 模型训练集 top1 到 98% 左右,验证集停在 82% 左右,说明模型已经很会记训练集了。Label smoothing 会降低这种"死记硬背"。

  2. 降低模型过度自信

    普通 CE 容易让 logits 拉得很大,模型输出非常尖锐。Label smoothing 会让输出分布更平滑。

  3. 适合细粒度相似类别

    手语类别之间可能只有手形、方向、轨迹的一点差异。软标签允许模型保留一点不确定性,更符合这个任务特性。

一句话概括:

普通 Cross Entropy 是"必须百分百相信这个标签";Label Smoothing Cross Entropy 是"相信这个标签,但别过度自信"。

论文里可以这样写:

为缓解孤立手语类别间细粒度相似性和关键点噪声导致的过拟合问题,本文在交叉熵损失中引入标签平滑策略,将硬标签分布转化为软标签分布,从而抑制模型对训练样本的过度置信,提高模型泛化能力。

相关推荐
2601_959982212 小时前
数字化浪潮下的科技商贸融合发展新趋势
人工智能
MemoriKu2 小时前
Flutter 本地 AI 相册工程收口:从屏幕常亮、标签体系到照片属性后台队列
大数据·人工智能·python·flutter·elasticsearch·搜索引擎·数据库架构
带娃的IT创业者2 小时前
GitHub 热门: coleam00/Archon —— 当 AI Agent 学会自我进化
人工智能·github·开源项目·ai agent·智能体·自我进化
云烟成雨TD2 小时前
Agent Scope Java 2.x 系列【11】中间件(Middleware):核心设计
java·人工智能·agent
2401_885665192 小时前
基于OpenCV的模板匹配OCR实战:银行卡与身份证数字识别完整教程
人工智能·python·opencv·计算机视觉·ocr
装不满的克莱因瓶2 小时前
了解3D卷积原理——从空间感知到时空建模的深度学习核心算子
人工智能·pytorch·python·深度学习·机器学习·3d·ai
SuperHeroWu72 小时前
【HarmonyOS 7】鸿蒙应用 AI Coding 工具链 DevEco Code 到 DevEco CLI
人工智能·华为·ai编程·harmonyos·cli·code
虾壳云官方2 小时前
openclaw 一键安装教程(2026年6月15最新)
运维·人工智能·windows·自动化·openclaw
不爱土豆唯爱马铃薯2 小时前
AiPy 是什么?
人工智能