简介:这份文档是第六届中国研究生人工智能创新大赛华为专项赛题的官方说明材料,面向准备参赛的研究生团队及指导教师,帮助其准确理解赛题方向与评审要求。内容围绕两道赛题展开:赛题一聚焦未知无规则缺陷图像检测,涉及有限小样本训练、模型参数量与推理效率约束、多缺陷分类与分割及可解释性文档等要求;赛题二关注样本稀疏场景下的数值类预测,涵盖转化样本稀疏、转化延迟与新广告冷启等广告推荐难题,并给出参考数据集与文献。资源包共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(pretrained=True) 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, capacity=5000): 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, dim=1) bank = F.normalize(self.bank, dim=1) sim = patches @ bank.T return 1 - sim.max(dim=1).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_breeds=37, embed_dim=128): super().__init__() # 轻量骨干,权重文件约 10MB 量级,给双头留足预算 self.backbone = mobilenet_v3_small(pretrained=True).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), dim=1) 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_dim=16): super().__init__() # 稀疏特征 embedding,num_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)], dim=1) 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 用全曝光样本算 BCE,CTCVR 用点击样本算 BCE,CVR 本身不直接监督——这是 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): # 五参数 logistic,IQA 领域常用的非线性映射 return b1 * (0.5 - 1 / (1 + np.exp(b2 * (x - b3)))) + b4 * x + b5 def evaluate(preds, mos): # 先拟合映射参数,再算 PLCC;SROCC 不受单调映射影响,直接算 popt, _ = curve_fit(logistic_map, preds, mos, maxfev=10000, 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 依赖后处理映射,那训练阶段就不用纠结输出尺度,把排序学好就行。
还有一个习惯是:每道题先跑一个“最小可提交版本”——能出结果、能按格式输出、能过一遍评估脚本,哪怕精度很低。这个版本的作用是打通数据管道和提交格式,避免最后两天发现输出文件格式不对。从那以后我每次拆赛题都强制先走一遍最小闭环,再往上堆模型。希望这份拆解能帮你在选型和落地时少走几个弯路。
本文还有配套的精品资源,点击获取