使用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


目录
相关文章
|
计算机视觉
albumentations图像增强库使用简易流程
albumentations图像增强库使用简易流程
478 0
|
1月前
|
机器学习/深度学习 人工智能 JSON
从“脸盲”到“火眼金睛”:我用Qwen3.5教会AI看懂春晚同款机器人
春晚人形机器人刷屏,你的 AI 能认出几个?基于 LlamaFactory Online 微调 Qwen3.5-35B-A3B,数百条数据一键训练,模型可精准识别宇树 H1 及应用场景,准确率大幅提升,彰显平台化工具垂直落地价值。
521 2
|
12月前
|
人工智能 算法
中国AI应用排行榜3月榜单发布,「AI四大天王」格局正式形成
2025年3月,中国AI应用排行榜发布!由AIGCRank制作,基于国内主流App市场及算法备案数据筛选200+款代表性AI应用排名。榜单显示夸克、DeepSeek、豆包、腾讯元宝形成“AI四大天王”格局,头部生态壁垒加深。通用助手主导市场,垂类赛道如教育、生成工具等多点开花。报告揭示中国AI市场进入“头部固化+垂类爆发”阶段,未来商业化路径将成为垂类应用突破关键。
2276 0
|
人工智能 自然语言处理 算法
魔搭上新啦! 智源千万级指令微调数据集Infinity-Instruct,Llama3.1仅微调即可接近GPT-4
智源研究院在今年6月推出了千万级指令微调数据集Infinity Instruct。Infinity Instruct在 Huggingface等平台发布后,快速到达了Huggingface Dataset的Trending第一
魔搭上新啦! 智源千万级指令微调数据集Infinity-Instruct,Llama3.1仅微调即可接近GPT-4
|
机器学习/深度学习 编解码 Go
YOLOv5-Face | 原理超精细讲解、训练步骤还原、C++边缘部署(就要这么学!!!)(一)
YOLOv5-Face | 原理超精细讲解、训练步骤还原、C++边缘部署(就要这么学!!!)(一)
1186 0
|
开发框架 JSON API
Python中FastAPI项目使用 Annotated的参数设计
Python中FastAPI项目使用 Annotated的参数设计
|
开发框架 Prometheus 监控
SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统
 业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件。 spring-boot-starter-actuator提供的是一系列HTTP或者JMX监控端点,通过监控端点我们可以获取到系统的运行统计信息,同时,我们可以自己选择开启需要的监控端点,也可以自定义扩展监控端点。 Actuator通过端点对外暴露的监控信息是JSON格式数据,我们需要使用界面来展示,目前使用比较多的就是Spring Boot Admin或者Prometheus + Grafana的方式
2093 57
|
数据采集 JavaScript 前端开发
使用Colly库进行高效的网络爬虫开发
使用Colly库进行高效的网络爬虫开发
|
编解码 自然语言处理 并行计算
【经典论文解读】YOLACT 实例分割(YOLOv5、YOLOv8实例分割的基础)
 YOLACT是经典的单阶段、实时、实例分割方法,在YOLOv5和YOLOv8中的实例分割,也是基于 YOLACT实现的,有必要理解一下它的模型结构和设计思路。
4972 0
|
Windows
模拟鼠标键盘操作(硬件模拟)
3.驱动级模拟(硬件模拟)  如果上面的方法你都试过了,可是你发现目标程序却仍然顽固的不接受你模拟的消息,寒~~~~~~~~~还好,我还剩下最后一招,这就是驱动级模拟:直接读写键盘的硬件端口!  有一些使用DirectX接口的游戏程序,它们在读取键盘操作时绕过了windows的消息机制,而使用DirectInput.这是因为有些游戏对实时性控制的要求比较高,比如赛车游戏,要求以最快速度响应键盘输入。
4815 0