你接手一个已上线的商品图分类模型:底座是 ResNet-50,源域是公开的千类自然图像预训练权重,现在要迁移到 200 类工业零件缺陷分类。目标域标注很少——每类约 50 张、共约 1 万张;数据是灰度、低对比度,并且来自 12 条不同产线的相机,产线之间存在明显域差异。团队想「冻结 backbone 只训最后的分类层,一周上线」。你会怎么做,以及你怎么说服团队?
面试官在考什么
能否判断迁移学习中「冻结多少」这个核心决策在源域-目标域差异与小样本条件下的正确取值,并把域差异转化为可监控、可回滚的工程方案。
回答框架 · 前两步
- 「冻结 backbone 只训分类层」在源域与目标域差异大时(自然图像 → 灰度工业图)通常不够:浅层的边缘/纹理特征可迁移,但中高层的语义与统计分布差异明显,至少应解冻后段 stage 并调整学习率。
- 1 万张、每类 50 张属于小样本迁移:应采用比从头训练小一个量级的学习率、分层学习率(浅层更小)、针对灰度低对比度做对比度/噪声/裁剪类增广,并配合标签平滑与类平衡,避免灾难性遗忘。
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「深度学习基础」方向页
同一能力域的其他题
- 某模块原来是单层 7×7 卷积:输入 56×56×64、输出 56×56×64、stride=1、padding=3。现在候选方案是堆 3 个 3×3 卷积(每层通道都是 64→64、stride=1、padding=1)。请回答:两者的感受野是否相同?参数量之比是多少?FLOPs 之比是多少(按乘法次数算即可)?并说明在什么样的场景下这个替换不划算。
- 在一个移动端实时语义分割任务中,输入 512×512,某阶段特征图为 64×64×128,需要下采样到 32×32×128,同时要尽量保留小目标边界。候选方案:A 3×3 stride=2 conv,padding=1;B 2×2 max pooling stride=2;C 3×3 average pooling stride=2;D 先 1×1 conv 把通道降到 64,再 3×3 stride=2 conv 升回 128。你会选哪种?请给出参数/乘加量级、对边界和小目标的影响,以及部署端算子支持/延迟上的取舍。
- 团队里有人提议把线上检测模型 backbone 中所有 MaxPool 全部换成 stride=2 的 3×3 卷积,理由是「池化丢信息、卷积可学习、精度更高」。模型输入 640×640,backbone 下采样 32 倍,当前在端侧 NPU 上单帧 38ms,业务预算是 33ms(30FPS),INT8 量化部署。作为技术负责人,你会批准、有条件批准还是否决?请给出你的判断依据和决策链。
- 一段 backbone 按顺序是:conv3×3 stride2 → conv3×3 stride1 → maxpool2×2 stride2 → conv3×3 stride1(全部 same padding,无空洞)。最后一层输出上一个像素,对应到输入图像上的理论感受野是多少像素?请写出从后往前的推导过程。另外,把第三层的 maxpool2×2 stride2 换成 conv3×3 stride2,感受野变成多少?
- 在一个分割模型中,输入 512×512,backbone 前几层依次为:3×3 s1、3×3 s2、3×3 s1、2×2 maxpool s2、3×3 s1。请计算最后一个 3×3 输出特征图位置的理论感受野。若大目标直径约 200 像素,仅继续堆 3×3 s1 卷积需要多少层?你会怎么改结构,在计算量、特征图分辨率和感受野之间取舍?
- 你负责一个 512×512 输入的缺陷分割任务,目标尺寸跨度极大:小的约 8×8 像素,大的约 300×300 像素。当前 backbone 的理论感受野已经超过 900 像素,但小目标召回长期上不去,大目标边缘也发糊。团队中 A 主张「继续加空洞卷积扩大感受野」,B 主张「感受野早就够了,问题在别处」。你如何判断谁对,并给出下一步方案?