NorthSmile
研二软件工程在读,研究图像去雾;本科计算机科学与技术专业。
展开
-
常用归一化/正则化层:InstanceNorm1d、InstanceNorm2d、
批量归一化与实例归一化的最大区别在于计算均值及方差的依据不同,实例归一化是对每个样本沿着通道方向独立对各个通道进行计算,而批量归一化则是对所有样本沿着batch的方向对各个通道分别进行计算。比如:输入特征图形状为:(2,3,256,512),表示有两个256×512的特征图,特征图通道数为3,假设为RGB三个通道依次对样本1,样本2分别计算R、G、B三个通道的均值、方差,每次计算其实是对256×512个元素值记性计算;依据计算出的均值和方差,对各通道的元素实现图中的公式;...原创 2022-08-27 22:07:36 · 11848 阅读 · 1 评论 -
《Contrastive Learning for Unpaired Image-to-Image Translation》
Contrastive Learning for UnpairedImage-to-Image Translation原创 2023-06-09 11:01:14 · 1152 阅读 · 0 评论 -
《Squeeze-and-Excitation Networks》
通道注意力机制SE-Block原创 2023-04-12 17:37:46 · 391 阅读 · 0 评论 -
读《Multi-level Wavelet-CNN for Image Restoration》
Multi-level Wavelet-CNN for Image Restoration阅读笔记原创 2023-03-23 18:53:31 · 1037 阅读 · 0 评论 -
【2DWT:2维离散小波变换(附Pytorch代码)】
图像信号具有非平稳特性,无法使用一种确定的数学模型来描述,而小波变换的多分辨率分析特性很好地解决了这个问题。小波变化的多分辨率特性使其既可以高效描述图像的平坦区域(低频信息、全局信息),也可以有效处理图像信号的局部突变(高频信息,即图像的边缘轮廓等部分)。小波变换在空域和频域同时具有良好的局部性,使其可以很好地聚焦到图像的任意细节。原创 2022-10-05 20:07:55 · 13959 阅读 · 21 评论 -
【torch.argmax与torch.max详解】
方式一,即不指定dim时,默认将张量展开成一维张量,然后返回对应的下标;方式二,即指定dim时,沿着指定的dim维进行选择,输出结果由剩下的维度组成,比如原始维度为H,W,若指定dim=0(即H维),则输出结果由W个元素构成;2)如果有多个最大值则返回第一个最大值的下标;3)返回torch.max函数指定dim时返回的第二个值;原创 2022-10-03 16:40:53 · 3469 阅读 · 3 评论 -
重读《Deep Residual Learning for Image Recognition》之进一步理解残差网络的神秘(附Pytorch代码)
残差网络是由来自Microsoft Research的4位学者提出的卷积神经网络,在2015年的ImageNet大规模视觉识别竞赛(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)中获得了图像分类和物体识别的优胜。残差网络的特点是容易优化,并且能够通过增加相当的深度来提高准确率。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。作者提出残差学习框架用于简化网络训练,有助于构建更深更大的神经网络;原创 2022-10-02 00:40:01 · 1512 阅读 · 6 评论 -
【损失函数:3】感知损失:Perceptual Loss、总变分损失(TV Loss)(附Pytorch实现)
提出感知损失的概念,用于实时超分辨任务和风格迁移任务,后来也被应用于更多的领域,在图像去雾方向也有不少工作使用到了感知损失,所以这里就细看一下感知损失具体是什么,该如何构造(说个题外话:我之前做实验,用VGG提取特征构造感知损失狂爆内存,然后直接放弃了,都怪设备太垃圾啊!!!)。原创 2022-09-28 15:59:14 · 15233 阅读 · 14 评论 -
【损失函数:2】Charbonnier Loss、SSIM Loss(附Pytorch实现)
下面介绍各个函数时,涉及到一下2变量,其含义如下:假设网络输入为x,输出为y‾y=f(x),x的真实标签为y,其中:、、上述定义中的N通常表示一个批次中所包含的样本数量,因为在网络训练时我们通常是逐批次送入网络训练,每个批次计算一次损失,然后进行参数更新。原创 2022-09-27 18:44:07 · 11814 阅读 · 13 评论 -
【损失函数:1】L1、L2、SmoothL1(附Pytorch实现)
作者自己是做图像去雾的,平常也会看一些其他的图像恢复方向的文章,比如图像去噪、图像增强、图像去模糊以及图像超分辨等。我们知道损失函数决定了网络训练目标,对于一个任务最后可以实现的功能影响很大,这里我就想把我见过的一些损失函数进行记录,供大家学习参考。原创 2022-09-25 23:28:30 · 8087 阅读 · 1 评论 -
Pytorch优化器常用的两种学习率衰减策略:指数衰减策略、余弦退火策略(附测试代码)
Pytorch提供了多种学习率衰减策略,我在这里介绍常用的指数衰减策略和余弦退火策略,并分别介绍他们的代码实现。无论采用那种策略,在网络训练之间我们均需要进行以下两步工作:1)创建优化器Optimizer;2)为优化器绑定一个学习率控制器Scheduler;网络训练过程中,学习率不能过大,也不能过小,学习率过大会导致网络参数在最优值两边来回跳跃,难以收敛,学习率太小会导致网络收敛过慢,所以我们一般希望网络训练前期学习率较大可以加速网络收敛,后期学习率较小,以此使得网络更收敛于最优值。原创 2022-09-22 00:51:49 · 7232 阅读 · 3 评论 -
本地Pycharm连接远程服务器详细配置过程(直接在本地使用服务器显卡,很棒)
相信很多人都遇见过这种情况:实验室成员使用同一台服务器,每个人拥有自己的独立账号,我们可以使用服务器更好的配置完成实验,毕竟自己哪有money拥有自己的3090呢。原创 2022-09-21 16:24:41 · 31918 阅读 · 30 评论 -
Matplotlib补充:科研绘图利器(写论文、数据可视化必备)
上篇对Matplotlib所绘图中的各个部件进行了简单介绍,并将常见图绘制方法进行了说明,以使大家可以认识并理解相关内容,最后我对常见的两个问题的解决方法进行了实例讲解,包括:1)中文显示;2)坐标轴刻度、坐标范围自定义设置。原文链接:[https://blog.csdn.net/qq_43665602/article/details/126870205]原创 2022-09-18 19:03:55 · 2182 阅读 · 2 评论 -
Matplotlib:科研绘图利器(写论文、数据可视化必备)
我们知道Matlab是一个非常强大的数学计算工具,功能齐全,很多从事数学专业以及计算机科学相关的人员都比较喜欢使用,但是脱离了Matlab我们该怎么办呢?我自己是做深度学习的,平时使用Python居多,对于Matlab不是很熟,所以在平时对实验数据进行可视化时就需要借助一些第三方库来替代,而Python很贴心地为我们准备了一切,我们通过使用第三方库:基本可以替代Matlab。原创 2022-09-15 22:03:32 · 2847 阅读 · 1 评论 -
图像处理中常见的几种插值方法:最近邻插值、双线性插值、双三次插值(附Pytorch测试代码)
在学习可变形卷积时,因为学习到的位移量Δpn可能是小数,因此作者采用双线性插值算法确定卷积操作最终采样的位置。通过插值算法我们可以根据现有已知的数据估计未知位置的数据,并且可以利用这种方法对图像进行缩放、旋转以及几何校正等任务。此处我通过这篇文章学习总结常见的三种插值方法,包括最近邻插值、双线性插值、双三次插值算法,其中双线性插值方法属于使用频率较高的方法,比如在Pytorch以及Tensorflow框架中默认的插值方法就是双线性插值方法。原创 2022-09-14 19:55:27 · 15061 阅读 · 4 评论 -
可变形卷积(Deformable Convolution)
之前分了两次将深度学习中常用的各种卷积操作进行了汇总介绍,具体包括标准2D卷积、1×1卷积、转置卷积、膨胀卷积、深度卷积以及可分离卷积和分组卷积,之前在读文献时碰巧见过还有一个可变形卷积,这种卷积方式可以更好的根据目标本身的形状进行特征提取。这篇文章主要目的是为了学习理解可变形卷积,以便后面实验使用。我在这里首先把原文摘要中的部分信息进行提取展示,以对可变形卷积有一个初步的认识,并了解作者为什么提出可变形卷积。原创 2022-09-12 23:26:48 · 6012 阅读 · 2 评论 -
PyTorchViz:一个可以将Pytorch执行计算图可视化的工具
如果安装过程中没有选择自动添加环境变量,则在安装之后手动添加环境变量,即将GraphViz的bin目录路径添加到Path变量中。“我的电脑->属性->高级系统设置->环境变量->系统变量->Path->新建”,然后将该路径放入即可。执行此代码之后,可看到代码同目录下生成两个文件,一个是写入源码的文件,一个则是渲染过后的网络计算图。,根据人家给出的Readme文件可知在进行代码编写前首先需要进行环境配置,安装人家需要的第三方库。,对应自己系统选择32/64位的exe文件;2)双击exe进行安装;原创 2022-09-11 15:14:00 · 2675 阅读 · 1 评论 -
Pytorch训练神经网络完整步骤:搭建一个完整的神经网络(以用于Mnist手写数字识别的卷积神经网络为例)
在网络进行训练之间除了确定训练目标,我们必须选择适合网络训练的优化器,并对他们的初始参数进行设置,引导网络的优化训练,常见优化器包括SGD、ADAM等,这里我们采用ADAM优化器。到这里所有的准备工作已经完成,我们接下来就需要编写网络训练过程,在这一步骤,我们主要工作是对整个数据集进行迭代训练,每次给网络送入一小批量数据进行学习训练,在每一轮的完整训练过程中,我们通常包括训练步骤以及验证步骤,这是为了更好的观察到网络是否过拟合,以及确定网络合适收敛。我们可提前设计好网络,绘制网络结构图,然后进行代码编写。原创 2022-09-10 21:07:22 · 5616 阅读 · 6 评论 -
Dropout层到底在干些什么(Pytorch实现)
Dropout操作对隐藏层中的神经元随机“丢弃”,每批次数据Dropout丢弃的神经元并不固定,这就导致此时的网络结构是不同的,所以进行网络训练时其实就相当于在训练不同的网络,整个网络训练过程就好比对不同的网络模型进行平均法集成,以此得到更好的泛化能力,有效缓解过拟合。(2)输入X沿着网络前向传播,然后通过误差回传更新神经元参数,需要注意的是此时只有未被“置零”的神经元参数被更新,处于“睡眠”状态的神经元参数与上一次参数更新的结果保持一致;评估时,Dropout不会对神经元进行操作,可以忽略。原创 2022-09-09 20:48:50 · 4766 阅读 · 0 评论 -
细说卷积神经网络(CNN)中所谓的“感受野”(Receptive Field)
1)输入结果感受野一致的前提下,使用连续的小卷积核替换单个大卷积核,第一可以有效降低网络训练的参数量,第二可以增加网络深度,第三可以引入更丰富的非线性变换,使得网络可以拟合更多的可能性,更好地缓解过拟合;输入(C,7,7),对于最终的输出其感受野为(7,7),假设每个卷积层的输出通道数均为C,我们看一下各自的参数量:(1)使用连续的3个(3,3)卷积,其参数量为:(3×3×C)×C×3=27×C×C(2)使用一个(7,7)卷积,其参数量为:(7×7×C)×C=49×C×C。原创 2022-09-08 17:53:36 · 12884 阅读 · 8 评论 -
从理论到实践谈谈分组卷积(Group Convolution)与深度卷积(Depthwise Convolution)之间的联系
深度卷积可以说是分组卷积的一种特殊情况:对于大小为(N,C_in,H_in,W_in)的输入,当分组卷积中groups=C_in,而输出为(N,C_out,H_out,W_out)=(N,K×C_in,H_out,W_out)时,分组卷积即为深度卷积(其中的K为一个正整数),其实在深度可分离卷积中使用的深度卷积就是K=1的特殊情况。原创 2022-09-07 19:23:01 · 1091 阅读 · 0 评论 -
分类任务常用激活函数之nn.Softmax函数参数dim理解(Pytorch)
2)dim=1表示该操作将在输入张量的第1维进行计算,而此张量第1维长度为3,故计算实际是沿着第1维方向,将整个张量划分为2×4个切片,每个切片包含三个元素,并分别对每个切片进行softmax计算,使得这三个元素和为1.3)dim=2表示该操作将在输入张量的第2维进行计算,而此张量第2维长度为4,故计算实际是沿着第2维方向,将整个张量划分为2×3个切片,每个切片包含四个元素,并分别对每个切片进行softmax计算,使得这四个元素和为1.该函数使得输入中所有数值变为。.........原创 2022-08-29 00:48:43 · 4064 阅读 · 0 评论 -
深度学习中常用的几种卷积(下篇):膨胀卷积、可分离卷积(深度可分离、空间可分离)、分组卷积(附Pytorch测试代码)
膨胀卷积也称为扩张卷积或空洞卷积,一般可通过对标准二维卷积的卷积核设置合适的膨胀率(具体地指卷积核元素之间的距离)实现。合理利用膨胀卷积可在不引入其他参数的同时,扩大输出中元素的感受野,提高特征的全局表示能力。下面通过展示几个不同膨胀率下的卷积核大小以及感受野变化情况,可以更直观的理解:图中灰色为输入,蓝色为卷积核,黄色为输出。1)dilation=1:表示卷积核元素之间距离为1,使用0进行大小为dilation-1=0的填充(这是默认情况),因此。原创 2022-09-07 00:25:38 · 5924 阅读 · 6 评论 -
深度学习中常用的几种卷积(上篇):标准二维卷积、转置卷积、1*1卷积(附Pytorch测试代码)
1×1卷积与上一节介绍的2D卷积差别仅在于,1×1卷积的卷积核大小是(1,1)。1×1卷积通常用于:(1)特征降维:可通过调整卷积步长、过滤器数量来进行特征降维,降低计算量;(2)引入非线性:通过在学习中引入非线性激活函数,扩大网络的假设空间,增强网络的学习能力。1)卷积通常是实现对特征图的下采样操作,所以为了对特征图进行上采样操作,提出和标准卷积相反的转置卷积,此操作可用于代替传统的插值方法实现上采样操作。特征上采样;将低维特征映射到高位空间;原创 2022-09-05 16:29:13 · 2966 阅读 · 4 评论 -
Checkerboard Artifacts(棋盘伪影)的发生以及解决方案:
kernel_size=3,stride=2:以输出中第三行元素为例,从左往右接受的信息量依次由输入中的2/2/4/2/2个元素提供,中间元素接受信息量不同,此为“不均匀重叠”。此外,当kernel_size=3,stride=2时,一维转置卷积输出中依次接受输入特征的1/1/2/1/1个元素提供的信息量,不均匀性是单方向的平方。3)stride=2,kernel_size=4:先对输入元素间用0进行stride-1=1的插值,再进行大小为1*(4-1)-0=3的零填充。=0:“不均匀重叠”原创 2022-09-04 21:02:03 · 2700 阅读 · 6 评论 -
全局平均池化/全局最大池化Pytorch实现:
全局池化与普通池化的区别在于“局部区域”和“全局”:普通池化根据滑动窗口以及步长以逐步计算局部区域的方式进行;而全局池化是分别对每个通道的所有元素进行计算,谓之全局池化。大大降低计算的参数量;没有需要学习的参数,可以更好的避免过拟合;更能体现输入的全局信息;拿一个简单的网络验证参数量下降(此处只计算权重):因为池化操作是沿着通道方向对该通道的特征进行,故对于输入(N,C,H,W),池化输出为(N,C)。原创 2022-09-02 16:25:45 · 12607 阅读 · 3 评论 -
常见的几种池化操作:MaxPool2d/AdaptiveMaxPool2d/AvgPool2d/AdaptiveAvgPool2d...(Pytorch)
case3:output_size=(H_out,None)或output_size=(None,W_out),此时指定为None的维度与输入中保持一致,既output_size=(H_out,None)时W_out=W_in;case3:output_size=(H_out,None)或output_size=(None,W_out),此时指定为None的维度与输入中保持一致,既output_size=(H_out,None)时W_out=W_in;因为执行的是最大池化操作,所以在填充时使用负无穷。原创 2022-09-01 19:32:21 · 9123 阅读 · 2 评论 -
常见的几种填充方式:ZeroPad2d/ReflectionPad2d...(Pytorch)
可看到在输入中H_in=2,W_in=5,而输出中为H_out=2+1+1=4,W_out=5+2+2=9。可看到在输入中H_in=2,W_in=5,而输出中为H_out=2+1+1=4,W_out=5+1+1=7。最后进行填充时,左面填充pad_left=1个左边界复制品,而右面填充pad_right=2个右边界复制品。结果:可看到原始输入的左、右、上、下四个边界依次填充pad_left=1,pad_right=2,pad_top=3,pad_bottom=4大小的边界复制品。...原创 2022-08-30 22:56:35 · 2714 阅读 · 0 评论 -
反射填充详解ReflectionPad2d(padding)
这种填充方式是以输入向量的边界为对称轴,以设定的padding大小为步长,将输入向量的边界内padding大小的元素,对称填充。1)当padding=(2,2,1,1)时,表示向量以左、右、上、下边界为对称轴,左、右、上、下分别填充宽度为2,2,1,1的元素。1)当padding=(1,2)时,表示向量以边界为对称轴,左右两边分别填充宽度为1、2的元素。1)当padding=1时,表示向量以边界为对称轴,左、右、上、下四个边界均填充宽度为1的元素。图中白线、黑线代表以此为轴,红色、绿色块代表填充元素。...原创 2022-08-30 00:37:24 · 5827 阅读 · 5 评论 -
常用激活函数:Sigmoid/Softmax/ELU/ReLU/LeakyReLU/Tanh...(Pytorch)
1)公式定义及图示该函数输入为任意形状,输出与输入保持一致,此操作是将所有元素映射到(0,1)范围内,推导如下:2)调用方式1)公式定义公式理解:分母为输入向量中的所有元素按照指数方式求和,然后将输入中的每个元素按照指数方式除以分母得到计算结果。2)调用方式该函数输入/输出为n维向量,目的是将其输入重新缩放,使其所有元素皆属于[0,1],并且此时所有元素总和为1。...原创 2022-08-29 20:27:57 · 4251 阅读 · 2 评论 -
GAN:一种深度学习网络(从0到1,采用全连接层实现普通GAN,利用Pytorch实现随机向量生成手写数字Mnist)
【代码】采用全连接层实现普通GAN,利用Pytorch实现随机向量生成手写数字(GAN:一种深度学习网络)原创 2022-08-23 18:54:08 · 1583 阅读 · 4 评论 -
Pytorch修改内置模型下载路径(vgg等)
在使用Pytorch内置的模型时,会默认下载到用户家目录下,而对于很多人来说并不想在C盘下载一些较大的文件,此时修改模型的下载路径则显得比较重要。原创 2022-08-14 20:42:23 · 2049 阅读 · 0 评论 -
根据任务需求自制数据集:Pytorch自定义数据集Dataset代码示例(有监督学习,输入输出均为图像)
2.使用torchvision.io和PIL两种方式读取的数据范围为[0,255],并未进行归一化,我们可根据自己的需求对其进行归一化。原创 2022-08-11 18:16:55 · 914 阅读 · 0 评论 -
Pytorch读取照片的三种方式(包括但不限于)
在后续神经网络的搭建及训练中,我们要确保其中涉及到的图像数据为Tensor,并且Tensor的数据类型为浮点型。在使用opencv读取图像时,需要注意其读取后的图像通道按照BGR的顺序排列而不是RGB。原创 2022-08-11 17:59:38 · 8203 阅读 · 2 评论 -
Windows下安装及配置CUDA过程详解
GPU加速环境配置原创 2022-07-25 20:27:30 · 7912 阅读 · 0 评论 -
Tensorflow/Pytorch安装(Anaconda环境下,无版本冲突,亲测有效)
Tensorflow或Pytorch安装原创 2022-07-25 14:20:06 · 1464 阅读 · 1 评论 -
Linux系统(Ubuntu)下安装及配置CUDA过程详解
Ubuntu系统配置CUDA原创 2022-07-13 21:16:58 · 12134 阅读 · 7 评论