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

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)。
  • 优点:目标框始终保持在图像范围内。
  • 缺点:可能导致目标框尺寸与实际目标不匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954606.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux:地址空间(续)与进程控制

hello,各位小伙伴,本篇文章跟大家一起学习《Linux:地址空间与进程控制》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞&#xff0…

RabbitMQ(三)

RabbitMQ中的各模式及其用法 工作队列模式一、生产者代码1、封装工具类2、编写代码3、发送消息效果 二、消费者代码1、编写代码2、运行效果 发布订阅模式一、生产者代码二、消费者代码1、消费者1号2、消费者2号 三、运行效果四、小结 路由模式一、生产者代码二、消费者代码1、消…

ssh,samba,tftp,nfs服务安装和配置

前提准备 sudo ufw disable sudo ufw status sudo apt update ssh服务 sudo apt-get install openssh-server sudo apt-get install openssh-client sudo apt-get install ssh echo "PasswordAuthentication yes" >> /etc/ssh/ssh_config //配置ssh客户…

.NetCore 使用 NPOI 读取带有图片的excel数据

在.NetCore使用NPOI插件进行批量导入时,获取Excel中的所有的图片数据,存到集合中。 1.定义类PictureData 代码如下: public class PictureData { public byte[] Data { get; set; } } 2.数据集引用 using NPOI.XSSF.UserModel; usin…

MAC上安装Octave

1. 当前最新版Octave是9.3版本,需要把mac os系统升级到14版本(本人之前的版本是10版本) https://wiki.octave.org/Octave_for_macOS octave的历史版本参考此文档:Octave for macOS (outdated) - Octavehttps://wiki.octave.org/Oc…

文档智能:OCR+Rocketqa+layoutxlm <Rocketqa>

此次梳理Rocketqa,个人认为该篇文件讲述的是段落搜索的改进点,关于其框架:粗检索 重排序----(dual-encoder architecture),讲诉不多,那是另外的文章; 之前根据文档智能功能&#x…

算法每日双题精讲 —— 二分查找(二分查找,在排序数组中查找元素的第一个和最后一个位置)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!&#x1f4aa…

【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

从帝国理工的PPT学习。 什么是RDMA Remote Direct Memory Access,也就是Remote的DMA,是一种硬件机制,能直接访问远端结点的内存,而不需要处理器介入。 其中: Remote:跨node进行数据传输Direct&#xff…

「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 今天,您将学习如何使用进度线补充JavaScript 甘特图,以便于监控项目进度。 DHTMLX Gantt 最新试用版下载 …

爬虫后的数据处理与使用(使用篇--实现分类预测)

()紧接上文,在完成基本的数据处理后,接下来就是正常的使用了。当然怎么用,确实需要好好思考一下~ 上文:爬虫后的数据处理与使用(处理篇) 前言: 一般来说,我…

难绷,一种重命名+符号链接禁用EDR(Crowdstrike)的方法

最近看到的一个项目&#xff1a;https://github.com/rad9800/FileRenameJunctionsEDRDisable #include <windows.h>#include <winioctl.h>#include <stdio.h> typedef struct _REPARSE_DATA_BUFFER{ ULONG ReparseTag; USHORT ReparseDataLength; …

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

本文包含&#xff1a; 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览&#xff1a;需求分析、模型设计与数据加载 目录 第一部分&#xff1a;需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…

微信小程序-Docker+Nginx环境配置业务域名验证文件

在实际开发或运维工作中&#xff0c;我们时常需要在 Nginx 部署的服务器上提供一个特定的静态文件&#xff0c;用于域名验证或第三方平台验证。若此时使用 Docker 容器部署了 Nginx&#xff0c;就需要将该验证文件正确地映射&#xff08;挂载&#xff09;到容器中&#xff0c;并…

Python Wi-Fi密码测试工具

Python Wi-Fi测试工具 相关资源文件已经打包成EXE文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Python相关程序案例&#xff0c;秉着开源精神的想法&#xff0c;望大家喜欢&#xff0c;点…

usb通过hdc连接鸿蒙next的常用指令

参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…

前端性能-HTTP缓存

前言 开启 HTTP 缓存是提升前端性能的常见手段之一。通过缓存&#xff0c;浏览器可以临时存储资源&#xff0c;在后续请求中直接使用本地副本&#xff0c;从而有效减少 HTTP 请求次数&#xff0c;显著缩短网页加载时间。以下是 HTTP 缓存的几个关键点&#xff1a; 1、减少重复…

【Unity-Game4Automation PRO 插件】

Game4Automation PRO 插件 是一个用于 Unity 引擎 的工业自动化仿真工具&#xff0c;它提供了对工业自动化领域的仿真和虚拟调试支持&#xff0c;特别是在与工业机器人、生产线、PLC 系统的集成方面。该插件旨在将工业自动化的实时仿真与游戏开发的高质量 3D 可视化能力结合起来…

【Linux】--- 进程的等待与替换

进程的等待与替换 一、进程等待1、进程等待的必要性2、获取子进程status3、进程等待的方法&#xff08;1&#xff09;wait&#xff08;&#xff09;函数&#xff08;2&#xff09;waitpid函数 4、多进程创建以及等待的代码模型5、非阻塞接口 轮询 二、进程替换1、替换原理2、替…

一个超快低延迟.Net网络通信库:支持TCP, SSL, UDP, HTTP,HTTPS, WebSocket多协议

今天给大家推荐一个性能好、低延迟.Net网络通信库&#xff0c;基本支持所有协议。 01 项目简介 NetCoreServer是一个基于.NET Core的开源项目&#xff0c;一个高性能、跨平台的异步套接字服务器与客户端库。该项目支持多种传输协议&#xff0c;包括TCP、SSL、UDP、HTTP、HTTP…

苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)

营业额统计 service层 在需要处理空值、与数据库交互或使用集合时&#xff0c;Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…