增强|关注数据而不是模型:我是如何赢得吴恩达首届 Data-centric AI 竞赛的( 二 )


文章插图

训练数据集里的一个例子
考虑到最终提交的图像只能小于 10K,因此,参与者必须专注于在缺乏“大数据”的情况下获取“好数据”,这是因为 Andrew 觉得 “大数据” 在更传统的行业(如制造业、农业和医疗保健)的人工智能应用中非常常见。


2

我的“数据增强”技术解决方案
在进入解决方案的关键部分之前,我做的第一件事是遵循固定标签和删除不良数据的常见做法。
为了简化这个工作流程,我编写了一个 Python 程序来评估给定的数据集(在将其输入固定模型和训练程序之后),并生成一个包含每个图像记录指标的电子表格。
该电子表格包含给定标签、预测标签(使用固定模型)和每个图像的损失,这对于分离不准确和边缘情况非常有用。下面举例。
增强|关注数据而不是模型:我是如何赢得吴恩达首届 Data-centric AI 竞赛的
文章插图

由 Python 生成的数据评估电子表格示例,用于简化以数据为中心的 AI 工作流程。
我最初使用这个电子表格来识别标记错误的图像和明显不是罗马数字 1-10 的图像(例如,在原始训练集中就有一个心脏图像)。
现在我们来看看“数据增强”技术。以下是高级步骤:
  1. 从训练数据中生成一组非常大的随机增强图像(将这些视为“候选”来源)。
  2. 训练初始模型并预测验证集。
  3. 使用另一个预训练模型从验证图像和增强图像中提取特征(即嵌入)。
  4. 对于每个错误分类的验证图像,利用提取的特征从增强图像集中检索最近邻(基于余弦相似度)。将这些最近邻增强图像添加到训练集。我将这个过程称为“数据增强”。
  5. 使用添加的增强图像重新训练模型并预测验证集。
  6. 重复步骤 4-6,直到达到 10K 图像的限制。
这个迭代过程见下图:
增强|关注数据而不是模型:我是如何赢得吴恩达首届 Data-centric AI 竞赛的
文章插图

将来自训练集的增强图像作为候选源的“数据增强”过程
在“数据增强”过程中需要注意的几点:
  • -虽然我在这次竞赛中使用了增强图像,但在实践中我们可以使用任何大的图像集作为数据源。
  • -我从训练集中生成了大约 1M 的随机增强图像作为候选来源。
  • -数据评估电子表格用于跟踪不准确(错误分类的图像)并注释数据。另外,我还创建了一个带有PostgreSQL 后端的 Label Studio 实例,但由于不必要的开销,我决定不将其用于本次比赛。
  • -对于预训练模型,我使用了在 ImageNet 上训练的 ResNet50。
  • -我使用 Annoy 包来执行近似最近邻搜索。
  • -每个错误分类的验证图像要检索的最近邻的数量是一个超参数。
Label Studio 链接:https://labelstud.io/
Annoy 包链接:https://github.com/spotify/annoy
从图像中提取特征的一件很酷的事情是,我们可以使用 UMAP 在 2D 中将它们可视化,以更好地理解训练和验证集的特征空间。在下面的可视化中,我们可以看到,有趣的是,给定的训练数据分布与给定的验证数据不匹配。在特征空间的左下角有一个区域我们没有验证图像。这表明,在运行上面的“数据增强”过程之前,可以尝试重新调整训练和验证数据分割。
增强|关注数据而不是模型:我是如何赢得吴恩达首届 Data-centric AI 竞赛的
文章插图


3

这项技术的动机以及如何将它推广到不同的应用程序