当前位置: 首页 > news >正文

Mixup

1、Mixup

将两张图片按照一定的比例融合在一起、两张图像中的标注也合在一起

效果类似如下 :


2、代码示例 

from PIL import Image
import requests
import numpy as np
from pycocotools.coco import COCO
import matplotlib.pyplot as plt
import matplotlib.patches as patchesdef mixup(im, labels, im2, labels2):"""Applies MixUp augmentation by blending images and labels.See https://arxiv.org/pdf/1710.09412.pdf for details."""# 从 Beta分布中采样一个数值,作为2张图像 mixup 的比例r = np.random.beta(32.0, 32.0)  # mixup ratio, alpha=beta=32.0# 将 im 和 im2 的像素值按照比例叠加在一起im = (im * r + im2 * (1 - r)).astype(np.uint8)labels = np.concatenate((labels, labels2), 0)return im, labelsif __name__ == '__main__':dataDir = '/Users/dataset/COCO2017'annFile = '{}/annotations/instances_val2017.json'.format(dataDir)coco = COCO(annFile)image_ids = [296649, 397133]   # 找了2张尺寸一样的图像imgs = []labels = []for img_id in image_ids:img_url = coco.imgs[img_id]['coco_url']img_1 = Image.open(requests.get(img_url, stream=True).raw)imgs.append(np.array(img_1))label = [[anno['category_id']]+anno['bbox'] for anno in coco.imgToAnns[img_id]]labels.append(np.array(label))mixup_img, labels = mixup(imgs[0], labels[0], imgs[1], labels[1])plt.imshow(mixup_img)plt.axis('off')for bbox in labels[:, 1:]:rectangle = patches.Rectangle(bbox[:2], bbox[2], bbox[3], linewidth=1, edgecolor='r', facecolor='none')plt.gca().add_patch(rectangle)plt.show()


3、附

1)Beta 分布

(1)np.random.beta()

np.random.beta(a, b, size=None)
  • ab 是 Beta 分布的两个形状参数(shape parameters)。它们必须都大于零。这两个参数决定了 Beta 分布的形状,通常情况下,它们被称为 Alpha 和 Beta 参数。

  • size 是要生成的随机样本的数量,可以是一个整数或者一个表示数组形状的元组。

    • 如果不提供 size 参数,则返回一个单个随机数

    • 如果提供了 size 参数,则返回一个与 size 参数指定形状相同的数组。

(2)Beta 分布

  • np.random.beta 用于生成 Beta 分布的随机数

  • Beta 分布的随机采样点的取值范围在区间 (0, 1) 内的。这是因为 Beta 分布是一个定义在 (0, 1) 区间上的概率分布,其概率密度函数在该区间之外的值为零。Beta 分布的概率密度函数为:

  其中:

  • x是在 (0, 1) 区间内的随机变量

  • a和 b是 Beta分布的两个形状参数,要求a>0 且 b>0。

    • 当 a = b = 1 时,Beta 分布退化为(0,1)均匀分布

    • 当a = b < 1 时,表现为两头的概率大,中间的概率小

    • 当a = b \rightarrow 1时,相当于{0,1}二项分布,要么取0,要么取1

    • 当a = b > 1 时,表现为两头概率小,中间概率大,类似正态分布

    • 当a = b \rightarrow \infty 时,概率恒等于0.5

  • B(a,b) 是 Beta 函数,定义为:

 (3)当 a=32.0, b=32.0 时,Beta 分布如下

import numpy as np
import matplotlib.pyplot as plt# 生成一万个样本
samples = np.random.beta(32.0, 32.0, size=10000)# 绘制直方图
plt.hist(samples, bins=50, density=True, alpha=0.7, color='blue', edgecolor='black')# 添加标题和标签
plt.title('Beta Distribution (alpha=32.0, beta=32.0)')
plt.xlabel('Value')
plt.ylabel('Density')# 显示图形
plt.show()


2)astype(np.uint8) 

import numpy as npa = np.array([12, 279]).astype(np.uint8)
print(a)   # [12 23]

np.uint8 表示的是无符号8位整数类型,其取值范围为 0 到 255(即 2^8-1),如果处理的数据超过 255,则结果值为 原数据除以 256 取余数(在该数据类型中,溢出时会发生“模运算”)。 比如上面例子中的 279,处理结果值为 279 % 256 = 23

相关文章:

  • LeetCode热题100--234.回文链表--简单
  • 院校机试刷题第二天:1479 01字符串、1701非素数个数
  • 部署GraphRAG配置Neo4j实现知识图谱可视化【踩坑经历】
  • 用git下载vcpkg时出现Connection was reset时的处理
  • Yolov8的详解与实战-深度学习目标检测
  • 在Spark搭建YARN
  • [:, :, 1]和[:, :, 0] 的区别; `prompt_vector` 和 `embedding_matrix`的作用
  • Pinecone 向量数据库的连接以及增删改查操作讲解
  • 51单片机——交通指示灯控制器设计
  • Tailwind CSS 实战教程:从入门到精通
  • (C语言)超市管理系统(测试2版)(指针)(数据结构)(清屏操作)
  • UI 原型设计:交互规则的三要素——重要性、原则与实践
  • 浅析 Golang 内存管理
  • K8S redis 部署
  • nvrtc环境依赖
  • 数据库常见故障排查
  • Java GUI开发全攻略:Swing、JavaFX与AWT
  • 深入理解SpringBoot中的SpringCache缓存技术
  • 2025年PMP 学习十二 第9章 项目资源管理
  • iOS 阅后即焚功能的实现
  • 印称印巴军事行动总指挥同意将局势降级
  • OpenAI与微软正谈判修改合作条款,以推进未来IPO
  • 应急部:正在积极推动各地逐步科学建设改造应急避难场所
  • 上海与世界|环城生态公园带是上海绿色发展新名片
  • “80后”李灿已任重庆市南川区领导,此前获公示拟提名为副区长人选
  • 宝妈称宝宝在粽子中吃出带血创可贴,来伊份:已内部排查