一个被反复提及的痛点:标注数据太少,模型直接把像素背下来,训练准确率冲到100%,测试集却一动不动。当业界都在花大价钱请外包标注时,有人却用一个HTML5画布,把数据增强的每个环节重新拆了一遍,从几何变换到像素级的噪声注入,全部从零实现。
这套方案没有任何黑箱操作。首先,原始标注图被绘制到一个离屏画布上,后续每次生成新图,都从这个不变的源头读取像素,再绘制到另一个地方。源头永不修改,因此可以无限次采样。所有几何变换,都围绕图像中心进行:先把原点平移到中心,然后旋转、缩放,再通过负缩放因子实现水平和垂直翻转。这样做的理由是:如果绕着角点旋转,主体会离开画面;而把变换中心固定在图像中点,猫头或汽车总能在画面内。
随机缩放裁剪被单独拿出来强调,因为这个增强技术对自然图像的效果最强。它的原理是,从原图上切出一个尺寸缩小的窗口,然后把该窗口拉伸到目标全图尺寸。具体用到了九个参数的上下文绘图接口,通过缩小源矩形并随机平移,让模型学习从动物的耳朵或爪子去识别整只动物。代码中,缩放因子大于1时会缩小源窗口,0到1之间的随机偏移量决定窗口位置,最后把切出的这部分像素铺满整个输出。
光度变化和噪声的加入,则让模型学会忽视光照干扰。亮度和对比度的调整,直接使用浏览器内建滤镜,在绘制前设置即可,像素一旦画出便被固定。至于传感器噪声级别的扰动,需要拉取原始像素数据,对每个通道加上高斯采样值——作者还提了一句Box-Muller变换,从均匀分布生成正态分布。填上噪声后,再把数据写回画布。
还有一个反直觉的操作:Cutout,故意在图像上盖一个纯色方块。这么做的原因是,防止网络死盯一个最容易分辨的特征。如果盖住了那个特征,模型被迫寻找其他线索,泛化能力反而更强。原文中实现方法是,随机选一个正方形区域填充为固定值。
整套流程被做成了可以交互控制的演示,参数可以手动调节,每一步的效果即时可见。相比于对着论文抄开源库,这种“手工拆解”让数据增强的每个数学细节都暴露出来。当一张标注图真的变成了取之不尽的训练集,那个经典的抱怨——“我们缺的不是算法,是标注数据”——听起来就有点像是在找借口了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.