使用Albumentations 对关键点 做增强

简介: 使用Albumentations 对关键点 做增强

目录


1、导入所需要的库


2、定义可视化图像关键点的函数


3、展示图像的关键点


4、定义一个简单的管道


5、扩充管道的更多示例


6、一个复杂的增强管道例子


在本示例中,我们将展示如何将Albumentations 应用于关键点增强的问题。 请参考变换列表及其支持的目标,以查看哪些空间级增强支持关键点。 您可以对具有关键点的图像使用任何像素级增强,因为像素级增强不会影响关键点。


注意:默认情况下,与关键点配合使用的增强功能不会在转换后更改关键点的标签。 如果要点的标签是特定于侧面的,则可能会引起问题。 例如,如果您有一个名为``左臂''的关键点并应用了HorizontalFlip增强,您将获得一个具有相同左臂标签的关键点,但现在看起来像是一个右臂关键点。 有关视觉示例,请参见本文末尾的图片。


如果您使用这种类型的关键点,请考虑使用为解决这种情况而专门创建的,来自albumentations-experimental的SymmetricKeypoints扩展。


1、导入所需要的库

import random

import cv2

from matplotlib import pyplot as plt

import albumentations as A

2、定义可视化图像关键点的函数

KEYPOINT_COLOR = (0, 255, 0) # Green

def vis_keypoints(image, keypoints, color=KEYPOINT_COLOR, diameter=15):

   image = image.copy()

   for (x, y) in keypoints:

       cv2.circle(image, (int(x), int(y)), diameter, (0, 255, 0), -1)

   plt.figure(figsize=(8, 8))

   plt.axis('off')

   plt.imshow(image)

得到图像和标注


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

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

定义关键点


我们将使用xy格式作为关键点的坐标。 每个关键点都有两个坐标定义,x是在x轴上的位置,y是在y轴上的位置。 请参阅本文,详细了解关键点坐标的格式-https://albumentations.ai/docs/getting_started/keypoints_augmentation/


keypoints = [

   (100, 100),

   (720, 410),

   (1100, 400),

   (1700, 30),

   (300, 650),

   (1570, 590),

   (560, 800),

   (1300, 750),

   (900, 1000),

   (910, 780),

   (670, 670),

   (830, 670),

   (1000, 670),

   (1150, 670),

   (820, 900),

   (1000, 900),

]

3、展示图像的关键点

vis_keypoints(image, keypoints)

tt.png



4、定义一个简单的管道

transform = A.Compose(

   [A.HorizontalFlip(p=1)],

   keypoint_params=A.KeypointParams(format='xy')

)

transformed = transform(image=image, keypoints=keypoints)

vis_keypoints(transformed['image'], transformed['keypoints'])

tt.png



5、扩充管道的更多示例

transform = A.Compose(

   [A.VerticalFlip(p=1)],

   keypoint_params=A.KeypointParams(format='xy')

)

transformed = transform(image=image, keypoints=keypoints)

vis_keypoints(transformed['image'], transformed['keypoints'])

tt.png



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


random.seed(7)

transform = A.Compose(

   [A.RandomCrop(width=768, height=768, p=1)],

   keypoint_params=A.KeypointParams(format='xy')

)

transformed = transform(image=image, keypoints=keypoints)

vis_keypoints(transformed['image'], transformed['keypoints'])

tt.png



random.seed(7)

transform = A.Compose(

   [A.Rotate(p=0.5)],

   keypoint_params=A.KeypointParams(format='xy')

)

transformed = transform(image=image, keypoints=keypoints)

vis_keypoints(transformed['image'], transformed['keypoints'])

tt.png



transform = A.Compose(

   [A.CenterCrop(height=512, width=512, p=1)],

   keypoint_params=A.KeypointParams(format='xy')

)

transformed = transform(image=image, keypoints=keypoints)

vis_keypoints(transformed['image'], transformed['keypoints'])

tt.png



random.seed(7)

transform = A.Compose(

   [A.ShiftScaleRotate(p=0.5)],

   keypoint_params=A.KeypointParams(format='xy')

)

transformed = transform(image=image, keypoints=keypoints)

vis_keypoints(transformed['image'], transformed['keypoints'])

tt.png



6、一个复杂的增强管道例子

random.seed(7)

transform = A.Compose([

       A.RandomSizedCrop(min_max_height=(256, 1025), height=512, width=512, p=0.5),

       A.HorizontalFlip(p=0.5),

       A.OneOf([

           A.HueSaturationValue(p=0.5),

           A.RGBShift(p=0.7)

       ], p=1),                          

       A.RandomBrightnessContrast(p=0.5)

   ],

   keypoint_params=A.KeypointParams(format='xy'),

)

transformed = transform(image=image, keypoints=keypoints)

vis_keypoints(transformed['image'], transformed['keypoints'])

tt.png


目录
相关文章
|
7月前
|
人工智能
【Mixup】探索数据增强技术:深入了解Mixup操作
【Mixup】探索数据增强技术:深入了解Mixup操作
689 0
|
6月前
|
人工智能 计算机视觉 Python
【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】(1)
【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】
【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】(1)
|
2月前
|
机器学习/深度学习 计算机视觉 Python
目标检测笔记(三):Mosaic数据增强完整代码和结果展示
本文介绍了Mosaic数据增强技术,通过将四张图片拼接成一张新图,极大丰富了目标检测的背景信息。文章提供了完整的Python代码,涵盖了如何处理检测框并调整其位置,以适应拼接后的图像。Mosaic技术不仅提高了学习效率,还在标准化BN计算时同时考虑了四张图片的数据,从而提升了模型的泛化能力。
137 1
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
图像数据增强库综述:10个强大图像增强工具对比与分析
在深度学习和计算机视觉领域,数据增强是提升模型性能和泛化能力的关键技术。本文全面介绍了10个广泛使用的图像数据增强库,分析其特点和适用场景,帮助研究人员和开发者选择最适合需求的工具。这些库包括高性能的GPU加速解决方案(如Nvidia DALI)、灵活多功能的Albumentations和Imgaug,以及专注于特定框架的Kornia和Torchvision Transforms。通过详细比较各库的功能、特点和适用场景,本文为不同需求的用户提供丰富的选择,助力深度学习项目取得更好的效果。选择合适的数据增强库需考虑性能需求、任务类型、框架兼容性及易用性等因素。
346 11
|
2月前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
216 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
机器学习/深度学习 JSON 数据可视化
YOLO11-pose关键点检测:训练实战篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程
本文介绍了如何将个人数据集转换为YOLO11-pose所需的数据格式,并详细讲解了手部关键点检测的训练过程。内容涵盖数据集标注、格式转换、配置文件修改及训练参数设置,最终展示了训练结果和预测效果。适用于需要进行关键点检测的研究人员和开发者。
409 0
|
4月前
|
机器学习/深度学习 数据采集 自动驾驶
深度学习之点云在预处理时的增强策略
在深度学习中,点云数据的增强策略主要用于提升模型的泛化能力和鲁棒性。点云是一种表示三维数据的形式,由一组三维坐标点组成,广泛应用于计算机视觉、自动驾驶和机器人等领域。对点云数据进行预处理和增强可以有效提高模型的性能。
99 4
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
在深度学习中,数据增强是一种常用的技术,用于通过增加训练数据的多样性来提高模型的泛化能力。`albumentations`是一个强大的Python库,用于图像增强,支持多种图像变换操作,并且可以与深度学习框架(如PyTorch、TensorFlow等)无缝集成。
|
6月前
|
计算机视觉
【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】(2)
【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】
|
物联网 PyTorch 算法框架/工具
数据增强之图像变换与自定义transforms
数据增强之图像变换与自定义transforms
140 0