通过特征工程,我们立即想到的是表格数据。然而,我们也可以为图像数据获取特征。目标是提取图像的最重要方面。这样做将使我们更容易找到数据和目标变量之间的映射。
这意味着你可以使用更少的数据和更小的模型进行训练。较小的模型可以减少进行预测所需的时间。当部署在边缘设备上时,这是特别有用的。另一个好处是,你可以更确定你的模型用于进行预测的内容。
我们将使用Python通过一些图像特征工程的方法来演示这一点:
裁剪
灰度化
选择RGB通道
强度阈值
边缘检测
色彩滤镜(即提取给定颜色范围内的像素)
为了保持趣味性,我们将为自动汽车进行操作。如下所示,我们希望使用轨道的图像训练模型。然后,该模型将用于进行指导汽车的预测。最后,我们将讨论从图像数据中进行特征工程的局限性。
特征工程与增强
在我们深入探讨之前,有必要讨论图像增强。这种方法与特征工程有着类似的目标。但是,它们通过不同的方式实现了这些目标。
什么是数据增强?
数据增强是指我们使用代码系统或随机地改变数据。对于图像来说,包括翻转、调整颜色和添加随机噪声等方法。这些方法使我们能够人为地引入噪声并增加数据集的大小。如果你想要更详细地了解图像增强,请参阅本文:
https://towardsdatascience.com/augmenting-images-for-deep-learning-3f1ea92a891c
在生产中,模型将需要在不同的条件下运行。这些条件是由变量确定的,如照明、摄像机的角度、房间的颜色或背景中的物体。
数据增强的目的是创建一个能够应对不同条件下变化的模型,它通过添加模拟真实世界条件的噪声来实现这一目标。例如,改变图像的亮度类似于在不同时间收集数据。
通过增加数据集的大小,数据增强也可以让我们训练更复杂的架构。换句话说,它有助于模型参数的收敛。
图像特征工程
图像特征工程的目标类似,我们想创建一个更加稳健的模型。但现在,我们需要删除不必要的噪声以进行准确的预测。换句话说,我们删除会随着不同条件而变化的变量。
通过提取图像的最重要的方面,我们也在简化问题。这使我们能够依赖于更简单的模型结构。这意味着我们可以使用更小的数据集来找到输入和目标之间的映射。
一个重要的区别在于如何在生产中处理这些方法。你的模型不会对增强后的图像进行预测。但是,在特征工程中,你的模型需要在它训练过的相同特征上进行预测。这意味着你必须能够在生产中进行特征工程。
Python图像特征工程
好的,考虑到这些,让我们开始特征工程。
我们将逐步讲解代码,你还可以在GitHub上找到该项目。
https://github.com/conorosully/medium-articles/blob/master/src/image_tools/image_features.ipynb
首先,我们使用以下导入。我们有一些标准包(2-3行)。Glob用于处理文件路径(第5行)。我们还有一些用于处理图像的包(第7-8行)。
#Imports
import numpy as np
import matplotlib.pyplot as plt
import glob
from PIL import Image
import