pytorch
文章平均质量分 83
David-Chow
知行合一,砥礪前行,腳踏實地,精益求精
展开
-
详解可变形注意力模块(Deformable Attention Module)
Deformable Attention(可变形注意力)首先在2020年10月初商汤研究院的《Deformable DETR: Deformable Transformers for End-to-End Object Detection》论文中提出,在2022CVPR中《Vision Transformer with Deformable Attention》提出应用了Deformable Attention(可变形自注意力)机制的通用视觉Transformer骨干网络DAT(Deformable Att原创 2023-02-20 14:21:35 · 15094 阅读 · 1 评论 -
mmdetection之FCOS注释详解熟悉训练过程
preface本文记录 mmdetection 对 FCOS 训练的流程,包括标签获取,anchor 生成,前向训练,以及各步骤中 tensor 的形状,仅供复习用处。mmdetection 版本为 2.11.0。整体流程mmdet/models/detectors/base.py:forward_train() mmdet/models/detectors/single_stage.py:extract_feat() mmdet/models/dense_heads/fcos_head.p转载 2022-03-04 09:40:21 · 1903 阅读 · 1 评论 -
[源码解析] PyTorch 分布式训练--- 数据加载之DistributedSampler
0x01 数据加载1.1 加速途径当分布式训练时候,为了加速训练,有三个层面的工作需要处理。数据加载层面 多机通讯层面 代码层面在数据层面,可以使用多进程并行加载来加速数据预处理过程,也有利用GPU特点来加速,比如Nvidia DALI 通过将数据预处理放到 GPU 处理来解决 CPU 瓶颈问题。在多机通讯层面,有各种集合通信库可以利用,比如NCCL,OpenMPI, Gloo 等。在代码层面,可以使用框架提供的分布式API,或者利用 Horovod 来改造单机版代码,使其支持分布转载 2022-01-29 13:16:23 · 3448 阅读 · 0 评论 -
FightingCV Pytorch 代码库:Attention,Backbone, MLP, Re-parameter, Convolution模块【持续更新】
FightingCV Codebase ForAttention,Backbone,MLP,Re-parameter,ConvolutionIf this project is helpful to you, welcome to give astar.Don't forget tofollowme to learn about project updates.For 小白(Like Me):最近在读论文的时候会发现一个问题,有时候论文核心思想非常简单,...原创 2022-01-18 14:38:03 · 2383 阅读 · 0 评论 -
深度学习框架-Backbone汇总
Backbone—— Neck —— Head1.Backbone:翻译为骨干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用的是resnet VGG等,而不是我们自己设计的网络,因为这些网络已经证明了在分类等问题上的特征提取能力是很强的。在用这些网络作为backbone的时候,都是直接加载官方已经训练好的模型参数,后面接着我们自己的网络。让网络的这两个部分同时进...原创 2022-01-17 14:27:35 · 37474 阅读 · 11 评论 -
基于Pytorch的面向对象的深度学习项目编码规范
(1/4)首先明确一个思考方式:一切皆是对象一切我的理解是包括两类对象 非对象(2/4)为什么要有对象?对象不用说了,就是一些名词,比如:模型,算法,数据(训练集,测试集),设备,等。非对象肯定是包括过程的,过程怎么变为对象呢?或者说,“过程怎么被赋予对象的一些属性呢?”如何赋予过程一些东西,这些东西使过程看起来像是对象,那么就要分析以下正常的对象有哪些属性,或者说是特点。在创建一个对象时,首先要有他所属的类,类相当于一个命名空间,对象在此基础上扩展,类可以有自己的属性,这些属性是每个原创 2021-08-04 12:43:43 · 352 阅读 · 0 评论 -
PyTorch代码内植入性能分析的说明
以分布式并行训练为例(分布式并行训练见我的博客《Pytorch 分布式并行训练 + 半精度/混合精度训练》介绍),具体以项目《FcaNet: Frequency Channel Attention Networks》的主代码为例,通过在代码内植入性能分析的代码可以对大规模深度学习模型进行准确高效的性能分析和故障排除。主代码import argparseimport osimport shutilimport timeimport mathimport randomimport ..原创 2021-07-14 16:03:36 · 2374 阅读 · 1 评论 -
Pytorch一机多卡分布式并行训练及混合精度训练
Pytorch并行主要有两种方式,DataParallel(DP)和DistributedDataParallel(DDP)。DP方式较为简单,但是多线程训练,并且主卡显存占用比其他卡会多很多。因此这里采用DDP方式来多卡计算。DDP是多进程,将模型复制到多块卡上计算,数据分配较均衡。使用DDP的一机多卡配置1. 加入local_rank参数,这一步会在代码运行时通过torch.distributed.launch输入,该参数意义是当前进程所用的是哪块卡: parser.add_a.原创 2021-07-12 16:51:13 · 4461 阅读 · 3 评论 -
Pytorch 分布式并行训练 + 半精度/混合精度训练
该博客基于以下项目的开源代码进行分析:Simple Pose: Rethinking and Improving a Bottom-up Approach for Multi-Person Pose Estimation”, accepted by AAAI-2020.Github代码地址:代码参考:知乎《一个 Pytorch 训练实践 (分布式训练 + 半精度/混合精度训练)》《Pytorch + Apex 训练流程记录》《pytorch apex 混合精度训练和horovod分.原创 2021-07-12 11:41:59 · 9086 阅读 · 0 评论 -
动图图解Transformer及其工程领域应用(NLP外)
一、Transformer图解原文:《The Illustrated Transformer》1.1 概览Transformer总览1.2 Encoder步骤1.3 Decoder步骤完成Encoder知识的学习以及基本上知道Decoder是如何工作的之后,接下来看看他们是如何协同工作的吧。(1)首个输出在完成encoder阶段之后,我们开始Decoder阶段。Decoder阶段的每个步骤从输出序列(本例中为英语翻译句子)输出一个元素。(2)冒泡输出以下步..原创 2020-06-10 10:32:09 · 11426 阅读 · 2 评论 -
各种归一化层(BatchNorm、LayerNorm、InstanceNorm、GroupNorm、Weight Standardization)及其Pytorch实现
BN,LN,IN,GN从学术化上解释差异:BatchNorm:batch方向做归一化,算NHW的均值,对小batchsize效果不好;BN主要缺点是对batchsize的大小比较敏感,由于每次计算均值和方差是在一个batch上,所以如果batchsize太小,则计算的均值、方差不足以代表整个数据分布LayerNorm:channel方向做归一化,算CHW的均值,主要对RNN作用明显;InstanceNorm:一个channel内做归一化,算H*W的均值,用在风格化迁移;因为在图像风格化中,生成结果主要依赖.转载 2020-06-05 15:53:30 · 18365 阅读 · 5 评论 -
pytorch正确测试代码在cuda运行时间---torch.cuda.synchronize()
正确测试代码在cuda运行时间。需要加上torch.cuda.synchronize().两种测试时间的方式第一种:start = time.time()result = model(input)end = time.time()第二种:torch.cuda.synchronize() #增加同步操作start = time.time()resul...原创 2020-04-23 15:46:26 · 9319 阅读 · 1 评论 -
pytorch中的StableBCELoss-----深度学习中的数值稳定性问题一例
一、传统的BCELoss(二元交叉熵)1 交叉熵先来看下信息论中交叉熵的形式交叉熵是用来描述两个分布的距离的,神经网络训练的目的就是使 g(x) 逼近 p(x)。2 二元交叉熵(BCE)与多元交叉熵区别交叉熵损失函数两种形式:这两个都是交叉熵损失函数,但是看起来长的却有天壤之别。为什么同是交叉熵损失函数,长的却不一样呢?因为这两个交叉熵损失函数对...原创 2020-04-23 11:10:35 · 1325 阅读 · 0 评论 -
Pytorch源码理解: RNNbase LSTM
1.Packed_Sequence问题根据pack之后的结果,是按照竖向方法存储,这使得我对packsequence输入的顺序正确性产生了理解问题,经过查询官方文档和内部实现后发现,这样的操作是使得并行化更为方便,同时也要更深刻的理解, RNN是按照time_step的方法来输入序列的,这样的排序使得处于同一个time_step的在内存空间上相互比邻,比如在第一个step,rnn知道每个...转载 2020-04-10 11:37:40 · 2187 阅读 · 2 评论 -
Pytroch - 显存释放问题
PyTorch 在训练和预测的时候,出现显存一直增加的问题,占用显存越来越多,甚至导致最终出现 out of memory 问题。1. 显存管理(Memory Management)Memory managementPyTorch 采用缓存分配器(caching memory allocator) 机制以加速内存分配(memory allocations),使得在不需要设备同步(d...原创 2019-12-31 14:06:26 · 3129 阅读 · 0 评论 -
PyTorch编程中批数量训练数据读取模板(无数据增强+有数据增强)
以Mnists数据为例,不使用官方给定的数据读取方法,自己来实现Batch数据的读取。很容易,我们可以读取到数据集Mnist的数据data和标签label,假设:data为x_train,是shape=(50000,784)的numpy.ndarray; label为y_train,是shape=(50000, )的numpy.ndarray。(1)无数据增强时数据读取模式若不通过...原创 2019-12-25 17:37:23 · 331 阅读 · 0 评论 -
【PyTorch】torch.nn.Module 源码分析
来源:知乎torch.nn.Module这个类的内部有多达 48 个函数,这个类是PyTorch中所有neural network module的基类,自己创建的网络模型都是这个类的子类,下边是一个示例。这篇文章就和大家一起来阅读一下这个base class。import torch.nn as nnimport torch.nn.functional as Fcla...原创 2019-12-24 15:33:03 · 6087 阅读 · 1 评论 -
pytorch深入知识拾遗
一、 nn.Module VS nn.functional(1)两者区别大部分nn中的层class都有nn.function对应,其区别是:nn.Module实现的layer是由class Layer(nn.Module)定义的特殊类,会自动提取可学习参数nn.Parameter; nn.functional中的函数更像是纯函数,由def function(input)定义。由于两...原创 2019-12-24 15:14:17 · 1040 阅读 · 0 评论 -
torch.nn.Module类属性
nn.Module基类的构造函数:def __init__(self): self._parameters = OrderedDict() self._modules = OrderedDict() self._buffers = OrderedDict() self._backward_hooks = OrderedDict() self._for...原创 2019-12-24 11:22:24 · 1218 阅读 · 0 评论 -
pytorch以Mnist为例进行中间层特征图可视化
接上一篇文章,在得到训练模型后,进行加载模型后,对模型中间层特征进行提取并输出预测精度:方法参考《pytorch 提取卷积神经网络的特征图可视化》class FeatureExtractor(nn.Module): def __init__(self,submodule,extracted_layer): super(FeatureExtractor,sel...原创 2019-12-23 15:23:47 · 3558 阅读 · 0 评论 -
Pytorch自定义层含lambda函数(Lambda层)时保存模型出错的解决方案
出错类型:_pickle.PicklingError: Can't pickle <function <lambda> at 0x0000000018944488>: attribute lookup <lambda> on __main__ failed详情:File "C:\Users\piantou\AppData\Local\Progr...原创 2019-12-23 10:29:28 · 7962 阅读 · 5 评论 -
PyTorch_v1.2 Cheat Sheet
Using PyTorch 1.2, torchaudio 0.3, torchtext 0.4, and torchvision 0.4.原创 2019-12-19 16:54:36 · 223 阅读 · 0 评论 -
深度神经网络全部主流架构介绍(含 PyTorch 实现代码片段)
I 引言To keep on track ofstate-of-the-art (SOTA)onImageNetClassification and new CNN architectures所有主流目标检测深度神经网络的Tensorflow、pytorch、caffe实现:网址部分截图:II 72页PPT介绍深度神经网络完整架构(含 PyTorch 实...原创 2019-12-19 11:21:21 · 1137 阅读 · 0 评论 -
pytorch构建ResNet/ResNeXt网络(自定义Lambda层)
ResnetNet和ResNext的介绍见以下文章:《ResNeXt——与 ResNet 相比,相同的参数个数,结果更好:一个 101 层的 ResNeXt 网络,和 200 层的 ResNet 准确度差不多,但是计算量只有后者的一半》1 单一分支ResNet要实现下面的基本单元Residual block模块:或者:实现1:中规中矩方法def conv...原创 2019-12-19 15:10:04 · 1679 阅读 · 0 评论 -
笔记5:pytorch 中的Module与容器(Sequential、Modulelist、ModuleDict)
nn.Module容器Sequentialimport torchimport torchvisionimport torch.nn as nnfrom collections import OrderedDict class LeNetSequential(nn.Module): def __init__(self, classes):...原创 2019-12-19 09:20:30 · 1749 阅读 · 0 评论 -
笔记3:pytorch.nn.Conv2d如何计算输出特征图尺寸?如何实现Tensorflow中的“same”和“valid”功能
1 pytorch.nn.Conv2d实现机制1.1 Conv2d简介参数说明:stride(步长):控制cross-correlation的步长,可以设为1个int型数或者一个(int, int)型的tuple。 padding(补0):控制zero-padding的数目。 dilation(扩张):控制kernel点(卷积核点)的间距; 也被称为 "à trous"算法. ...原创 2019-12-18 10:47:53 · 14682 阅读 · 4 评论 -
笔记3:pytorch学习: 构建网络模型的几种方法
用pytorch来构建网络模型有很多种方法,以下简单列出其中的四种。假设构建一个网络模型如下:卷积层--》Relu层--》池化层--》全连接层--》Relu层--》全连接层首先导入几种方法用到的包:import torchimport torch.nn.functional as Ffrom collections import OrderedDict第一种方法...转载 2019-12-17 17:22:07 · 184 阅读 · 0 评论 -
笔记2:torch.nn构建简单神经网络教程(由浅入深)
来自《pytorch官方文档V1.2》中文译文Pytorch提供了torch.nn、torch.optim、Dataset和DataLoader这些设计优雅的模块和类以帮助使用者创建和训练神经网络。 为了最大化利用这些模块和类的功能,并使用它们做出适用于你所研究问题的模型,你需要真正理解他们是如何工作的。 为了做到这一点,我们首先基于MNIST数据集训练一个没有任何特征的简单神经网络。 最开始...原创 2019-12-16 17:14:55 · 3124 阅读 · 2 评论 -
笔记1:tensorflow和Pytorch元素类型、张量(tensor)及相关转换
Tensorflow1 、元素类型(dtype)2、张量的元素类型转换TensorFlow 为开发者提供了多种元素类型转换方法,具体如下:tf.string_to_number(string_tensor, out_type=None, name=None) tf.to_double(x, name='ToDouble') tf.to_float(x, name='...原创 2019-12-10 17:28:21 · 5610 阅读 · 0 评论