上采样相关技术

一、参考资料

上采样和上卷积的区别
怎样通俗易懂地解释反卷积?
卷积和池化的区别、图像的上采样(upsampling)与下采样(subsampled)
[读论文]用全卷积Res网络做深度估计
对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例
深度学习中常用的几种卷积(上篇):标准二维卷积、转置卷积、1*1卷积(附Pytorch测试代码)

二、相关介绍

1. 上采样与下采样

无论下采样(缩放图像)还是上采样(放大图像),采样方式有很多种。如最近邻插值双线性插值均值插值中值插值等方法。

1.1 上采样(Upsample)

在应用在计算机视觉的深度学习领域,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(e.g.图像的语义分割)。这个采用扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。上采样,又称为图像插值(interpolating),即为放大图像的过程。
在这里插入图片描述

上采样有3种常见的方法:双线性插值(bilinear interpolation),转置卷积(Transposed Convolution),反池化(Unpooling)。

1.2 下采样(subsample)

下采样又称为降采样(downsample),主要目的是缩小图像尺寸,使得图像符合显示区域的大小,或者生成对应图像的缩略图。在计算机视觉中,CNN特征提取过程即为下采样过程。

对于一幅图像I尺寸为M*N,对其进行s倍下采样,即得到(M/s)*(N/s)尺寸的得分辨率图像,当然s应该是M和N的公约数才行,如果考虑的是矩阵形式的图像,就是把原始图像s*s窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值

2. 上卷积(Up-convolution)

upconv上卷积是什么? monodepth源码阅读

Deeper Depth Prediction with Fully Convolutional Residual Networks

2.1 方法一(base版)

Up-convolution,又称为upconv,是通过插值增加特征图的空间分辨率。其结构如下图所示:在这里插入图片描述
在这里插入图片描述

Up-convolution包含三个过程:

  1. un-pooling上池化过程。把特征图中的一个元素映射成2×2的大小,左上角是这个元素,其他三个格子都是零;
  2. 卷积过程。用5×5的卷积进行卷积计算;
  3. ReLu激活过程。

2.2 方法二(改进版)

Deeper Depth Prediction with Fully Convolutional Residual Networks

基于base版本改进的fast up-convolution,其
在这里插入图片描述
在这里插入图片描述

3. Deconvolution

Learning deconvolution network for semantic segmentation
在这里插入图片描述

4. 上投影(up-projection)

Deeper Depth Prediction with Fully Convolutional Residual Networks

We call this new up-sampling block up-projection since it extends the idea of the projection connection to up-convolutions.

将投影连接引入到up-convolution中,称之为up-projection。
在这里插入图片描述

5. convolution+pooling

卷积+池化操作,构成convolution+pooling层。

6. unpooling+convolution

是convolution+pooling的逆向操作,构成unpooling+convolution层。

三、上采样相关方法

1. 转置卷积(Transposed Convolution)

怎样通俗易懂地解释反卷积?

转置卷积(Transposed Convolution)

抽丝剥茧,带你理解转置卷积(反卷积)

1.1 引言

对于很多生成模型(如GAN中的生成器、自动编码器(Autoencoder)、语义分割等模型),我们通常希望进行与正常卷积相反的转换,即我们希望执行上采样,比如自动编码器或者语义分割。(对于语义分割,首先用编码器提取特征图,然后用解码器回复原始图像大小,这样来分类原始图像的每个像素。)实现上采样的传统方法是应用插值方案或人工创建规则。而神经网络等现代架构则倾向于让网络自己自动学习合适的变换,无需人类干预。为了做到这一点,我们可以使用转置卷积。

1.2 转置卷积的概念

转置卷积(Transposed Convolution) 在语义分割或者对抗神经网络(GAN)中比较常见,其主要作用是做上采样(UpSampling)。

转置卷积又叫反卷积、逆卷积。不过转置卷积是目前最为正规和主流的名称,因为这个名称更加贴切的描述了卷积的计算过程,而其他的名字容易造成误导。在主流的深度学习框架中,如TensorFlow,Pytorch,Keras中的函数名都是conv_transpose。所以学习转置卷积之前,我们一定要弄清楚标准名称,遇到他人说反卷积、逆卷积也要帮其纠正,让不正确的命名尽早的淹没在历史的长河中。

我们先说一下为什么人们很喜欢将转置卷积称为反卷积或逆卷积。首先举一个例子,将一个4x4的输入通过3x3的卷积核在进行普通卷积(无padding, stride=1),将得到一个2x2的输出。而转置卷积将一个2x2的输入通过同样3x3大小的卷积核将得到一个4x4的输出,看起来似乎是普通卷积的逆过程。就好像是加法的逆过程是减法,乘法的逆过程是除法一样,人们自然而然的认为这两个操作似乎是一个可逆的过程。转置卷积不是卷积的逆运算(一般卷积操作是不可逆的),转置卷积也是卷积。对于同一个卷积核,经过转置卷积操作之后只能恢复到原来的大小(shape),数值与原来不同。所以转置卷积的名字就由此而来,而并不是“反卷积”或者是“逆卷积”,不好的名称容易给人以误解。

转置卷积和直接卷积有很大的区别,直接卷积是用一个“小窗户”去看一个“大世界”,而转置卷积是用一个“大窗户”的一部分去看“小世界”。

1.3 转置卷积操作

转置卷积核大小为k,步长s,填充p,则转置卷积的运算步骤可以归为以下几步:

  1. 首先,在元素间填充s-1个零元素(等于0不用填充);
  2. 然后,在特征图四周填充k-p-1个零元素;
  3. 接着,对卷积核进行上下、左右翻转;
  4. 最后,以stride=1,padding=0,做卷积操作。

1.4 转置卷积示例

假设,输入层为2x2,转置卷积核大小为k=3,步长stride=1,填充padding=0,通过转置卷积后,得到大小4x4的特征图。
在这里插入图片描述
在这里插入图片描述

值得一提的是,可以通过改变padding和stride,将2x2的输入映射到不同的图像尺寸。如下图,stride=2,则在元素间填充1个零元素;padding=0,则在特征图四周填充2个零元素。通过转置卷积后,得到大小5x5的特征图。
在这里插入图片描述

1.5 棋盘效应(Checkerboard Artifacts)

棋盘效应(Checkerboard Artifacts)
卷积操作总结(三)—— 转置卷积棋盘效应产生原因及解决
Deconvolution and Checkerboard Artifacts

棋盘效应是由于转置卷积的“不均匀重叠”(Uneven overlap)的结果,使图像中某个部位的颜色比其他部位更深。
在这里插入图片描述

1.6 代码示例

import torch
import torch.nn as nndef transposed_conv_official():feature_map = torch.as_tensor([[1, 0],[2, 1]], dtype=torch.float32).reshape([1, 1, 2, 2])print(feature_map)trans_conv = nn.ConvTranspose2d(in_channels=1, out_channels=1,kernel_size=3, stride=1, bias=False)trans_conv.load_state_dict({"weight": torch.as_tensor([[1, 0, 1],[0, 1, 1],[1, 0, 0]], dtype=torch.float32).reshape([1, 1, 3, 3])})print(trans_conv.weight)output = trans_conv(feature_map)print(output)def transposed_conv_self():feature_map = torch.as_tensor([[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0],[0, 0, 1, 0, 0, 0],[0, 0, 2, 1, 0, 0],[0, 0, 0, 0, 0, 0],[0, 0, 0, 0, 0, 0]], dtype=torch.float32).reshape([1, 1, 6, 6])print(feature_map)conv = nn.Conv2d(in_channels=1, out_channels=1,kernel_size=3, stride=1, bias=False)conv.load_state_dict({"weight": torch.as_tensor([[0, 0, 1],[1, 1, 0],[1, 0, 1]], dtype=torch.float32).reshape([1, 1, 3, 3])})print(conv.weight)output = conv(feature_map)print(output)def main():transposed_conv_official()print("---------------")transposed_conv_self()if __name__ == '__main__':main()

输出结果

tensor([[[[1., 0.],[2., 1.]]]])
Parameter containing:
tensor([[[[1., 0., 1.],[0., 1., 1.],[1., 0., 0.]]]], requires_grad=True)
tensor([[[[1., 0., 1., 0.],[2., 2., 3., 1.],[1., 2., 3., 1.],[2., 1., 0., 0.]]]], grad_fn=<SlowConvTranspose2DBackward>)
---------------
tensor([[[[0., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0.],[0., 0., 1., 0., 0., 0.],[0., 0., 2., 1., 0., 0.],[0., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0.]]]])
Parameter containing:
tensor([[[[0., 0., 1.],[1., 1., 0.],[1., 0., 1.]]]], requires_grad=True)
tensor([[[[1., 0., 1., 0.],[2., 2., 3., 1.],[1., 2., 3., 1.],[2., 1., 0., 0.]]]], grad_fn=<ThnnConv2DBackward>)Process finished with exit code 0

2. 反池化(Unpooling)

Unpooling是pooling操作的逆向过程,可以提高特征图的空间分辨率。

2.1 方法一

最大池化的逆向过程,在最大值的位置补最大值,其他位置补0。
在这里插入图片描述

2.2 方法二

Learning to Generate Chairs with Convolutional Neural Networks
Deeper Depth Prediction with Fully Convolutional Residual Networks

在这里插入图片描述

用2x2的块进行反池化操作,左上角为实值,其他补0。

2.3 方法三

Adaptive Deconvolutional Networks for Mid and High Level Feature Learning

在卷积神经网络中,最大池化操作是不可逆的,但可以通过一组转换变量来记录每个池化区域内最大值的位置,从而获得近似的反池化。
在这里插入图片描述

3D最大池化。特征图z划分为2x2的区域,每个区域用不同颜色表示。对每个区域进行最大池化操作,得到池化图p和转换图s。其中,k表示维度,转换图s记录了每个区域最大值的位置。

2.4 方法四

Visualizing and Understanding Convolutional Networks
在这里插入图片描述
在这里插入图片描述

2.5 方法五

Learning deconvolution network for semantic segmentation

反池化对于输入对象的重建特别有用。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MapReduce任务个数如何影响执行效率?性能优化从这里做起

在正文开始之前&#xff0c;请先来回答一下这个问题&#xff1a; 题目&#xff1a;输入为3个文件&#xff0c;a.txt 300MB,b.txt 100MB,c.txt 58.MB&#xff0c;使用MapReduce的example程序&#xff0c;计算Wordcount&#xff0c;请问&#xff0c;应该有多少个MapTask&#xf…

算法、推理、部署,面了40多个大佬的感想

今年三月份到现在陆陆续续面了40来个人&#xff0c;有实习生&#xff0c;有校招生&#xff0c;也有来社招的大佬们。面了挺久&#xff0c;有些总结和感想&#xff0c;发出来和大家交流交流&#xff0c;也趁着这个机会为之后参与校招的同学提供一些学习方向。 我面的岗位主要是…

计算机网络第2章-CDN(4)

视频流和内容分发网 HTTP流和DASH 在HTTP流中&#xff0c;视频只是存储在HTTP服务器中作为一个普通的文件&#xff0c;每个文件有有一个特定的URL。当用户要看视频时&#xff0c;客户与服务器之间创建一个TCP连接并发送HTTP GET请求。 HTTP流具有严重缺陷&#xff0c;即所有…

quartz中jdbc.initialize-schema

never&#xff1a;从不进行初始化&#xff0c;也就是不清空数据库 always&#xff1a;每次都清空数据库进行初始化 embedded&#xff1a;只初始化内存数据库&#xff08;默认值&#xff09;

【扩散模型从原理到实战】Chapter2 Hugging Face简介

文章目录 Hugging Face的核心功能介绍Hugging Face开源库Hugging Face开源库Gradio工具介绍参考资料 Hugging Face是机器学习从业者协作和交流的平台&#xff0c;成立于2016年&#xff0c;在纽约和巴黎设有办事处&#xff0c;团队成员来自世界各地&#xff0c;远程办公。 致力于…

基于SSM的旅游信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

堆排序代码模板

#include<iostream> using namespace std; const int N 1e5 9; int h[N], n, m, Size;//小根堆//u表示三个点中的根节点 void down(int u) {int t u;//设t为三个点中最小的那个点//如果左儿子存在并且小于根节点就将左儿子赋值给tif (u * 2 < Size && h[u …

什么是著作权?对此你了解多少?

在当今信息爆炸的时代&#xff0c;著作权成为一个备受关注的话题。创作是人类文明的重要组成部分&#xff0c;而著作权是创作者对自己作品的劳动和智慧的一种保护。很多人还不太了解著作权&#xff0c;那么希望看完此文&#xff0c;你会对它有一个新的认识。 一、著作权的概念 …

Java —— 运算符

目录 1. 什么是运算符 2. 算术运算符 2.1 基本四则运算符: 加减乘除模( - * / %) 2.2 增量运算符 - * %与 自增/自减运算符 -- 3. 关系运算符 4. 逻辑运算符 4.1 逻辑与 && 4.2 逻辑或|| 4.3 逻辑非 ! 4.4 短路求值 5. 位运算符 5.1 按位与 & 5.2 按位或 5.3 按位…

AutoCAD 2024:计算机辅助设计(CAD)软件中文版

AutoCAD是一款广受全球设计师和工程师欢迎的计算机辅助设计&#xff08;CAD&#xff09;软件。自1982年首次推出以来&#xff0c;AutoCAD已经经历了多次迭代和改进&#xff0c;不断提升用户在产品设计、建造和工程领域的工作效率。现在&#xff0c;让我们一起探索AutoCAD 2024的…

NAT网关在阿里云的应用

NAT网关&#xff08;Network Address Translation Gateway&#xff09;是一种网络地址转换服务&#xff0c;提供NAT代理&#xff08;SNAT和DNAT&#xff09;能力。NAT是用于在本地网络中使用私有地址&#xff0c;在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决I…

SamSung三星笔记本NP930QCG-K02CN原装出厂OEM预装Win10系统

下载链接&#xff1a;https://pan.baidu.com/s/13GsR_r9caJkLjiWWaXa30Q?pwdncp9 系统自带指纹驱动、声卡,网卡,显卡等所有驱动、三星出厂时主题壁纸、系统属性三星专属LOGO标志、Office办公软件等三星出厂时自带的预装程序 由于时间关系,绝大部分资料没有上传&#xff0c;不…

CS鱼饵制作

文章目录 宏病毒&#xff08;宏钓鱼&#xff09;快捷方式钓鱼shellQMaker bug伪装pdf文件上线 宏病毒&#xff08;宏钓鱼&#xff09; 启动teamsever服务器&#xff0c;具体过程请参考我之前的文章&#xff1a; 在主机中启动CS客户端&#xff0c;111是真实机的用户&#xff1a…

【Mysql】Innodb数据结构(四)

概述 MySQL 服务器上负责对表中数据的读取和写入工作的部分是存储引擎 &#xff0c;而服务器又支持不同类型的存储引擎&#xff0c;比如 InnoDB 、MyISAM 、Memory 等&#xff0c;不同的存储引擎一般是由不同的人为实现不同的特性而开发的&#xff0c;真实数据在不同存储引擎中…

推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。

文章目录 &#x1f31f; 离线评估&#xff1a;常用的推荐系统离线评估方法有哪些&#xff1f;&#x1f34a; 1. RMSE/MSE&#x1f34a; 2. MAE&#x1f34a; 3. Precision/Recall/F1-score&#x1f34a; 4. Coverage&#x1f34a; 5. Personalization&#x1f34a; 6. AUC &…

Linux:mongodb数据逻辑备份与恢复(3.4.5版本)

我在数据库aaa的里创建了一个名为tarro的集合&#xff0c;其中有三条数据 备份语法 mongodump –h server_ip –d database_name –o dbdirectory 恢复语法 mongorestore -d database_name --dirdbdirectory 备份 现在我要将aaa.tarro进行备份 mongodump --host 192.168.254…

[uni-app] canvas绘制圆环进度条

文章目录 需求参考链接基本问题的处理1:画布旋转的问题2:注意arc()的起始位置是3点钟方向3: 如果绘制1.9*Matn.PI的圆环, 要保证其实位置在0点方向?4:小线段怎么画, 角度怎么处理? 源码 需求 要绘制一个如此的进度条 参考链接 uni-app使用canvas绘制时间刻度以及不显示问…

Cesium Vue(三)— 相机配置

1. 坐标系转换 1.1 cesium使用到的坐标系 屏幕坐标系&#xff0c;二维的笛卡尔坐标系&#xff0c;API > Cartesian2地理空间坐标系&#xff0c;WGS-84坐标系&#xff0c; API > Cartographic(经度&#xff0c;维度&#xff0c;高度)三维笛卡尔空间直角坐标系&#xff0…

leetcode-279. 完全平方数

1. 题目链接 链接: 题目链接 2. 解答 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>bool issquare(int n) {if (n 1 || n 4) return true;if (n 2 || n 3) return false;for (int i 3; i < n/2; i ) {if (n i*i) return true;}…

笔记本Win10系统一键重装操作方法

笔记本电脑已经成为大家日常生活和工作中必不可少的工具之一&#xff0c;如果笔记本电脑系统出现问题了&#xff0c;那么就会影响到大家的正常操作。这时候就可以考虑给笔记本电脑重装系统了。接下来小编给大家介绍关于一键重装Win10笔记本电脑系统的详细步骤方法。 推荐下载 系…