
简介这份文档是第六届中国研究生人工智能创新大赛华为专项赛题的官方说明材料面向准备参赛的研究生团队及指导教师帮助其准确理解赛题方向与评审要求。内容围绕两道赛题展开赛题一聚焦未知无规则缺陷图像检测涉及有限小样本训练、模型参数量与推理效率约束、多缺陷分类与分割及可解释性文档等要求赛题二关注样本稀疏场景下的数值类预测涵盖转化样本稀疏、转化延迟与新广告冷启等广告推荐难题并给出参考数据集与文献。资源包共1个docx文件约576KB篇幅紧凑但信息密度较高包含题目描述、具体要求、评分构成、咨询邮箱与参考资料等完整条目。已有189人学习下载适合需要快速把握赛题要点、规划技术路线与备赛节奏的参赛者参考。1. 七道赛题拆开看这份文档到底能帮你省下多少试错时间拿到一份 17 页的赛题文档多数人的第一反应是通读一遍然后开始焦虑——七个方向横跨工业缺陷检测、广告转化预估、Agent 设备控制、大模型安全对抗、细粒度宠物识别、AI 辅助开发和图像质量评估每一个单拎出来都够一个团队啃半年。这份文档的价值不在于“告诉你有哪些题”而在于它把每道题的评分权重、硬性约束和参考基线都写死了等于提前把出题人的底牌摊在桌面上。对准备参赛的研究生团队来说它解决的核心问题是在有限的人力和算力下怎么选一道“投入产出比最高”的题以及选定之后怎么按评分规则倒推技术方案。适合正在做赛题选型、需要快速判断技术路线可行性的从业者和学生团队也适合想了解工业界真实 AI 落地约束的人当参考材料读。2. 赛题一与赛题五视觉检测类题目的选型逻辑与复现路径视觉类两道题——未知缺陷检测和细粒度猫狗识别——表面上一个偏工业、一个偏消费场景但底层约束高度相似小样本、轻量化、泛化性。把它们放在一起拆是因为选型时经常要在“精度优先”和“规模优先”之间做取舍而这两道题的评分规则恰好给出了两种不同的答案。2.1 未知缺陷检测为什么无监督范式比有监督更贴合赛题赛题一的核心矛盾写得很直白缺陷种类未知、真实样本有限、模型参数量和数量都要压。这三条约束叠加起来基本排除了“收集大量标注数据训一个大分类器”的路子。文档给的参考文献里ReConPatch、EfficientAD 和 Cascade Patch Retrieval 三篇都指向同一个范式——基于正常样本建模、推理时用重建或特征距离找异常。这个选择不是赶时髦而是被约束逼出来的只有正常样本充足、异常样本稀缺且不可枚举时无监督异常检测才是唯一能同时满足“未知缺陷”和“小样本”的方案。具体到实现我一般会走“特征提取 正常样本分布建模 异常图生成”这条线。以 EfficientAD 的思路为例它用轻量教师-学生网络做特征蒸馏学生网络在正常样本上拟合教师输出推理时学生无法复现的区域即为异常。参数量能压到几兆级别单张推理在毫秒级正好对上赛题“参数量不宜过大、考虑单张推理效率”的要求。下面是一段基于特征记忆库的异常检测骨架代码用常见做法搭的不是官方实现import torch import torch.nn.functional as F from torchvision import models # 用预训练骨干提取多尺度特征backbone 选轻量的参数量可控 backbone models.resnet18(pretrainedTrue) backbone.fc torch.nn.Identity() backbone.eval() def extract_features(imgs): # 取 layer2 和 layer3 的输出兼顾语义和空间分辨率 feats [] x imgs for name, module in backbone.named_children(): x module(x) if name in (layer2, layer3): feats.append(x) return feats class MemoryBank: def __init__(self, feat_dim, capacity5000): self.bank torch.zeros(capacity, feat_dim) self.ptr 0 self.capacity capacity def update(self, feats): # feats: [N, C, H, W] - 展平成 patch 级特征入池 patches feats.permute(0, 2, 3, 1).reshape(-1, feats.size(1)) n patches.size(0) end min(self.ptr n, self.capacity) self.bank[self.ptr:end] patches[:end - self.ptr] self.ptr end % self.capacity def score(self, feats): # 每个 patch 到记忆库最近邻的余弦距离作为异常分 patches feats.permute(0, 2, 3, 1).reshape(-1, feats.size(1)) patches F.normalize(patches, dim1) bank F.normalize(self.bank, dim1) sim patches bank.T return 1 - sim.max(dim1).values这段代码的逻辑是正常样本过骨干网络拿 patch 级特征存进记忆库推理时算每个 patch 与库内特征的最近邻相似度相似度低的就是异常区域。参数上capacity控制记忆库大小太小会漏检、太大会拖慢推理一般按正常样本 patch 总数的 10% 到 20% 采样layer2和layer3的选择是权衡——浅层分辨率高但语义弱深层语义强但空间粗两个都用再上采样融合是常见做法。赛题要求输出分割结果图和分类标签异常图阈值化后连通域分析就能出分割标签则按缺陷形态淡斑、亮线、多区域、划伤用规则或聚类命名文档里也说了标签命名可自行选择。提示赛题明确要求“模型数量越少越好”别为了每类缺陷训一个模型单模型多尺度输出是更稳的路线。2.2 细粒度猫狗识别50MB 硬约束下的轻量化取舍赛题五的评分表值得逐项看品种识别 15%、个体识别 30%、模型规模 15%、人工评分 40%。个体识别权重是品种的两倍说明出题人更看重“两张照片是不是同一只”这个度量学习任务而不是单纯分类。50MB 的模型上限是硬门槛超了按超出程度扣分这条直接决定了骨干网络选型——ResNet50 的权重文件就接近 100MB基本出局得往 MobileNetV3、EfficientNet-B0 或者蒸馏后的小模型走。个体识别的常见做法是特征向量加距离判别训练时用 ArcFace 或 Triplet Loss 把同一只宠物的特征拉近、不同个体推远推理时算余弦距离比阈值。这里有个容易翻车的点——品种识别和个体识别如果各训一个模型总规模很容易超 50MB所以更稳的是共享骨干、双头输出或者用一个大模型蒸馏出一个小模型同时干两件事。下面是一个共享骨干的双任务头结构示意import torch.nn as nn from torchvision.models import mobilenet_v3_small class PetNet(nn.Module): def __init__(self, num_breeds37, embed_dim128): super().__init__() # 轻量骨干权重文件约 10MB 量级给双头留足预算 self.backbone mobilenet_v3_small(pretrainedTrue).features feat_dim 576 # mobilenet_v3_small 最后一层通道数 self.pool nn.AdaptiveAvgPool2d(1) # 品种分类头 self.breed_head nn.Linear(feat_dim, num_breeds) # 个体识别头输出归一化特征向量 self.id_head nn.Linear(feat_dim, embed_dim) def forward(self, x): f self.pool(self.backbone(x)).flatten(1) breed_logits self.breed_head(f) id_feat nn.functional.normalize(self.id_head(f), dim1) return breed_logits, id_featnum_breeds按参考数据集的品种定义填embed_dim一般 128 或 256太大反而在样本少时过拟合。训练时两个损失加权求和品种用交叉熵、个体用 ArcFace权重比大概 1:2跟评分权重对齐。模型规模控制上导出.pth或.onnx后要实际量文件大小别只看参数量——BN 层和优化器状态不算进推理文件但有些导出方式会把多余的东西带进去。赛题还提到输入建议 224×224、同分时比推断时延所以推理前处理别搞太复杂 resize 加归一化就够了。注意文档明确禁止用开源测试集训练个体识别部分要自己构造样本对训练集和测试集的个体不能有重叠否则人工审核阶段容易被判违规。3. 赛题二与赛题七预测与评估类题目的数据工程与指标对齐这两道题一个是广告 CVR 预估、一个是图像质量评估技术栈差得远但共同点是“指标定义决定方案设计”。赛题二的正负样本比 1:10000、赛题七的 PLCC/SROCC 逼近 1这些数字不是摆设是倒推模型结构和训练策略的起点。3.1 样本稀疏下的 CVR 预估从假负样本到延迟反馈建模赛题二把三个挑战列得很清楚转化样本稀疏、转化延迟导致假负样本、新广告冷启。1:10000 的正负比意味着哪怕模型把所有样本判负准确率也有 99.99%所以评估指标绝不能用准确率得用 AUC 或 GAUC 这类排序指标。文档参考文献里 ESMM 和延迟反馈那两篇是绕不开的基线——ESMM 用 CTR 和 CTCVR 两个辅助任务缓解样本选择偏差延迟反馈则要把“还没转化”和“确定不转化”区分开。实操上我一般会先搭一个 ESMM 骨架跑通数据管道再叠加延迟反馈窗口。下面是一段简化的 ESMM 双塔结构import torch import torch.nn as nn class ESMM(nn.Module): def __init__(self, num_fields, embed_dim16): super().__init__() # 稀疏特征 embeddingnum_fields 是特征域数量 self.embeds nn.ModuleList([nn.Embedding(1000, embed_dim) for _ in range(num_fields)]) input_dim num_fields * embed_dim # CTR 塔和 CVR 塔共享底层 embedding各自独立 MLP self.ctr_tower nn.Sequential(nn.Linear(input_dim, 128), nn.ReLU(), nn.Linear(128, 1)) self.cvr_tower nn.Sequential(nn.Linear(input_dim, 128), nn.ReLU(), nn.Linear(128, 1)) def forward(self, x): # x: [B, num_fields] 的离散特征索引 emb torch.cat([e(x[:, i]) for i, e in enumerate(self.embeds)], dim1) p_ctr torch.sigmoid(self.ctr_tower(emb)) p_cvr torch.sigmoid(self.cvr_tower(emb)) # CTCVR CTR * CVR用全空间样本训练缓解样本选择偏差 p_ctcvr p_ctr * p_cvr return p_ctr, p_cvr, p_ctcvrnum_fields和 embedding 维度按实际特征表调整1000 只是占位。损失函数上CTR 用全曝光样本算 BCECTCVR 用点击样本算 BCECVR 本身不直接监督——这是 ESMM 的核心 trick靠 CTCVR 的梯度回传间接学 CVR。延迟反馈的处理常见做法是给每个样本加一个“观察窗口”窗口内未转化的样本在训练时降权或标记为未知而不是直接当负样本。新广告冷启则靠特征侧的类目、素材 embedding 兜底别让模型对广告 ID 过拟合。提示赛题给了天池的参考数据集但正负比和线上不一定一致训练前先统计一遍实际分布重采样或 focal loss 的强度按真实比例调。3.2 图像质量评估PLCC 与 SROCC 的优化不是调模型而是调映射赛题七的评分逻辑跟一般回归任务不一样PLCC 衡量预测分和 MOS 的线性相关SROCC 衡量单调性。这意味着模型输出的绝对数值不重要重要的是排序对不对、以及能不能经过一个单调映射后跟主观分对齐。很多人上来就堆更深的网络结果 SROCC 上去了 PLCC 卡住问题往往出在最后没做非线性映射。标准做法是模型输出客观分后用五参数 logistic 函数拟合到 MOS 空间再算 PLCC。这个映射不参与训练只在评估时做。下面是一段映射和指标计算的代码import numpy as np from scipy.optimize import curve_fit from scipy.stats import pearsonr, spearmanr def logistic_map(x, b1, b2, b3, b4, b5): # 五参数 logisticIQA 领域常用的非线性映射 return b1 * (0.5 - 1 / (1 np.exp(b2 * (x - b3)))) b4 * x b5 def evaluate(preds, mos): # 先拟合映射参数再算 PLCCSROCC 不受单调映射影响直接算 popt, _ curve_fit(logistic_map, preds, mos, maxfev10000, p0[max(mos), 0.1, np.mean(preds), 0.1, np.mean(mos)]) mapped logistic_map(preds, *popt) plcc pearsonr(mapped, mos)[0] srocc spearmanr(preds, mos)[0] return plcc, sroccp0的初值给不好curve_fit容易不收敛按 MOS 的均值和预测分均值给是个稳妥起点。赛题要求输出五个维度综合、噪声、细节、色彩、对比度各自的分数等于要训五个回归头或者一个多头模型每个维度独立算 PLCC/SROCC 再排序。数据侧PIPAL 是主要训练集但文档说了验证测试集包含业务真实数据脱敏合成所以训练时别只盯着 GAN 失真自然失真样本也要掺进去否则泛化到真实场景会掉分。另外赛题约定只能用 CPU、不允许额外数据模型选型上传统方法如 NIQE、BRISQUE 的特征加轻量回归头反而比大网络更稳推理耗时也占优。4. 赛题三、四、六大模型类题目的工程边界与合规红线这三道题都围绕大模型展开但性质完全不同赛题三是 Agent 工作流设计、赛题四是安全对抗、赛题六是代码生成。放在一起讲是因为它们共享一个工程现实——大模型本身不是你能改的能动的只有外挂的工作流、Prompt 和评估体系。4.1 Agent 设备控制1000 条评估数据集比工作流更难造赛题三要求支持 2000 插件调用、复杂多步规划、泛化到新工具还要自建不少于 1000 条、控制指令不少于 20 的评估数据集。很多人把精力全放在工作流编排上结果评估集造得敷衍人工评分阶段直接暴露。工作流本身常见做法是“意图解析 → 工具检索 → 参数填充 → 执行校验”四段式工具检索用向量召回加规则过滤参数填充靠 LLM 结构化输出加 schema 校验。但真正拉开差距的是评估集的设计1000 条 query 要覆盖单步、多步串行、多步并行、歧义指令、不可执行指令几类每类的占比和评分权重得在方案文档里说清楚。4.2 安全对抗与代码生成约束条件先于算法设计赛题四的评分公式写得很明确总分 攻击成功率 1.5 × 迁移成功率迁移性权重更高。这意味着攻击算法不能只对目标模型过拟合得有跨模型的可迁移结构。文档特别强调不要对线上服务测试所有实验在本地模型上做这条是红线。赛题六则是另一套逻辑打榜 50% 加人工评审 50%评审看复现性、可行性、创新性、可迁移性、实用性所以 Prompt 工程方案要写得能让别人照着复现光有高分结果但流程黑匣子人工分不会好看。注意赛题四涉及对抗攻击所有测试必须在本地部署的模型上进行文档明确禁止针对任何线上服务做测试这条没有商量余地。5. 从评分表倒推方案一份可复用的赛题拆解检查清单七道题拆完真正能带走的方法论其实是一套“从评分规则倒推技术决策”的流程。我踩过的坑是先埋头调模型等精度上去了才发现模型规模超了、推理时延不达标、或者评估集构造不合规回头返工的成本远大于前期多花半天读规则。下面这张表是我现在拆任何赛题都会先填一遍的检查项按赛题类型给了对应的关注点检查项视觉检测类题一/五预测评估类题二/七大模型类题三/四/六硬性约束参数量、模型数、文件大小可用数据范围、CPU/GPU 限制插件规模、测试环境限制主指标IoU、识别准确率AUC/GAUC、PLCC/SROCC成功率、迁移率、打榜分权重陷阱精度权重最高但规模扣分排序指标优先于绝对误差人工评审占比高文档即分数合规红线测试集不得参与训练不得使用官方外数据不得测试线上服务交付物代码、说明文档、分割图output.txt、readme.txt代码、方案文档、演示视频这张表的价值在于把“读文档”变成“填表”填完基本就知道方案该往哪个方向偏。比如赛题五的模型规模占 15% 且超限扣分那骨干网络选型就得在精度和文件大小之间做帕累托取舍而不是先训到最高精度再压缩赛题七的 PLCC 依赖后处理映射那训练阶段就不用纠结输出尺度把排序学好就行。还有一个习惯是每道题先跑一个“最小可提交版本”——能出结果、能按格式输出、能过一遍评估脚本哪怕精度很低。这个版本的作用是打通数据管道和提交格式避免最后两天发现输出文件格式不对。从那以后我每次拆赛题都强制先走一遍最小闭环再往上堆模型。希望这份拆解能帮你在选型和落地时少走几个弯路。本文还有配套的精品资源点击获取