详解数据增强中的平移shft操作

embedded/2025/1/13 10:26:44/

Shift 平移是指在数据增强(data augmentation)过程中,通过对输入图像或目标进行位置偏移(平移),让目标在图像中呈现出不同的位置。Shift 平移的目的是增加训练数据的多样性,从而提高模型对目标在不同位置上的泛化能力。

1、Shift 平移的实现方式及步骤

1.1、平移的定义

  • 平移是将目标或图像内容在水平或垂直方向上移动。
  • 平移范围(shift range):定义平移的最大像素数,例如 ±16 像素表示目标可以随机移动 -16 到 +16 像素。

1.2、操作步骤

以图像为例:

  • 输入:目标所在的图像(即“搜索区域”)和目标框(目标的坐标)。
  • 平移操作
    • 选择一个随机平移的值:从范围 [−r,r](如 -16 到 +16 像素)中随机生成一个水平平移值 Δx和一个垂直平移值 Δy。
    • 移动目标框:将目标框的位置平移为(x+Δx,y+Δy)。
    • 对整个图像应用相应的平移:图像的内容会被相应地向左、右、上或下移动,边界位置的空白部分可以用填充值(如 0、均值或镜像填充)补充。

具体示例:假设我们有一张 255×255像素的图像,目标位于中心位置。

  1. 未平移(0-shift)
    • 目标始终在图像中心。
    • 输出的目标框位置不变,例如:(128,128)。
  2. 16-shift
    • 随机生成 Δx=10和 Δy=−12,目标向右移动 10 像素,向上移动 12 像素。
    • 输出的目标框位置为 (138,116)。
  3. 32-shift
    • 假设 Δx=−20,Δy=25,目标向左移动 20 像素,向下移动 25 像素。
    • 输出的目标框位置为 (108,153)。

2、平移后会产生的问题

如果目标进行了平移,那么目标离开了原位置,原位置就会出现一个空缺处,这个空缺处的像素是如何处理的?当目标进行平移后,原位置和新位置可能会出现空缺或溢出区域,这些区域需要用一定的策略进行填充处理,以保证图像的尺寸一致。

2.1、常见填充方法

(1)零填充(Zero Padding)

  • 用值为0的像素填充空缺区域。
  • 优点:实现简单,计算高效。
  • 缺点:容易引入与图像内容差异较大的边缘区域,可能对模型学习带来干扰。

(2)常数填充(Constant Padding)

  • 用一个固定的常数(如图像的平均值或中值)填充。
  • 优点:相对于零填充更平滑,可以减少填充值对模型的影响。
  • 缺点:可能无法完全匹配图像内容。

(3)镜像填充(Reflection Padding)

  • 用靠近空缺区域的像素的镜像值填充。
  • 优点:较自然,与图像内容保持一致性。
  • 缺点:实现稍微复杂。

(4)边缘复制填充(Replication Padding)

  • 将图像边界的像素值重复填充到空缺区域。
  • 优点:简单且保留了一定的内容一致性。
  • 缺点:可能引入边缘效应。

(5)随机填充(Random Padding)

  • 用随机生成的像素值填充空缺区域。
  • 优点:增加数据的多样性。
  • 缺点:可能引入噪声,干扰模型学习。

2.2、具体处理方式

(1)对空缺区域的填充

  • 当目标平移后,在目标原位置的空缺区域可以采用上述填充方式填补,确保图像尺寸一致。

(2)对目标超出边界的处理

  • 如果目标的平移导致部分内容超出图像边界,通常采取以下策略:
    • 裁剪(Clipping):将目标超出边界的部分直接裁剪掉。
    • 周期填充(Cyclic Padding):将图像视为环形空间,超出部分从对侧补充。
    • 延展(Extrapolation):用边界内容延展补充超出部分。

(3)背景填充

  • 如果目标是从目标框(bounding box)裁剪出的,则其背景部分可以直接用原图的背景填充。

2.3、实现中的常见选择

在许多深度学习框架中,常用以下组合处理:

  • 输入图像的填充:对于整个图像(如搜索区域),常用镜像填充或边缘复制填充。
  • 目标框的裁剪:将目标框平移到新的位置,如果部分超出边界,裁剪掉超出部分。

3、案例分析:以目标跟踪为例

当目标在平移时超出了图像边界,会导致目标的一部分“溢出”图像范围。

3.1、假设场景

  • 原图大小: 255×255像素。
  • 目标框大小: 127×127像素,初始位于图像中心。
  • 初始目标框位置:中心点为 (128,128),左上角为 (65,65),右下角为 (192,192)。
  • 平移操作
    • 水平平移 +80像素(向右)。
    • 垂直平移 +30像素(向下)。
    • 平移后,目标框的新位置为:
      • 左上角:(65+80,65+30)=(145,95)。
      • 右下角:(192+80,192+30)=(272,222)。

在此情况下,目标框的右底部超出了图像边界。

3.2、处理方法

3.2.1、裁剪目标框(Clipping the Bounding Box)

  • 方法:直接将超出图像边界的部分裁剪掉。
  • 操作
    • 裁剪右侧,使得目标框的右下角保持在图像范围内。
    • 新目标框为:
      • 左上角:(145,95)。
      • 右下角:(255,222)(右侧被限制为图像宽度 255)。
  • 优点:简单直接。
  • 缺点:如果目标框超出部分较大,可能丢失重要信息。

3.2.2、填充图像边界(Padding the Image Border)

  • 方法:在图像边界外扩展额外的区域,用特定方式填充。
  • 操作
    • 在图像的右侧和底部各扩展 17像素(差值为 272−255=17),填充方式可选:
      • 零填充:扩展的区域填充0值。
      • 镜像填充:用图像边界的像素值镜像填充。
      • 常数填充:填充固定值,如图像平均值。
    • 新图像大小:272×272。
  • 优点:保留目标完整性。
  • 缺点:增加图像大小,可能引入非真实数据。

3.2.3、部分目标遮挡(Partial Occlusion Simulation)

  • 方法:保留目标框在图像中的部分,将超出边界部分认为是“不可见”或“遮挡”。
  • 操作
    • 保留目标框的可见区域:
      • 左上角:(145,95)。
      • 右下角:(255,222)。
    • 超出图像右侧和底部的区域不处理(保留空白或设置为背景)。
  • 优点:模拟实际场景中的遮挡情况。
  • 缺点:丢失目标信息。

3.2.4、缩小目标框(Rescaling the Bounding Box)

  • 方法:在平移时缩小目标框的尺寸以适应图像边界。
  • 操作
    • 将目标框缩小 17像素,使其完全位于图像内。
    • 新目标框为:
      • 左上角:(145,95)。
      • 右下角:(255,222)。
  • 优点:目标框始终保持在图像范围内。
  • 缺点:可能导致目标框尺寸与实际目标不匹配。

http://www.ppmy.cn/embedded/153532.html

相关文章

华三S6520交换机配置console和ssh

目录 一、实验目的 二、实验设备 三、实验拓扑图 四、实验步骤 1、console用户名和密码 2、ssh用户名和密码 一、实验目的 实现对华三 S6520 交换机的 console 本地登录和 ssh 远程登录配置,确保能够通过 console 线在本地进行管理,并使用 SSH 协议进行安全的远程登录。…

android 启动页倒计时页面编写

一、需求和技术 1、实现5,4,3,2,1启动页倒计时 2、倒计时实现使用CountDownTimer 二、activity代码 public class OpenActivity extends AppCompatActivity {private Button in;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanc…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu, 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

自动化测试脚本实践:基于 Bash 的模块化测试框架

前言 在现代软件开发中,测试自动化是确保软件质量和稳定性的核心手段之一。随着开发周期的缩短和功能模块的增多,手动测试逐渐无法满足高效性和准确性的需求。因此,测试人员需要依赖自动化工具来提升测试效率,减少人为干预和错误。…

Github 2025-01-11 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2025-01-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10C项目1Swift项目1Yazi - 快速终端文件管理器 创建周期:210 天开发语言:Rust协议类型:MIT LicenseStar数量:5668 个Fork数量:122…

实现一个VSCode插件(从创建到发布)

实现一个自己的VSCode 插件 本文将以 yo 为例, 实现一个 VS Code 插件 从创建到发布。 文章目录 实现一个自己的VSCode 插件1. 初始化项目2. 项目结构3. 实现插件功能4. 测试和运行插件5. 发布6. 下载自己发布的插件 1. 初始化项目 首先,我们需要安装 …

openGauss 创建数据库

a. 使用如下命令创建一个新的表空间tpcds_local。 CREATE TABLESPACE tpcds_local RELATIVE LOCATION tablespace/tablespace_1 ; openGauss# CREATE TABLESPACE tpcds_local RELATIVE LOCATION tablespace/tablespace_1 ; CREATE TABLESPACE openGauss# b. 使用如下命令创…

前端开发:快速生成框架

html 标签是整个 html 文件的根标签 ( 最顶层标签 ):告诉浏览器,从这就开始html内容分析了 head 标签中写页面的属性 . title 标签中写的是页面的标题 body 标签中写的是页面上显示的内容 head和body是兄弟标签; head和title是父子标签…