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

【目标分类图像增强方法】

图像增强方法及其原理

目标分类图像增强是一种用于提高深度学习模型泛化能力的技术,通过在训练过程中对原始图像进行各种变换来增加模型所见数据的多样性。以下是几种常见的图像增强方法及其原理:

  1. 几何变换

    • 旋转(Rotation) :以一定角度随机旋转图像,使模型能够识别目标在不同方向上的表现。
    • 翻转(Flip) :水平或垂直翻转图像,模拟镜像效果。
    • 缩放(Scaling) :改变图像大小,训练模型适应不同尺度的目标。
    • 裁剪与填充(Cropping and Padding) :随机裁剪图像的一部分并重新填充到原始尺寸,或在图像边缘添加填充以改变目标的位置。
  2. 颜色空间变换

    • 亮度调整(Brightness Adjustment) :通过改变图像的整体亮度来模拟光照变化。
    • 对比度调整(Contrast Adjustment) :改变图像中像素之间的灰度差异,增强或减弱细节。
    • 饱和度调整(Saturation Adjustment) :改变色彩饱和度,影响图像色彩的鲜艳程度。
    • 色调/色相调整(Hue Adjustment) :改变图像的整体色彩倾向。
  3. 噪声注入

    • 高斯噪声(Gaussian Noise) :在图像上添加符合高斯分布的随机噪声,模拟传感器噪声或信道干扰。
    • 椒盐噪声(Salt and Pepper Noise) :随机将部分像素点置为白色或黑色,模拟图像中的坏点和缺失像素。
  4. 混合模式

    • 图像混合(Blending) :将两张图片按照一定的透明度混合在一起,模拟遮挡或多目标场景。
  5. 仿射变换(Affine Transformation) :包括平移、旋转、缩放以及剪切等综合变换,保证变换后图像的局部形状不变。

  6. 随机擦除(Random Erasing) :随机选择图像区域并用均值或者随机像素填充,以此来模拟目标部分遮挡的情况。

  7. Cutout 或 CutMix

    • Cutout:随机删除图像的矩形区域,迫使模型关注其它未被遮盖的部分。
    • CutMix:将一张图像的一部分替换为另一张图像的相应部分,并更新标签以反映这种混合,这样既增强又增加了类别间的交互。
  8. MixUp:线性插值两张图像和它们的标签,生成新的训练样本,旨在创建两个类别间的中间过渡样本。

以上这些增强技术通常在深度学习框架如TensorFlow、PyTorch中通过相应的库实现,例如tf.imagetorchvision.transforms等,可以在训练前实时应用于每一批次的训练数据,无需预先处理整个数据集。

代码示例

1. 几何变换

  • 旋转(Rotation)

    • 原理:随机旋转图像,增加模型对目标物体不同角度的识别能力。

    • 示例(使用albumentations):

      import albumentations as A
      transform = A.Compose([A.Rotate(limit=30, p=0.5)  # 随机旋转0到30度
      ])
      
  • 翻转(Flip)

    • 原理:水平或垂直翻转图像,模拟镜像效果,提高模型对左右对称性的识别能力。

    • 示例(使用torchvision.transforms):

      from torchvision.transforms import RandomHorizontalFlip, RandomVerticalFlip
      transforms = Compose([RandomHorizontalFlip(p=0.5),  # 水平翻转概率为0.5RandomVerticalFlip(p=0.5)    # 垂直翻转概率为0.5
      ])# 或者使用单一的RandomFlip
      from torchvision.transforms import RandomFlip
      transforms = Compose([RandomFlip(  # 可以指定方向,不指定则默认考虑水平和垂直horizontal=True,vertical=True,p=0.5,)
      ])
      

2. 颜色空间变换

  • 亮度调整(Brightness Adjustment)

    • 原理:通过改变像素的亮度值来模拟光照变化。

    • 示例(使用albumentations):

      import albumentations as A
      transform = A.Compose([A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5)
      ])# 或者使用torchvision.transforms.ColorJitter单独调整亮度
      from torchvision.transforms import ColorJitter
      transforms = Compose([ColorJitter(brightness=0.2)
      ])
      
  • 对比度调整(Contrast Adjustment)

    • 原理:调整图像整体或局部区域的对比度,增强或减弱细节表现。
    • 示例(继续使用albumentations中的RandomBrightnessContrast):

3. 裁剪与填充(Cropping and Padding)

  • RandomResizedCrop

    • 原理:随机裁剪并缩放图像的一部分。

    • 示例(使用torchvision.transforms):

      from torchvision.transforms import RandomResizedCrop
      transforms = Compose([RandomResizedCrop(size=(224, 224), scale=(0.08, 1.0))
      ])
      

4. 其他增强

  • 随机擦除(RandomErasing)

    • 原理:随机擦除图像的部分区域,训练模型关注缺失信息时也能正确分类。

    • 示例(使用albumentations):

      import albumentations as A
      transform = A.Compose([A.RandomErasing(p=0.5)
      ])
      

5. 混合模式(CutMix, MixUp)

  • CutMix

    • 原理:将一张图像的一部分替换为另一张图像的相应部分,并更新标签,促进类别间的边界学习。

    • 示例(使用albumentations的CutMix类):

      from albumentations.augmentations.mixup import CutMix
      transform = A.Compose([CutMix(num_classes=num_classes, alpha=1.0)
      ])
      
  • MixUp

    • 原理:线性插值两张图像和它们的标签,创建数据集之间的过渡样本。
    • torchvision自身没有直接提供MixUp实现,但可以自定义一个。

目标分类图像增强应用

  1. 翻转(Flip):将图像在水平或垂直方向上进行翻转,可以增加数据集的多样性。原理是通过改变图像的坐标系来实现。
  2. 缩放(Scale):对图像进行放大或缩小,可以增加数据集的多样性。原理是通过改变图像的尺寸来实现。
  3. 旋转(Rotate):将图像绕中心点旋转一定角度,可以增加数据集的多样性。原理是通过改变图像的角度来实现。
  4. 平移(Shift):将图像在水平和垂直方向上进行平移,可以增加数据集的多样性。原理是通过改变图像的位置来实现。
  5. 裁剪(Crop):从图像中截取一部分区域,可以增加数据集的多样性。原理是通过改变图像的区域来实现。
  6. 颜色变换(Color Jitter):对图像的颜色进行变换,如亮度、对比度、饱和度等,可以增加数据集的多样性。原理是通过改变图像的颜色属性来实现。
  7. 噪声注入(Noise Injection):向图像中添加噪声,可以提高模型的鲁棒性。原理是通过向图像中添加随机噪声来实现。

下面是一个使用Python和OpenCV实现图像增强的代码示例:

import cv2
import numpy as npdef random_flip(image, prob=0.5):if np.random.rand() < prob:image = cv2.flip(image, 1)return imagedef random_scale(image, scale_range=(0.8, 1.2), prob=0.5):if np.random.rand() < prob:scale = np.random.uniform(scale_range[0], scale_range[1])h, w = image.shape[:2]new_h, new_w = int(h * scale), int(w * scale)image = cv2.resize(image, (new_w, new_h))return imagedef random_rotate(image, angle_range=(-30, 30), prob=0.5):if np.random.rand() < prob:angle = np.random.uniform(angle_range[0], angle_range[1])h, w = image.shape[:2]M = cv2.getRotationMatrix2D((w / 2, h / 2), angle, 1)image = cv2.warpAffine(image, M, (w, h))return imagedef random_shift(image, shift_range=(-10, 10), prob=0.5):if np.random.rand() < prob:h, w = image.shape[:2]dx = np.random.randint(shift_range[0], shift_range[1])dy = np.random.randint(shift_range[0], shift_range[1])M = np.float32([[1, 0, dx], [0, 1, dy]])image = cv2.warpAffine(image, M, (w, h))return imagedef random_crop(image, crop_size=(224, 224), prob=0.5):if np.random.rand() < prob:h, w = image.shape[:2]new_h, new_w = crop_sizestart_x = np.random.randint(0, w - new_w)start_y = np.random.randint(0, h - new_h)image = image[start_y:start_y + new_h, start_x:start_x + new_w]return imagedef random_color_jitter(image, brightness=0.1, contrast=0.1, saturation=0.1, hue=0.1, prob=0.5):if np.random.rand() < prob:alpha = 1 + np.random.uniform(-brightness, brightness)beta = np.random.uniform(-contrast, contrast)gamma = np.random.uniform(-saturation, saturation)hue_delta = np.random.uniform(-hue, hue)image = cv2.addWeighted(image, alpha, image, 0, beta)image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)image[:, :, 1] = image[:, :, 1] * (1 + gamma)image[:, :, 0] = (image[:, :, 0] + hue_delta) % 180image = cv2.cvtColor(image, cv2.COLOR_HSV2BGR)return imagedef random_noise_injection(image, noise_level=0.05, prob=0.5):if np.random.rand() < prob:noise = np.random.randn(*image.shape) * noise_levelimage = image + noiseimage = np.clip(image, 0, 255).astype(np.uint8)return image

在训练过程中随机应用这些函数,以提高模型的泛化能力。

相关文章:

【目标分类图像增强方法】

图像增强方法及其原理 目标分类图像增强是一种用于提高深度学习模型泛化能力的技术&#xff0c;通过在训练过程中对原始图像进行各种变换来增加模型所见数据的多样性。以下是几种常见的图像增强方法及其原理&#xff1a; 几何变换&#xff1a; 旋转&#xff08;Rotation&#…...

游戏盾如何应对微商城网站DDoS攻击

游戏盾如何应对微商城网站DDoS攻击&#xff1f;随着电子商务的快速发展&#xff0c;微商城网站已成为众多商家开展在线业务的重要平台。然而&#xff0c;与此同时&#xff0c;网络安全威胁也愈发严重。其中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常…...

安卓手机如何使用JuiceSSH实现公网远程连接本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...

钉钉群内自定义机器人发送消息功能实现

文章目录 钉钉群内自定义机器人发送消息功能实现1、设置webhook自定义机器人2、查看官方文档&#xff0c;使用open api3、编写业务代码4、发送成功结果如下 钉钉群内自定义机器人发送消息功能实现 1、设置webhook自定义机器人 设置关键词 添加完成后&#xff0c;获得改机器人的…...

网站维护3年15000元,贵不贵?市场价多少

一般来说&#xff0c;给公司做好网站上线之后&#xff0c;网站就进入了运维期间&#xff0c;某功力公司给客户收费3年15000元网站运维费用&#xff0c;到底高不高呢&#xff1f; 首先&#xff0c;来看看网站运维都有哪些项目 网站运维涉及多个项目和任务&#xff0c;包括但不限…...

ROS 2基础概念#5:执行器(Executor)| ROS 2学习笔记

在ROS 2中&#xff0c;Executor是一个核心概念&#xff0c;负责管理节点&#xff08;Node&#xff09;中的回调函数&#xff0c;如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调&#xff0c;从而在ROS 2系统中实现异步编程。 ROS 2 …...

Unity 动画(旧版-新版)

旧版 旧版-动画组件&#xff1a;Animation 窗口-动画 动画文件后缀: .anim 将制作后的动画拖动到Animation组件上 旧版的操作 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c1 : MonoBehaviour {// Start is called before…...

Linux和Windows操作系统线程调度策略

本文介绍Linux和Windows操作系统线程调度策略。 不同的操作系统具有不同的线程调度策略&#xff0c;本文针对常见的操作系统&#xff08;Linux和Windows操作系统&#xff09;对其线程调度策略作简要说明&#xff0c;并不对其内在运行机制作详细介绍。 1.Linux操作系统线程调度…...

[OpenWrt 22.03] ttylogin添加登录密码与禁止登录的配置

ttylogin 的使用 Openwrt 串口默认是没有密码的。Openwrt启动后,一个默认的密码将被启用去保护ssh登录和页面(http)登录,而串口登录密码却是空缺的。 对于 Openwrt,当内核初始化后,就会启动第一个进程 init,init进程会进行一系列的系统初始化工作,然后会读取 /etc/in…...

RK3568平台 USB数据包的收发格式

一.USB硬件拓扑结构 compound device &#xff1a;多个设备组合起来&#xff0c;通过HUB跟Host相连composite device &#xff1a;一个物理设备有多个逻辑设备(multiple interfaces) 在软件开发过程中&#xff0c;我们可以忽略Hub的存在&#xff0c;硬件拓扑图简化如下&#x…...

Day 8.TCP通信

TCP通信 TCP发端&#xff1a; socket connect send recv close TCP收端&#xff1a; socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能&#xff1a;发…...

小游戏加固方案已全面适配微信、QQ、抖音、快手、美团、华为、支付宝渠道

2023年&#xff0c;国内移动游戏收入与游戏用户规模双双创下历史新高。其中小游戏异军突起&#xff0c;市场规模达到200亿元&#xff0c;同比增长300%&#xff0c;成了万众瞩目的行业新风口。 小游戏的高速发展带来了更多的活力&#xff0c;产出了多款月流水过亿的热门游戏。行…...

粉色ui微信小程序源码/背景图/头像/壁纸小程序源码带流量主

云开发版粉色UI微信小程序源码&#xff0c;背景图、头像、壁纸小程序源码&#xff0c;带流量主功能。 云开发小程序源码无需服务器和域名即可搭建小程序另外还带有流量主功能噢&#xff01;微信平台注册小程序就可以了。 这套粉色UI非常的好看&#xff0c;里面保护有背景图、…...

chrome选项页面options page配置

options 页面用以定制Chrome浏览器扩展程序的运行参数。 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”&#xff0c;打开chrome://extensions页面&#xff0c;可以看到有的Google Chrome扩展程序有“选项Options”链接&#xff0c;如下图所示。单击“选项Options”…...

迭代器失效问题(C++)

迭代器失效就是迭代器指向的位置已经不是原来的含义了&#xff0c;或者是指向的位置是非法的。以下是失效的几种情况&#xff1a; 删除元素&#xff1a; 此处发生了迭代器的失效&#xff0c;因为erase返回的是下一个元素的位置的迭代器&#xff0c;所以在删除1这个元素的时候&…...

2-web端管理界面使用rabbitmq

Web管理界面可以直接操作RabbitMQ&#xff0c;下面进行操作并记录步骤 1、添加交换器&#xff1a; Add a new exchange 中&#xff0c;Name是交换器名称&#xff0c;Type是交换器类型&#xff0c;有direce、fanout、heders、topic 4种。 这里先只填Name和选个类型&#xff0c;…...

【华为OD机试】最多购买宝石数目【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述: 橱窗里有一排宝石,不同的宝石对应不同的价格, 宝石的价格标记为gems[i],0<=i<n, n = gems.length 宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续; 例如…...

RK3588 Android 12 源码编译与开发板烧录

前言 开发板型号&#xff1a;RK_EVB7_RK3588_LP4…_V11 获取RK3588源码 解压RK提供的Android 12的tgz&#xff0c;开通权限 your_verify.sh # 身份验证脚本&#xff08;由RK提供&#xff09; .repo/repo/repo sync -l # 检出代码 .repo/repo/repo sync -c # 同…...

学习JAVA的第十四天(基础)

目录 Collection集合 迭代器遍历 增强for遍历 Lambda表达式遍历 List集合 遍历 数据结构 栈 队列 数组 链表 前言&#xff1a; 学习JAVA的第十三天 Collection集合 Collection的遍历方式&#xff1a; 迭代器&#xff08;不依赖索引&#xff09;遍…...

安捷伦N5182A信号源 AgilentN5182A

描述&#xff1a; 1&#xff09;信号特性&#xff1a; 250 kHz to 3 or 6 GHz频率范围 (可选低至 100 kHz) 13 dBm 1GHz输出功率 5dBm输出功率时W-CDMA动态范围:单载波 ≤-73 dBc &#xff1b;4载波≤-66 dBc ≤1.2 ms切换速度在SCPI模式 2&#xff09;调制与扫描&#x…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...