想象一位厨师长训练学徒:手里只有一筐番茄、几个鸡蛋和一把青椒,却要让学徒练出能应对任何餐桌的厨艺。直接照着菜谱背?学徒一旦遇到摆盘不同的番茄炒蛋就认不出来。聪明的厨师长有自己的办法——把同一道菜变换出各种花样:有时在盘子里扣上一块餐布,只露出半边菜;有时把番茄炒蛋和青椒肉丝搅在一起让学徒尝出比例;有时干脆做一份一半一半的拼盘。徒弟见识得多了,自然不再死记硬背,而是学会从任何局部线索推断出整道菜的样子。 这就是数据增强(Data Augmentation)的智慧。AI 模型训练也面临同样的困境:标注好的图像数据既昂贵又有限,模型容易把训练集的“小习惯”背得滚瓜烂熟(过拟合),一换场景就失灵。数据增强不新增一张真实标注图,只是把现有图像“变着花样”重新呈现,却能让模型学到更本质、更通用的特征。本文要讲的 Cutout、Mixup、CutMix 三种增强策略,就像厨师长的三件法宝:盖餐布、搅匀菜、做拼盘。

岗位关联

对 AI 从业者而言,数据增强是性价比最高的“免费午餐”——不增加标注成本就能显著提升模型泛化能力与遮挡鲁棒性,是工业落地中绕不开的基本功。

目录
  1. 可视化演示
  2. 数据增强基础
  3. Cutout原理
  4. Mixup原理
  5. CutMix原理
  6. 三种方法对比
  7. 工程实践
  8. 应用与展望
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示Cutout随机遮挡、Mixup线性插值混合与CutMix裁剪粘贴三种数据增强策略的图像变换过程,帮助理解增强机制与标签处理差异。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+captions.cutout+'

数据增强基础

厨师长手里的食材只有一筐,但学徒的练习不能停。怎么办?同一颗番茄,今天切片摆盘,明天切块炖汤,后天榨汁调味——食材没变,练出来的手艺却全面了。数据增强就是 AI 训练中“给食材变花样”的功夫:在不改变真实世界标注的前提下,对原始图像做各种变换,生成更多样的训练样本。

深度模型是“吃数据”的。图像分类模型动辄需要数十万张标注图,而人工标注一张图平均要花几十秒甚至几分钟,成本高昂。更棘手的是,模型会把训练集里的偶然规律当成普遍真理——比如所有猫的照片都出现在沙发上,模型就可能把“沙发”当成猫的特征。这种“背题”现象就是过拟合。数据增强通过对图像做翻转、裁剪、调色等变换,让模型看到同一个物体的不同面貌,相当于给学徒补充了“换场景练习”。

从数学上看,数据增强就是对原始训练集施加一个变换函数 T,生成新的训练样本:

按照一次操作涉及几张图,数据增强分为两类:单样本增强(如翻转、裁剪、Cutout,一次只加工一张图)和多样本增强(如 Mixup、CutMix,一次混合多张图)。它们共同构成厨师长的“花样库”,后面三节就是花样库里的三件招牌法宝。

D′={(T(xi), yi)∣(xi,yi)∈D}\displaystyle \mathcal{D}^{\prime} = \left\{ \left( T(x_i),\, y_i \right) \mid (x_i, y_i) \in \mathcal{D} \right\}
含义:原始训练集 $\mathcal{D}$ 中每个样本 $x_i$ 经变换 $T$ 得到新样本 $T(x_i)$,标签 $y_i$ 保持不变,组成增强后的训练集 $\mathcal{D}^{\prime}$。
  1. 原始样本对$(x_i, y_i)$ 表示第 $i$ 张训练图像 $x_i$ 和它的类别标签 $y_i$,比如“一张猫的照片 → 标签'猫'”。
    (xi,yi)∈D\displaystyle (x_i, y_i) \in \mathcal{D}
  2. 变换函数$T$ 是对图像做的某种操作,可以是“翻转”“调亮度”“随机遮挡”等,它把一张图变成另一张合理的新图。
    T(xi)\displaystyle T(x_i)
  3. 新训练集把每张原图变换后与原标签配对,得到扩充后的集合 $\mathcal{D}^{\prime}$,训练时模型就在这个更大的集合上学习。
    D′={(T(xi),yi)}\displaystyle \mathcal{D}^{\prime} = \{ (T(x_i), y_i) \}

Cutout原理

厨师长的第一件法宝是“盖餐布”:把一盘番茄炒蛋只露出一半给学徒看,让学徒根据露出的蛋块、番茄皮和汤汁颜色判断这是什么菜。一开始学徒会懵,但练多了,他就不再只盯着盘子中央那几块最大的番茄,而是学会扫一眼全盘的色泽与香气。Cutout 正是这个思路。

Cutout 的做法很直白:在训练图像的随机位置,用一个正方形块把像素“盖住”(置零)。模型看到的是被挖掉一块的图像,却仍要输出正确的类别。于是它无法再依赖某个局部特征下结论,被迫学会综合利用图像各个区域的信息。这相当于给模型打了一针“全局视野”的疫苗,让它对局部遮挡不再敏感。

用数学语言描述,Cutout 通过一个与图像同尺寸的 0/1 掩码矩阵实现:

Cutout 的效果类似“餐布下做判断”的训练:模型见过各种被遮挡的图像后,即使真实场景中目标被树枝、行人或车身挡住一部分,它也能根据露出的轮廓做出正确判断。值得一提的是,Cutout 完全不需要额外数据,也没有改变标签,实现成本极低,却在图像分类、目标检测任务中普遍带来 1% 到 2% 的准确率提升。

x~=x⊙M,Mij={0,(i,j)∈遮挡区域1,其他\displaystyle \tilde{x} = x \odot M, \quad M_{ij} =\begin{cases}0, & (i,j) \in \text{遮挡区域} \\1, & \text{其他}\end{cases}
含义:$\odot$ 表示逐元素相乘,掩码 $M$ 中遮挡区域的位置为 0,其余位置为 1。图像 $x$ 与 $M$ 相乘后,遮挡区域的像素被清零,形成“缺一块”的增强图 $\tilde{x}$。
  1. 逐元素相乘$\odot$ 表示两个矩阵对应位置相乘,把 $x$ 的每个像素值与 $M$ 的对应位置相乘。
    x~=x⊙M\displaystyle \tilde{x} = x \odot M
  2. 掩码取值$M_{ij}$ 只有两种值,1 表示“保留这个像素”,0 表示“盖住这个像素”。
    Mij∈{0,1}\displaystyle M_{ij} \in \{0, 1\}
  3. 遮挡区域实践中遮挡区域选为一个随机位置的正方形,其边长是超参数,通常取图像边长的 1/8 到 1/4。
    (i,j)∈遮挡区域⇒Mij=0\displaystyle (i,j) \in \text{遮挡区域} \Rightarrow M_{ij} = 0

Mixup原理

如果说 Cutout 是“藏一半”,那 Mixup 就是“搅一锅”:把番茄炒蛋和青椒肉丝倒进一个大碗,让学徒尝一口报出比例——“七分番茄炒蛋,三分青椒肉丝”。注意,正确的答案不是一个硬邦邦的类别,而是一个软比例。Mixup 把这个绝招用在了图像和标签上。

具体做法是:每次从训练集随机抽两张图 $x_i$ 和 $x_j$,按一个随机权重 $\lambda$ 把像素逐位置做加权求和,得到一张“混合图”。同时,标签也做同样的加权:不再是“猫”或“狗”这样的二值标签,而是“60% 猫、40% 狗”的软标签。模型看到的是两张图叠加的“重影”,却要学会预测这个混合比例——于是它被迫学习两类的线性边界,而不是死记硬背某个类别。

Mixup 的数学形式非常简洁:

Mixup 的训练效果,就像让学徒尝遍了各种比例的“融合菜”。一方面样本空间被两两连线地扩充,数据量指数级增加;另一方面软标签迫使模型输出平滑的概率分布,决策边界不再尖锐,泛化能力更强。实验表明,Mixup 在 CIFAR-10、ImageNet 等基准上普遍能降低 1% 到 2% 的错误率。

x~=λxi+(1−λ)xj,y~=λyi+(1−λ)yj,λ∼Beta(α,α)\displaystyle \tilde{x} = \lambda x_i + (1-\lambda) x_j, \qquad\tilde{y} = \lambda y_i + (1-\lambda) y_j, \qquad\lambda \sim \mathrm{Beta}(\alpha, \alpha)
含义:$\lambda$ 从参数为 $\alpha$ 的贝塔分布中随机采样,决定混合程度。$\tilde{x}$ 是像素级加权和,$\tilde{y}$ 是标签的加权和。两图的标签 $y_i, y_j$ 通常用 one-hot 向量表示。
  1. 像素级加权$\lambda x_i$ 表示把图 $i$ 的每个像素乘以 $\lambda$,$(1-\lambda)x_j$ 表示把图 $j$ 的每个像素乘以 $(1-\lambda)$,相加后得到一张“重影图”。
    x~=λxi+(1−λ)xj\displaystyle \tilde{x} = \lambda x_i + (1-\lambda) x_j
  2. 标签同比例混合$\tilde{y}$ 同样按 $\lambda$ 加权,得到软标签。比如 $\lambda=0.7$ 时,$\tilde{y} = 0.7 y_i + 0.3 y_j$。
    y~=λyi+(1−λ)yj\displaystyle \tilde{y} = \lambda y_i + (1-\lambda) y_j
  3. 贝塔分布采样$\lambda$ 不是固定的 0.5,而是从 $\mathrm{Beta}(\alpha, \alpha)$ 中随机抽取,$\alpha$ 越小,$\lambda$ 越倾向 0 或 1(更接近原图);$\alpha$ 越大,混合越均匀。
    λ∼Beta(α,α)\displaystyle \lambda \sim \mathrm{Beta}(\alpha, \alpha)

CutMix原理

第三件法宝是“拼盘”:一盘菜,左边是完整的番茄炒蛋,右边是完整的青椒肉丝,泾渭分明。学徒不需要费劲辨认模糊的混合味道,只需要看左边,再瞄一眼右边,就能明白这盘菜同时包含两道菜的信息。CutMix 正是“用一块矩形区域替换”的拼盘策略——它是 Cutout 与 Mixup 的巧妙结合。

CutMix 的操作分两步:先从图 B 中随机选定一个矩形区域,把这个区域的像素原封不动地贴到图 A 的对应位置(这一步像 Cutout 的“挖补”,但补进去的不是空白而是另一张图的内容);然后按遮挡面积占整张图的比例,把两张图的标签做加权混合。模型看到的图像既有完整的局部细节,又有清晰的块状拼接,训练时既要识别 A 的内容,又要识别 B 的内容。

CutMix 的数学公式可写为:

CutMix 的精妙之处在于“既保留又融合”:不像 Cutout 那样丢弃信息,也不像 Mixup 那样模糊掉局部结构,而是让模型同时看到两个完整的物体。在 ImageNet 分类任务上,CutMix 的 top-1 准确率通常比 Cutout 和 Mixup 各自高出 0.5% 到 1%,是三种方法中综合表现最强者。

x~=M⊙xA+(1−M)⊙xB,y~=λyA+(1−λ)yB\displaystyle \tilde{x} = M \odot x_A + (1-M) \odot x_B, \qquad\tilde{y} = \lambda y_A + (1-\lambda) y_B
含义:$M$ 是矩形掩码,在要替换的区域为 1,其余为 0。$\tilde{x}$ 是“图 A 保留 $M$ 区域之外的像素,图 B 填充 $M$ 区域的像素”的拼接结果。$\lambda$ 服从贝塔分布,并且对应矩形区域的面积占比。
  1. 掩码拼接$M \odot x_A$ 保留图 A 中 $M$ 为 1 位置的像素,$(1-M) \odot x_B$ 保留图 B 中其余位置的像素,二者相加得到拼贴图。
    x~=M⊙xA+(1−M)⊙xB\displaystyle \tilde{x} = M \odot x_A + (1-M) \odot x_B
  2. 区域面积对应 $\lambda$矩形掩码的面积占全图比例决定了标签的混合权重,而非任意取值。
    λ=1−SpatchSimage\displaystyle \lambda = 1 - \frac{S_{\text{patch}}}{S_{\text{image}}}
  3. 标签软混合$\tilde{y}$ 按 $\lambda$ 加权融合两个 one-hot 标签,模型同时学到两类信息。
    y~=λyA+(1−λ)yB\displaystyle \tilde{y} = \lambda y_A + (1-\lambda) y_B

三种方法对比

三件法宝各有脾气。盖餐布(Cutout)是“减法”:丢弃一块信息,逼模型用全局线索猜谜;搅匀菜(Mixup)是“加法”:把两道菜完全融合,让模型学会按比例判断;做拼盘(CutMix)则是“拼接”:两个完整物体同盘呈现,各留一半,互不干扰。

从信息保留方式看,Cutout 丢失了遮挡区域的全部信息,训练时用“看不见”来锻炼推理能力;Mixup 保留了两张图的全部信息但以重影形式呈现,细节模糊;CutMix 则几乎没有信息损失,被替换区域的像素以原样出现,模型既能看清 A 的纹理,也能看清 B 的纹理。从标签处理看,Cutout 标签不变,Mixup 和 CutMix 都制造软标签,但 CutMix 的混合权重严格由矩形面积决定:

从适用场景看,Cutout 最适合目标可能被遮挡的任务(如自动驾驶里的行人检测),Mixup 擅长提升模型对噪声的鲁棒性和决策边界的平滑度,CutMix 则在分类精度上通常最优,尤其适合数据量有限、类别差异细微的任务。工程上三者并非互斥,常见做法是:先用基础增强(翻转、裁剪),再叠加 Cutout 或 CutMix,最后一层再考虑 Mixup。组合使用时,通常把 CutMix 的概率设为 0.5,与基础增强交替进行,效果最佳。

λCutMix=1−SpatchSimage\displaystyle \lambda_{\text{CutMix}} = 1 - \frac{S_{\text{patch}}}{S_{\text{image}}}
含义:设矩形遮罩面积为 $S_{\text{patch}}$,整张图像面积为 $S_{\text{image}}$,则标签中图 A 的权重等于未被替换区域的比例。这样标签与实际可见的像素占比严格一致。
  1. 矩形面积随机矩形区域的宽高乘积构成被替换部分面积,通常占全图的 10% 到 50%。
    Spatch=wpatch×hpatch\displaystyle S_{\text{patch}} = w_{\text{patch}} \times h_{\text{patch}}
  2. 全图面积图像的总像素数,即宽乘高。
    Simage=wimage×himage\displaystyle S_{\text{image}} = w_{\text{image}} \times h_{\text{image}}
  3. 权重计算$1$ 减去面积占比就是图 A 保留区域的占位比,也是标签中 $y_A$ 的权重大小。
    λCutMix=1−SpatchSimage\displaystyle \lambda_{\text{CutMix}} = 1 - \frac{S_{\text{patch}}}{S_{\text{image}}}

工程实践

法宝再好,也要看厨师的“火候”。遮挡块太小,学徒轻松绕过,起不到锻炼作用;遮挡块太大,整盘菜面目全非,模型反而学乱。Mixup 的 $\alpha$ 同理:$\alpha$ 过小,混合程度接近原图,等于没增强;$\alpha$ 过大,每张图都是“四不像”,训练难度陡增。实践中的参数调节,本质是在“难度”与“可学性”之间找平衡。

工程上另一个关键点是:Mixup 和 CutMix 这种“多样本增强”产生的软标签,会让模型在训练初期收敛较慢,因此通常需要把训练轮数延长 1.2 到 1.5 倍,并适当调低学习率。此外,由于每个 batch 内的样本都被两两混合,batch size 无需改变,但混合操作应在 GPU 上以张量运算完成,避免 Python 循环拖慢训练。训练时损失函数同样要“软”到底:

工程中最常见的陷阱是“评估时也用了增强”——验证集和测试集必须保持原始图像,否则指标虚高、上线即翻车。正确做法是:只在训练集上做数据增强,验证集仅做尺寸归一化。另一个常见误区是以为增强可以无限叠加:实验显示,当遮挡率超过 50% 或混合比例长期接近极端值时,模型欠拟合风险上升,准确率反而下降。评估增强效果时,应固定随机种子、相同训练轮数,只改变增强策略,记录验证集 top-1 准确率的均值与方差,才能得出可靠结论。

Lmix=λ ℓ ⁣(f(x~), yA)+(1−λ) ℓ ⁣(f(x~), yB)\displaystyle \mathcal{L}_{\text{mix}} = \lambda \, \ell\!\left(f(\tilde{x}),\, y_A\right) + (1-\lambda)\, \ell\!\left(f(\tilde{x}),\, y_B\right)
含义:混合样本 $\tilde{x}$ 的损失 = 模型输出与标签 $y_A$ 的交叉熵 × $\lambda$ + 模型输出与标签 $y_B$ 的交叉熵 × $(1-\lambda)$。两个标签按同一权重同时监督模型。
  1. 两个损失相加$\ell$ 是交叉熵损失函数,混合样本要同时向两个原标签学习,各自带权重。
    ℓ ⁣(f(x~), yA),ℓ ⁣(f(x~), yB)\displaystyle \ell\!\left(f(\tilde{x}),\, y_A\right), \quad \ell\!\left(f(\tilde{x}),\, y_B\right)
  2. 权重分配$\lambda$ 是图 A 的保留比例,$1-\lambda$ 是图 B 的贡献比例,二者之和恒为 1。
    λ+(1−λ)=1\displaystyle \lambda + (1-\lambda) = 1
  3. 梯度回传模型对 $\tilde{x}$ 的预测同时受两个标签约束,梯度是两项损失的加权和,驱动决策边界朝两类之间的平滑区域移动。
    ∇Lmix=λ∇ℓA+(1−λ)∇ℓB\displaystyle \nabla \mathcal{L}_{\text{mix}} = \lambda \nabla \ell_A + (1-\lambda) \nabla \ell_B

应用与展望

学徒终于出师,成了独当一面的大厨。数据增强的三种法宝也被带进了真实的 AI 工业厨房:自动驾驶公司要解决“行人被公交车挡住一半还能不能识别”的问题,医疗影像团队只有几百张罕见病 CT 却要训练高精度分类器,质检产线上缺陷样本少得可怜……这些场景里,Cutout 的“盖餐布”、Mixup 的“搅匀菜”、CutMix 的“做拼盘”正各显神通。

在实际应用中,数据增强很少单打独斗,而是像一套组合拳层层递进。基础几何增强(翻转、旋转、裁剪)负责“换角度”,Cutout 负责“防遮挡”,CutMix 负责“扩样本”,Mixup 负责“平滑边界”。一套典型的视觉训练流水线可以写作:

展望未来,数据增强的边界正在被拓宽:一方面,自动增强搜索(如 AutoAugment)用强化学习寻找最优增强策略,取代人工调参;另一方面,增强与自监督学习结合,让模型从“变换前后的一致性”中学习特征表征,甚至不需要标签。可以预见,数据增强将不再是训练前的固定预处理,而是与模型、损失函数共同进化的“活”组件——就像一位不断研发新菜式的厨师长,永远让学徒保持新鲜感。

Tcomb(x)=MixUp ⁣(CutMix ⁣(Cutout ⁣(Tbasic(x))))\displaystyle T_{\text{comb}}(x) = \mathrm{MixUp}\!\left( \mathrm{CutMix}\!\left( \mathrm{Cutout}\!\left( T_{\text{basic}}(x) \right) \right) \right)
含义:输入图像 $x$ 先经过基础变换 $T_{\text{basic}}$(翻转、裁剪等),再做 Cutout 随机遮挡,再与另一张样本做 CutMix 拼贴,最后整体做 Mixup 混合。层层叠加,每层贡献不同的正则化效果。
  1. 基础变换$T_{\text{basic}}(x)$ 表示翻转、随机裁剪、颜色抖动等单样本变换,是增强的第一层。
    Tbasic(x)\displaystyle T_{\text{basic}}(x)
  2. 逐层组合$\mathrm{Cutout}$ 遮挡后,再做 $\mathrm{CutMix}$ 拼贴,最后 $\mathrm{MixUp}$ 全图混合,复合函数从内向外执行。
    MixUp∘CutMix∘Cutout\displaystyle \mathrm{MixUp} \circ \mathrm{CutMix} \circ \mathrm{Cutout}
  3. 最终输出组合增强后的样本 $T_{\text{comb}}(x)$ 仍是合法图像,标签也会在 MixUp 和 CutMix 的叠加下变成多标签软形式,模型需学会同时消化多重监督信号。
    Tcomb(x)\displaystyle T_{\text{comb}}(x)

AI 应用场景

自动驾驶中的遮挡目标检测

阶段:数据预处理 / 模型训练

解决的问题:真实道路中,行人、车辆常被树木、路灯杆或其他车辆遮挡。传统模型若只在完整目标图像上训练,遇到遮挡超过 30% 的目标时漏检率会急剧上升,直接威胁行车安全。

具体案例:某自动驾驶团队在训练车辆检测模型时,在基础增强之外叠加 Cutout(遮挡块边长设为图像短边的 1/5,概率 0.5),让模型在训练中频繁“看到”被局部遮挡的车辆。在遮挡仿真测试集上,模型的平均精度(mAP)提升了 2.3 个百分点,对“行人被车头挡住半边”这类极端场景的召回率显著改善。

医疗影像的小样本学习

阶段:模型训练 / 数据扩充

解决的问题:医疗影像(如肺结节 CT、眼底彩照)标注依赖资深医生,成本极高,罕见病样本往往只有几百张。直接训练容易过拟合,模型在外部医院的数据上性能骤降。

具体案例:某医疗 AI 团队在肺结节分类任务中,仅有 500 张标注 CT 图像。他们采用 Mixup(α=0.2)与 CutMix(α=1.0)组合增强,将有效训练样本的多样性扩大了近 20 倍。最终模型在外部验证集上的 AUC 从 0.88 提升到 0.93,且对图像采集设备差异的鲁棒性明显增强。

工业质检中的缺陷样本扩充

阶段:数据预处理 / 模型微调

解决的问题:工业产线上的缺陷(划痕、污点、裂痕)出现频率极低,正负样本比例常达 100:1,难以训练出高召回率的检测模型。

具体案例:某面板质检厂商用 CutMix 把“有缺陷的图像块”随机粘贴到“无缺陷的背景图”上,同时按面积比例混合标签,一次训练便生成了数万张带缺陷标注的合成样本。部署后模型对真实缺陷的召回率从 82% 提升至 94%,同时误检率没有明显上升。

Python 演示

python43 行
import numpy as np def cutout(image, mask_size):    h, w, _ = image.shape    img = image.copy()    x = np.random.randint(0, w - mask_size)    y = np.random.randint(0, h - mask_size)    img[y:y + mask_size, x:x + mask_size, :] = 0    return img def mixup(x1, x2, y1, y2, alpha=0.2):    lam = np.random.beta(alpha, alpha)    x = lam * x1 + (1 - lam) * x2    y = lam * y1 + (1 - lam) * y2    return x, y def cutmix(x1, x2, y1, y2, alpha=0.2):    lam = np.random.beta(alpha, alpha)    h, w, _ = x1.shape    cut_ratio = np.sqrt(1.0 - lam)    cw = max(int(w * cut_ratio), 1)    ch = max(int(h * cut_ratio), 1)    cx = np.random.randint(w)    cy = np.random.randint(h)    x1a = np.clip(cx - cw // 2, 0, w)    x2a = np.clip(cx + cw // 2, 0, w)    y1a = np.clip(cy - ch // 2, 0, h)    y2a = np.clip(cy + ch // 2, 0, h)    x = x1.copy()    x[y1a:y2a, x1a:x2a] = x2[y1a:y2a, x1a:x2a]    lam = 1 - (x2a - x1a) * (y2a - y1a) / (w * h)    y = lam * y1 + (1 - lam) * y2    return x, y if __name__ == '__main__':    a = np.random.rand(64, 64, 3)    b = np.random.rand(64, 64, 3)    c = cutout(a, 24)    m, my = mixup(a, b, 1.0, 0.0)    k, ky = cutmix(a, b, 1.0, 0.0)    print('cutout masked mean:', round(float(c.mean()), 4))    print('mixup label:', round(float(my), 3))    print('cutmix label:', round(float(ky), 3))
目的:用 numpy 从零实现 Cutout、Mixup、CutMix 三种数据增强的核心逻辑,演示它们如何生成新样本与软标签。
  1. img[y:y + mask_size, x:x + mask_size, :] = 0把随机矩形区域的所有像素通道置零,实现 Cutout 的“盖餐布”遮挡。
  2. lam = np.random.beta(alpha, alpha)从贝塔分布采样混合权重,这是 Mixup 与 CutMix 共同的随机性来源。
  3. x = lam * x1 + (1 - lam) * x2两张图逐像素加权求和,得到 Mixup 的“重影图”。
  4. x[y1a:y2a, x1a:x2a] = x2[y1a:y2a, x1a:x2a]将图 B 的矩形区域像素整体复制到图 A 的对应位置,实现 CutMix 的“拼盘”。
  5. lam = 1 - (x2a - x1a) * (y2a - y1a) / (w * h)按实际替换的像素面积重新计算标签权重,保证标签与图像内容一致。

常见误区

误区很多初学者以为 Cutout 就像“打码”一样把图像正中央的一块区域涂黑,位置固定不变,以让模型“看不清中间”。

正解Cutout 的遮挡位置是每次随机抽样的,可能在左上角,也可能在右下角;遮挡块的大小也是一个超参数,而不是定死的“中央方块”。正因为位置随机,模型才无法预判哪里会被遮住,从而被迫综合利用整张图的信息。如果总遮固定位置,模型反而会学成“忽略中心区域”的错误习惯。

为何常见:人眼习惯关注图像中心,加上常见的打码演示都是正中央,容易把“随机遮挡”误解为“中心遮挡”。

误区有人以为 Mixup 就是把两张图各取一半相加,固定 $\lambda=0.5$,相当于“平均脸”式的操作。

正解实际中 $\lambda$ 从 $\mathrm{Beta}(\alpha, \alpha)$ 分布中随机采样,每次混合比例都不同,有时偏向图 A($\lambda=0.9$),有时偏向图 B($\lambda=0.2$)。$\alpha$ 控制这种偏向的剧烈程度,是一个需要调节的超参数。固定 0.5 会让样本空间变得单调,失去“多样性扩充”的意义。

为何常见:“平均”是最直观的混合方式,且 $\lambda=0.5$ 恰好是对称平均,概念上最好理解,容易先入为主。

误区初学 CutMix 时,看到公式里有个 $\lambda \sim \mathrm{Beta}(\alpha, \alpha)$,就以为标签混合权重直接等于这个采样值,而不去管矩形区域实际有多大。

正解CutMix 的标签权重必须按“实际替换的矩形面积占全图比例”重新计算,即 $\lambda = 1 - S_{\text{patch}} / S_{\text{image}}$。因为采样值 $\lambda$ 对应的是理论上的混合强度,而矩形经过裁剪后实际面积可能与理论值有偏差。只有按面积重算,标签才能与图像中真实可见的像素占比严格一致。

为何常见:Mixup 中标签权重与图像权重共用同一个 $\lambda$,读者容易把 Mixup 的习惯直接带到 CutMix 上。

误区有人认为反正增强是免费的,那就把 Cutout、Mixup、CutMix、翻转、裁剪全开,叠加得越狠,模型越强。

正解增强强度过大时,训练样本会严重偏离真实数据分布。比如遮挡率超过 60%,模型看到的几乎都是残缺图像,学到的特征会失真;Mixup 长期以极端比例混合,标签变得模糊不清,模型反而难以收敛。正确做法是控制每种增强的概率(通常 0.2 到 0.5),并用验证集监控是否出现欠拟合信号。

为何常见:增强确实能提升泛化,且 1+1>2 的案例很多,容易让人忽略“过度正则化”同样会损害性能。

误区有初学者把 Cutout 加到推理流程里,认为“模型训练时见过遮挡图,测试时也遮挡一下,输入分布更一致,准确率更高”。

正解测试集必须保持原始图像不变。数据增强的目的是让模型见过更多样的训练分布,而不是改变测试时的输入。测试时做增强会引入额外随机性,导致同一张图多次推理结果不同,且评估指标无法反映模型在真实数据上的表现。

为何常见:容易混淆“训练时加噪声提升鲁棒性”与“测试时保持纯净评估”两种角色的根本差异。

面试题

Q1. Cutout 遮挡区域的位置是如何确定的?

单选题 · easy

  • A.固定在图像正中央
  • B.每次随机位置采样← 正确答案
  • C.沿图像边缘均匀分布
  • D.由图像亮度最大值决定

答案:B。Cutout 的核心是“随机遮挡”,位置每次随机、大小由超参数控制,才能迫使模型关注全局特征。固定中央或按亮度决定都不符合设计初衷。

Q2. Mixup 合成样本时标签如何处理?

单选题 · easy

  • A.直接丢弃原始标签
  • B.按混合比例生成软标签← 正确答案
  • C.两个标签取最大值
  • D.随机保留其中一个标签

答案:B。Mixup 的标签是两图 one-hot 标签按 λ 加权求和的结果,即软标签。丢弃、取最大或随机保留都会丢失“按比例混合”的关键信息。

Q3. 下列哪些操作属于单样本数据增强?

多选题 · easy

  • A.随机水平翻转图像← 正确答案
  • B.随机裁剪图像区域← 正确答案
  • C.修改模型网络结构
  • D.调整图像亮度对比度← 正确答案

答案:ABD。单样本增强是指一次只对一张图做变换:翻转、裁剪、调亮都属于此类。修改网络结构是模型设计而非数据增强,故不选。

Q4. Mixup 中的混合权重 λ 服从什么分布?

单选题 · mid

  • A.标准正态分布 N(0,1)
  • B.贝塔分布 Beta(α,α)← 正确答案
  • C.均匀分布 U(0,1)
  • D.泊松分布 P(λ)

答案:B。Mixup 的 λ 从 Beta(α,α) 中采样,α 控制采样偏向两端或中间。均匀分布只是 Beta(1,1) 的特例,正态分布和泊松分布不适用。

Q5. Cutout 的设计思想核心是什么?

单选题 · mid

  • A.增加图像分辨率
  • B.强迫模型利用全局信息← 正确答案
  • C.降低模型训练速度
  • D.缩小训练集规模

答案:B。Cutout 随机遮挡局部区域,让模型无法依赖单一局部特征,从而学会从全局上下文推断类别,提升对遮挡的鲁棒性。

Q6. 关于 CutMix,下列说法正确的有哪些?

多选题 · mid

  • A.用矩形区域替换另一张图内容← 正确答案
  • B.标签按遮挡面积比例混合← 正确答案
  • C.结合了 Cutout 与 Mixup 的思想← 正确答案
  • D.不需要任何随机采样

答案:ABC。CutMix 以矩形区域替换图 B 内容、按面积混合标签,是 Cutout(区域遮挡)与 Mixup(标签混合)的结合。但它的掩码位置和大小都来自随机采样,D 错误。

Q7. CutMix 中标签的混合权重最终如何确定?

单选题 · mid

  • A.直接取 Beta 采样的 λ 值
  • B.按实际替换面积占比计算← 正确答案
  • C.取两张图的亮度平均比
  • D.固定为 0.5 不变

答案:B。矩形掩码经边界裁剪后,实际面积可能与理论值不同,因此要按公式 λ = 1 - S_patch / S_image 重新计算,使标签与像素占比严格一致。

Q8. Cutout 为什么能提升模型的遮挡鲁棒性?

单选题 · hard

  • A.增加模型参数的数量
  • B.训练时制造遮挡多样性← 正确答案
  • C.缩小训练集的规模
  • D.降低图像颜色通道数

答案:B。Cutout 在训练中随机制造大量“被遮挡”图像,让模型见过各种遮挡模式,推理时遇到真实遮挡就不会惊慌,相当于给模型打了“遮挡疫苗”。

Q9. 使用 Mixup 训练时需要注意什么?

多选题 · hard

  • A.标签会变成软标签值← 正确答案
  • B.可与其他增强方法联合使用← 正确答案
  • C.通常需要适当调整学习率← 正确答案
  • D.必须去掉批归一化层

答案:ABC。Mixup 产生软标签,可与 Cutout 等组合,且因收敛变慢常需调低学习率/延长训练轮数。但 Mixup 与批归一化并不冲突,去掉批归一化是错误做法。

Q10. CutMix 中矩形区域的理论尺寸由哪个量决定?

单选题 · extreme

  • A.固定为全图面积的一半
  • B.由 sqrt(1-λ) 乘以原图宽高决定← 正确答案
  • C.随训练轮数线性衰减
  • D.由图像边缘检测结果决定

答案:B。CutMix 先按 λ 计算 cut_ratio = sqrt(1-λ),再让矩形宽高分别为原图宽高乘以 cut_ratio,从而保证替换面积与 λ 的互补关系一致。