分享

Tokyo Drift:使用 NannyML 和 Whylogs 检测图像中的漂移

 阿明哥哥资料区 2023-01-20 发布于上海

在生产中部署模型时,检测数据中的漂移非常重要。它确保模型的性能不会因输入数据的性质发生变化而降低。有很多工具可用于监控数据和检测漂移,例如 Great expectations、NannyML 等。然而,其中大部分是为表格数据制作的。本文,我们将讨论使用流行工具检测图像漂移的不同方法。

使用数据增强创建漂移

为了创造漂移,我们采用了两种不同的方法。第一种方法是创建明显异常值的一次性图像。这些图像是由 Silke 创作的,产生了可以称之为艺术的结果。

东京的十字路口从来没有如此不安全过。在一夜之间,罗马人发动了进攻,巨龙点燃了火焰,一时间他们超越了闻所未闻的维度。然而,模型不应该针对交替现实的故障进行再训练,因此应该在它们在数据集中建立一个用于再训练的点之前发现它们!

图片

我们的第二种方法是一种更加自动化的方法。这里的想法是尝试图像增强库 Albumentations,并将其用于对抗性攻击。这一次,我们不是一次性图像,而是在随机时间范围内应用变换。我们选择这些转换也比一次性图像更微妙,例如垂直翻转、灰度、缩小等。

Albumentations 的整体使用非常简单。Albumentations 库带有可以轻松应用于图片的不同转换。这些转换从简单的调整(例如垂直翻转)到在图片中添加雨水。

它们还提供了一种方法,可以轻松地将不同的转换链接到图像转换管道中。然后,只要你希望将这组转换应用于图片,就可以使用此管道对象。

transform = A.Compose([
                        A.VerticalFlip(p=1),
                        A.ToGray(p=1),
        ])
transformed_image = transform(image=original_image)['image']
图片

转换代码示例

尽管 Albumentations 附带了一个转换列表,但很可能并非你正在寻找的所有转换都完全按照你想要的方式存在。幸运的是,通过继承 Albumentations ImageOnlyTransform类,在转换管道中包含来自不同库(或你自己编写的库)的转换非常容易。

class MyTransformation(ImageOnlyTransform):
    @property
    def targets_as_params(self):
     return ['image']
        
    def apply(self, img, **params):
  # Example of a transformation defined by ourselves
     sobelxy = cv2.Sobel(src=img, ddepth=cv2.CV_64F, dx=1, dy=1, ksize=5# Combined X and Y Sobel Edge Detection
     inverted_sobelxy = 255 - sobelxy
     return inverted_sobelxy
        
    def get_params_dependent_on_targets(self, params):
     img = params['image']
     return {}

然后我们可以在MyTransformation中使用它

my_transform = A.Compose([
                            MyTransformation(),
                            A.VerticalFlip(p=1)
    ])
图片

通过这种方式,我们定义了 10 种不同的“更微妙”的转换,我们将这些转换应用于几天内的不同时间段。我们将测试漂移检测是否能够检测到这些转换。

我们预计在配色方案中没有突然变化的转换将更难检测,尤其是在使用色调、饱和度和亮度等指标时。按照这个逻辑,如果模型可以发现以下转换,那将会很有趣:

失真:

  • 垂直翻转
  • 降尺度
  • 雨纹合成
  • 高斯噪声
  • Emboss

基于颜色:

  • 颜色抖动
  • 反转
  • 灰阶
  • 太阳耀斑
  • Shuffle颜色通道

使用 Resnet 从图像到表格数据

由于大多数流行的监控工具都是为处理表格数据而设计的,我们的目标是将任务分成两部分。首先,我们尝试从图像中提取可以存储为表格数据的特征。然后,这使我们能够使用现有技术来检测所创建的表格数据的漂移。

图片

为了从图像中提取特征,我们使用了在 Imagenet1k 上训练的预试验 Resnet18 模型。为了让它对我们的用例有用,我们删除了最后一个包含类标签的全连接层,并将 Avg Pool 层的输出作为我们的特征。然后使用 PCA 进一步减少从 resnet 获得的 512 个特征。这导致最终的表格数据集具有每个图像的 150 个特征。

NannyML 检测数据漂移

现在我们已经将图像转换为表格数据,可以在其上使用流行的工具来检测数据漂移。NannyML 能够通过使用 PCA 进行数据重建来检测输入数据中的复杂和多变量变化。

首先,将对试图捕获数据分布和属性的训练数据进行 PCA 转换。

其次,训练数据将使用 PCA 变换进行压缩,然后使用逆 PCA 变换立即重建。

最后计算重建图像和原始图像之间的欧氏距离。该距离称为重构误差,用作对漂移进行分类的一维度量。通过对该错误进行阈值处理,可以将漂移图像与常规图像区分开来。

训练集被分成两部分。一个用于训练 resnet,另一个用于确定重建误差的正确阈值。

在我们的实现中,数据集被分成三组图像。用于训练 resnet 的训练集,类似于训练集但在 Resnet 的试验过程中看不到的验证集,以及由漂移图像和健康图像组成的测试集。

Whylogs

除了使用计算量大的 Resnet 将图像转换为表格数据之外,还可以使用 Whylogs。Whylogs 支持图像。事实上,有一个功能允许基于像素的饱和度、色调、亮度甚至宽度和高度来创建图像批次的统计配置文件。

本节的目的是比较这些不同特征在我们的图像和潜在漂移图像之间的分布。

第一步是通过使用直方图可视化分布。

图片

C

图片
图片

问题是如何使用几个特征的分布来定义图像是否漂移?我们可以使用最小值和最大值作为阈值,如果图像的轮廓不在该范围内,则将其归类为漂移图像。这种方法很简单,检测百分比非常低。事实上,即使在我们的小例子中,它也不会检测到任何东西,因为分布非常不同。

幸运的是,存在比较分布和直方图的指标,我们将使用其中的两个指标,即 Kullback-Lebler 散度和直方图交集。

即使 KL 散度不是真正的价差统计指标,因为它不对称且不满足三角不等式,但它很容易计算并给出不错的结果。直方图交集,测量两个概率分布之间的重叠区域。0.0 的直方图交集分数表示没有重叠,而 1.0 的分数表示相同的分布。

性能比较

为了测试这些方法的性能,我们使用了东京十字路口的图像数据集。它由 635 张图像组成,并向这些图像添加了 55 个异常值。异常值的范围从图像中的一些细微漂移到不那么细微的PS漂移,如下图所示。

图片
图片
图片
图片
图片
图片

为了能够比较不同的方法,我们将数据集分成 400 张图像的训练集和 235 张图像的测试集,其中添加了 55 个异常值,总共 290 张测试图像。两种方法的准确率和召回率如下表所示。

MODEL Precision Recall Resnet + PCA 96% 93% Whylogs 91% 80%

Resnet + PCA 方法能够检测到更多的漂移图像,并且其预测精度也高于 Whylogs 方法。让我们更深入地了解哪些图像被检测到,哪些没有被检测到。

让我们从 whylogs 方法开始。它非常轻巧,并尝试根据亮度、色调和饱和度来检测漂移。因此,它检测到大多数颜色变化较大的漂移图像,例如火焰或具有明亮奇怪颜色的口袋妖怪。

对于这个数据集,考虑到计算成本相当低,这种简单而轻量级的方法会产生不错的性能。

图片
图片
图片
图片
图片
图片

whylogs 方法未检测到的图像

然而,whylogs 方法确实难以处理存在奇怪形状的图像。如上图所示。在这些图像中,漂移是通过改变图像的形状而不是改变颜色来发生的。幸运的是,Resnet 方法不受此影响。

结果表明,resnet 比 whylogs 方法具有更好的性能。然而,它确实带来了更大的计算成本,这可能成为最终用例的差异所在。

图片
图片
图片

Resnet+PCA 方法未检测到的图像

虽然 Resnet 方法非常擅长寻找奇怪的形状和物体,但它仍然难以处理特定类型的图像。在重建误差的分布中,我们可以看到有少量图像非常接近决策边界。这些图像都应用了与亮度或颜色变化相关的漂移。

除了彩色图像之外,还有 1 个漂移图像未被 Resnet 方法检测到。它是直方图中的那个小蓝框,重建误差仅为 11。它是一头逍遥法外的牛。

图片

连Resnet都”抓“不住这头牛

尽管 resnet 方法非常擅长检测奇怪的形状或对象,但它并没有检测到这头奇怪的牛。为什么检测不到?

幸运的是,这头逃脱的母牛很容易被 whylogs 方法检测到,所以我们没有必要恐慌。

结论

本文表明,漂移检测不仅可以用于表格数据,还可以用于图像。这两种方法都有明显的优点和缺点。

Resnet 虽然计算量大,但提供了出色的性能,并且能够检测到几乎所有的漂移图像。然而,当漂移仅应用于色彩空间而不应用于图像中的形状时,它会遇到困难。

另一方面,我们有 Whylogs 方法,它非常轻量级,几乎完全基于颜色、亮度和饱和度做出决策。虽然它是轻量的,但其性能仍可与 Resnet 方法相媲美。但它确实很难检测到包含异常物体的漂移图像。

幸运的是,这两种方法可以完美地互补。一种方法的弱点是另一种方法的优点。



☆ END ☆

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多