尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

中文手写汉字识别:PyTorch CNN结构重设计与数据驱动优化

中文手写汉字识别:PyTorch CNN结构重设计与数据驱动优化 简介本资源是一套面向高校计算机视觉课程设计与期末大作业的中文手写汉字识别实践方案基于PyTorch框架构建轻量级卷积神经网络解决汉字结构复杂、样本多样性高带来的识别难点。压缩包共10个文件366KB含4个核心Python模块数据预处理、HWDB数据集加载、模型定义、训练脚本、1份README说明文档、1张系统结构示意图及3个备份文件覆盖从数据加载、CNN特征提取、分类训练到模型评估的完整流程。已有47人学习下载适合具备Python与深度学习基础的本科生开展课程实践。用户可直接运行train.py启动训练调用预训练模型快速验证效果代码注释详尽内置数据增强策略与标准化处理逻辑便于理解汉字笔画特征建模思路并支持后续模型微调与扩展。1. 项目概述为什么中文手写汉字识别不是“手写数字识别”的简单复制你可能已经跑通过MNIST手写数字识别——10个类别、28×28灰度图、数据干净、结构规整PyTorch里几行nn.Conv2d加nn.MaxPool2d就能轻松达到99%准确率。但当你把同样的网络结构、同样的训练流程套用到“中文手写汉字”上时大概率会得到一个令人沮丧的结果测试准确率卡在30%~45%验证损失反复震荡模型在训练集上过拟合严重而真实手写样本一输入就完全识别错误。这不是你代码写错了而是你踩进了中文字符识别最典型的认知陷阱把“汉字”当成“放大版的阿拉伯数字”来处理。我从2019年开始做教育类OCR工具链前后落地过6个面向中小学作业批改的手写汉字识别模块其中前3个都栽在同一个地方——用ResNet-18直接finetune数据增强只加了随机旋转±10度和亮度抖动结果上线后老师反馈“系统认得‘一’‘二’‘三’但把‘永’认成‘水’把‘藏’认成‘臧’连‘赢’字的上半部分都切丢了”。后来我们花了整整两个月回溯问题根源最终发现中文手写识别的本质不是图像分类问题而是一个融合了字形拓扑建模、笔画时序约束、部件级语义解耦与上下文语义校验的复合任务。它对数据质量、网络结构设计、特征表达粒度和后处理逻辑的要求远超常规CNN能自然承载的范畴。这个项目标题里的三个关键词每一个都藏着硬骨头PyTorch不只是框架选型它决定了你能否灵活实现动态卷积核、自定义梯度裁剪策略、多尺度特征金字塔融合以及最关键的——支持中文字符特有的“部件级注意力掩码”机制卷积神经网络在这里不能照搬ImageNet那一套堆叠式设计必须针对汉字“方块结构笔画密度不均部件可组合性”进行结构重设计比如引入局部感受野可控的Depthwise Separable Conv替代标准Conv或在Stage3插入可学习的Stroke-aware Pooling层中文手写汉字识别的核心难点从来不在“识别”而在“定义识别对象”——是识别单字还是带上下文的词组是否要区分简繁体是否要兼容草书变体这些业务决策会直接反向决定你的数据标注规范、网络输出头设计是Softmax单字分类还是CRF序列标注或是Transformer Decoder生成式输出。所以这篇博文不讲“如何用PyTorch搭一个CNN识别汉字”而是带你拆解当真实场景中的手写汉字以扫描件、手机拍照、平板手写三种形态涌入系统时如何让CNN真正“看懂”汉字的结构逻辑而不是靠大数据暴力拟合像素统计规律。我会从数据构建的底层矛盾讲起到网络结构中那些被论文忽略却决定成败的细节设计再到部署时GPU显存与推理延迟的真实博弈——所有内容都来自我们给某省级智慧教育平台交付的V3.2版本识别引擎的实操记录。如果你正卡在准确率瓶颈、泛化性差、或者部署后响应慢的问题上这篇就是为你写的。2. 数据构建与预处理没有高质量数据再深的网络也是空中楼阁2.1 中文手写数据的三大“原罪”与真实解决方案几乎所有初学者都会跳进的第一个坑直接下载公开数据集如CASIA-HWDB、ICDAR2013就开始训练。结果是模型在测试集上表现尚可一放到真实作业本照片上就崩盘。根本原因在于——公开数据集与真实场景存在系统性偏差。我们做过对比实验同一套ResNet-18模型在CASIA-HWDB测试集上准确率92.7%但在采集自3所中学的1200份真实作业扫描件上准确率骤降至58.3%。偏差来源有三提示这三大偏差不是“数据量不够”的问题而是数据生成机制与真实场景的根本错位必须针对性设计预处理与合成策略。第一原罪书写载体失真CASIA-HWDB是用数位板采集的线条干净、无纸张纹理、无阴影、无墨水洇染而真实作业本是A4打印纸圆珠笔/中性笔书写存在明显纸张纤维噪点、边缘阴影、局部墨水堆积尤其“捺”“钩”收笔处、以及扫描仪造成的莫尔条纹。我们用OpenCV做了量化分析真实作业图的高频噪声能量比CASIA高4.7倍且集中在0.8~1.2mm波长区间对应纸张纤维直径。解决方案不是简单加高斯模糊——那会抹掉关键笔画细节。我们采用双通道自适应滤波主通道用cv2.ximgproc.guidedFilter以原始图像为引导图对去噪后图像做边缘保持平滑窗口大小设为min(32, int(0.03 * min(h,w)))确保滤波强度随图像分辨率自适应辅助通道提取图像梯度幅值图用Otsu阈值二值化后做形态学闭运算kernel3×3生成“强笔画掩码”在后续归一化时对该区域保留更高对比度。第二原罪字体风格单一CASIA-HWDB中92%样本为楷体规范书写而真实学生作业中存在大量连笔、缩放、倾斜、部件省略如“辶”写成三点、甚至自创符号如用“→”代替“所以”。更致命的是同一班级学生的书写风格高度同质化——这导致模型学到的是“某班学生笔迹特征”而非“汉字结构特征”。我们的破局点是构建“风格扰动三元组”基础样本从CASIA中抽取5000个常用字覆盖GB2312一级字库风格迁移样本用StyleGAN2-ADA微调以某中学100份作业扫描件为风格域生成10万张带该校学生笔迹特征的合成字结构扰动样本对每个基础字用OpenCV模拟5种扰动① 水平方向弹性拉伸±15%模拟手写不稳② 笔画末端添加0.5~1.2px随机毛刺模拟圆珠笔打滑③ 关键连接点如“口”的右下角做0.3px偏移模拟书写压力不均④ 局部区域对比度降低至0.6模拟扫描反光⑤ 添加0.8px宽度的“虚线化”效果模拟铅笔淡写。每种扰动单独生成不叠加确保每种失真模式被网络独立学习。第三原罪标注粒度粗糙CASIA的标注是“字级框Unicode码”但真实纠错需求需要“部件级定位”。例如学生把“武”写成“戈”“止”系统需指出“戈”部件正确“止”部件应为“丿一弋”。我们为此重构了标注协议采用Label Studio平台要求标注员按《汉字部件规范》GF 0011-2009拆解每个字为原子部件如“赢”拆为“亡、口、月、贝、凡”对每个部件标注最小外接矩形并标记其在字内的相对位置编码如“左上/右上/中/左下/右下”五类同时记录该部件的书写完整性得分0~1分0.7分表示“捺”未写出“贝”的末两横粘连等。这套标注使后续可训练部件级注意力模块将识别错误从“整字替换”降维到“部件修正”。2.2 预处理流水线从原始图像到模型输入的7步不可跳过操作很多教程把预处理简化为“resizenormalize”但在中文手写场景下这7个步骤缺一不可且顺序严格光照归一化Lighting Normalization使用cv2.createCLAHE(clipLimit2.0, tileGridSize(8,8))对灰度图做自适应直方图均衡。注意clipLimit必须≤2.0否则会放大纸张纹理噪声tileGridSize设为(8,8)而非默认(4,4)避免在小字如批注上产生块状伪影。二值化策略选择不用全局阈值Otsu会把浅色笔画误判为背景也不用固定阈值不同扫描仪差异大。我们采用局部加权阈值法def local_threshold(img): blur cv2.GaussianBlur(img, (5,5), 0) thresh cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) # 对thresh做形态学开运算去噪再与原图做AND保留原始笔画粗细 kernel np.ones((2,2), np.uint8) cleaned cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel) return cv2.bitwise_and(img, cleaned)尺寸标准化非简单resize目标尺寸设为64×64但先检测字的最小外接矩形按长宽比缩放至短边56px再补白至64×64。理由直接resize会扭曲“口”“日”等方形字的纵横比导致CNN混淆而补白位置必须居中非左上角否则破坏汉字“重心居中”的构字规律。笔画宽度归一化统计图像中所有连通域的平均宽度用cv2.minAreaRect计算最小外接矩形短边若1.2px则用cv2.dilate膨胀1次kernel3×3若2.8px则用cv2.erode腐蚀1次。这是为了消除不同书写工具铅笔细、中性笔粗带来的特征尺度差异。方向校正计算图像主方向用PCA对所有前景像素坐标做主成分分析旋转角度限制在±5°内。超过此范围视为“严重倾斜”直接丢弃该样本——因为真实作业中极少出现5°的系统性倾斜超出说明扫描摆放严重失误不应作为训练样本。对比度增强对归一化后的图像执行skimage.exposure.adjust_sigmoid(img, cutoff0.2, gain10)。cutoff0.2确保背景灰度值被压至接近0gain10保证笔画区域对比度足够驱动CNN梯度更新。PyTorch Tensor转换与归一化transforms.Compose([ transforms.ToTensor(), # 自动转为[0,1]范围 transforms.Normalize(mean[0.12], std[0.23]) # 这组参数来自我们10万张真实作业的统计值 ])注意mean/std不是ImageNet的[0.485,0.456,0.406]单通道灰度图的均值必须重新统计。我们实测0.12/0.23比0.5/0.5提升验证集准确率2.3个百分点。2.3 数据集划分的隐藏陷阱与实操建议常见错误按8:1:1随机划分训练/验证/测试集。问题在于——同一书写者的样本被分散到三个集合中导致验证集指标虚高。我们采用书写者隔离划分Writer-Independent Split将所有样本按书写者ID分组CASIA中每个书写者有唯一ID真实数据通过作业本页眉信息关联随机选取70%的书写者作为训练集20%为验证集10%为测试集确保每个集合中覆盖全部2500个常用字GB2312一级字库且每个字在训练集至少出现30次。这样做的代价是训练集规模减少约15%但验证集准确率下降仅0.4%而上线后真实场景准确率提升6.8%——因为模型真正学会了泛化到新书写者而非记忆特定笔迹。注意在PyTorch DataLoader中必须重写__getitem__方法确保同书写者的样本不会因shuffle被混入同一批次batch否则BatchNorm统计量会被污染。我们采用torch.utils.data.Sampler自定义采样器按书写者ID分组采样。3. 网络结构设计为什么标准CNN在汉字识别上“力不从心”3.1 标准CNN的四大结构性缺陷与改造思路当你把ResNet-18或VGG16直接用于中文手写识别时会遭遇四个无法绕过的瓶颈它们源于汉字与拉丁字母/数字的本质差异缺陷类型具体表现根本原因改造方向感受野错配网络早期层conv1/conv2对“点”“横”“竖”等基础笔画响应弱晚期层layer4对“宀”“辶”等复杂部件定位不准标准CNN感受野随层数指数增长而汉字关键特征分布在多尺度笔画0.5mm、部件2~3mm、整字5~8mm引入FPNFeature Pyramid Network结构强制网络在C2/C3/C4层分别输出对应尺度的特征图通道冗余64通道的conv1中近40%通道对汉字几乎无响应可视化显示为全零或噪声单通道卷积核难以同时捕获“横折钩”的锐利转折与“捺”的渐变粗细采用Group Convolution将输入通道分组每组学习特定笔画类型横/竖/折/点/捺空间不变性过度模型把“木”和“本”识别为同一类因二者像素分布相似无法利用“一横在上/下”的位置信息CNN的Pooling操作丢弃绝对位置而汉字部件位置是判别核心如“清”与“倩”仅差“青”的位置在C3层后插入Positional Encoding模块将(x,y)坐标编码为2通道附加特征类别不平衡放大“一”“二”“三”等高频字准确率99%而“齉”“鬻”等生僻字准确率10%且训练后期loss不再下降标准CrossEntropy Loss对尾部类别梯度衰减严重改用Focal Lossγ2.0α0.25重点强化难样本学习我们基于ResNet-18骨架实施了上述四点改造命名为HanResNet。下面详解每个模块的实现细节与参数选择依据。3.2 HanResNet核心模块详解从理论到代码的完整实现3.2.1 多尺度特征金字塔FPN的轻量化实现标准FPN计算开销大不适合端侧部署。我们设计了Lite-FPN输入C2H/4×W/4×64、C3H/8×W/8×128、C4H/16×W/16×256三层特征图操作C4经1×1 conv降维至128通道再上采样2×双线性插值与C3逐元素相加Add再经3×3 conv128→128输出结果上采样2×与C2相加再经3×3 conv128→128关键创新所有上采样均使用nn.Upsample(scale_factor2, modebilinear, align_cornersFalse)而非转置卷积——实测在Jetson Nano上提速17%显存占用降低23%且无棋盘效应伪影。class LiteFPN(nn.Module): def __init__(self, in_channels[64,128,256]): super().__init__() self.lat2 nn.Conv2d(in_channels[0], 128, 1) # C2 self.lat3 nn.Conv2d(in_channels[1], 128, 1) # C3 self.lat4 nn.Conv2d(in_channels[2], 128, 1) # C4 self.smooth2 nn.Conv2d(128, 128, 3, padding1) self.smooth3 nn.Conv2d(128, 128, 3, padding1) def forward(self, c2, c3, c4): p4 self.lat4(c4) # 128xH/16xW/16 p3 self.lat3(c3) F.interpolate(p4, scale_factor2, modebilinear) # 128xH/8xW/8 p2 self.lat2(c2) F.interpolate(p3, scale_factor2, modebilinear) # 128xH/4xW/4 p2 self.smooth2(p2) p3 self.smooth3(p3) return p2, p3, p43.2.2 笔画感知分组卷积Stroke-Aware Group Conv我们将conv1的64通道分为8组每组8通道每组专攻一种笔画类型Group 0水平线横、提Group 1垂直线竖、撇Group 2折线横折、竖折Group 3点左点、右点、长点Group 4捺平捺、斜捺Group 5钩横钩、竖钩、弯钩Group 6弧线横折弯钩、竖弯钩Group 7复合如“走之底”的连笔分组依据来自《汉字笔画分类标准》GB/T 13000.1-1993的统计分析。实现上只需在nn.Conv2d中设置groups8并初始化权重# 初始化时对每组卷积核施加方向约束 for i, group in enumerate([0,1,2,3,4,5,6,7]): # Group 0横线卷积核中心行权重最大上下行递减 if group 0: weight[i*8:(i1)*8, :, 1, :] torch.randn(8, 1, 3, 3) * 0.1 weight[i*8:(i1)*8, :, 1, :] torch.tensor([[0.3,0.5,0.3]]) # 强化中心行3.2.3 位置编码模块Positional Encoding for Characters我们不采用Transformer式的正弦编码而是设计二维离散位置编码对输入特征图H×W×C生成两个额外通道x_pos: 值为(x / W) * 2 - 1范围[-1,1]y_pos: 值为(y / H) * 2 - 1范围[-1,1]拼接到特征图最后torch.cat([feat, x_pos, y_pos], dim1)优势计算零开销显存增加可忽略仅2通道且与CNN天然兼容。实测在C3层后加入使“清/倩”类字识别准确率提升11.2%。3.2.4 Focal Loss的汉字适配版标准Focal Loss公式为FL(pt) -αt * (1-pt)^γ * log(pt)。我们针对汉字特点调整αt不设为固定值而是根据字频动态计算αt 1 / log(1 freq[t])高频字α小低频字α大γ设为2.0经网格搜索确定过高会导致易样本梯度消失关键改进在计算pt时对预测概率做“部件一致性校正”——若模型预测“赢”为“羸”但“亡”“口”“月”部件匹配度0.8则降低该样本的focal权重避免惩罚过度保守的预测。class HanFocalLoss(nn.Module): def __init__(self, freq_dict, gamma2.0): super().__init__() self.gamma gamma self.alpha {k: 1.0/np.log(1v) for k,v in freq_dict.items()} def forward(self, inputs, targets): ce_loss F.cross_entropy(inputs, targets, reductionnone) pt torch.exp(-ce_loss) # 动态alpha alpha_t torch.tensor([self.alpha[t.item()] for t in targets]) focal_weight alpha_t * ((1-pt) ** self.gamma) return (focal_weight * ce_loss).mean()3.3 Head设计单字分类 vs 序列识别的实战抉择项目标题说“中文手写汉字识别”但没明确是单字还是文本行。这是架构设计的分水岭单字分类Single-Character Classification适用场景印章识别、单字批注、字帖练习评分。Head结构Global Average Pooling → Linear(128→2500) → Softmax。优势简单、快、显存占用低ResNet-18Lite-FPN仅需1.2GB显存。劣势无法处理连笔字如“草书‘为’”、上下文纠错如“已”与“己”需结合前后字判断。序列识别Sequence Recognition适用场景作业题干识别、作文段落OCR、表格内容提取。Head结构Lite-FPN输出p2H/4×W/4×128→ BiLSTM128→256→ Attention Decoder → 字符序列。关键技巧在Attention中加入“部件对齐约束”——Decoder的每个时间步强制Attention权重在对应部件区域由标注的部件框提供内最大化。这使模型学会“先看‘宀’再看‘元’”的阅读顺序。我们最终选择混合Head主分支为单字分类满足90%场景辅分支为序列识别仅对检测到的连笔区域触发。这样平衡了速度与精度实测在Jetson Xavier上单字推理23ms连笔区域序列识别156ms。4. 训练策略与调优让模型真正学会“看字”而非“记图”4.1 学习率调度的汉字特化方案标准OneCycleLR在汉字识别中容易过冲。我们采用三阶段阶梯式调度基于验证集字符错误率CER动态调整Warmup阶段0~20 epochLR从0线性升至0.01此时模型学习基础笔画特征主训练阶段21~80 epochLR固定为0.01但每5 epoch计算一次验证集CER若CER连续2次未下降则LR×0.8精调阶段81~120 epochLR降至0.001启用SWAStochastic Weight Averaging每epoch保存权重最后取最后10个epoch权重平均。关键参数选择依据初始LR0.01经学习率范围测试LR Range Test0.01是损失下降最快的点Warmup20 epoch少于20则笔画特征学习不充分多于20则浪费训练资源SWA窗口10小于10则平均不稳定大于15则显存压力过大需缓存15个模型状态。4.2 数据增强的“有效增强”与“无效增强”清单不是所有增强都提升性能。我们通过消融实验总结出汉字识别的增强黄金法则增强类型是否推荐原因参数建议随机旋转±5°✅ 强烈推荐模拟真实作业轻微倾斜提升鲁棒性transforms.RandomRotation(degrees(-5,5))随机透视变换❌ 禁止汉字是方块结构透视会扭曲部件比例导致“口”变“日”、“田”变“由”—CutOut挖空⚠️ 谨慎使用挖掉“点”“捺”等关键笔画会破坏字义但挖掉背景噪点有效仅对背景区域挖空size8×8prob0.3颜色抖动Brightness/Contrast✅ 推荐模拟不同扫描仪亮度差异transforms.ColorJitter(brightness0.2, contrast0.2)弹性变形ElasticTransform✅ 推荐模拟纸张弯曲导致的笔画拉伸对连笔字泛化至关重要alpha15, sigma3, prob0.5高斯噪声❌ 禁止会淹没细笔画如“丶”且真实作业噪声是结构化的纸纹非高斯—特别提醒所有增强必须在预处理流水线之后、Tensor转换之前应用。否则CLAHE等操作会受噪声干扰失效。4.3 梯度裁剪与优化器选择的实测对比我们对比了AdamW、SGD with Momentum、RMSprop在汉字识别任务上的表现优化器最终验证准确率训练稳定性显存占用推荐指数AdamW (lr0.001)94.2%高loss平稳下降中需存储m/v状态★★★★☆SGD (lr0.01, momentum0.9)93.8%中偶有loss尖峰低仅需momentum★★★★RMSprop (lr0.001)92.5%低loss震荡明显中★★☆最终选择AdamW因其在汉字这种细粒度分类任务上对局部极小值的逃离能力更强。但必须配合梯度裁剪Gradient Clippingtorch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0)max_norm1.0是经过测试的最佳值——大于1.0时笔画细节特征更新过猛导致“横”“竖”混淆小于0.5时生僻字学习停滞。4.4 模型收敛监控不止看Accuracy更要盯住“部件级准确率”标准Accuracy掩盖了深层问题。我们定义部件级准确率Component Accuracy, CA对每个字统计其所有原子部件的识别正确率CA Σ(正确部件数) / Σ(总部件数)在训练中我们监控三个指标整体Accuracy反映最终输出质量CA反映模型对汉字结构的理解深度CA / Accuracy 比值理想值≈1.0若0.8说明模型靠“猜整字”而非“解构部件”获胜。实测发现当CA / Accuracy 0.75时模型已过拟合需立即停止训练并回滚到CA最高的checkpoint。这一指标比单纯看loss下降更早预警过拟合平均提前12个epoch。5. 部署与推理优化从实验室到真实设备的跨越5.1 PyTorch模型导出的避坑指南.pth模型不能直接部署。我们采用TorchScript ONNX双轨导出TorchScript首选适用于PyTorch生态内推理如Jetson、PC端# 导出时必须禁用train()且所有tensor操作需可追踪 model.eval() example_input torch.randn(1,1,64,64) # 单通道灰度图 traced_model torch.jit.trace(model, example_input) traced_model.save(hanresnet_traced.pt)注意若模型含if条件分支如不同尺寸分支必须用torch.jit.script_method装饰否则trace失败。ONNX备选适用于跨框架部署如TensorRT、OpenVINOtorch.onnx.export(model, example_input, hanresnet.onnx, input_names[input], output_names[output], dynamic_axes{input: {0: batch}, output: {0: batch}})关键参数dynamic_axes启用batch size动态否则TensorRT无法做batch inference。5.2 Jetson设备上的显存与速度平衡术在Jetson Nano2GB RAM上原始HanResNet显存占用1.8GB推理延迟142ms无法满足实时批改需求。我们通过三级压缩达成目标模型剪枝Pruning对Lite-FPN的128通道特征图用L1-norm剪枝目标稀疏度40%。实测剪枝后显存降为1.3GB精度损失仅0.3%。INT8量化TensorRTtrtexec --onnxhanresnet.onnx --int8 --workspace2048 --best关键--best启用自动精度校准比手动指定校准集更准--workspace2048设为2GB避免显存不足。推理流水线优化CPU预处理CLAHE、二值化与GPU推理异步执行使用cuda.Stream创建独立流避免默认流阻塞Batch size设为4非1充分利用GPU计算单元。最终成果Jetson Nano上显存占用980MB单字推理延迟29ms34FPS满足课堂实时反馈需求。5.3 中文后处理让识别结果真正“可用”模型输出是概率分布但用户需要的是可编辑文本。我们设计三级后处理字级校验Character-level Validation构建GB2312一级字库的Trie树对Top-3预测字做字形相似度计算用编辑距离笔画数差值过滤掉“戊/戌/戍”等易混字。词级校验Word-level Validation加载《现代汉语词典》词库12万词对连续3字组合查词若无匹配则触发修正若“已知”被识为“已己”但“已己”不在词库而“已知”在则修正使用n-gram语言模型训练自10GB中小学教材文本计算词序列概率。上下文校验Context-level Validation对数学题“解方程2x37”若识别为“2x31”则检查等式左右是否数值合理7-34≠1触发数字修正。这套后处理使端到端字符错误率CER从模型输出的6.2%降至1.8%且无需额外训练纯规则轻量统计。6. 实战问题排查那些文档里不会写的“血泪教训”6.1 常见问题速查表与根因分析问题现象可能根因排查步骤解决方案验证集准确率停滞在60%数据中存在大量“伪标签”如标注员将“茶”标为“荼”1. 随机抽样100个验证样本人工复核标注2. 统计各字标注一致性同一字不同书写者标注是否一致重标注一致性80%的字引入标注仲裁机制训练Loss下降但Accuracy不升损失函数与评估指标不一致如用Focal Loss但Acc只看Top-11. 打印每个batch的loss与acc2. 查看loss下降时acc是否同步上升改用Accuracy-aware loss或在loss中加入acc梯度项Jetson上推理结果全为同一字TensorRT量化时校准集偏差大校准集全是“一”“二”“三”1.本文还有配套的精品资源点击获取
返回列表