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

视觉处理基础2

目录

1.池化层

1.1 概述

1.2 池化层计算

1.3 步长Stride

1.4 边缘填充Padding

1.5 多通道池化计算

1.6 池化层的作用

2. 卷积拓展

2.1 二维卷积

2.1.1 单通道版本

2.1.2 多通道版本

2.2 三维卷积

2.3 反卷积

2.4 空洞卷积(膨胀卷积)

2.5 可分离卷积

2.5.1 空间可分离卷积

2.5.2 深度可分离卷积

2.6 扁平卷积

2.7 分组卷积

2.8 混洗分组卷积

3.感受野

3.1 理解感受野

3.2 感受野的作用


1.池化层

1.1 概述

池化层 (Pooling) 降低维度, 缩减模型大小,提高计算速度. 即: 主要对卷积层学习到的特征图进行下采样(SubSampling)处理。

池化层主要有两种:

  • 最大池化 max pooling

    最大池化是从每个局部区域中选择最大值作为池化后的值,这样可以保留局部区域中最显著的特征。最大池化在提取图像中的纹理、形状等方面具有很好的效果。

  • 平均池化 avgPooling

    平均池化是将局部区域中的值取平均作为池化后的值,这样可以得到整体特征的平均值。平均池化在提取图像中的整体特征减少噪声等方面具有较好的效果。

1.2 池化层计算

1.3 步长Stride

1.4 边缘填充Padding

1.5 多通道池化计算

在处理多通道输入数据时,池化层对每个输入通道分别池化,而不是像卷积层那样将各个通道的输入相加。这意味着池化层的输出和输入的通道数是相等。

1.6 池化层的作用

池化的优势:

  • 通过降低特征图的尺寸,池化层能够减少计算量,从而提升模型的运行效率。

  • 池化操作可以带来特征的平移、旋转等不变性,这有助于提高模型对输入数据的鲁棒性。

  • 池化层通常是非线性操作,例如最大值池化,这样可以增强网络的表达能力,进一步提升模型的性能。

池化的缺点:

  • 池化操作会丢失一些信息。

最大池化:

import torch.nn as nn
import torch torch.random.manual_seed(0)# 输入的特征图数据
input = torch.randint(0,225,(1,64,224,224),dtype=torch.float32)pool = nn.MaxPool2d(kernel_size =2,# 池化核大小stride = 2,# 步长return_indices = True,# 返回索引
)output,indices = pool(input)print(input[0] [0] [:10, :10])
print(output[0] [0] [:10, :10])
print(indices[0] [0] [:5, :5])

平均池化:

import torch.nn as nn
import torch torch.random.manual_seed(0)# 输入的特征图数据
input = torch.randint(0,225,(1,64,224,224),)pool = nn.AvgPool2d(kernel_size =2,# 池化核大小stride = 2,# 步长ceil_mode =False,
)output= pool(input)print(input[0] [0] [:10, :10])
print(output[0] [0] [:5, :5])

2. 卷积拓展

2.1 二维卷积

分单通道版本和多通道版本。

2.1.1 单通道版本

只有一个通道的卷积叫做二维卷积(单通道卷积版本)。

2.1.2 多通道版本

彩色图像拥有R、G、B这三层通道,因此我们在卷积时需要分别针对这三层进行卷积。最后将三个通道的卷积结果进行合并(元素相加),得到卷积结果。

2.2 三维卷积

二维卷积是在单通道的一帧图像上进行滑窗操作,输入是高度H宽度W的二维矩阵。

而如果涉及到视频上的连续帧或者立体图像中的不同切片,就需要引入深度通道,此时输入就变为高度H宽度W*深度C的三维矩阵。

不同于二维卷积核只在两个方向上运动,三维卷积的卷积核会在三个方向上运动,使得三维卷积能够有效地描述3D空间中的对象关系,它在一些应用中具有显著的优势,例如3D对象的分割以及医学图像的重构等。

2.3 反卷积

卷积是对输入图像及进行特征提取,这样会导致尺寸会越变越小,而反卷积是进行相反操作。并不会完全还原到跟输入图一样,只是保证了与输入图像尺寸一致,主要用于向上采样。从数学上看,反卷积相当于是将卷积核转换为稀疏矩阵后进行转置计算。也被称为转置卷积。

反卷积计算过程

如图,在2x2的输入图像上使用【步长1、边界全0填充】的3x3卷积核,进行转置卷积(反卷积)计算,向上采样后输出的图像大小为4x4。

2.4 空洞卷积(膨胀卷积)

为扩大感受野,在卷积核的元素之间插入空格“膨胀”内核,形成“空洞卷积”(或称膨胀卷积),并用膨胀率参数L表示要扩大内核的范围,即在内核元素之间插入L-1个空格。当L=1时,则内核元素之间没有插入空格,变为标准卷积。图中是L=2的空洞卷积。

import torch
import torch.nn as nn
import numpy as npclass Network(nn.Module):def __init__(self):super(Network,self).__init__()self.conv = nn.Conv2d(in_channels= 1,out_channels =1,kernel_size = (3,3),stride = 1,padding=0,dilation=3# 膨胀)def forward(self,x):x = self.conv(x)return xtorch.random.manual_seed(0)
input = torch.randint(0,255,(1,1,32,32),dtype=torch.float32)model = Network()
output = model(input)
print(output.shape)

2.5 可分离卷积

2.5.1 空间可分离卷积

空间可分离卷积是将卷积核分解为两项独立的核分别进行操作。

import torch
import torch.nn as nn
import numpy as npclass Network(nn.Module):def __init__(self):super(Network,self).__init__()self.conv = nn.Conv2d(in_channels= 1,out_channels =1,kernel_size = (3,3),bias = False,)def forward(self,x):x = self.conv(x)return xclass Network2(nn.Module):def __init__(self):super(Network2,self).__init__()self.conv = nn.Conv2d(in_channels= 1,out_channels =1,kernel_size = (1,3),# 空间可分离卷积bias = False,)self.conv2 = nn.Conv2d(in_channels= 1,out_channels =1,kernel_size = (3,1),# 空间可分离卷积bias = False,)        def forward(self,x):x = self.conv(x)x = self.conv2(x)return xtorch.random.manual_seed(0)
input=torch.randint(0,255,(1,1,32,32),dtype=torch.float32)model1= Network()
model2= Network2()# for name,param in model1.named_parameters():# 参数量:8*8*3*3 =576
#     print(name,param.shape)
# for name,param in model2.named_parameters():# 参数量:8*1*3*3+8*8 = 136
#     print(name,param.shape)model1.conv.weight.data=torch.tensor([[[[0.1500, 0.2000, 0.2500],[0.2100, 0.2800, 0.3500],[0.2400, 0.3200, 0.4000]]]])
# for name,param in model1.named_parameters():
#     print(name,param)
model2.conv.weight.data=torch.tensor([[[[0.3,0.4,0.5]]]])
model2.conv2.weight.data=torch.tensor([[[[0.5],[0.7],[0.8]]]])
# for name,param in model2.named_parameters():
#     print(name,param)output1 = model1(input)
output2 = model2(input)
# 查看结果是否一样
print(output1[:,:,:5,:5])
print(output2[:,:,:5,:5])

2.5.2 深度可分离卷积

深度可分离卷积由两部组成:深度卷积和1x1卷积。

输入图的每一个通道,都使用了对应的卷积核进行卷积。 输入通道数量 = 卷积核个数。

 对输出内容进行数量为通道个数的1x1的卷积。输出通道数量 = 卷积核个数。

import torch
import torch.nn as nn
import numpy as npclass Network(nn.Module):def __init__(self):super(Network,self).__init__()self.conv = nn.Conv2d(in_channels= 8,out_channels =8,kernel_size = (3,3),bias = False,)def forward(self,x):x = self.conv(x)return xclass Network2(nn.Module):def __init__(self):super(Network2,self).__init__()self.conv = nn.Conv2d(in_channels= 8,out_channels =8,kernel_size = (3,3),groups = 8, # 空间可分离卷积bias = False)self.conv2 = nn.Conv2d(in_channels= 8,out_channels =8,kernel_size = (1,1),# 空间可分离卷积bias = False)        def forward(self,x):x = self.conv(x)x = self.conv2(x)return x# 输入的特征图数据
input = torch.randint(0,225,(1,8,32,32),dtype=torch.float32)model1= Network()
model2= Network2()
output1 = model1(input)
output2 = model2(input)for name,param in model1.named_parameters():# 参数量:8*8*3*3 =576print(name,param.shape)
for name,param in model2.named_parameters():# 参数量:8*1*3*3+8*8 = 136print(name,param.shape)

2.6 扁平卷积

扁平卷积是将标准卷积拆分成为3个1x1的卷积核,然后再分别对输入层进行卷积计算。

  • 标准卷积参数量X*Y*C,计算量为M*N*C*X*Y

  • 拆分卷积参数量(X+Y+C),计算量为M*N*(C+X+Y)

2.7 分组卷积

2012年,AlexNet论文中最先提出来的概念,当时主要为了解决GPU显存不足问题,将卷积分组放到两个GPU中并行执行。

2.8 混洗分组卷积

分组卷积中最终结果会按照原先的顺序进行合并组合,阻碍了模型在训练时特征信息在通道间流动,削弱了特征表示。混洗分组卷积,主要是将分组卷积后的计算结果混合交叉在一起输出。

在分组卷积中,卷积核被分成不同的组,每组负责对相应的输入层进行卷积计算,最后再进行合并。

3.感受野

3.1 理解感受野

字面意思是感受的视野范围,为得到一个特征值,输入数据的size。

3.2 感受野的作用

卷积核所需的参数更少一些。

卷积过程越多,特征提取也会越细致,加入的非线性变换也随着增多 。

相关文章:

视觉处理基础2

目录 1.池化层 1.1 概述 1.2 池化层计算 1.3 步长Stride 1.4 边缘填充Padding 1.5 多通道池化计算 1.6 池化层的作用 2. 卷积拓展 2.1 二维卷积 2.1.1 单通道版本 2.1.2 多通道版本 2.2 三维卷积 2.3 反卷积 2.4 空洞卷积(膨胀卷积) 2.5 …...

代码随想录第十四天|二叉树part02--226.翻转二叉树、101.对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

资料引用: 226.翻转二叉树(226.翻转二叉树) 101.对称二叉树(101.对称二叉树) 104.二叉树的最大深度(104.二叉树的最大深度) 111.二叉树的最小深度(111.二叉树的最小深度)…...

vue基础之7:天气案例、监视属性、深度监视、监视属性(简写)

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...

JS实现高效导航——A*寻路算法+导航图简化法

一、如何实现两点间路径导航 导航实现的通用步骤,一般是: 1、网格划分 将地图划分为网格,即例如地图是一张图片,其像素为1000*1000,那我们将此图片划分为各个10*10的网格,从而提高寻路算法的计算量。 2、标…...

Spring Authorization Server登出说明与实践

本章内容概览 Spring Security提供的/logout登出接口做了什么与如何自定义。Spring Authorization Server提供的/connect/logout登出接口做了什么与如何自定义。Spring Authorization Server提供的/oauth2/revoke撤销token接口做了什么与如何自定义。 前言 既然系统中有登录功…...

浏览器报错 | 代理服务器可能有问题,或地址不正确

1 问题描述 Windows连网情况下,浏览器访问地址显示“你尚未连接,代理服务器可能有问题,或地址不正确。”出现如下画面: 2 解决方法 途径1 控制面板-->网络与internet-->internet选项-->Internet属性-->连接-->…...

泷羽sec:shell编程(9)不同脚本的互相调用和重定向操作

声明: 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...

Milvus×OPPO:如何构建更懂你的大模型助手

01. 背景 AI业务快速增长下传统关系型数据库无法满足需求。 2024年恰逢OPPO品牌20周年,OPPO也宣布正式进入AI手机的时代。超千万用户开始通过例如通话摘要、新小布助手、小布照相馆等搭载在OPPO手机上的应用体验AI能力。 与传统的应用不同的是,在AI驱动的…...

单片机几大时钟源

在单片机中,MSI、HSI和HSE通常指的是用于内部晶振配置的不同功能模块: MSI (Master Oscillator System Interface):这是最低级的一种时钟源管理单元,它控制着最基本的系统时钟(SYSCLK),一般由外…...

reverse学习总结(12)

一.[FlareOn4]IgniteMe1 https://files.buuoj.cn/files/02b39b8efca02367af23aa279c81cbec/attachment.zip 根据汇编语言分析 查看需要返回为1的函数 int sub_401050() {int v1; // [esp0h] [ebp-Ch]int i; // [esp4h] [ebp-8h]unsigned int j; // [esp4h] [ebp-8h]char v4; …...

基于“微店 Park”模式下 2+1 链动模式商城小程序的创新发展与应用研究

摘要:本文以“微店 Park”从“开店工具”向“众创平台”的转型为背景,深入探讨 21 链动模式商城小程序在该平台情境下的应用潜力与创新发展路径。通过剖析“微店 Park”的运营模式,包括灵活承租、低成本入驻、多元流量引流等特点,…...

C++11:【列表初始化】【右值引用和移动语义】

目录 一.列表初始化 1.1 C98传统的{} 1.2C11中的{} 1.3C中的std::initializer_list 二.右值引用和移动语义 2.1左值和右值 2.2左值引用和右值引用 2.3引用延长生命周期 2.4左值和右值的参数匹配 2.5右值引用和移动语义的使用场景 2.5.1左值引用主要使用场景 2.5.2移…...

Zookeeper的通知机制是什么?

大家好,我是锋哥。今天分享关于【Zookeeper的通知机制是什么?】面试题。希望对大家有帮助; Zookeeper的通知机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper的通知机制主要通过Watcher实现,它是Zookeeper客…...

嵌入式蓝桥杯学习1 电量LED

cubemx配置 1.新建一个STM32G431RBT6文件 2.在System-Core中点击SYS,找到Debug(设置为Serial Wire) 3.在System-Core中点击RCC,找到High Speed Clock(设置为Crystal/Ceramic Resonator) 4.打开Clock Configuration &#xff0…...

bsmap输出结果解释

关于, , -, --的解释 对应着参考基因组的正链(有义链,非模板链,即hg38的序列,watson链); -代表正链的互补链(正常情况下正链的互补链是负链,但在重硫酸盐处理后正链和负链并不互补…...

【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 1. Java LinkedList 基础 1.1 LinkedList 简介 1.2 LinkedList 的实现原理 1.3 LinkedList 与 ArrayList 的区别 2. 链表基础 2.1 链…...

macOS运行amd64的镜像

在macOS上运行amd64(x86_64)架构的镜像,通常通过虚拟化或仿真工具来实现。例如,如果你使用的是基于Apple Silicon(M1或M2等)芯片的Mac,那么你的处理器是ARM架构的,而amd64是x86架构&…...

轻量的基于图结构的RAG方案LightRAG

LightRAG出自2024年10月的论文《LIGHTRAG: SIMPLE AND FASTRETRIEVAL-AUGMENTED GENERATION》(github),也是使用图结构来索引和搜索相关文本。 LightRAG作者认为已有的RAG系统有如下两个限制,导致难以回答类似"How does the rise of electric vehi…...

计算机的错误计算(一百七十三)

摘要 给定多项式 在 MATLAB 中计算 的值。输出是错误结果。 例1. 已知 计算 直接贴图吧: 这样,MATLAB 输出了错误结果。因为准确值为 0.2401e-16 . 注:可参看计算机的错误计算(六)。...

【力扣】—— 二叉树的前序遍历、字典序最小回文串

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构 📚本系列文章为个人学…...

linux替换更高版本gcc

实际使用时对与gcc版本有很多要求, 需要在centos上安装更高版本的gcc 1、安装centos-release-scl sudo yum install centos-release-scl2、安装devtoolset,注意,如果想安装7.版本的,就改成devtoolset-7-gcc,以此类推 sudo yum …...

在Java中使用Apache POI导入导出Excel(六)

本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(五) 使用Apache POI组件操作Excel(六) 43、隐藏和取消隐藏行 使用 Excel,可以通过选择该行(或行)来隐藏工作表…...

`uni.setClipboardData` 是 uni-app 提供的一个 API 设置系统剪贴板的内容

uni.setClipboardData是uni-app提供的一个API,用于设置系统剪贴板的内容。 使用说明: 使用此API可以将指定的文本内容复制到系统剪贴板,使用户能够在其他应用或页面中粘贴这些内容。 uni.setClipboardData({data: , // 需要复制的内容 suc…...

【大模型微调】pdf转markdown

目前市面上大部分都是pdf文档,要想转换成能训练的文本,调研了各种工具。 觉得MinerU确实不错。 参考此链接进行操作 MinerU/docs/README_Ubuntu_CUDA_Acceleration_en_US.md at master opendatalab/MinerU GitHub 需要注意的几个点: 1. 使用root账户安装的,配置文件在…...

Vue 3 结合 TypeScript基本使用

Vue 3 结合 TypeScript 使用可以提供更加强大的类型检查和开发体验。以下是一些基本的步骤来开始使用 Vue 3 和 TypeScript: 1. 创建项目 你可以使用 Vue CLI 来快速创建一个支持 TypeScript 的 Vue 项目。首先确保你已经安装了 Node.js 和 npm。然后全局安装或更…...

Trotter steps的复杂性分析

总结 • 我们开发了使用汉密尔顿系数结构执行 Trotter 步骤的递归方法,超越了顺序方法。 • #Gate/Step 在汉密尔顿项数上是次线性的,而 #Step 仍然保持交换子缩放。 • 新结果给出了实空间中第二量化电子结构汉密尔顿的最快量子模拟。对第一量化量子模…...

mean,median,mode,var,std,min,max函数

剩余的函数都放在这篇里面吧 m e a n mean mean函数可以求平均值 a a a为向量时, m e a n ( a ) mean(a) mean(a)求向量中元素的平均值 a a a为矩阵时, m e a n ( a , 1 ) mean(a,1) mean(a,1)求矩阵中各列元素的平均值; m e a n ( a , 2 )…...

JavaScript实现tab栏切换

JavaScript实现tab栏切换 代码功能概述 这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先…...

精确电压输出,家电和工业设备的完美选择,宽输入电压线性稳压器

WD5201线性稳压器的核心内容概述: 主要特点 • 高精度输出电压:2%精度。 • 输出电压可调:支持5V、3.3V、2.7V三档输出。 • 优化控制方式:提升效率。 • 宽输入电压范围:80305VAC。 • 无需功率电感和输入高压电…...

深入理解定时器:优先队列与时间轮实现

文章目录 1. 线程池概述线程池的基本特点: 2. 使用线程池的优先队列定时器实现2.1 优先队列定时器实现2.2 解释: 3. 使用时间轮的线程池定时器实现3.1 时间轮定时器实现 4. 总结 在定时器设计中,使用线程池来执行定时任务可以有效提高程序的性…...