了解使用AugLy的数据增强
介绍
机器学习和深度学习模型的一个常见问题是“过度拟合”。这意味着模型在训练数据集上的准确性非常高,但在测试数据上却没有较高的准确性。
为了解决过拟合问题,我们可以增加数据集的大小,即将模型暴露于新数据以获得更好的泛化。额外的数据并不总是可用的,收集起来可能具有挑战性,而且耗时且昂贵。在这种情况下,数据科学家使用称为“数据增强 (DA)”的过程。
使用数据增强,我们可以通过几种增强技术来扩展真实数据的大小。此过程在具有较小数据集和过拟合的模型的项目中是有益的。数据增强有助于提高模型的准确性。
机器学习和深度学习模型可以使用数据增强。可以增强图像、文本、音频和视频类型的数据。一些深度学习框架——Keras、Tensorflow、Pytorch 等具有内置的增强功能,而许多开源 Python 库是专门为增强而开发的。
针对不同数据类型的增强技术:
图像:图像的增强技术允许缩放、翻转、旋转、裁剪、改变亮度/对比度/清晰度/模糊、颜色过滤等等。
文本:文本的增强技术通过单词/句子改组、同义词替换、释义等来支持 NLP 任务。
音频和视频技术可以通过引入噪声、改变速度等来增强数据。
图像和文本数据增强
医疗保健、农业、制造、汽车等领域的计算机视觉项目处理图像处理,似乎受益于图像数据增强。同样,具有深度学习技术的自然语言处理 (NLP) 应用程序也受益于文本数据增强。本文重点介绍图像和文本增强。
所有生成的增强图像和文本都是独一无二的,我们可以使用增强技术的组合来构建用于模型训练的多样化数据集。
重要的是要了解,使用工具扩充数据集是高效且容易的,但选择适当的扩充选项或技术组合需要对手头的真实数据集有很好的了解和一定程度的经验。
有多个用于图像和文本的 Python 数据增强库,但我们将在本文中探索“Augly”库和一些增强技术。
什么是AugLy ?
AugLy 是 Facebook 最近推出的用于数据增强的 Python 开源项目。AugLy 旨在提高 AI 模型在训练和评估期间的稳健性。该库包括四种模式(音频、视频、图像和文本),并提供 100 多种数据增强方法。
在处理涉及音频、视频、图像或文本数据集的机器学习或深度学习项目时,该库可以增加数据并提高模型的性能。
AugLy 是如何工作的?
四种模式的 AugLy 库使用相同的接口。基于函数的技术以及基于类的方法可用于数据增强。强度函数定义图像变化的强度。当调用 AugLy 函数时,这些是使用参数定义的。为了更深入地了解数据是如何转换的,该函数为用户提供了转换后的信息。
现在让我们看看 AugLy 可用的一些数据增强技术。
使用 AugLy 进行图像数据增强
使用 pip 命令安装 AugLy
pip install augly
上面的命令是下载使用图像和文本模式所需的先决条件。
要安装音频和视频格式的附加依赖项,请使用以下命令
pip install augly[av]
pip 不安装 python-magic。要安装它,请运行以下命令。某些环境需要运行 AugLy
pip install python-magic-bin
如果你在 Google Colab 上运行本教程并遇到“No matching distribution found for python-magic-bin”错误,请改用此命令。
!sudo apt-get install python3-magic
对于 AugLy 的图像子库,我们将从'augly.'中导入'imaugs'子模型。utils 用于导入示例图像。
import os
import augly.image as imaugs
import augly.utils as utils
from IPython.display import display
在这里,我们定义了增强的图像路径。我们将使用鸟的示例图像。
# Image path setting
input = '/content/bird.jpg'
图像缩放
imaugs 的 AugLy 的'scale()' 函数可以用来缩放图像。该方法需要一个重要的参数来定义表示小图像或大图像的图像。如果将其设置为较低的值,则图像会很小。否则,图像被放大。
# Image Scaling with small factor
image = imaugs.scale(input, factor=0.1)
display(image)
# Image Scaling with large factor
image = imaugs.scale(input, factor=0.7)
display(image)
图像模糊
使用此选项,我们可以降低图像清晰度,创建模糊图像。
# Image Blurring
image = imaugs.blur(input, radius = 4.0)
display(image)
图像亮度
使用此选项,可以修改输入图像的亮度。
# Increasing Image Brightness
image = imaugs.brightness(input, factor=1.2)
display(image)
图像暗度
我们可以降低亮度以使具有相同亮度特征的图像更暗。
# Making Image Darker
image = imaugs.brightness(input, factor=0.3)
display(image)
图像对比度
我们可以使用以下命令更改图像的对比度。
# Changing Image Contrast
image = imaugs.contrast(input, factor=2.7)
display(image)
图像翻转 - 水平和垂直
使用这些命令,我们可以水平和垂直翻转图像。
#horizontal flip
image_h = imaugs.hflip(input)
display(image_h)
#vertical flip
image_v= imaugs.vflip(input)
display(image_v)
图像灰度要将图像更改为灰度,我们可以使用以下命令
#Grayscale image
image = imaugs.grayscale(input)
display(image)
图像退化(椒盐噪声)
要向输入图像添加噪声,请使用
# Degrading Image Pixels
image = imaugs.shuffle_pixels(input, factor=0.3)
display(image)
图像倾斜
此功能以随机角度倾斜图像。
# Image skew
image = imaugs.skew(input)
display(image)
图像透视变换
我们可以通过定义 sigma 值(即标准偏差)来执行图像转换。较高的 sigma 值将意味着更强烈的图像转换。
# Image Perspective Transform
aug = imaugs.PerspectiveTransform(sigma=20.0)
image=aug(input)
display(image)
图像纵横比
使用这种技术,我们可以控制纵横比,即图像的高度和宽度。
#Changing Aspect Ratio
aug = imaugs.RandomAspectRatio()
image=aug(input)
display(image)
图像裁剪
可以使用以下命令将图像裁剪为必要的像素大小 -
# Cropping Image
image = imaugs.crop(input,x1=0.2,x2=0.8,y1=0.2,y2=0.8)
display(image)
使用 AugLy 创建模因
使用“meme format()”技术,AugLy 可用于创建模因。这种方法通过提供文本和图像来生成代表模因的图像。
例如,使用的图像包含文本“LOL”。下面的代码片段运行“meme_format()”函数并转换图像。
# Creating a meme
display(
imaugs.meme_format(
input,
caption_height=75,
meme_bg_color=(0, 0, 0),
text_color=(255, 255, 255),
)
)
'caption_height'、'meme_bg_color' 和 'text_color' 等参数用于自定义 meme 的显示方式。黑色的 RGB 是 (0, 0, 0),而白色的 RGB 是 (256, 256, 256)。
将图像转换为屏幕截图
'Compose()' 方法用于改变图像的外观。此函数需要更多参数来进行新转换,例如饱和度和应用于图像的叠加类型。
# Applying several transformations together to create a new image
aug = imaugs.Compose(
[
imaugs.Saturation(factor=0.7),
imaugs.OverlayOntoScreenshot(
template_filepath=os.path.join(
utils.SCREENSHOT_TEMPLATES_DIR, "web.png"
),
),
imaugs.Scale(factor=0.9),
]
)
display(aug(input))
AugLy 提供了更多的增强技术。你可以通过使用下面的命令来探索这些,了解它们,并将它们与你的图像一起使用。
help(imaugs)
使用 AugLy 进行文本数据增强
第一步是导入包含文本数据增强方法的文本模态。
import augly.text as textaugs
然后,进行示例文本输入。
# Sample text
txt = "Hello, Good Morning! How are you?"
在每个文本中,“simulates_typos”函数可用于通过拼写错误、键盘距离和交换方法来增加文本数据。
aug_tx = textaugs.simulate_typos(txt)
print(aug_tx)
我们可以在每个输入文本中添加标点符号。
print(textaugs.insert_punctuation_chars(txt))
AugLy 的“replace_bidirectional”方法反转每个输入文本中的每个单词或单词的一部分,并使用双向标记以原始序列生成它。它单独反转每个单词,即使换行也能保持单词顺序。print(textaugs.replace_bidirectional(txt))
AugLy 的“replace_upside_down”函数根据粒度将文本中的单词倒置。print(textaugs.replace_upside_down(txt))
结论
在本文中,我们介绍了数据增强在改进机器学习和深度学习模型中的作用。此外,我们看到了不同的图像和文本增强技术。AugLy库支持多种增强技术。我们从 AugLy 库中探索了其中的一些。
本文的主要内容:
· 数据增强可以克服数据短缺,因为它允许从可用的真实数据中扩展数据集。
· 数据增强可以提高模型性能并使其更加可靠。
· 可以使用数据增强库来增强图像、文本、音频和视频格式的数据。有几个专门为数据增强而开发的开源 Python 库。
· AugLy 是 Facebook 开发的开源数据增强库,支持 100 多种增强技术,并且易于初学者使用,是不同类型数据的不错选择。
上面讨论的增强的代码可在我的 GitHub 存储库中找到。你可以尝试本文中分享的增强功能或探索 AugLy 库中的其他增强功能。