如何使用Albumentations 对目标检测任务做增强

简介: 如何使用Albumentations 对目标检测任务做增强

目录


1、导入所需的库


2、定义可视化函数显示图像上的边界框和类标签


3、获取图像和标注


4、使用RandomSizedBBoxSafeCrop保留原始图像中的所有边界框


5、定义增强管道


6、输入用于增强的图像和边框


7、其他不同随机种子的示例


诸如RandomCrop和CenterCrop之类的某些增强功能可能会变换图像,使其不包含所有原始边界框。 本示例说明如何使用名为RandomSizedBBoxSafeCrop的变换来裁剪图像的一部分,但保留原始图像的所有边界框。


1、导入所需的库

import random

import cv2

from matplotlib import pyplot as plt

import albumentations as A

2、定义可视化函数显示图像上的边界框和类标签

可视化函数参考https://github.com/facebookresearch/Detectron/blob/master/detectron/utils/vis.py


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、获取图像和标注

在此示例中,我们将使用来自COCO数据集的图像,该图像具有两个关联的边界框。 该映像位于http://cocodataset.org/#explore?id=386298


从磁盘加载图像


image = cv2.imread('images/000000386298.jpg')

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

用坐标和类标签定义两个边界框


这些边界框的坐标使用coco格式声明。 每个边界框使用四个值[x_min, y_min, width, height]进行描述。 有关边界框坐标的不同格式的详细说明,请参阅有关边界框的文档文章-https://albumentations.ai/docs/getting_started/bounding_boxes_augmentation/。


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'}

展示图像的边框


visualize(image, bboxes, category_ids, category_id_to_name)

tt.png



4、使用RandomSizedBBoxSafeCrop保留原始图像中的所有边界框

RandomSizedBBoxSafeCrop crops a random part of the image. It ensures that the cropped part will contain all bounding boxes from the original image. Then the transform rescales the crop to height and width specified by the respective parameters. The erosion_rate parameter controls how much area of the original bounding box could be lost after cropping. erosion_rate = 0.2 means that the augmented bounding box's area could be up to 20% smaller than the area of the original bounding box.


RandomSizedBBoxSafeCrop裁剪图像的随机部分。 它确保裁剪的部分将包含原始图像的所有边界框。 然后,变换会将作物重新缩放为相应参数指定的高度和宽度。 erosion_rate参数控制裁剪后可能丢失原始边界框的面积。 frosting_rate = 0.2表示扩充后的边界框的面积可能比原始边界框的面积小20%。


5、定义增强管道

transform = A.Compose(

   [A.RandomSizedBBoxSafeCrop(width=448, height=336, erosion_rate=0.2)],

   bbox_params=A.BboxParams(format='coco', label_fields=['category_ids']),

)

6、输入用于增强的图像和边框

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


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,

)

tt.png




7、其他不同随机种子的示例

random.seed(3)

transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)

visualize(

   transformed['image'],

   transformed['bboxes'],

   transformed['category_ids'],

   category_id_to_name,

)

tt.png



random.seed(444)

transformed = transform(image=image, bboxes=bboxes, category_ids=category_ids)

visualize(

   transformed['image'],

   transformed['bboxes'],

   transformed['category_ids'],

   category_id_to_name,

)


tt.png

tt.png

目录
相关文章
|
4月前
|
数据可视化 PyTorch 算法框架/工具
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
115 1
|
算法 Go 文件存储
DAMO-YOLO: 兼顾速度与精度的新目标检测框架
我们团队最近开源了DAMO-YOLO!其效果达到了YOLO系列的SOTA,欢迎各位试用!​简介DAMO-YOLO是一个兼顾速度与精度的目标检测框架,其效果超越了目前的一众YOLO系列方法,在实现SOTA的同时,保持了很高的推理速度。DAMO-YOLO是在YOLO框架基础上引入了一系列新技术,对整个检测框架进行了大幅的修改。具体包括:基于NAS搜索的新检测backbone结构,更深的neck结构,精
822 0
DAMO-YOLO: 兼顾速度与精度的新目标检测框架
|
8天前
|
机器学习/深度学习 PyTorch 测试技术
PyTorch实战:图像分类任务的实现与优化
【4月更文挑战第17天】本文介绍了使用PyTorch实现图像分类任务的步骤,包括数据集准备(如使用CIFAR-10数据集)、构建简单的CNN模型、训练与优化模型以及测试模型性能。在训练过程中,使用了交叉熵损失和SGD优化器。此外,文章还讨论了提升模型性能的策略,如调整模型结构、数据增强、正则化和利用预训练模型。通过本文,读者可掌握基础的PyTorch图像分类实践。
|
11月前
|
机器学习/深度学习 人工智能 并行计算
【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码
在LabVIEW中调用YOLOv5快速实现实时物体识别,感受丝滑般物体识别
305 0
|
6月前
|
机器学习/深度学习 算法 PyTorch
OpenCV-图像着色(采用DNN模块导入深度学习模型)
OpenCV-图像着色(采用DNN模块导入深度学习模型)
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
常用数据增强方法(基于pytorch)
常用数据增强方法(基于pytorch)
142 0
|
9月前
|
机器学习/深度学习 PyTorch 算法框架/工具
使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 下
使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 下
|
9月前
|
机器学习/深度学习 存储 并行计算
使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 上
此项目使用的是著名的celebA(CelebFaces Attribute)数据集。其包含10,177个名人身份的202,599张人脸图片,每张图片都做好了特征标记,包含人脸bbox标注框、5个人脸特征点坐标以及40个属性标记,数据由香港中文大学开放提供(不包含商业用途的使用)。
|
11月前
|
机器学习/深度学习 编解码 监控
小目标Trick | Detectron2、MMDetection、YOLOv5都通用的小目标检测解决方案
小目标Trick | Detectron2、MMDetection、YOLOv5都通用的小目标检测解决方案
370 0
|
11月前
|
人工智能 并行计算 计算机视觉