随笔分类 -  深度学习

摘要:在深度学习中,归一化操作有BN,LN,GN,IN这几种形式,下表给出了各种方法的主要区别: 归一化方法 计算维度 固定维度 适用场景 特点 BatchNorm 沿 (N, H, W) 对每个通道独立计算 Channel 卷积神经网络 依赖批次大小,训练和推理行为不同 LayerNorm 沿 (C, 阅读全文
posted @ 2025-01-28 14:36 Dsp Tian 阅读(98) 评论(0) 推荐(0)
摘要:onnx对于einsum算子是在opset12之后才支持的,但是有些芯片对于onnx量化的支持只到opset11版本,遇到这种情况可以使用matmul替换einsum。 流程通常是将tensor先view成三维,然后将第一个tensor待消掉维度permute到最后一维,第二个tensor待消掉的维 阅读全文
posted @ 2025-01-26 22:31 Dsp Tian 阅读(129) 评论(0) 推荐(0)
摘要:将onnx模型参数从fp32转为fp16,可以减少一半模型大小。 import onnx from onnxconverter_common import float16 model = onnx.load("fp32.onnx") model_fp16 = float16.convert_floa 阅读全文
posted @ 2025-01-25 15:36 Dsp Tian 阅读(315) 评论(0) 推荐(0)
摘要:下面实现了深度学习中的几种优化器,包括SGD,Momentum, Nesterov,AdaGrad,RMSProp,AdaDelta,Adam和AdamW。 代码如下: import torch import torch.nn as nn from torchvision import transf 阅读全文
posted @ 2025-01-04 20:23 Dsp Tian 阅读(51) 评论(0) 推荐(0)
摘要:简单训练了一个模型,可以实现超分辨率效果。模型在这里。 模型用了一些卷积层,最后接一个PixelShuffle算子。 训练数据是原始图像resize后的亮度通道。 标签是原始图像的亮度通道。 损失函数设为MSE。 代码如下: import torch import torch.nn as nn im 阅读全文
posted @ 2024-12-21 21:48 Dsp Tian 阅读(46) 评论(0) 推荐(0)
摘要:截止这篇笔记,llama.cpp主分支暂时不支持部署VL模型,需要切到一个分支上编译。部署流程整理自这个帖子。 部署流程如下: 1. 在modelscope上将Qwen2-VL-7B-Instruct下载下来。 2. 下载llama.cpp,需要下载这个分支。 3. 编译llama.cpp,流程和上 阅读全文
posted @ 2024-11-17 23:46 Dsp Tian 阅读(3605) 评论(7) 推荐(0)
摘要:这里选用Qwen2.5-7B-Instruct做例子,其他LLM类似。 VL用这个流程暂时还不行,不过我看到llama.cpp有在讨论这个问题,我验证了也是可行的,后面整理一下。 这里部署流程如下: 1. 在modelscope上将Qwen2.5-7B-Instruct下载下来。 2. 在ggerg 阅读全文
posted @ 2024-11-17 23:44 Dsp Tian 阅读(1628) 评论(1) 推荐(0)
摘要:变分自编码器(VAE,Variational Auto-Encoder)是一种生成模型,它通过学习数据的潜在表示来生成新的样本。 在学习潜空间时,需要保持生成样本与真实数据的相似性,并尽量让潜变量的分布接近标准正态分布。 VAE的基本结构: 1. 编码器(Encoder):将输入数据转换为潜在空间的 阅读全文
posted @ 2024-11-11 22:48 Dsp Tian 阅读(209) 评论(0) 推荐(0)
摘要:在做深度学习的时候,尤其是在没有界面的服务器上训练时,可以利用tensorboard工具输出各种曲线或中间图像。 下面代码将曲线和图像输出到run目录下临时文件中。 from tensorboardX import SummaryWriter from PIL import Image import 阅读全文
posted @ 2024-11-02 15:30 Dsp Tian 阅读(23) 评论(0) 推荐(0)
摘要:在做深度学习的时候经常会在这四种格式上互转。 转换时有几个需要注意的点: 1. np和cv2都能通过cv2.imshow显示出来。 2. torchvision的transforms会把HWC转为CHW。 3. from_numpy读取的HWC还是HWC,需要额外对tensor旋转。 4. pil和 阅读全文
posted @ 2024-10-19 14:35 Dsp Tian 阅读(173) 评论(0) 推荐(0)
摘要:模型参数直方图可以展示模型参数在训练过程中的分布情况。 通过直方图,可以了解模型的学习状态,识别过拟合或欠拟合问题,从而进行模型调优。 下面以ResNet18为例,显示了不同层的参数直方图。 import torchvision from matplotlib import pyplot as pl 阅读全文
posted @ 2024-10-03 11:57 Dsp Tian 阅读(90) 评论(0) 推荐(0)
摘要:可视化卷积核参数对理解卷积神经网络的工作原理、优化模型性能、提高模型泛化能力有一定帮助作用。 下面以ResNet18为例,可视化了部分卷积核参数。 import torchvision from matplotlib import pyplot as plt import torch model = 阅读全文
posted @ 2024-10-02 13:56 Dsp Tian 阅读(129) 评论(0) 推荐(0)
摘要:和FCN类似,UNet是另一个做语义分割的网络,网络从输入到输出中间呈一个U型而得名。 相比于FCN,UNet增加了更多的中间连接,能够更好处理不同尺度上的特征。 网络结构如下: 下面代码是用UNet对VOC数据集做的语义分割。 import torch import torch.nn as nn 阅读全文
posted @ 2024-10-01 15:10 Dsp Tian 阅读(350) 评论(0) 推荐(1)
摘要:深度学习中有些数据集可能不符合imagenet计算出的均值和标准差,需要根据自己的数据集单独计算。 下面这个脚本能够计算当前数据集均值和标准差。 import torch import os from PIL import Image from torchvision import transfor 阅读全文
posted @ 2024-10-01 13:21 Dsp Tian 阅读(143) 评论(0) 推荐(0)
摘要:深度学习骨干网络一般会包含很多层,这里写了一个脚本,可以保存骨干网络的所有特征图。 代码主要用了get_graph_node_names和create_featrue_extractor这两个函数。 get_graph_node_names是得到所有特征节点名字。 create_featrue_ex 阅读全文
posted @ 2024-09-30 22:31 Dsp Tian 阅读(169) 评论(0) 推荐(0)
摘要:FCN是全卷积网络,用于做图像语义分割。通常将一般卷积网络最后的全连接层换成上采样或者反卷积网络,对图像的每个像素做分类,从而完成图像分割任务。 网络结构如下: 这里并没有完全按照原始网络结构实现,而是尝试upsample和convTranspose2d结合的方式,看看有什么效果。 下面代码是用VO 阅读全文
posted @ 2024-09-15 22:23 Dsp Tian 阅读(132) 评论(0) 推荐(0)
摘要:深度学习训练的时候,一个好的初始化结果能使模型更容易收敛,Pytorch提供了一些初始化函数。 import torch import torch.nn as nn import matplotlib.pyplot as plt class Model(nn.Module): def __init_ 阅读全文
posted @ 2024-08-31 17:21 Dsp Tian 阅读(22) 评论(0) 推荐(0)
摘要:这里实现了一下常见的激活函数。 其中prelu参数是一个可学习参数,这里设成前向传播类。 代码如下: import numpy as np import matplotlib.pyplot as plt import torch import torch.nn as nn def sigmoid(x 阅读全文
posted @ 2024-08-17 22:05 Dsp Tian 阅读(34) 评论(0) 推荐(0)
摘要:将Transformer引入图像领域之作,学习一下。 网络结构: VIT结构有几个关键的地方: 1. 图像分块:输入图像被划分为固定大小的非重叠小块(patches),每个小块被展平并线性嵌入到一个固定维度的向量中。这里是将32x32的图像划分成4x4的小块,总共会有16个小块,每个小块有64维向量 阅读全文
posted @ 2024-08-03 17:34 Dsp Tian 阅读(427) 评论(0) 推荐(0)
摘要:模型蒸馏是指通过训练一个小而简单的模型来复制和学习一个大模型的知识和性能。这种方法通常用于减少模型的计算资源需求,加速推理过程或者使模型适用于资源受限的设备上。 步骤如下: 1. 准备教师模型和学生模型: 教师模型:一个复杂的模型,这里用的是resnet。 学生模型:简化的卷积神经网络,较少的参数和 阅读全文
posted @ 2024-08-03 10:52 Dsp Tian 阅读(187) 评论(0) 推荐(0)