![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深度学习
Legolas~
这个作者很懒,什么都没留下…
展开
-
StyleGAN源码之FID
看到很多网友在用StyleGAN训练自己的数据集的时候都忽略了fid,源码中fid利用了inception v3的pertained model,源码写的是要从谷歌网盘下载该pretrained model,如果只想run着玩可以忽略fid的计算,把相应代码注释掉;否则最好提前下载下来然后在本地目录导入下载好的inception v3即可。源码FID的位置:metrics/frechet_inception_distance.py调用FID的位置:metrics/metric_base.py实际的原创 2021-09-05 13:16:49 · 799 阅读 · 0 评论 -
利用python的absl配置参数
将深度学习应用到CV领域必不可少的要搭建模型,训练网络,一般模型搭建为一个py文件,网络训练为一个py文件,其中网络训练需要大量参数设置,比如张量运行的设备(CPU or GPU),初始学习率,训练次数,批次大小,图像裁剪尺寸等等,如果我们在程序中随意定义并初始化这些参数不免显得程序非常凌乱,而且维护性较差,同时占用内存,那么一个好的方法就是在程序的开头将其全部声明和初始化并且打包成一个整体,下面看代码:from ansl import flags, appflags.DEFINE_string('参原创 2021-05-20 16:08:52 · 1407 阅读 · 0 评论 -
WGAN解读(一)
WGAN全称Wasserstein GAN,重点以及和DCGAN的不同之处在于Wasserstein,Wasserstein是个啥呢?网上有很多很棒的解答,这里直接送上传送门KL散度、JS散度、Wasserstein距离WGAN的作者选择Wasserstein距离来度量真实图像分布和生成图像分布之间的距离,目标即为最小化该距离。尽管Wasserstein距离从公式的形式上来看比较复杂难懂,但是结合代码实现来看其实非常简单。官方GitHub给出的代码如下:loss_D = -torch.mean(dis原创 2021-05-13 21:24:13 · 3736 阅读 · 0 评论 -
图像识别最新进展:来自Google Brain Team的MLP-Mixer
CV领域最近几年发展火热,各种先进算法、模型层出不穷,CV领域的科研工作者和从业者也被迫需要天天学习新的structure,幻想有朝一日能够提出实现SOTA的方法。图像识别兜兜转转,居然从MLP开始经过CNN、Transformer又回到了MLP,近日,谷歌大脑团队提出的MLP-Mixer又引发了CV领域的浪潮,论文发布在arXiv,仔细发现参与的研究者大多也是Vision Transformer(ViT)的提出者,通过论文中的实验结论我们可以发现MLP-Mixer在JFT-300M数据集上的识别精度相比V原创 2021-05-10 15:02:55 · 752 阅读 · 0 评论 -
打印模型训练过程中的学习率
print(optimizer.state_dict()['param_groups'][0]['lr'])原创 2021-05-09 21:31:35 · 907 阅读 · 0 评论 -
热重启的随机梯度下降
看了CSDN的一些博客感觉讲的都不是很清晰,这里简单分析一下:首先基于热重启的学习率衰减策略可以说是余弦退火衰减策略的进化。余弦退火学习率衰减策略在整个训练过程持续衰减直到学习率为0,那么当损失函数的值陷入局部最优值的时候,越来越小的学习率显然难以跳出局部最优值。而热重启很好地解决了这个问题,先摆上公式和图像:首先利用大白话讲一下为什么叫“热重启”,“重启”指的是每间隔TiT_iTi次迭代学习率重启一次,并且每次重启后的状态与之前相同(就好比电脑重启一个道理,暂且我们认定电脑只含有一个操作系统,电原创 2021-05-09 20:25:47 · 1488 阅读 · 0 评论 -
图像评估指标:PSNR
公式:MSEMSEMSE:模型的输出图像与真实图像之间的均方误差MAXMAXMAX:nnn位RGB图像所能取到的最大值(例如nnn===888,此时MAXMAXMAX===2228^{8}8−-−111===255255255)意义(重点,面试常考):峰值信号的能量与噪声的平均能量之比代码实现:def psnr(pred, gt): pred = pred.clamp(0, 1).cpu().numpy() gt = gt.clamp(0, 1).cpu().numpy()原创 2021-05-09 09:57:17 · 1629 阅读 · 2 评论 -
深度学习训练遇到的坑(一)
如果使用的训练集图像的分辨率很高(几千x几千的那种),不要在训练的过程中将resize图像方法封装到transforms.Compose中,这样会使得resize图像的过程变得特别慢,最好的方法是在训练之前就对所有图像做预处理,利用opencv的resize方法对训练集和验证集图像全部裁剪成特定尺寸,得到低分辨率的图像后再进行训练。...原创 2021-05-08 14:06:51 · 373 阅读 · 1 评论 -
Helen人脸数据集生成人脸分割
Helen人脸数据集包括2330张人脸图像,并且每张人脸图像包含11个部位的掩模,通常做人脸分割只需要面部以及面部特征掩模即可。数据集文件的整体结构如下:依赖的库:import osimport cv2 as cvimport numpy as np定义人脸分割不同部位的颜色:colors = [[160, 0, 10], [11, 138, 19], [11, 138, 19], [21, 83, 184], [21, 83, 184], [33, 182, 151], [255, 16,原创 2021-05-08 09:30:49 · 1795 阅读 · 2 评论 -
图像风格迁移及代码实现
图像风格迁移其实非常好理解,就是将一张图像的“风格”(风格图像)迁移至另外一张图像(内容图像),但是这所谓的另外一张图像只是在“风格”上与之前有所不同,图像的“内容”仍要与之前相同。Luan et al. and Gatys et al. 的工作都是利用VGGNet19作为该项任务的backbone,由于VGGNet19是一种近似“金字塔”型结构,所以随着卷积操作的加深,feature maps的感受野越来越大,提取到的图像特征从局部扩展到了全局。我们为了避免合成的图像过多地保留内容信息,选取VGGNet1原创 2021-05-07 15:41:56 · 5994 阅读 · 15 评论 -
某些场景下采用3x3的卷积or5x5的卷积
假设我们要进行一次卷积操作,输入feature maps的channel为64,输出feature maps的channel也要为64,那么对于555×\times×555和333×\times×333的卷积尺寸该怎么选择呢?答案如下图所示:即选择333×\times×333的卷积核对输入的feature maps做两次卷积而非用555×\times×555的卷积核对输入的feature maps做一次卷积。这样做的主要区别在于两点:1.参数量;2.感受野。kernel sizerecept原创 2021-05-06 16:16:55 · 376 阅读 · 0 评论 -
低分辨率feature maps的上采样方法:pixelshuffle
pixelshuffle是一种对低分辨率特征图上采样的新思路,假设我们打算将H×\times×W×\times×C的特征图在长和宽的维度扩大rrr倍变成rrrH×\times×rrrW×\times×C,pixelshuffle的做法是通过深度为r2r^{2}r2C的卷积对H×\times×W×\times×C的特征图进行卷积操作得到H×\times×W×\times×r2r^{2}r2C的特征图,然后通过“周期洗牌”的方式将H×\times×W×\times×r2r^{2}r2C的特征图编排为rrrH×\原创 2021-04-29 10:53:36 · 3061 阅读 · 1 评论 -
Jupyter NoteBook安装代码提示功能
在base环境依次输入以下四行命令:pip install jupyter_contrib_nbextensionsjupyter contrib nbextension install --userpip install jupyter_nbextensions_configuratorjupyter nbextensions_configurator enable --userpip建议加上镜像源安装完毕重新打开jupyter notebook,会发现根目录的标签栏多了一个Nbextens原创 2020-09-02 14:19:29 · 502 阅读 · 0 评论 -
【迁移学习】pytorch中如何加载已经训练好的模型
torchvision的models中包含很多用于图像分类、视频分类、目标检测等模型,例如vgg、resnet、inception v3等,我们既可以加载已经训练好的模型(预训练模型均是在ImageNet上进行训练的),也可以加载未经训练的模型,方法有两种,拿vgg来说:torchvision.models.vgg19(pretrained=False, progress=True, **kwargs)pretrained: 为True时,返回在ImageNet上的预训练模型。progress: 为原创 2020-08-22 19:45:58 · 3583 阅读 · 0 评论 -
【深度学习】torch自动更新学习率(一)
官方文档如下:torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1, last_epoch=-1)Parameters:optimizer(Optimizer) – Wrapped optimizer.step_size(int) – Period of learning rate decay.gamma(float) – Multiplicative factor of learning rate decay. Defa原创 2020-08-21 17:29:57 · 1116 阅读 · 0 评论 -
SVD奇异值分解的一些理解
关于SVD奇异值分解的公式推导和原理计算这里就不再赘述了,网上有很多的博客都讲解的非常详细,这里只说一下自己对SVD的一些理解,如果有错误的地方烦请网友们指正~SVD奇异值分解可以将原始矩阵分解成以下形式:通常情况下数据中会包含很多噪声数据、不相关数据等等,此时Σ\SigmaΣ矩阵对角线上的特征值需要进行取舍以达到对原始数据进行降维的操作,只提取有用的、我们最感兴趣的信息。对Σ\SigmaΣ对角线上的元素求和可以得到信息量总和,我们一般只需要信息量总和的大约90%的这部分信息量就足够了,因为100%原创 2020-08-14 12:11:49 · 234 阅读 · 0 评论 -
【深度学习】keras通过tensorboard进行可视化
通过自己编写方法利用matplotlib可视化每次迭代的损失和精确度时感觉很麻烦,运行时间开销也大,然而利用tensorboard可以以最少的代码得到最优的更多的可视化结果。看了不少网上的博客,大多都是千篇一律,不是抄的就是过程不详细,对于小白真的是一头雾水,下面我来具体讲解一下tensorboard的过程。首先keras中tensorboard的调用过程为tf.keras.callbacks.TensorBoard(),tf为tensorflow的别名。去keras的官方文档看了下,Tensorboar原创 2020-08-10 15:18:50 · 806 阅读 · 0 评论 -
【深度学习】pytorch的卷积层的padding
torch.nn.Conv2d()为torch中的卷积层,参数如下: def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zero原创 2020-08-07 17:18:14 · 3305 阅读 · 0 评论 -
【深度学习】生成式对抗网络的损失函数的理解
生成式对抗网络即GAN由生成器和判别器组成。原论文中,关于生成器和判别器的损失函数是写成以下形式:首先,第一个式子我们不看梯度符号的话即为判别器的损失函数,logD(xi)为判别器将真实数据判定为真实数据的概率,log(1-D(G(zi)))为判别器将生成器生成的虚假数据判定为真实数据的对立面即将虚假数据仍判定为虚假数据的概率。判别器就相当于警察,在鉴别真伪时,必须要保证鉴别的结果真的就是真的,假的就是假的,所以判别器的总损失即为二者之和,应当最大化该损失。由于判别器(警察)鉴别真伪的能力随着训练次数的原创 2020-08-06 19:12:33 · 15713 阅读 · 2 评论 -
【深度学习】FFA-Net:北大&北航提出的图像去雾的新型网络(代码在Github上已开源)
1.新颖之处:提出了一种端到端的特征融合注意力网络(Feature Fusion Attention Network),可直接将有雾的图像恢复成无雾图像。算法主线:通道上的权重、各个像素位置处的权重是根据特征的重要程度来分配的。2.FFA-Net框架结构:上图为FFA-Net的框架结构图,从整体来看,其为全局残差网络,输入为haze image,经过shortcut与残差网络的主分支进行element-wise sum操作之后得到haze-free image。FFA-Net的主分支较为复杂,主分支原创 2020-08-02 22:49:01 · 7768 阅读 · 13 评论 -
【深度学习】残差网络Resnet重点问题解读
1.残差网络解决的问题:可以加深网络层数,避免了由于层数过多反而导致错误率上升的问题(并不是由过拟合造成的,而是由于梯度消失或者梯度爆炸、退化问题)使用BatchNormalization加速训练(丢弃了传统的dropout)2.残差块中的虚线shortcut:实线与虚线的不同在于,虚线部分的x(shortcut)和y(主分支)的维度不同。我们拿34-layers的Resnet来说:在何凯明的原论文中有这样一个表格,为5种深度的残差网络的层结构,其中x2、x3表示每个con_v中有两个、原创 2020-07-31 22:44:46 · 2481 阅读 · 0 评论 -
【深度学习】kears学习笔记(二)
1.one-hot编码from tensorflow.keras.utils import to_categoricaly_train = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]y_train = to_categorical(y_train, num_classes=10)print(type(y_train))num_classes:设定的类别个数,相当于把每个样本编码成num_classes位二进制,默认为y_train中最大值加1。2.EarlyStopping原创 2020-07-30 19:34:50 · 278 阅读 · 0 评论 -
【深度学习】Pytorch学习笔记(六)
1.numpy.ndarray与tensor之间的转换import cv2 as cvfrom torchvision import transformsimage = cv.imread("test.jpg")transform = transforms.Compose([ transforms.ToTensor()])image_tensor = transform(image)转为tensor后通道数变成了第一维度,并且tensor中的元素全部在区间[0.0, 1.0]。原创 2020-07-29 18:36:53 · 155 阅读 · 0 评论 -
【深度学习】Pytorch学习笔记(五)
pytorch实现卷积神经网络(执行效率相对于keras慢太多)import torchimport warningsimport torchvisionfrom torchvision.datasets import MNISTfrom torch.utils.data import DataLoaderwarnings.filterwarnings("ignore")BATCH_SIZE = 32train_data = MNIST( root='./mnist',原创 2020-07-28 11:46:38 · 156 阅读 · 0 评论 -
【深度学习】Pytorch学习笔记(三)
实现二分类神经网络(数据线性可分):import torchimport torch.nn.functional as Fimport numpy as npimport warningsimport matplotlib.pyplot as pltfrom sklearn.metrics import accuracy_scorewarnings.filterwarnings("ignore")x1 = torch.from_numpy(np.random.uniform(0.5, 2原创 2020-07-26 18:21:41 · 335 阅读 · 0 评论 -
【深度学习】Pytorch学习笔记(二)
pytorch搭建神经网络进行回归:import torchimport imageioimport torch.nn.functional as Fimport matplotlib.pyplot as pltx = torch.sort(5 * torch.rand(100, 1), dim=0)[0]y = torch.sin(x)y[::5, :] += 3 * (0.5 - torch.rand(20, 1))class Model(torch.nn.Module):原创 2020-07-25 18:24:38 · 186 阅读 · 0 评论 -
【深度学习】Pytorch学习笔记(一)
Pytorch中需要自己定义网络模型,该模型需要封装到一个自定义的类中,该类只是一个子类,其继承的父类为torch.nn.Module,可见如下树形结构图:Module实际又是继承了Object类,关于为什么要继承Object类有兴趣的可以看这篇博客MRO算法也就是说,自定义的模型除了要有__init__()构造函数之外,还必须有forward函数,重写父类Module的该方法。 在子类的__init__()方法中必须调用父类的__init__()方法以初始化父类的属性,常用写法为super(自定义类原创 2020-07-25 12:03:46 · 191 阅读 · 0 评论 -
【深度学习】卷积神经网络识别猫和狗
原本想用keras的cifar10数据集,但是load_data()的过程太慢了,于是自己各找了猫和狗的10张RGB照片,并且通过opencv将图片全部压缩成32x32尺寸的图像,然后猫和狗各有7张图像用来训练卷积神经网络,剩余的各自3张用来进行测试,测试结果的高低很大程度上取决于训练集,如果训练集图像(指32x32尺寸)分辨率较高,卷积神经网络参数设置合理,最终测试结果的accuracy也会较高。import osimport cv2 as cvimport numpy as npfrom ten原创 2020-07-22 21:04:47 · 876 阅读 · 0 评论 -
【深度学习】指数加权滑动平均
加权平均:我们常用的算术平均属于加权平均的特殊形式,只不过算术平均各项权重都相等。加权滑动平均:原理与加权平均类似,但重点在“滑动”一词,即该平均过程就好似从第一个值依次向后滑动,直到滑动到最后一个值,言外之意就是,第n个值取决于第n-1个值。滑动平均递推公式:一般设v0v_0v0=0,由上述公式可知:通过数学归纳法可知:最终所要求得的加权滑动平均值即为vtv_tvt。但是问题又随之出现了,前几个vtv_tvt(通过递推公式得到的)与它们各自的原始值偏差很大,由于v0v_0v0=原创 2020-07-21 14:04:29 · 2463 阅读 · 0 评论 -
【深度学习】keras学习笔记(一):搭建多层感知机
回归预测问题:import numpy as npimport matplotlib.pyplot as pltfrom tensorflow import kerasfrom tensorflow.keras import layersx = np.sort(5 * np.random.rand(40, 1), axis=0)y = np.sin(x).ravel()y[::5] += 3 * (0.5 - np.random.rand(8))model = keras.Sequen原创 2020-06-24 18:35:51 · 635 阅读 · 0 评论 -
tensorflow搭建神经网络回归模型与SVR机器学习模型对比
import numpy as npimport matplotlib.pyplot as pltimport tensorflow as tf from sklearn import svmX = np.sort(5 * np.random.rand(100, 1), axis = 0)Y = np.sin(X).ravel()Y[::5] += 3 * (0.5 - np.random.rand(20))Y = Y.reshape((100,1))plt.scatter(X, Y,原创 2020-06-15 21:49:05 · 1680 阅读 · 0 评论 -
基于tensorflow的神经网络拟合模型
import tensorflow as tfimport numpy as npimport matplotlib.pyplot as pltdef loadDataSet(fileName,delim='\t'): fr = open(fileName) stringArr = [line.strip().split(delim) for line in fr.read...原创 2020-04-11 15:19:18 · 351 阅读 · 0 评论