news 2026/5/4 17:36:27

在大模型班学算法的笔记记录-模糊+深度学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在大模型班学算法的笔记记录-模糊+深度学习

在深度学习中,数据增强是提升模型泛化能力的核心手段之一。将模糊处理与深度学习结合,既能保留图像核心特征,又能强化模型的特征提取能力,是一种高效的图像数据增强思路。

一、模糊在深度学习数据增强中的应用思路

模糊处理用于数据增强的核心逻辑是:模糊图像会保留主体特征,弱化细节干扰,迫使模型学习更本质的特征。主要有两种实现方式:

  1. 生成纯模糊图像:对原始图像随机施加不同类型、不同尺度的模糊,直接作为增强数据;
  2. 模糊图像与原图融合:将模糊后的图像与原始图像按比例混合(mixup),兼顾特征保留与数据多样性(模糊尺度建议设置得更大,增强效果更显著)。

二、核心技术实现:随机模糊处理

功能说明

随机选择模糊核尺寸(3/5/7/9/11/15),随机选择模糊类型(中值模糊、均值模糊、高斯模糊),对图像进行模糊处理。

代码实现与注解

import cv2 import random import numpy as np # 辅助函数:显示图像(调试用) def show(img, title=''): cv2.imshow(title, img) cv2.waitKey(0) cv2.destroyAllWindows() # 补充:避免窗口残留 # 核心函数:随机模糊处理 def rnd_blur(image): # 1. 随机选择模糊核尺寸(奇数,符合OpenCV模糊函数要求) k_size = random.choice([3,5,7,9,11,15]) # 2. 随机生成0-1的浮点数,用于选择模糊类型 ratio = random.uniform(0, 1) blur_img = None # 初始化模糊图像变量 # 3. 按概率随机选择模糊类型 if ratio < 0.3: # 中值模糊:适合去除椒盐噪声,保留边缘 blur_img = cv2.medianBlur(image, k_size) elif 0.3 <= ratio < 0.6: # 均值模糊:简单平均,整体平滑 blur_img = cv2.blur(image, (k_size, k_size)) else: # 高斯模糊:模拟自然模糊,平滑效果更自然 blur_img = cv2.GaussianBlur(image, (k_size, k_size), 0) return blur_img # 测试随机模糊函数 if __name__ == "__main__": # 读取测试图像(BGR格式,OpenCV默认) path = r"/Users/yangjunhui/Desktop/lenaNoise.png" img1 = cv2.imread(path) # 生成模糊图像 bgr_blur = rnd_blur(img1) # 显示结果 show(bgr_blur, 'Random Blur Image')

关键函数注解

  • random.choice(seq):从列表/元组等可迭代对象中等概率随机选择一个元素(此处选模糊核尺寸);
  • random.uniform(a, b):生成[a, b)范围内的均匀分布随机浮点数(此处用于分配模糊类型概率);
  • cv2.medianBlur(img, ksize):中值模糊,ksize为模糊核尺寸(必须是奇数);
  • cv2.blur(img, (ksize, ksize)):均值模糊,参数为模糊核的宽高(通常设为相同奇数);
  • cv2.GaussianBlur(img, (ksize, ksize), 0):高斯模糊,最后一个参数为X方向高斯核标准差(设为0则自动根据核尺寸计算)。

三、核心技术实现:图像混合(mixup)

1. mixup基础原理

将两张图像按固定权重融合,公式为:融合图 = 图A×权重A + 图B×权重B + 亮度调节值

  • 优点:提升模型对目标的检出率,帮助模型“涨点”(准确率/精度提升);
  • 缺点:可能轻微提高误检率(需平衡权重控制)。

2. 基础实现:两张图像尺寸统一与融合

# 读取两张测试图像 img1 = cv2.imread(r"/Users/yangjunhui/Desktop/lenaNoise.png") img2 = cv2.imread("./imgs/20230925144601.jpg") # 步骤1:统一尺寸(以img1为基准) h, w = img1.shape[:2] # 获取img1的高度、宽度(shape[:2]:取前两个维度) img2 = cv2.resize(img2, (w, h)) # 将img2调整为与img1相同尺寸(dsize=(宽, 高)) # 方式1:手动加权融合(需转换数据类型避免溢出) last_img = (img2 * 0.5 + img1 * 0.5).astype(np.uint8) # 方式2:OpenCV内置函数(自动处理数据类型,更高效稳定) last_img = cv2.addWeighted(img2, 0.5, img1, 0.5, 0) # 显示融合结果 show(last_img, 'Mixup Image')

3. 封装为通用mixup函数

def mixup(img1, img2): """ 两张图像的mixup融合(统一尺寸后按0.5:0.5权重融合) :param img1: 基准图像(参考尺寸) :param img2: 待融合图像 :return: 融合后的图像 """ h, w = img1.shape[:2] img2 = cv2.resize(img2, (w, h)) # 统一尺寸 # cv2.addWeighted参数说明:img1, 权重1, img2, 权重2, 亮度调节值(gamma) mix_img = cv2.addWeighted(img2, 0.5, img1, 0.5, 0) return mix_img

四、进阶实现:模糊图像与原图的mixup融合

功能说明

先对原始图像做随机模糊,再将模糊图像与原图按随机权重(0.3~0.7)融合,兼顾随机性与增强效果。

封装函数实现

def blur_mixup(img): """ 模糊图像与原图的mixup融合 :param img: 原始图像 :return: 模糊+融合后的增强图像 """ # 步骤1:对原图做随机模糊 blur_img = rnd_blur(img) # 步骤2:随机生成融合权重(模糊图权重0.3~0.7,原图权重为1-该值) blur_ratio = random.uniform(0.3, 0.7) # 步骤3:加权融合 mix_img = cv2.addWeighted(blur_img, blur_ratio, img, 1 - blur_ratio, 0) return mix_img # 测试模糊+融合增强 if __name__ == "__main__": img = cv2.imread(r"/Users/yangjunhui/Desktop/lenaNoise.png") enhanced_img = blur_mixup(img) show(enhanced_img, 'Blur + Mixup Image')

核心逻辑

  • 模糊图像权重控制在0.3~0.7:避免模糊过度(权重过高)导致特征丢失,或模糊不足(权重过低)无增强效果;
  • 原图权重为1 - 模糊图权重:保证融合后像素值范围仍在0~255,避免过曝/过暗。

五、关键术语总结

  1. 涨点:模型训练中准确率、精度等指标的提升;
  2. mixup:图像加权融合技术,通过混合不同图像生成新样本,提升模型泛化能力;
  3. 模糊核尺寸:模糊处理的核心参数,需设为奇数(符合OpenCV函数要求),尺寸越大模糊效果越显著。

通过以上模糊+mixup的组合方式,可高效生成多样化的增强数据,帮助深度学习模型学习更鲁棒的特征,提升实际应用中的表现。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 9:07:45

Windows任务管理器中的内存指标解读

Windows任务管理器中的内存指标是诊断电脑卡顿、判断是否需要升级内存的关键。很多人看到内存占用高就紧张&#xff0c;但现代Windows系统的内存管理非常智能&#xff0c;高占用不等于有问题。我们来深入解读。一、如何找到内存指标&#xff1f; 打开任务管理器&#xff1a;Ctr…

作者头像 李华
网站建设 2026/5/1 6:04:18

C++ 原子变量与引用计数类的核心机制解析

C 原子变量与引用计数类的核心机制解析 1. ‌原子变量&#xff08;std::atomic&#xff09;的核心特性‌ ‌不可分割性‌&#xff1a;原子操作&#xff08;如、load、store&#xff09;不可被中断&#xff0c;确保多线程环境下的数据安全。‌无锁设计‌&#xff1a;底层使用C…

作者头像 李华
网站建设 2026/4/21 13:15:02

buuctf Misc(杂项) [HBNIS2018]caesar

小白解题题目如下打开附件根据题目名&#xff0c;猜测为凯撒加密直接粘贴在随波逐流&#xff0c;进行凯撒解密直接发现flagflag{flagiscaesar}

作者头像 李华
网站建设 2026/5/3 10:40:35

你对面向对象编程的理解,面向过程和面向对象有什么区别?

一、开篇&#xff1a;两种编程思想的核心定位 —— 从 “解题逻辑” 到 “工程哲学”编程的本质是 “用代码映射现实问题并解决”&#xff0c;而面向过程&#xff08;POP&#xff09; 与面向对象&#xff08;OOP&#xff09; 绝非 “语法层面的差异”&#xff0c;而是两种贯穿软…

作者头像 李华
网站建设 2026/5/2 0:09:54

Java--双向链表

1.双向链表2.模拟实现双向链表(一).构造节点类首先我们要明白&#xff0c;双向链表的每一个节点都包含一个数据域和两个指针域&#xff0c;一个指针域为前指针域&#xff0c;表示指向当前节点的前一个节点&#xff0c;一个指针域为后指针域&#xff0c;表示指向当前节点的后一个…

作者头像 李华
网站建设 2026/5/3 10:35:51

后端springboot框架入门学习--第三篇

自动配置 可以把自动配置想象成SpringBoot 提前为你准备了大量的 “配置模板”,当你的项目引入了某个依赖、存在某个类、配置了某个属性等等时,这个模板就会自动生效,帮你完成对应的配置。 自动配置的核心:@EnableAutoConfiguration注解触发,加载并筛选XXXAutoConfigura…

作者头像 李华