【mmseg】ValueError: Only one of `max_epochs` or `max_iters` can be set.报错解决

news2024/9/23 3:32:07

目录

💜💜1背景

❤️ ❤️2分析

🔥2.1config查看

🔥2.2BaseRunner基类

💚💚3解决

🔥3.1按照epoch

🔥3.2按照iters

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


💜💜1背景

        mmseg工程修改变化检测任务时,设置config文件时,运行报错ValueError: Only one of `max_epochs` or `max_iters` can be set.

        详细报错信息如下:

fatal: Not a git repository (or any parent up to mount point /data)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
Traceback (most recent call last):
  File "/data/XX/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/registry.py", line 69, in build_from_cfg
    return obj_cls(**args)
  File "/data/XX/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 136, in __init__
    raise ValueError(
ValueError: Only one of `max_epochs` or `max_iters` can be set.

        报错截图: 

❤️ ❤️2分析

🔥2.1config查看

        报错信息很明显就是说runner设置的有问题,通过打印出来的config信息看到:

 

        runner = dict(type='EpochBasedRunner', max_iters=200, max_epochs=200)

        这一句一看就不对,不能同时max_iters和max_epochs保留。

  • 如果按照epoch来训练,删除掉max_iters=200即可;
  • 如果按照inters来训练,删除掉max_epochs=200即可。

🔥2.2BaseRunner基类

        mmcv中Runner类主要有三个:BaseRunner基类,以及继承于它的EpochBasedRunner类和IterBasedRunner类,顾名思义对应着Epoch和iter两种迭代方式。其中train、val、run、save_checkpoint方法由EpochBasedRunner和IterBasedRunner实现。

        先快速看一下BaseRunner的构造函数:

  def __init__(self,model,optimizer=None,work_dir=None,
                 logger=None,meta=None,max_iters=None,max_epochs=None):
        ………………
        self.model = model
        self.optimizer = optimizer
        self.logger = logger
        self.meta = meta

        # create work_dir
        if isinstance(work_dir,str):
            self.work_dir = osp.abspath(work_dir)
            mmcv.mkdir_or_exist(self.work_dir)
        elif work_dir is None:
            self.work_dir = None
        else:
            raise TypeError('"work_dir" must be a str or None')

        if hasattr(self.model, 'module'): # 若经DataParallel包装,则获得内部的module名
            self._model_name = self.model.module.__class__.__name__
        else:
            self._model_name = self.model.__class__.__name__

        self.timestamp = utils.get_time_str() # 获得初始化时的时间戳
        self.mode = None
        self._hooks = [] # 就是保存hook类的list了
        self._epoch = 0 
        # 表示经过多少次train epoch,每经过一次train_epoch加1,val_epoch不加
        # 特别的IterBasedRunner也用IterLoader类维护了_epoch,每遍历完一次dataloader就加1
        # 比如workflow为[('train':1000,'val':200)],len(traindataloader)为100,那么会将经历10个epoch

        self._iter = 0  
        # 表示经过多少次train iter,每经过一次train_iter加1,val_iter不加

        self._inner_iter = 0
        # 表示一个val epoch 或者 train epoch内,iter的次数
        # 经过一个val_iter或者train_iter都加1,经过一个epoch后就归零

        if max_epochs is not None and max_iters is not None:
            raise ValueError('Only one of `max_epochs` or `max_iters` can be set.') # 不能同时指定
        self._max_epochs = max_epochs 
        # EpochBasedRunner看max_epochs,表示_epoch的最大值,即最多训练的epoch数量
        # 比如max_epochs为50,workflow为[('train',2),('val',1)]。那么将经过50/2=25次workflow

        self._max_iters = max_iters # IterBasedRunner看max_epochs
        self.log_buffer = LogBuffer() 
        # 维护了一个字典,一到end of epoch 或者 经过n个iter,就把log_buffer写入日志,将由logger_hook处理

        可以从BaseRunner的定义可以看到,如果同时指定max_iters和max_epochs,就会报错“Only one of `max_epochs` or `max_iters` can be set.”

if max_epochs is not None and max_iters is not None:
     raise ValueError('Only one of `max_epochs` or `max_iters` can be set.') # 不能同时指定

        因此找到了报错的源头,就能很好的解决了。跟我们发现的问题位置也是一样的,因此修改方案就是删除其中一种即可。

💚💚3解决

🔥3.1按照epoch

        修改config文件为:

runner = dict(type='EpochBasedRunner', max_epochs=200)
checkpoint_config = dict(by_epoch=True, interval=1)

        这种epoch的计算方式表示总共的迭代轮数为200,保存模型是按照epoch进行模型保存,每1个epoch计算完保存一次模型。 

        这里要注意:如果你的baserunner定义为按照epoch计算的,那么下面的checkpoint_config最好也是按照epoch进行计算,每一轮或者每几轮都是通过interval参数进行设置的。如果baserunner定义为按照iters计算,那么最好checkpoint_config也与之保持一致。方便对比。

🔥3.2按照iters

        或者修改为inters的计算方式。config代码如下:

runner = dict(type='ItersBasedRunner', max_epochs=20000)
checkpoint_config = dict(by_epoch=False, interval=2000)

        这种iters的计算方式表示总共的迭代次数为20000,保存模型是按照iters进行模型保存,每2000次迭代保存一次模型。

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

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

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

相关文章

Kubernetes入门学习(上)

文章目录 Kubernetes入门学习(上)介绍云原生 Kubernetes架构基础概念Kubernetes架构控制平面组件Node组件 组件关系 安装Kubernetes基本对象和操作Pod(容器集)Deployment(部署)与ReplicaSet(副本集)Service(服务&#…

【工业智能】Solutions

各类问题对应的解决方案 工艺参数推荐APC 排产调度智能算法强化学习 运筹优化空压机群控 预测 工艺参数推荐 APC 排产调度 智能算法 遗传算法 强化学习 DDQN 运筹优化 空压机群控 MIP混合整数规划 能耗优化 预测 电池容量预测 时序预测,回归预测 点击剩余…

python基础练习题库实验5

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6058fb4b66994aed838f920f7fe75706.png)题目4代码实验结果题目总结题目1 编写一个程序,使用while循环语句和字符串格式显示以下精确输出。 例如: …

企企通相继出席首届百家新锐企业融通创新交流会与采购数字化创新沙龙,持续深化数字赋能

近期,企企通受邀分别参加了广州、上海业界重磅活动,针对新形势下企业数字化采购升级的新技术与新思路、产业链上下游协同发展等进行探讨,赋能数字化信息技术产业生态发展,并对各方主体如何协作共赢助推企业数字化发展建言献策。 0…

7.Spring源码解析-parseBeanDefinitions解析beanDefinitions

默认解析的命名空间由parseDefaultElement方法去处理&#xff0c;即import, alias, bean, 嵌套的beans四种元素 import 写法示例: <import resource"CTIContext.xml" /> <import resource"customerContext.xml" /> importBeanDefinitionRe…

idea 2023使用技巧(一)

IntelliJ IDEA在业界被公认为最好的java开发工具之一。它能给你良好的开发体验。 idea版本号为2023.2.5。 1 基础操作 1.1索引 idea首次加载项目时&#xff0c;都会创建索引&#xff0c;创建索引的时间跟项目的文件多少成正比。idea的缓存和索引主要是用来加快文件查询&…

Python入职某新员工大量使用Lambda表达式,却被老员工喷是屎山

Python中Lambda表达式是一种简洁而强大的特性,其在开发中的使用优缺点明显,需要根据具体场景权衡取舍。 Lambda表达式的优点之一是它的紧凑语法,适用于一些短小而简单的函数。这种形式使得代码更为精炼,特别在一些函数式编程场景中,Lambda表达式可以提高代码的表达力。此外…

平凯星辰 TiDB 获评 “2023 中国金融科技守正创新扬帆计划” 十佳优秀实践奖

11 月 10 日&#xff0c;2023 金融街论坛年会同期举办了“第五届成方金融科技论坛——金融科技守正创新论坛”&#xff0c;北京金融产业联盟发布了“扬帆计划——分布式数据库金融应用研究与实践优秀成果”&#xff0c; 平凯星辰提报的实践报告——“国产 HTAP 数据库在金融规模…

CMake构建一个转换为3d tile的开源代码成功

之前CMake构建一个转换为3d tile的开源代码&#xff0c;生成解决方案之后&#xff0c;从VS2019打开&#xff1b; 总是报一个错误&#xff0c;跟 mocs_compilation_Debug.cpp 这个QT相关文件有关&#xff0c;它生成的obj&#xff0c;总是报模块计算机x64和目标计算机x86冲突&am…

ELK+Filebeat

Filebeat概述 1.Filebeat简介 Filebeat是一款轻量级的日志收集工具&#xff0c;可以在非JAVA环境下运行。 因此&#xff0c;Filebeat常被用在非JAVAf的服务器上用于替代Logstash&#xff0c;收集日志信息。实际上&#xff0c;Filebeat几乎可以起到与Logstash相同的作用&…

涵盖多种功能,龙讯旷腾Module第一期:物质结构

Module是什么 在PWmat的基础功能上&#xff0c;我们针对用户的使用需求开发了一些顶层模块&#xff08;Module&#xff09;。这些Module中的一部分是与已有的优秀工具的接口&#xff0c;一部分是以PWmat的计算结果为基础得到实际需要的物理量&#xff0c;一部分则是为特定的计…

小白备战蓝桥杯:Java基础语法

一、注释 IDEA注释快捷键&#xff1a;Ctrl / 单行注释&#xff1a; //注释信息 多行注释&#xff1a; /* 注释信息 */ 二、字面量 常用数据&#xff1a;整数、小数、字符串&#xff08;双引号&#xff09;、字符&#xff08;单引号&#xff09;、布尔值&#xff08;tr…

elk:filebeat也是一个日志收集工具

filebeat是一个轻量级的日志收集工具&#xff0c;所使用的系统资源比logstash部署和启动使用的资源要小的多 filebeat可以允许在非java环境&#xff0c;他可以代替logstash在非java环境上收集日志 filebeat无法实现数据的过滤&#xff0c;一般是结合logstash的数据过滤功能一…

让@RefreshScope注解来帮助我们实现动态刷新

文章目录 前言举例作用参考文章总结 前言 在实际开发当中我们常常会看到有些类上会加一个注解&#xff1a;RefreshScope&#xff0c;有没有对应的小伙伴去思考过这个东西&#xff0c;这个注解有什么作用&#xff1f;为什么要加&#xff1f;下面我们就来看看这个 RefreshScope …

【离散数学】——期末刷题题库(命题逻辑)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Kubernetes基础(九)-标签管理

1 概述 Label&#xff08;标签&#xff09;是Kubernetes系统中一个比较重要的概念&#xff0c;给某个资源对象&#xff08;Node、Pod、Service等&#xff09;定义一个Label&#xff0c;就相当于给它打了一个标签&#xff0c;然后可以通过Label Selector&#xff08;标签选择器…

C陷阱与缺陷——第2章语法陷阱

1. 理解函数声明 硬件将调用首地址为0位置的子例程 (*(void(*)())0)(); 任何C变量的声明都由两部分组成&#xff1a;类型以及一组类似表达式的声明符&#xff0c;声明符从表面看与表达式有些类似&#xff0c;对它求值应该返回一个声明中给定类型的结果。 假定变量fp是一个函…

Blazor Table 实现获取当前选中行的功能

这里需要使用到OnClickRowCallBack事件 后台使用案例

同质化严重,创新突破难,德佑湿厕纸道阻且长

撰稿|行星 来源|贝多财经 随着大众卫生健康意识的日益加深&#xff0c;作为日常生活必需品的纸类产品也逐步向着精细化、多元化的趋势发展&#xff0c;厨房用纸、婴儿用纸等面向各类特定场景和人群的新品类如雨后春笋般涌出&#xff0c;为市场带来了更多的可能性。 在传统卫…

自动化支付宝小程序UI测试,AirtestProject和pytest助你一臂之力!

一&#xff0c;前言 1&#xff0c;背景 因公司业务需要做支付宝小程序的UI自动化测试&#xff0c;于是在网上查找小程序的自动化资料&#xff0c;发现微信小程序是有自己的测试框架的&#xff0c;但几乎找不到支付宝小程序UI自动化测试相关的资料。白piao失败&#xff0c;那就…