使用Albumentations增强目标检测任务

这篇文章展示了如何利用Albumentations库在Python中对图像进行增强,包括水平翻转、旋转和色彩调整等操作,同时保持边界框和类标签的可视化。通过设置min_area和min_visibility参数,可以控制在图像变换后边界框的可见性和面积要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、导入所需的库
%matplotlib inline
import random
import cv2
from matplotlib import pyplot as plt
import albumentations as A
2、定义函数以可视化图像上的边界框和类标签
BOX_COLOR = (255, 0, 0) # Red
TEXT_COLOR = (255, 255, 255) # White


def visualize_bbox(img, bbox, class_name, color=BOX_COLOR, thickness=2):
    """Visualizes a single bounding box on the image"""
    x_min, y_min, w, h = bbox
    x_min, x_max, y_min, y_max = int(x_min), int(x_min + w), int(y_min), int(y_min + h)
   
    cv2.rectangle(img, (x_min, y_min), (x_max, y_max), color=color, thickness=thickness)
    
    ((text_width, text_height), _) = cv2.getTextSize(class_name, cv2.FONT_HERSHEY_SIMPLEX, 0.35, 1)    
    cv2.rectangle(img, (x_min, y_min - int(1.3 * text_height)), (x_min + text_width, y_min), BOX_COLOR, -1)
    cv2.putText(
        img,
        text=class_name,
        org=(x_min, y_min - int(0.3 * text_height)),
        fontFace=cv2.FONT_HERSHEY_SIMPLEX,
        fontScale=0.35, 
        color=TEXT_COLOR, 
        lineType=cv2.LINE_AA,
    )
    return img


def visualize(image, bboxes, category_ids, category_id_to_name):
    img = image.copy()
    for bbox, category_id in zip(bboxes, category_ids):
        class_name = category_id_to_name[category_id]
        img = visualize_bbox(img, bbox, class_name)
    plt.figure(figsize=(12, 12))
    plt.axis('off')
    plt.imshow(img)
3、从磁盘加载图像
image = cv2.imread('images/000000386298.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
4、用坐标和类标签定义两个边界框
bboxes = [[5.66, 138.95, 147.09, 164.88], [366.7, 80.84, 132.8, 181.84]]
category_ids = [17, 18]

# We will use the mapping from category_id to the class name
# to visualize the class label for the bounding box on the image
category_id_to_name = {17: 'cat', 18: 'dog'}
5、使用边界框可视化原始图像
visualize(image, bboxes, category_ids, category_id_to_name)

在这里插入图片描述

6、定义一个增强的管道
transform = A.Compose(
    [A.HorizontalFlip(p=0.5)],
    bbox_params=A.BboxParams(format='coco', label_fields=['category_ids']),
)

我们出于可视化目的修复随机种子,因此增强将始终产生相同的结果。在实际的计算机视觉管道中,不应在对图像应用转换之前修复随机种子,因为在这种情况下,管道将始终输出相同的图像。图像增强的目的是每次使用不同的变换。

random.seed(7)
transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)
visualize(
    transformed['image'],
    transformed['bboxes'],
    transformed['category_ids'],
    category_id_to_name,
)

在这里插入图片描述

7、另一个例子
transform = A.Compose(
    [A.ShiftScaleRotate(p=0.5)],
    bbox_params=A.BboxParams(format='coco', label_fields=['category_ids']),
)
random.seed(7)
transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)
visualize(
    transformed['image'],
    transformed['bboxes'],
    transformed['category_ids'],
    category_id_to_name,
)

在这里插入图片描述

8、定义一个比较复杂的增强管道
transform = A.Compose([
        A.HorizontalFlip(p=0.5),
        A.ShiftScaleRotate(p=0.5),
        A.RandomBrightnessContrast(p=0.3),
        A.RGBShift(r_shift_limit=30, g_shift_limit=30, b_shift_limit=30, p=0.3),
    ],
    bbox_params=A.BboxParams(format='coco', label_fields=['category_ids']),
)
random.seed(7)
transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)
visualize(
    transformed['image'],
    transformed['bboxes'],
    transformed['category_ids'],
    category_id_to_name,
)

在这里插入图片描述

min_area 和 min_visibility 参数
  • 如果应用空间增强(例如,裁剪图像的一部分或调整图像大小),边界框的大小可能会更改。
  • min_area 和 min_visibility 参数控制 Albumentations 在扩充后大小发生变化时应对增强边界框执行的操作。如果应用空间增强(例如,裁剪图像的一部分或调整图像大小),边界框的大小可能会更改。
  • min_area 是以像素为单位的值。 如果增强后边界框的面积小于 min_area,Albumentations 将丢弃该框。 因此,返回的增强边界框列表将不包含该边界框。
  • min_visibility 是一个介于 0 和 1 之间的值。如果增强后的边界框面积与增强前的边界框面积之比小于 min_visibility,Albumentations 将丢弃该框。 因此,如果扩充过程削减了大部分边界框,则该框将不会出现在扩充边界框的返回列表中。
如果您没有通过 min_area 和 min_visibility 参数,Albumentations 将使用 0 作为它们的默认值。
transform = A.Compose(
    [A.CenterCrop(height=280, width=280, p=1)],
    bbox_params=A.BboxParams(format='coco', label_fields=['category_ids']),
)
transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)
visualize(
    transformed['image'],
    transformed['bboxes'],
    transformed['category_ids'],
    category_id_to_name,
)

在这里插入图片描述

接下来,我们将设置 min_area 值为 4500 像素。
transform = A.Compose(
    [A.CenterCrop(height=280, width=280, p=1)],
    bbox_params=A.BboxParams(format='coco', min_area=4500, label_fields=['category_ids']),
)
transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)
visualize(
    transformed['image'],
    transformed['bboxes'],
    transformed['category_ids'],
    category_id_to_name,
)

在这里插入图片描述

最后,我们将设置 min_visibility 到 0.3。因此,如果输出边界框的面积小于原始区域的 30%,则 Albumentations 将不会返回该边界框。
transform = A.Compose(
    [A.CenterCrop(height=280, width=280, p=1)],
    bbox_params=A.BboxParams(format='coco', min_visibility=0.3, label_fields=['category_ids']),
)
transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)
visualize(
    transformed['image'],
    transformed['bboxes'],
    transformed['category_ids'],
    category_id_to_name,
)

在这里插入图片描述
输出不包含任何边界框。

### 回答1: albumentations 是一个 Python 库,用于图像增强和数据增强。它支持目标检测任务,可以用于生成随机变换和增强,以提高模型的鲁棒性和泛化能力。它提供了许多预定义的变换和增强,如旋转、缩放、裁剪、翻 ### 回答2: Albumentations 是一个功能强大的图像增强库,支持目标检测任务。在目标检测中,图像增强是一种重要的预处理技术,可以提高模型的性能和鲁棒性。 Albumentations 提供了许多图像增强操作,包括旋转、裁剪、缩放、平移、翻转等。它还支持各种颜色空间转换和调整,如亮度、对比度、饱和度、色调等。这些增强操作可以应用于图像和对应的边界框,以保持目标的位置和大小的同步。 在目标检测中,数据增强对于解决数据不平衡、过拟合和模型泛化能力不足等问题非常重要。使用 Albumentations 可以生成更多多样化的训练样本,增加数据的多样性和数量,从而善模型的泛化能力。 Albumentations 还提供了一些专门针对目标检测任务增强操作,如随机裁剪、填充、尺度变换等,这些操作可以保持目标的宽高比例,以避免目标失真。它还支持在增强后自动调整边界框的位置和大小。 在使用 Albumentations 进行目标检测时,需要注意选取适合任务和数据集的增强操作,并确保增强后的图像和边界框仍然保持有效的对应关系。此外,还需注意过度增强可能导致模型难以学习。 总之,Albumentations 提供了丰富的图像增强支持,可以帮助目标检测模型的性能和鲁棒性。通过合理选择和应用增强操作,可以增加数据的多样性和数量,提高模型的泛化能力和准确性。 ### 回答3: Albumentations 是一个功能强大的图像增强库,可以用于目标检测任务。它提供了一系列用于数据增强的方法,可以帮助我们扩充数据集,提高模型的泛化能力和鲁棒性。 对于目标检测任务Albumentations 提供了多种增强方法。首先,它包括了基本的几何变换,如缩放、旋转和平移等。这些方法可以帮助我们变目标在图像中的位置和角度,增加数据的多样性。 此外,Albumentations 还提供了包括亮度、对比度、饱和度等颜色转换方法,可以变图像的色彩特性。这些方法可以模拟不同的光照条件,使模型对不同亮度和颜色的目标有更好的识别能力。 另外,Albumentations 还提供了一些专门用于目标检测增强方法,如随机遮挡和挖空。随机遮挡可以模拟目标被其他物体遮挡的情况,挖空则可以模拟目标部分缺失的情况。通过使用这些方法,我们可以生成更具挑战性的数据,提高模型对目标部分遮挡或缺失的鲁棒性。 总之,Albumentations 是一个非常强大的图像增强库,能够帮助我们在目标检测任务中扩充数据集、提高模型的泛化能力和鲁棒性。通过使用 Albumentations,我们可以轻松地实现各种图像增强方法,并目标检测模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和风细动帘帷暖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值