
深度学习
文章平均质量分 69
水木流年追梦
清华大学计算机研究生,专研算法工程
展开
-
PyTorch实战福利从入门到精通之五——搭建ResNet
Kaiming He的深度残差网络(ResNet)在深度学习的发展中起到了很重要的作用,ResNet不仅一举拿下了当年CV下多个比赛项目的冠军,更重要的是这一结构解决了训练极深网络时的梯度消失问题。首先来看看ResNet的网络结构,这里选取的是ResNet的一个变种:ResNet34。ResNet的网络结构如图所示,可见除了最开始的卷积池化和最后的池化全连接之外,网络中有很多结构相似的单元,这...原创 2020-02-02 09:14:07 · 1566 阅读 · 0 评论 -
python程序中的内存泄露(matplotlib内存泄漏)
跑深度学习程序用到了matplotlib,发现在程序占用内存不断提高,原因经过排查是使用了fig.savefig()循环使用不断占用更多空间,产生了matplotlib内存泄漏。解决办法:fig.savefig()后接着两句:plt.close('all')gc.collect()...原创 2022-02-22 15:37:36 · 1361 阅读 · 2 评论 -
如何开始一个深度学习项目
刚接触深度学习的小伙伴们应该有这样的疑惑:如何从零起步,从一个简单的idea开始,一步一步推进一个深度学习的学术项目,完成从idea到paper的成功转化?下面我们一起来看看慕尼黑工业大学的Matthias Niessner教授给大家的建议。1.怎么从零开始一个深度学习的项目?很多业内的研究人员都习惯性用流水线似的思路完成项目的起步,一步一步一个脚印,稳扎稳打地向前推进项目。然而,很多刚起步的新人研究者却经常在一些常见且但可规避的问题上踩坑。下面,我们一起来看看该如何合理地上手第一个深度学习原创 2021-10-26 18:58:29 · 1234 阅读 · 0 评论 -
pytorch源码解析2——数据处理torch.utils.data
迭代器理解 Python 的迭代器是解读 PyTorch 中torch.utils.data模块的关键。在Dataset,Sampler和DataLoader这三个类中都会用到 python 抽象类的魔法方法,包括__len__(self),__getitem__(self)和__iter__(self)__len__(self): 定义当被len()函数调用时的行为,一般返回迭代器中元素的个数 __getitem__(self): 定义获取容器中指定元素时的行为,相当于...转载 2021-02-17 00:08:56 · 1284 阅读 · 0 评论 -
pytorch之C++实现自定义算子
自定义算子对于输入 x,其输出为利用C++实现以上算子,总共只要实现两个文件:setup.py利用python中提供的setuptools模块完成事先编译流程,将写有算子的C++文件,编译成为一个动态链接库(在Linux平台是一个.so后缀文件),可以让python调用其中实现的函数功能。需要setup.py编写如下from setuptools import setupfrom torch.utils import cpp_extensionsetup( name='.转载 2021-02-16 16:42:21 · 2267 阅读 · 2 评论 -
pytorch源码解析1——torch.optim:优化算法接口详解
1. 优化器 Optimizer1.0 基本用法优化器主要是在模型训练阶段对模型可学习参数进行更新, 常用优化器有 SGD,RMSprop,Adam等 优化器初始化时传入传入模型的可学习参数,以及其他超参数如lr,momentum等 在训练过程中先调用optimizer.zero_grad()清空梯度,再调用loss.backward()反向传播,最后调用optimizer.step()更新模型参数简单使用示例如下所示:import torchimport numpy...转载 2021-02-16 16:06:58 · 3057 阅读 · 0 评论 -
Attention is all you need注意力机制代码解析
在这篇文章中,我以逐行实施的形式介绍了本文的“注释”版本。 我已经重新排序并从原始论文中删除了一些部分,并在全文中添加了评论。 本文档本身是一个有效的笔记本,应完全可用。 总共有400行库代码,可在4个GPU上每秒处理27,000个token。import numpy as npimport torchimport torch.nn as nnimport torch.nn.functional as Fimport math, copy, timefrom torch.autograd..原创 2021-02-10 14:24:08 · 1783 阅读 · 2 评论 -
人工智能的CV领域顶级会议与期刊
顶级期刊PAMI,IEEE Transactions on Pattern Analysis and Machine Intelligence,即IEEE模式分析与机器智能汇刊IJCV,International Journal of Computer Vision,即计算机视觉国际期刊顶级会议ICCV,IEEE International Conference on Computer Vision,即IEEE国际计算机视觉大会(两年一次)CVPR,IEEE Conference on Com...原创 2020-12-07 21:55:48 · 1701 阅读 · 1 评论 -
卷积中的分组卷积
左边是正常卷积,右边是分组卷积。原创 2020-12-07 16:27:10 · 575 阅读 · 0 评论 -
计算机视觉空间域(spatial)注意力机制——CBAM
首先是结构:CBAM不仅包含senet的channel注意力机制也包含spatial注意力模块两个attention模块都是使用sigmoid来缩放到[0,1]之间。更详细的结构:也就是说channel和spatial的注意力机制都用了两个不同的pool。如果说channel注意力机制是从W*H*C的feature map得到1*1*C的注意力权重,那么spatial注意力机制则是从W*H*C的feature map得到W*H*1的注意力权重....原创 2020-12-07 16:00:57 · 5244 阅读 · 2 评论 -
计算机视觉通道域(channel)注意力机制——SENet
属于注意力机制在cv领域的channel注意力机制,SENet一个很大的优点就是可以很方便地集成到现有网络中,提升网络性能,并且代价很小。首先是结构:原来的任意变换将输入X变为输出U,现在假设输出的U不是最优的,每个通道的重要程度不同,有的通道更有用。对于每一输出通道,先global average pool,每个通道得到1个标量,C个通道得到C个数,然后经过FC-ReLU-FC-Sigmoid得到C个0到1之间的标量,作为通道的权重,原来的输出通道每个通道用对应的权重进行加权(对应通.原创 2020-12-07 15:49:32 · 6755 阅读 · 5 评论 -
计算机视觉注意力机制-Attention
注意力机制本质上与人类对外界事物的观察机制相似。通常来说,人们在观察外界事物的时候,首先会比较关注比较倾向于观察事物某些重要的局部信息,然后再把不同区域的信息组合起来,从而形成一个对被观察事物的整体印象。注意力机制能够使得深度学习在观察目标时更加具有针对性,使得目标识别与分类的精度都有所提升Attention Mechanism可以帮助模型对输入的每个部分赋予不同的权重,抽取出更加关键及重要的信息,使模型做出更加准确的判断,同时不会对模型的计算和存储带来更大的开销。总的来说,注意力机制可分为两种:一原创 2020-12-05 21:02:56 · 1983 阅读 · 0 评论 -
什么是hypernetworks? hypernetworks简单介绍
《hypernetworks》作者是David Ha,Andrew Dai,Quoc V. Le,此为2017年的ICLR论文简介:这项工作探索了超网络:一种使用一个网络(也称为超网络)为另一个网络生成权重的方法。超网络提供了一种与自然界相似的抽象:基因型(超网络)与表型(主网络)之间的关系。 这项工作的重点是使超网络对深度卷积网络和长循环网络有效。在这些网络中,超网络可以看作是跨层共享权的轻松形式。 主要结果是超网络可以为LSTM生成非共享的权重,并在各种序列建模任务(包括字符级语言建模,..原创 2020-11-30 16:47:20 · 14003 阅读 · 0 评论 -
shapenet各类数据(转载)
转载 2020-11-02 20:06:44 · 2895 阅读 · 0 评论 -
Encoder与Decoder
AutoEncoder属于无监督学习的技术,其思想影响深远。可以参考以下几个文章,感觉都不错从经典autoencoder介绍到卷积autoencoderhttps://blog.youkuaiyun.com/leida_wt/article/details/85052299转载 2020-10-08 01:21:57 · 991 阅读 · 1 评论 -
速成pytorch学习——11天. 使用GPU训练模型
深度学习的训练过程常常非常耗时,一个模型训练几个小时是家常便饭,训练几天也是常有的事情,有时候甚至要训练几十天。训练过程的耗时主要来自于两个部分,一部分来自数据准备,另一部分来自参数迭代。当数据准备过程还是模型训练时间的主要瓶颈时,我们可以使用更多进程来准备数据。当参数迭代过程成为训练时间的主要瓶颈时,我们通常的方法是应用GPU来进行加速。Pytorch中使用GPU加速模型非常简单,只要将模型和数据移动到GPU上。核心代码只有以下几行。# 定义模型 ... device =转载 2020-09-20 19:55:56 · 1227 阅读 · 0 评论 -
速成pytorch学习——10天.训练模型的3种方法
Pytorch通常需要用户编写自定义训练循环,训练循环的代码风格因人而异。有3类典型的训练循环代码风格:脚本形式训练循环,函数形式训练循环,类形式训练循环。下面以minist数据集的分类模型的训练为例,演示这3种训练模型的风格。import torch from torch import nn from torchkeras import summary,Model import torchvision from torchvision import transformstran转载 2020-09-20 14:50:18 · 884 阅读 · 0 评论 -
速成pytorch学习——9天构建模型的3种方法
可以使用以下3种方式构建模型:1,继承nn.Module基类构建自定义模型。2,使用nn.Sequential按层顺序构建模型。3,继承nn.Module基类构建模型并辅助应用模型容器进行封装(nn.Sequential,nn.ModuleList,nn.ModuleDict)。其中 第1种方式最为常见,第2种方式最简单,第3种方式最为灵活也较为复杂。推荐使用第1种方式构建模型。一,继承nn.Module基类构建自定义模型以下是继承nn.Module基类构建自定义模型的一个范例。转载 2020-09-20 14:48:18 · 540 阅读 · 0 评论 -
一些推荐的深度学习、机器学习资料
吴恩达深度学习课程作业https://github.com/Wasim37/deeplearning-assignment吴恩达机器学习作业https://github.com/PowersYang/Coursera_ML_Exercise原创 2020-09-20 13:39:35 · 201 阅读 · 0 评论 -
速成pytorch学习——8天损失函数
一般来说,监督学习的目标函数由损失函数和正则化项组成。(Objective = Loss + Regularization)Pytorch中的损失函数一般在训练模型时候指定。注意Pytorch中内置的损失函数的参数和tensorflow不同,是y_pred在前,y_true在后,而Tensorflow是y_true在前,y_pred在后。对于回归模型,通常使用的内置损失函数是均方损失函数nn.MSELoss 。对于二分类模型,通常使用的是二元交叉熵损失函数nn.BCELoss (输入已经是s转载 2020-09-20 14:42:29 · 736 阅读 · 0 评论 -
速成pytorch学习——7天模型层layers
深度学习模型一般由各种模型层组合而成。torch.nn中内置了非常丰富的各种模型层。它们都属于nn.Module的子类,具备参数管理功能。例如: nn.Linear, nn.Flatten, nn.Dropout, nn.BatchNorm2d nn.Conv2d,nn.AvgPool2d,nn.Conv1d,nn.ConvTranspose2d nn.Embedding,nn.GRU,nn.LSTM nn.Transformer 如果这些内置模型层不能够满足转载 2020-09-20 12:54:46 · 376 阅读 · 0 评论 -
速成pytorch学习——6天Dataset和DataLoader
Pytorch通常使用Dataset和DataLoader这两个工具类来构建数据管道。Dataset定义了数据集的内容,它相当于一个类似列表的数据结构,具有确定的长度,能够用索引获取数据集中的元素。而DataLoader定义了按batch加载数据集的方法,它是一个实现了__iter__方法的可迭代对象,每次迭代输出一个batch的数据。DataLoader能够控制batch的大小,batch中元素的采样方法,以及将batch结果整理成模型所需输入形式的方法,并且能够使用多进程读取数据。在绝大转载 2020-09-19 23:59:33 · 1039 阅读 · 0 评论 -
速成pytorch学习——5天nn.functional 和 nn.Module
一,nn.functional 和 nn.Module前面我们介绍了Pytorch的张量的结构操作和数学运算中的一些常用API。利用这些张量的API我们可以构建出神经网络相关的组件(如激活函数,模型层,损失函数)。Pytorch和神经网络相关的功能组件大多都封装在 torch.nn模块下。这些功能组件的绝大部分既有函数形式实现,也有类形式实现。其中nn.functional(一般引入后改名为F)有各种功能组件的函数实现。例如:(激活函数)F.relu F.sigmoid F.转载 2020-09-17 22:51:47 · 819 阅读 · 0 评论 -
速成pytorch学习——4天中阶API示范
使用Pytorch的中阶API实现线性回归模型和和DNN二分类模型。Pytorch的中阶API主要包括各种模型层,损失函数,优化器,数据管道等等。一,线性回归模型1,准备数据import numpy as np import pandas as pdfrom matplotlib import pyplot as plt import torchfrom torch import nnimport torch.nn.functional as Ffrom torch.utils转载 2020-09-17 16:51:06 · 452 阅读 · 0 评论 -
速成pytorch学习——3天自动微分机制
神经网络通常依赖反向传播求梯度来更新网络参数,求梯度过程通常是一件非常复杂而容易出错的事情。而深度学习框架可以帮助我们自动地完成这种求梯度运算。Pytorch一般通过反向传播 backward 方法 实现这种求梯度计算。该方法求得的梯度将存在对应自变量张量的grad属性下。除此之外,也能够调用torch.autograd.grad 函数来实现求梯度计算。这就是Pytorch的自动微分机制。一,利用backward方法求导数backward 方法通常在一个标量张量上调用,该方法求得的梯转载 2020-09-17 14:46:25 · 523 阅读 · 0 评论 -
速成pytorch学习——2天
Pytorch的基本数据结构是张量Tensor。张量即多维数组。Pytorch的张量和numpy中的array很类似。本节我们主要介绍张量的数据类型、张量的维度、张量的尺寸、张量和numpy数组等基本概念。一,张量的数据类型张量的数据类型和numpy.array基本一一对应,但是不支持str类型。包括:torch.float64(torch.double),torch.float32(torch.float),torch.float16,torch.int64(torch.l转载 2020-09-17 14:31:29 · 573 阅读 · 0 评论 -
速成pytorch学习——1天
一、Pytorch的建模流程使用Pytorch实现神经网络模型的一般流程包括:1,准备数据2,定义模型3,训练模型4,评估模型5,使用模型6,保存模型。对新手来说,其中最困难的部分实际上是准备数据过程。我们在实践中通常会遇到的数据类型包括结构化数据,图片数据,文本数据,时间序列数据。我们将分别以titanic生存预测问题,cifar2图片分类问题,imdb电影评论分类问题,国内新冠疫情结束时间预测问题为例,演示应用Pytorch对这四类数据的建模方法。二、Pyto转载 2020-09-17 11:59:05 · 994 阅读 · 0 评论 -
TSDF算法笔记(转)
TSDF 算法简介TSDF ,全称:truncated signed distance function,基于截断的带符号距离函数,是一种常见的在3D重建中计算隐势面的方法。著名的Kinfusion就是才用TSDF来构建空间体素的,通过求去每个体素的值,然后再使用之前提到的Marching Cube来提取表面的。TSDF是在SDF进行改进的,是在SDF提出了截断距离,具体内容我们们在下面讲 ,很简单的。SDF是在2003年由S Osher提出。在拥有大内存的显卡并行计算的情况下,使用TSDF可以做到转载 2020-09-14 21:52:15 · 6565 阅读 · 0 评论 -
Data-Driven Geometry Processing 3D Deep Learning
原创 2020-08-02 09:07:31 · 299 阅读 · 0 评论 -
Motion and Optical Flow
光流Optical Flow定义:光流是图像中亮度模式的明显运动•注意:明显的运动可能是由照明变化引起的,没有任何实际运动–考虑固定照明下的均匀旋转球体vs.运动照明下的静止球体...原创 2020-08-01 22:59:00 · 442 阅读 · 0 评论 -
Multi-View 3D Reconstruction
原创 2020-08-01 21:30:01 · 843 阅读 · 0 评论 -
Deep Learning for 3D Recognition
目标•了解最新的3D深度学习方法•学习基础数学原创 2020-08-01 18:38:36 · 281 阅读 · 0 评论 -
几何深度深度学习的学习之路
Deep Learning on Extrinsic Geometry为什么用点云呢,因为大部分3d扫描设备都产生点云。EMD(earth mover distance)距离: 在计算机科学与技术中,地球移动距离(EMD)是一种在D区域两个概率分布距离的度量,就是被熟知的Wasserstein度量标准。不正式的说,如果两个分布被看作在D区域上两种不同方式堆积一定数量的山堆,那么EMD就是把一堆变成另一堆所需要移动单位小块最小的距离之和。上述的定义如果两个分布有着同样的整...原创 2020-08-01 01:02:08 · 1415 阅读 · 0 评论 -
推荐系统实战学习速成攻略1——预测准确度
预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐 系统离线评测指标,从推荐系统诞生的那一天起,几乎99%与推荐相关的论文都在讨论这个指标。 这主要是因为该指标可以通过离线实验计算,方便了很多学术界的研究人员研究推荐算法。 在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该 数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用 户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。 由于离线的推原创 2020-07-29 08:57:55 · 1524 阅读 · 0 评论 -
torchvision学习之torchvision.datasets
torchvision包 包含了目前流行的数据集,模型结构和常用的图片转换工具torchvision.datasetstorchvision.datasets中包含了以下数据集MNIST COCO(用于图像标注和目标检测)(Captioning and Detection) LSUN Classification ImageFolder Imagenet-12 CIFAR10 and CIFAR100 STL10Datasets拥有以下API:__getitem____le..原创 2020-07-27 00:55:27 · 10033 阅读 · 0 评论 -
链接装载库
内存、栈、堆一般应用程序内存空间有如下区域:栈:由操作系统自动分配释放,存放函数的参数值、局部变量等的值,用于维护函数调用的上下文 堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收,用来容纳应用程序动态分配的内存区域 可执行文件映像:存储着可执行文件在内存中的映像,由装载器装载是将可执行文件的内存读取或映射到这里 保留区:保留区并不是一个单一的内存区域,而是对内存中受到保护而禁止访问的内存区域的总称,如通常 C 语言讲无效指针赋值为 0(NULL),因此 0 地址正常情况原创 2020-05-24 02:07:27 · 326 阅读 · 0 评论 -
一文总结《Effective C++》
Effective C++视 C++ 为一个语言联邦(C、Object-Oriented C++、Template C++、STL) 宁可以编译器替换预处理器(尽量以 const、enum、inline 替换 #define) 尽可能使用 const 确定对象被使用前已先被初始化(构造时赋值(copy 构造函数)比 default 构造后赋值(copy assignment)效率高) 了解 C++ 默默编写并调用哪些函数(编译器暗自为 class 创建 default 构造函数、copy 构造函原创 2020-05-24 00:23:41 · 694 阅读 · 0 评论 -
组卷积(group convolution)
说明分组卷积之前我们用一张图来体会一下一般的卷积操作。从上图可以看出,一般的卷积会对输入数据的整体一起做卷积操作,即输入数据:H1×W1×C1;而卷积核大小为h1×w1,通道 为C1,一共有C2个,然后卷积得到的输出数据就是H2×W2×C2。这里我们假设输出和输出的分辨率是不变的。主要看这个过 程是一气呵成的,这对于存储器的容量提出了更高的要求。但是分组卷积明显就没有那么多的参数。先用图片直观地感受一下分组卷积的过程。对于上面所说的同样的一个问题,分组卷 积就如下图所示可以看到,图中将..原创 2020-05-23 23:15:25 · 12705 阅读 · 0 评论 -
Faster R-CNN的RPN网络
RPN结构说明:1. 从基础网络提取的第五卷积层特征进入RPN后分为两个分支,其中一个分支进行针对feature map(上图conv-5-3共有512 个feature-map)的每一个位置预测共(9*4=36)个参数,其中9代表的是每一个位置预设的9种形状的anchor-box,4对 应的是每一个anchor-box的预测值(该预测值表示的是预设anchor-box到ground-truth-box之间的变换参数),上图中指 向rpn-bbox-pred层的箭头上面的数字36即是代表了上述的36个参数原创 2020-05-23 23:03:22 · 467 阅读 · 0 评论 -
FCN
一句话概括就是:FCN将传统网络后面的全连接层换成了卷积层,这样网络输出不再是类别而是 heatmap;同时为了解决因为 卷积和池化对图像尺寸的影响,提出使用上采样的方式恢复。作者的FCN主要使用了三种技术:卷积化(Convolutional)上采样(Upsample)跳跃结构(Skip Layer)卷积化卷积化即是将普通的分类网络,比如VGG16,ResNet50/101等网络丢弃全连接层,换上对应的卷积层即可。上采样此处的上采样即是反卷积(Deconvolution)。当然关于这个名字不原创 2020-05-23 22:57:14 · 531 阅读 · 0 评论