随笔分类 - 深度学习
摘要:之前有学习过输出 CNN 的特征图,不过输出的图不能很直观的表示 CNN 关心的图像重点,Grad-CAM则能比较形象的展示这点。 Grad-CAM 的全称是 Gradient-weighted Class Activation Mapping,即梯度加权类激活映射。 它是一种可视化技术,用于解释和
阅读全文
摘要:自编码器这类模型有下面几个: 自编码器(AE):目标是压缩与重建。它是一个判别模型,目标是学习数据的高效表示,主要用于降维、去噪和数据压缩,而不是生成新数据。 变分自编码器(VAE): 学习数据的概率分布并生成。它是一个生成模型。它的关键突破是让隐变量 z 服从一个标准的概率分布(通常是高斯分布),
阅读全文
摘要:DBBNet重参数化是ACNet的升级版本,又可以叫做ACNetV2。 结构如下,训练时将多个结构并联,推理时整合为一个卷积层: 我实现时发现两个卷积做串联再重参数无法保证输入输出张量一样大,最后参考了原始作者代码发现他将BN层改造了一下,从而保证张量大小一致。 串联两个卷积再做重参数可以参考这篇文
阅读全文
摘要:这些网络提供了一种即插即用的注意力模块,可以嵌入到现有的主流架构(如ResNet, VGG, MobileNet等)中,带来几乎无成本的性能提升。 四种网络核心思想: 1. SENet (Squeeze-and-Excitation Network): 通道注意力(Channel Attention
阅读全文
摘要:和RepVGG类似,ACNet也是通过重参数化提高推理性能。 RepVGG是将3*3结构,1*1结构和直连结构并联在一起,而ACNet是将3*3结构,3*1结构和1*3结构并联在一起,最终在推理时融合为一个3*3结构。 形式如下图: 下面代码是按照自己的理解实现的重参数化Block,分为训练和部署两
阅读全文
摘要:RepVGG的核心思想是:在训练网络时使用复杂结构以获得更优的性能,在推理网络时则将其等价转换为一个简单结构以提高速度。 网络核心结构如下图: 如果是ResNet这样的网络,短连接中间有一个非线性层,则没有办法重参数化。 所以RepVGG中将3*3结构,1*1结构和直连结构并联在一起,从而在训练时能
阅读全文
摘要:如果从网上down下来的onnx文件的batchsize不是1或者是动态batchsize。 下面代码可以强行将batchsize设为1,方便推理。 代码如下: import onnx # 1. 加载原始模型 model = onnx.load("feature.onnx") # 2. 修改输入层b
阅读全文
摘要:onnx中的动态量化和静态量化概念与pytorch中的核心思想一致,但实现工具、流程和具体api有所不同。 onnx量化通常依赖onnxrunntime来执行量化模型,并使用onnx工具库进行模型转换。 除了pytorch量化和onnx量化,实际工作中一般像英伟达、地平线、昇腾等不同的芯片都会有各自
阅读全文
摘要:pytorch中的动态量化和静态量化是两种主要的模型量化技术,旨在通过使用低精度数据类型(如 int8)代替高精度数据类型(如 float32)来减小模型大小并加速推理。 动态量化:在模型运行时(推理时)动态计算激活(activations)的量化参数(scale 和 zero_point)。权重(
阅读全文
摘要:在做深度学习时,很多任务backbone是不需要完全重新训练的,使用预训练权重能够加快收敛,并且性能更好。 下面使用了torchvision中的efficientnet_b0网络,网络默认会生成原图1/32大小特征图后进分类器,这里截断到生成1/16大小的特征图部分,后面可以根据需求增加新的结构。
阅读全文
摘要:之前用LSTM做了个文本分类,这次用Transformer实现相同的功能。 不过这里不再做分词了,而是根据当前学习文本构建字表。 同样也不使用BucketIterator做数据填充,而是先根据句子字符长度排序,然后同一个batch中做字符填充。 最后给了一个测试例子。 import torch im
阅读全文
摘要:注意力机制中MHA,MQA和GQA是三种经典的结构: MHA:每个头有独立的Q、K、V,参数多,模型表现力强,计算成本高。 MQA:所有头共享K和V,每个头有独立的Q,参数少,计算快,但可能牺牲一定的表达能力。 GQA:折中方案,将头分成g组,每组共享K和V,平衡参数和性能。 下图比较好的展示了三种
阅读全文
摘要:这里存四种格式: 1. 只保存模型参数的pth文件。 2. 能在python环境下读取的的模型结构和参数pt文件。 3. 能在c++环境下读取的模型结构和参数pt文件。 4. 能在pytorch环境外被其他框架读取的模型结构和参数onnx文件。 import torch import torch.n
阅读全文
摘要:多个onnx可以合并为一个onnx,这样在c++调用的时候会方便一些。 如果有原始pytorch代码和模型参数,可以在导出时合并。 如果只有onnx文件,可以用下面的方法合并,每个模型各自是各自的输入输出。 import onnx import torch import torch.nn as nn
阅读全文
摘要:MobileNetV2的结构图: MobileNetV2 的核心创新之一是使用了 倒残差块(Inverted Residual Block)。与传统的残差块不同,倒残差块的结构将卷积操作的顺序进行了颠倒: 标准的残差结构:通常先是一个大卷积层(例如,3x3 卷积),然后接一个更小的卷积层(例如,1x
阅读全文
摘要:一般深度学习的开发流程是训练好模型导出pth,然后转换为onnx。 但是如果一开始只有onnx,且onnx结构不是特别复杂,可以通过onnx反向推出pytorch模型结构。 下面用Horizon提出的mixvargenet做个例子,开发环境中只找到了onnx文件。 文件下载地址:https://gi
阅读全文
摘要:这里记录一下用yolo11训练coco数据集。 1、下载coco数据集:https://cocodataset.org/#download,下载这三个文件即可:2017 Train images [118K/18GB],2017 Val images [5K/1GB],2017 Train/Val
阅读全文
摘要:yolo11和yolo8后处理方法是完全一样的。 首先安装ultralytics,然后执行下面代码导出yolo11l.onnx模型。 from ultralytics import YOLO model = YOLO('yolo11l.pt') success = model.export(form
阅读全文
摘要:上一篇熟悉了LSTM之后,就可以用这个工具做nlp相关的实验了。 下面两组代码是使用LSTM做文本分类的实验: 一、更多使用自定义方法做文本分类的代码,有几个特点: 1. 数据集是根据csv文件格式解析的,用的自定义数据类。 2. 使用jieba分词。 3. 数据对齐使用了collate_fn和pa
阅读全文
摘要:三个网络的架构图: RNN: LSTM: GRU: 特性对比列表: 特性 RNN LSTM GRU 门控数量 无 3门(输入/遗忘/输出) 2门(更新/重置) 记忆机制 仅隐藏状态ht 显式状态Ct + 隐藏状态ht 隐式记忆(通过门控更新状态) 核心操作 直接状态传递 门控细胞状态更新 门控候选状
阅读全文