在神经网络结构可视化这一块,有很多比较实用的工具,但目前来说我看的比较舒服的还是微软小哥开发的Netron软件。

最近又遇到了一些问题,在可视化yolov5结构的时候,使用官方自带的export.py导出的结构图跟设计的有些出入,使用的是torch.onnx.export方法,将模型导出为onnx格式,再使用Netron打开,这种方式虽然确实可以,但是在可视化yolov5结构的时候,卷积层模块莫名其妙出现了残差结构,同样在可视化简单模型的时候,BN层会莫名其妙不见了,这让我费解,所以使用torch.onnx.export方法不是很靠谱。


目前我认为最可靠的方法就是使用torch.jit.trace把模型保存为.pt文件,然后在使用Netron进行打开。

直接上代码,我封装成了一个函数:

import torch
import torch.nn as nndef to_pt(net, x, name="temp"):"""@net  :保存的模型@x       :模型的输入@name    :保存名称"""path = f"./{name}.pt"# 主要就是下面两行代码script_model = torch.jit.trace(net, x)script_model.save(path)

具体为什么呢,torch.jit.trace是Troch Script模块中的函数,其中trace是跟踪执行步骤,记录模型调用推理时执行的每个步骤,主要就是整个模型保存结构的同时,还跟踪了输入,将前向传播过程给记录了下了,大概就是这么个意思(我也不是很熟悉这个模块,详情还是去度娘吧)。

举例:

import torch
import torch.nn as nnclass BN_Conv2d(nn.Module):"""Conv2d + BN + ReLU"""def __init__(self, c1, c2, k, s=1, p=0, d=1, g=1):super(BN_Conv2d, self).__init__()self.conv = nn.Conv2d(c1, c2, k, s, p, d, g)self.bn = nn.BatchNorm2d(c2)self.relu = nn.ReLU()def forward(self, x):return self.relu(self.bn(self.conv(x)))net = BN_Conv2d(3, 16, 3, 2)
x = torch.randn((1, 3, 32, 32))
to_pt(net, x, "BN_Conv2d")

class ResBlock(nn.Module):def __init__(self, ch_in, ch_out, stride=1):super(ResBlock, self).__init__()self.seq = nn.Sequential(nn.Conv2d(ch_in, ch_out, kernel_size=3, stride=stride, padding=1),nn.BatchNorm2d(ch_out),nn.ReLU(),nn.Conv2d(ch_out, ch_out, kernel_size=3, stride=1, padding=1),nn.BatchNorm2d(ch_out))self.extra = nn.Sequential()if ch_in != ch_out:self.extra = nn.Sequential(nn.Conv2d(ch_in, ch_out, kernel_size=1, stride=stride))self.relu = nn.ReLU()def forward(self, x):out = self.seq(x)x = self.extra(x)out = out + xout = self.relu(out)return outnet = ResBlock(3, 64, 1)
x = torch.randn((1, 3, 224, 224))
to_pt(net, x, "ResBlock")

Yolov5:该文件放在yolov5文件下,图太长了就简单放一部分。

import torch
from models.yolo import Model
import osdef to_onnx_cfg(cfg, x, name="temp"):# Create modelmodel = Model(cfg).to("cpu")# x = torch.randn(1, 3, 640, 640).to("cpu")script_model = torch.jit.trace(model, x)if not os.path.exists(os.getcwd() + "/onnx"):os.makedirs(os.getcwd() + "/onnx")# torch.onnx.export(model, x, f"./{name}.onnx")script_model.save(f"./onnx/{name}.pt")x = torch.randn(1, 3, 640, 640).to("cpu")
to_onnx_cfg("./yolov5s.yaml", x, "yolov5s")

以上就是这些,对比图的话,之后我再放上来。


参考博客:

yolov5s.yaml中各参数作用意义及使用netron工具来可视化yolov5s的结构

pytorch JIT浅解析

TORCH.JIT理解

【Pytorch】netron可视化——靠谱的使用方法相关推荐

  1. 超实用的7种 pytorch 网络可视化方法,进来收藏一波

    引导 前言 1. torchsummary 2. graphviz + torchviz 3. Jupyter Notebook + tensorwatch 4. tensorboardX 5. ne ...

  2. Netron可视化Pytorch保存的网络模型

    目录 一.理清网络的输入与输出 二. 将模型转换为onnx格式 三.Netron可视化工具 一.理清网络的输入与输出 我自定义的网络模型(主要看看前向传播函数即可): import torch imp ...

  3. Pytorch网络结构可视化

    现在用的这个: net = load_model(net, args.trained_model, args.cpu) for name, param in net.named_parameters( ...

  4. pytorch 模型可视化_高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力

    点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Eugene Khvedchenya 编译:ronghuaiyang 导读 ...

  5. PyTorch 训练可视化教程 visdom

    visdom 快速启动 启动地址:http://localhost:8097/ visdom 的介绍 Visdom是Facebook专为PyTorch开发的实时可视化工具包,其作用相当于TensorF ...

  6. pytorch 模型可视化_【深度学习】高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力...

    作者:Eugene Khvedchenya   编译:ronghuaiyang 导读 只报告模型的Top-1准确率往往是不够的. 将train.py脚本转换为具有一些附加特性的强大pipeline 每 ...

  7. PyTorch之—可视化(Visdom/TensorboardX)

    文章目录 一.Visdom 安装与使用 小案例 二.TensorBoardX 案例一 案例二 使用PROJECTOR对高维向量可视化 绘制网络结构 一.Visdom Visdom是Facebook在2 ...

  8. 【案例实践】基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法

    [点击观看视频]基于Citespace和vosviewer文献计量学可视化SCI论文高效写作方法 文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学.它是集数学.统计学.文献学为一体 ...

  9. Pytorch的可视化工具visdom的基本使用

    Pytorch的可视化工具visdom的基本使用 一.简介 Visdom 是 Facebook 专门为Pytorch开发的一款用于创建.组织和共享实时丰富数据的开源可视化工具.支持 Torch 和 N ...

最新文章

  1. Verilog中的条件编译语句 `ifdef、`else、`endif 等
  2. 0x80070002错误一例
  3. 《统计学》学习笔记之数据的图表展示
  4. Django设置TIME_ZONE和LANGUAGE_CODE为中国区域
  5. 《C++ Primer 第五版》(第1~6章总结)
  6. Jsp使用Cookie完成记住账号密码的功能
  7. bpsk调制matlab,matlab BPSK 调制与解调
  8. PHP生成一寸照片代码,用PS制作1寸证件照方法介绍
  9. java IO流简述
  10. 新型冠状病毒SIR预测模型,MATLAB代码
  11. C# 之多线程篇 Task(C#超级工具类)
  12. Java用jxl对表格的数值进行比对
  13. AT88SC0104C读写程序
  14. Git .ignore 文件规则不生效
  15. Pycaffe 使用集锦
  16. 如何利用网络推广您的餐饮业务?
  17. 不能光会摸鱼,用css3告诉你鱼要怎么养
  18. 数据挖掘与数据仓库的课程体会
  19. 【OpenFiler】使用虚拟机安装openfiler
  20. 我在朝鲜做生意的一段经历(转贴震憾长文)

热门文章

  1. Google Play网页显示语言切换方法
  2. 彻底理解——指针常量和常量指针、指向常量的常指针
  3. 手机号与邮箱正则表达式
  4. sql注入--基本注入语句学习笔记
  5. Jenkins创建一键发布即父子项目
  6. C语言中static与extern用法总结
  7. 修改Typora默认的字体为好看秀美的中文字体“华康手札体“
  8. 主成分分析(PCA)(principal component analysis)
  9. 有互联网药品信息服务资格证是否可以销售药品?
  10. 数据分析的年度工作计划,这样制定才合理!