Python深度学习之使用Albumentations对图像做增强
一、导入所需的库
import random
import cv2
from matplotlib import pyplot as plt
import albumentations as A
二、定义可视化函数显示图像上的边界框和类标签
可视化函数参考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)
三、获取图像和标注
在此示例中,我们将使用来自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)
四、使用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%。
五、定义增强管道
transform = A.Compose(
[A.RandomSizedBBoxSafeCrop(width=448, height=336, erosion_rate=0.2)],
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,
)
七、其他不同随机种子的示例
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,
)
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,
)
(资源库 www.zyku.net)
原文链接:https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/117077423
上一篇:Pytorch GPU内存占用很高,但是利用率很低如何解决
栏 目:Python教程
下一篇:pytorch model.cuda()花费时间很长的解决
本文标题:Python深度学习之使用Albumentations对图像做增强
本文地址:https://www.zyku.net/python/9692.html
您可能感兴趣的文章
- 09-11华为freelace耳机如何配对手机
- 12-21麦芒10返回键在哪里设置
- 01-11WiFi性能王-WiFi性能王应用软件功能介
- 03-19苹果13设置电话铃声步骤教程
- 09-22红米note9pro电池温度查看方法
- 09-13闽政通查询核酸检测结果方法分享
- 11-06苹果13promax怎么设置单击锁定屏幕
- 02-28帝国CMS高级应用—SQL调用会员空间反
- 05-06vivox60悬浮球功能设置方法
- 10-12真我gtneo2怎么屏蔽广告
- 11-12华为手机怎么设置字体大小
- 03-02WordPress修改登录后跳转的后台默认首
- 04-01realme gt设置dc调光教程
- 01-11乐减健身操-乐减健身操应用软件功能介
- 01-01识花君植物识别-识花君植物识别应用软
- 12-21华为mate30pro不用密码解锁方法
- 01-11来享WiFi-来享WiFi应用软件功能介绍
- 02-23DedeCMS子栏目调用标签sonchannel的使
- 03-04wordpress把页面设置为首页之后分页失
- 12-30焦虑抑郁宝-焦虑抑郁宝应用软件功能介
最近更新
阅读排行
猜你喜欢
- 07-08苹果11开启画中画功能方法
- 07-05鸿蒙系统显示流量方法分享
- 12-26有车云车生活-有车云车生活应用软件功
- 01-11澳门出行-澳门出行应用软件功能介绍
- 07-05Linux mtoolstest命令
- 05-06vivox60护眼模式开启方法
- 09-20钉钉直播授课教程分享
- 12-23HTML <command> 标签
- 10-01支付宝上线国庆出行防疫包专区入口介
- 01-11微图恢复清晰大师-微图恢复清晰大师应