预训练时候 Pytorch FrozenBatchNorm (BN)一些小心得

news2025/1/12 13:04:11

在预训练模型中 会发现 这样使用:

# resnet model builder function
def build_resnet(arch='resnet50', pretrained=True,
        freeze_backbone_batchnorm=True, freeze_layer1=True,
        norm_layer=misc_nn_ops.FrozenBatchNorm2d):
    # weights
    if pretrained: #如果是预训练 权重是xxx
        weights = torchvision.models.ResNet50_Weights.IMAGENET1K_V1
    else:
        weights = None

    # load model
    if freeze_backbone_batchnorm:  #如果需要冻结BN层 那么就选择 normlayer为FrozenBatchNorm2d
        resnet = torchvision.models.resnet50(weights=weights, norm_layer=norm_layer)
    else:
        resnet = torchvision.models.resnet50(weights=weights)

    # freeze first layers
    resnet.conv1.requires_grad_(False)
    resnet.bn1.requires_grad_(False)
    if freeze_layer1:
        resnet.layer1.requires_grad_(False)

    # setup backbone architecture
    backbone, head = ResnetBackbone(resnet), ResnetHead(resnet)
    
    # return backbone, head
    return backbone, head



也就是需要设置bn为norm_layer=misc_nn_ops.FrozenBatchNorm2d,冻结住bn的参数,这样做的好处有:

FrozenBatchNorm就是"weight" and “bias”, “running_mean”, "running_var”四个值固定住的BN

经典框架中一直使用的是FrozenBatchNorm2d。如Detectron,DETR, mmdetection?见

“weight” and “bias”, “running_mean”, "running_var”四个值是buf,通过register_buffer设置不更新。

为什么要使用FrozenBatchNorm
BN层在CNN网络中大量使用,但是BN依赖于均值和方差,如果batch_size太小,计算一个小batch_size的均值和方差,肯定没有计算大的batch_size的均值和方差稳定和有意义,这个时候,还不如不使用bn层,因此可以将bn层冻结。另外,我们使用的网络,几乎都是在imagenet上pre-trained,完全可以使用在imagenet上学习到的参数。

而且,如果使用的是FrozenBatchNorm,多卡训练就不会有BN同步的问题了,那么多卡训练的性能理论上应该和单卡一样好了,注意这点

torchvision.ops.FrozenBatchNorm2d(num_features: int, eps: float = 1e-05)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这个地方又说:使用bn会好?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blazorise NumericPicker、DragDrop和Datagrid组件

Blazorise NumericPicker、DragDrop和Datagrid组件 添加了在“BaseAfterRenderComponent”中实现延迟执行的功能。 NumericPicker:现在可以检查大数值。 改进了DragDrop组件。 数据网格:引入了“CancellationTokenSource”和相应的过滤器更改取消选项。 …

通信原理Simulink使用经验

目录 一、如何将Simulink模型文件导出为PDF ​二、如何将模型文件导出为高清位图 三、如何调整鼠标滚轮为上下移动 四、如何控制页面的位置 五、如何得到Scope示波器仿真波形的位图 六、如何修改Scope波形的视图 一、如何将Simulink模型文件导出为PDF 确认此处的打印就可…

2022软考高级架构设计师-经历分享

一.背景 软考全称为【计算机技术与软件专业技术资格(水平)考试】,是由国家人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)领导,全国计算机软件考试办公室负责实施和日常管理的对全国计算机与软件专业技术人员进行的职业资格、…

发烧友实测 | 用飞凌OKA40i-C开发板玩转FFmpeg

本篇试用报告由发烧友 zealsoft提供,感谢 zealsoft的支持。飞凌嵌入式会在电子发烧友和电路城论坛持续开展开发板有奖试用活动,更有京东E卡等着你!欢迎大家的持续关注。1. FFmpeg的安装 FFmpeg是用来记录、转换数字音频、视频的开源软件&…

python作业大教学:制作员工管理系统

前言 大家早好、午好、晚好吖 ❤ ~ 环境使用: Python 3.8 Pycharm 功能需求 “”" 创建员工类:属性有:员工号,员工姓名,员工工资; 创建用户类:属性有:用户名,密码&#x…

Excel插件E灵:按家庭建表,创建一户一表。将明细表转成一户一表

单击播放视频: 教你将Excel明细表转换成一户一表,即按家庭创建新表01需求概述 图1是档案明细表,图2是家庭收入采集表的模板样式。现要求将明细表转换成家庭收入采集表,有几个家庭就生成几份单独的采集表。 图1 档案明细表 图2 家…

玩游戏蓝牙耳机哪款好?适合打游戏的无线蓝牙耳机推荐

随着蓝牙耳机越来越受欢迎,喜欢戴蓝牙耳机玩游戏的人也越来越多,特别是近几年随着技术不断地升级,支持低延迟、能听声辨位的游戏蓝牙耳机逐渐火热起来。今天在这里给大家分享几款适合打游戏的无线蓝牙耳机,一起来看看吧。 一、南…

神舟战神z7使用U盘重装系统操作教程分享

神舟战神z7使用U盘重装系统操作教程分享。有用户使用神舟战神z7笔记本电脑的时候安装了一个程序导致了电脑中毒,系统出现了损坏,无法正常的使用。今天教你如何通过U盘重装系统的方法来进行系统的重置,恢复正常的电脑使用。 准备工作&#xff…

复杂度分析

算法 如何评估一个算法的好坏?(事后统计法的应用) 在同一个问题上 比较不同算法对于同一输入的执行时间 事后统计法的缺点 1.严重依赖硬件以及运行时各种不确定因素(比如cpu好一点的效率就高一点) 2.必须编写相应的测试代码 3.测试时输入的数据难以保证公平性…

【数据挖掘机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

文章目录一.本次需求背景二.职位招聘数据的分位数图、分位数-分位数图三.使用散点图、使用线性回归算法拟合散点图处理数据一.本次需求背景 本文主题:招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解 之前的文…

《Python多人游戏项目实战》第三节 在窗口上显示玩家ID以及对话内容

目录 3.1 显示不同的人物图片 3.2 显示玩家ID 3.3 显示玩家对话内容 3.4 完整代码下载地址 本节只是在上一节内容的基础上加一些小功能:显示不同的人物图片、在人物头顶上显示玩家ID以及人物头顶上显示一个聊天对话框。大家可以把这一节内容当做一个过渡&#x…

【OpenCV-Python】教程:6-2 Pose Estimation (姿态估计)

OpenCV Python Pose Estimation (姿态估计) 【目标】 利用calib3d模块在图像中创建一些3D效果。 【理论】 这是一小部分。在上一节中,已经找到了摄像机矩阵,失真系数等。给定一个图案图像,我们可以利用上面的信息来计算它的姿态&#xff…

【云原生进阶之容器】第一章Docker核心技术1.5.2节——cgroups原理剖析

2 cgroups原理解析 上面是说的cgroups 是内核提供的功能,但现在我们在用户空间想使用的是cgroup的功能。其原理是:linux 内核有一个很强大的模块叫做VFS(vritual File System),VFS 把具体的文件系统的细节隐藏起来,给用户态进程提供一个完备的文件系统API接口。linux 也是通…

昆仑万维重磅发布AIGC全系列算法与模型,领跑未来

2022年12月15日,昆仑万维在北京举行AIGC技术发布会,会上昆仑万维CEO方汉正式发布了「昆仑天工」AIGC全系列算法与模型,并宣布模型开源。「昆仑天工」旗下模型包括天工巧绘SkyPaint、天工乐府SkyMusic、天工妙笔SkyText、天工智码SkyCode&…

[附源码]Python计算机毕业设计高校学科竞赛报名系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

四、移动手机自动化测试

移动手机自动化测试4.1 Appium 介绍4.1.1 Appium 中的常用术语1. Session2. Desired Capabilities3. Appium Server4.1.2 Appium 服务关键字Appium 服务相关参数的说明4.1 Appium 介绍 Appium 是一个开源、跨平台的自动化测试工具,可以用来测试 Native 及混合的移动…

Web3中文|Reddit用户在Polygon上铸造了超500万个NFT

Reddit用户通过Collectible Avatars 计划,已经铸造了超过 500 万个NFT。 Reddit的NFT头像是在以太坊扩展网络Polygon上铸造的,大多数都是免费赠送给Reddit用户。 在NFT销量下滑和加密货币市场动荡的情况下,Reddit对NFT头像的推动是一个罕见…

Spring 之类元数据封装—MetadataReader

在 Spring 中最喜欢干的事情就是将多个参数封装到一个对象,这里就挑选一个例子讲讲——MetadataReader,这个对象是将一个类封装成了三部分:File 文件本身,类元数据,注解元数据。 MetadataReader 元数据对象 先看下这…

架构设计(四):CDN

架构设计(四):CDN 作者:Grey 原文地址: 博客园:架构设计(四):CDN CSDN:架构设计(四):CDN CDN 全称 Content delivery…

Redis面试准备

1. redis网站 Redis Redis文档中心 -- Redis中国用户组(CRUG) 数据库排名网站:DB-Engines - Knowledge Base of Relational and NoSQL Database Management Systems 2. 基础知识 磁盘中的寻址速度是毫秒级,内存中寻址速度是纳…