位置: IT常识 - 正文

densenet的网络结构和实现代码总结(torch)(densenet网络结构详解)

编辑:rootadmin
densenet的网络结构和实现代码总结(torch) 简介

推荐整理分享densenet的网络结构和实现代码总结(torch)(densenet网络结构详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:densenet resnet,densenet原理,densenet结构图,densenet121网络结构,densenet原理,densenet网络结构详解,densenet结构图,densenet网络结构详解,内容如对您有帮助,希望把文章链接给更多的朋友!

densenet网络是CVPR 2017 (Best Paper Award),这篇论文是在Stochastic Depth的启发下提出的。densenet和Stochastic Depth都是清华的黄高博士提出的。关于densenet的详细介绍可以看【0】,关于Stochastic Depth的详细介绍可以看【1】。

论文链接:https://arxiv.org/pdf/1608.06993.pdf 

代码的github链接:https://github.com/liuzhuang13/DenseNet 

DenseNet(密集卷积网络)的核心思想是密集连接,即某层的输入除了包含前一层的输出外还包含前面所有层的输出,因此L层的模型会有L(L-1)/2个连接,具体结构图如下图所示,DenseNet的几个优点是: 

1,减轻了消失梯度(梯度消失) 

2,加强了特征的传递 

3,更有效地利用了特征 

4,一定程度上较少了参数数量

在保证网络中层与层之间最大程度的信息传输的前提下,直接将所有层连接起来!

模型细节densenet的网络结构和实现代码总结(torch)(densenet网络结构详解)

整个densenet模型主要包含三个核心细节结构,分别是DenseLayer(整个模型最基础的原子单元,完成一次最基础的特征提取,如下图第三行)、DenseBlock(整个模型密集连接的基础单元,如下图第二行左侧部分)和Transition(不同密集连接之间的过度单元,如下图第二行右侧部分),通过以上结构的拼接+分类层即可完成整个模型的搭建。

DenseLayer层包含BN + Relu + 1*1Conv + BN + Relu + 3*3Conv。第L个DenseLayer层的第一个1*1Conv的输入通道层数为num_input_features+(L-1)*growth_rate,输出通道层数为bn_size*growth_rate;第二个3*3Conv的输入通道数为bn_size*growth_rate,输出通道数为growth_rate。整个DenseLayer层内特征层宽度不变,不存在stride=2或者池化的情况。这里有一点特殊之处,DenseLayer层的第一个结构是BN层而不是像其它模型那样是Conv。在BN层前面还存在一个Concatenation操作,负责本DenseBlock模块内前面所有层的输出以及第一层的输出进行拼接操作,

DenseBlock模块其实就是堆叠一定数量的DenseLayer层,在整个DenseBlock模块内不同DenseLayer层之间会发生密集连接,在DenseBlock模块内特征层宽度不变,不存在stride=2或者池化的情况。

Transition模块包含BN + Relu + 1*1Conv + 2*2AvgPool,1*1Conv负责降低通道数,2*2AvgPool负责降低特征层宽度,降低到1/2。Transition模块的作用是连接不同的DenseBlock模块,之所以这样设计原因是,密接连接必须保证特征层的宽度是一致的,原因是连接方式为沿通道维拼接,如果整个模型都采用密集连接,那势必导致整个模型从输入到输出特征层宽度都不变,那最后无法完成分类任务,也无法压缩特征。

模型可能优点更强的梯度流动:

DenseNet可以说是一种隐式的强监督模式,因为每一层都建立起了与前面层的连接,误差信号可以很容易地传播到较早的层,所以较早的层可以从最终分类层获得直接监管。

参数更少计算效率更高

在ResNet中,参数量与C*C成正比,而在DenseNet中参数量与l*k*k成正比,因为k远小于C,所以DenseNet的参数量小得多。

保存了低维度的特征

在标准的卷积网络中,最终输出只会利用提取最高层次的特征。而在DenseNet中,它使用了不同层次的特征,它倾向于给出更平滑的决策边界。这也解释了为什么训练数据不足时DenseNet表现依旧良好。

模型效果

该文章提出的DenseNet核心思想在于建立了不同层之间的连接关系,充分利用了功能,进一步减轻了梯度消失问题,加深网络不是问题,而且训练效果非常好。另外,利用瓶颈层,翻译层以及较小的增长率使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少了DenseNet优点很多,而且在和RESNET的对比中优势还是非常明显的。【2】

模型代码

改代码修改自torch官方代码

# 根据torch官方代码修改的densenet代码# 模型下载地址:# 121 --- "), 224) image = transform(image) image = image.reshape(1, 3, 224, 224) # 建立模型并恢复权重 weight_path = "./checkpoint/densenet121-a639ec97.pth" # 这个预训练权重是老版本torch生成的,当时模块的命名允许出现"." pre_weights = torch.load(weight_path) # 但是最新的torch不允许出现".",所以老版权重恢复进新版模型时需要修改一下模块命名 pattern = re.compile(r"^(.*denselayer\d+\.(?:norm|relu|conv))\.((?:[12])\.(?:weight|bias|running_mean|running_var))$") for key in list(pre_weights.keys()): # 主要是新版模型中的最基础模块的命名是类似于...denselayer1.conv1.weight res = pattern.match(key) # 而老版本权重的命名类似于 ...denselayer1.conv.1.weight if res: # 所以需要正则表达式去老版本权重的key中匹配一下,一旦匹配成功就修改为最新模型的权重名称 new_key = res.group(1) + res.group(2) # 正则表达式中()的作用是提取满足匹配要求的字符串,group(0)就是匹配正则表达式整体结果 pre_weights[new_key] = pre_weights[key] del pre_weights[key] model = densenet121() model.load_state_dict(pre_weights) # print(model) # 单张图片推理 model.cpu().eval() # .eval()用于通知BN层和dropout层,采用推理模式而不是训练模式 with torch.no_grad(): # torch.no_grad()用于整体修改模型中每一层的requires_grad属性,使得所有可训练参数不能修改,且正向计算时不保存中间过程,以节省内存 output = torch.squeeze(model(image)) predict = torch.softmax(output, dim=0) predict_cla = torch.argmax(predict).numpy() # 输出结果 print(predict_cla) print(predict[predict_cla])

 包含训练和测试的完整代码见:https://github.com/LegendBIT/torch-classification-model

参考:

0. 深入解析DenseNet(含大量可视化及计算)

1. CNN模型合集 | 9 Stochastic_Depth

2. DenseNet算法详解

本文链接地址:https://www.jiuchutong.com/zhishi/299306.html 转载请保留说明!

上一篇:Web项目部署环境搭建:JDK + Tomcat + IDEA +MySQL(java web项目部署)

下一篇:vue+neo4j +纯前端(neovis.js / neo4j-driver) 实现 知识图谱的集成 大干货--踩坑无数!!!将经验分享给有需要的小伙伴(vue.js前端)

  • oppo手机卸载的软件怎么找回来(oppo手机卸载的软件在哪里)

    oppo手机卸载的软件怎么找回来(oppo手机卸载的软件在哪里)

  • 淘宝卖号不给钱怎么办(淘宝卖号不给钱怎么办,现在账号找回)

    淘宝卖号不给钱怎么办(淘宝卖号不给钱怎么办,现在账号找回)

  • 微信运动计步原理(微信运动计步器)

    微信运动计步原理(微信运动计步器)

  • cor al10是什么手机(cor -al10是什么型号)

    cor al10是什么手机(cor -al10是什么型号)

  • 手机信号旁边有个圆圈(手机信号旁边有个圈什么原因)

    手机信号旁边有个圆圈(手机信号旁边有个圈什么原因)

  • 怎样成为淘货源买家(如何成为淘货源卖家)

    怎样成为淘货源买家(如何成为淘货源卖家)

  • 电脑输入数字变成符号怎么办(电脑输入数字变成日期怎么回事)

    电脑输入数字变成符号怎么办(电脑输入数字变成日期怎么回事)

  • 笔记本指示灯含义(笔记本显示灯)

    笔记本指示灯含义(笔记本显示灯)

  • 铅酸电池和锂电池的区别(铅酸电池和锂电池哪个容易爆炸)

    铅酸电池和锂电池的区别(铅酸电池和锂电池哪个容易爆炸)

  • 导航卫星的作用是什么(导航卫星的作用是答案)

    导航卫星的作用是什么(导航卫星的作用是答案)

  • 什么是volte通话功能(何为volte功能)

    什么是volte通话功能(何为volte功能)

  • iPhone无法连接5gWiFi(iPhone无法连接无线网)

    iPhone无法连接5gWiFi(iPhone无法连接无线网)

  • 手机充电特别慢怎么回事(为什么oppo手机充电特别慢)

    手机充电特别慢怎么回事(为什么oppo手机充电特别慢)

  • 苹果浏览器怎样看历史记录(苹果浏览器怎样删除浏览记录)

    苹果浏览器怎样看历史记录(苹果浏览器怎样删除浏览记录)

  • word如何取消设置标记(word如何取消设置骑马装订方式)

    word如何取消设置标记(word如何取消设置骑马装订方式)

  • 乐视手机卡怎么弄出来(乐视手机卡槽怎么放卡)

    乐视手机卡怎么弄出来(乐视手机卡槽怎么放卡)

  • 华为荣耀9x充电多长时间(华为荣耀9x充电器多少瓦)

    华为荣耀9x充电多长时间(华为荣耀9x充电器多少瓦)

  • 抖音怎么没有本地音乐(抖音怎么没有本地保存这个按钮)

    抖音怎么没有本地音乐(抖音怎么没有本地保存这个按钮)

  • 手机号能定位吗找人吗(别人知道你的手机号能定位吗)

    手机号能定位吗找人吗(别人知道你的手机号能定位吗)

  • soulmat需要多久能亮(soul达到soulmate要多久)

    soulmat需要多久能亮(soul达到soulmate要多久)

  • y55怎么设置内存卡优先(y55怎么设置内存卡优先没有怎么办)

    y55怎么设置内存卡优先(y55怎么设置内存卡优先没有怎么办)

  • mate20拍照攻略(华为手机mate20拍照技巧)

    mate20拍照攻略(华为手机mate20拍照技巧)

  • excel冻结在哪个位置(excel表格冻结窗口在哪里)

    excel冻结在哪个位置(excel表格冻结窗口在哪里)

  • Win11 Insider Preview Build 22463更新推送(附更新、修复内容汇总)(win11 insider preview怎么升级正式版)

    Win11 Insider Preview Build 22463更新推送(附更新、修复内容汇总)(win11 insider preview怎么升级正式版)

  • 栀子花叶子发黄怎么办?(栀子花叶子发黄是什么原因)

    栀子花叶子发黄怎么办?(栀子花叶子发黄是什么原因)

  • ahnsd.exe是病毒进程还是反病毒进程 ahnsd进程信息查询(scworker.exe是病毒)

    ahnsd.exe是病毒进程还是反病毒进程 ahnsd进程信息查询(scworker.exe是病毒)

  • Uncaught TypeError TypeError: Cannot set properties of null (setting ‘onclick‘)的解决办法

    Uncaught TypeError TypeError: Cannot set properties of null (setting ‘onclick‘)的解决办法

  • 什么时候计提企业所得税
  • 企业所得税不得扣除的税金
  • 印花税和契税是什么意思?什么时候交?
  • 用友T6自定结转怎样设置
  • 预收账款可以开票吗
  • 现在的统计证还用年检吗
  • 异地经营如何纳税
  • 核销债权债务依据
  • 计提福利是什么
  • 用党费返还款购置资产应如何账务处理?
  • 开外管证再省外预缴税收要怎么报税?
  • 收到公司of
  • 公路工程营改增
  • 小规模纳税人一年不超过多少万
  • 园林设计属于什么
  • 财政拨款申请格式怎么写
  • 未办理房屋预售许可证怎么处理
  • 未办预售证,企业取得这笔收入要缴增值税吗?
  • 完税凭证丢失如何补办
  • 地税局完税证明去哪里办理
  • 车辆租赁怎么报税做账
  • 本月开了负数发票怎么开
  • 社保支付账号是什么
  • 出口退税的计算题
  • 收据是否当月入帐
  • 存货清查的步骤
  • 讨论:利息与贴息的关系?
  • 2023个人出租房屋房产税
  • 其他业务收入不影响营业利润
  • 企业购买银行理财
  • 其他综合收益属于什么类
  • nddeagnt.exe - nddeagnt是什么进程 有什么用
  • 商业折扣影响税费吗
  • win10开机启动文件夹目录说明
  • php常用的设计模式在开发中的实例
  • 煤炭企业的会计科目
  • 超市进货产品
  • php如何实现伪静态
  • Android App中DrawerLayout抽屉效果的菜单编写实例
  • 搬迁补偿费属于什么费
  • html与js之间如何配合
  • tf club下载
  • javascript常用的数据类型
  • 汇率一般是以几位数来显示
  • 中国烟草资产负债表
  • phpcms 数据库配置文件
  • 收到银行的贷款怎么入账
  • python中map和filter有啥区别
  • php 上传
  • 物流进项发票应纳税额
  • 未达起征点增值税申报表怎么填
  • 不征税收入怎么申报增值税
  • 发票开错抬头做红字发票的账务处理是?
  • 核定征收的企业需要汇算清缴吗
  • 融资租赁汽车怎么投诉电话
  • 认证未抵扣往哪里记
  • 预提费用在新会计准则下该如何列支?
  • 海量数据的查询
  • SQL语句查询数据量
  • win7系统u盘打不开怎么办
  • Windows Server 2008如何改动服务器名称与管理员密码?
  • 如何修改apache
  • win10每周更新
  • web jquery
  • 恶意软件清理
  • 2024年全年计划
  • jquery移动节点的方法
  • jquery escape
  • java对象怎么比较
  • python搭建网站并在服务器上部署
  • python数组定义方法
  • java 视频教程
  • js设计模式有哪些
  • python继承的主要目的
  • 江苏大丰属哪个市
  • 工程合同可以违背国家规范吗
  • 地税局工作人员工资标准多少
  • 代理记账广告语怎么写
  • 国税工作人员工资标准
  • 国家发票真伪查验
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设