mmdetection源码阅读
2021-11-23号更新
mmdetection中的hook函数
重难点总结:
# step1: 根据官方文档,getattr(self,'name')等同于self.name
# sept2: 这是23中设计模式中的观察者模块式,即主类可以监听其他类的
案例分析
import sys
class HOOK:
def before_breakfirst(self, runner):
print('{}:吃早饭之前晨练30分钟'.format(sys._getframe().f_code.co_name))
print(runner.name)
def after_breakfirst(self, runner):
print('{}:吃早饭之前晨练30分钟'.format(sys._getframe().f_code.co_name))
def before_lunch(self, runner):
print('{}:吃午饭之前跑上实验'.format(sys._getframe().f_code.co_name))
def after_lunch(self, runner):
print('{}:吃完午饭午休30分钟'.format(sys._getframe().f_code.co_name))
def before_dinner(self, runner):
print('{}: 没想好做什么'.format(sys._getframe().f_code.co_name))
def after_dinner(self, runner):
print('{}: 没想好做什么'.format(sys._getframe().f_code.co_name))
def after_finish_work(self, runner, are_you_busy=False):
if are_you_busy:
print('{}:今天事贼多,还是加班吧'.format(sys._getframe().f_code.co_name))
else:
print('{}:今天没啥事,去锻炼30分钟'.format(sys._getframe().f_code.co_name))
class Runner(object):
def __init__(self, name):
self.name = name
self._hooks = [] # 将hook对象放进这里 <__main__.Runner object at 0x7f626e>
def register_hook(self, hook):
# 这里不做优先级判断,直接在头部插入HOOK
self._hooks.insert(0, hook)
def call_hook(self, hook_name):
for hook in self._hooks: # 这里的hook是HOOK实例出来的对象
# print(getattr(hook, hook_name)) # 这里可以反射出before_breakfirst 方法
# print(self) # self是runner对象
getattr(hook, hook_name)(self) # 这里 传进去的self其实是runner对象
# getattr(hook, hook_name)('haha')
def run(self):
print('开始启动我的一天')
self.call_hook('before_breakfirst')
self.call_hook('after_breakfirst')
self.call_hook('before_lunch')
self.call_hook('after_lunch')
self.call_hook('before_dinner')
self.call_hook('after_dinner')
self.call_hook('after_finish_work')
print('~~睡觉~~')
# 实例化
hook = HOOK()
runner = Runner('小明')
runner.register_hook(hook)
runner.run()
- 2021年12-13 10:35更新
mmdetection使用tensorboard可视化训练过程
- 安装tensorboard
- 配置文件中加入下面信息
log_config = dict(
interval=1,
hooks=[
dict(type='TextLoggerHook'),
dict(type='TensorboardLoggerHook')
]
)
错误一: 由于coco 数据集错误导致的报错 --时间2021年6月9号
- 报错信息:
fatal: not a git repository (or any parent up to mount point /media/yuqing)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
loading annotations into memory...
Traceback (most recent call last):
File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/site-packages/mmcv/utils/registry.py", line 51, in build_from_cfg
return obj_cls(**args)
File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/custom.py", line 88, in __init__
self.data_infos = self.load_annotations(self.ann_file)
File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/coco.py", line 47, in load_annotations
self.coco = COCO(ann_file)
File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/api_wrappers/coco_api.py", line 22, in __init__
super().__init__(annotation_file=annotation_file)
File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/site-packages/pycocotools/coco.py", line 85, in __init__
dataset = json.load(f)
File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/json/__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/json/decoder.py", line 340, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 3 (char 2)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "tools/train.py", line 188, in <module>
main()
File "tools/train.py", line 184, in main
meta=meta)
File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/apis/train.py", line 140, in train_detector
val_dataset = build_dataset(cfg.data.val, dict(test_mode=True))
File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/builder.py", line 71, in build_dataset
dataset = build_from_cfg(cfg, DATASETS, default_args)
File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/site-packages/mmcv/utils/registry.py", line 54, in build_from_cfg
raise type(e)(f'{obj_cls.__name__}: {e}')
TypeError: __init__() missing 2 required positional arguments: 'doc' and 'pos'
解决方法:
- 正确放置coco数据集,出现此类错误时想到是数据集错误
mmdetection源码阅读的更多相关文章
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
- 【原】AFNetworking源码阅读(五)
[原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 【原】AFNetworking源码阅读(二)
[原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...
- 【原】AFNetworking源码阅读(一)
[原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...
随机推荐
- video元素和audio元素相关事件
前言 在利用video元素或audio元素读取或播放媒体数据时,会触发一系列事件,如果用js脚本来捕抓这些事件,就可以对着这些事件进行处理了. 捕抓的方式有两种: 第一种是监听的方式.使用vedio或 ...
- 在小程序Canvas中使用measureText
有时候我们在使用Canvas绘制一段文本时,会需要通过measureText()方法获取文本的宽度,例如: 创建canvas标签 <canvas id="canvas"> ...
- 解决HDFS无法启动namenode,报错Premature EOF from inputStream;Failed to load FSImage file, see error(s) above for more info
一.情况描述 启动hadoop后发现无法打开hdfs web界面,50070打不开,于是jps发现少了一个namenode: 查看日志信息,发现如下报错: 2022-01-03 23:54:10,99 ...
- PAT B1056组合数的和
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定 2.5.8,则可以组合出:25.28.52.58.82.85 ...
- 用Java编写的猜拳小游戏
学习目标: 熟练掌握各种循环语句 例题: 代码如下: // 综合案例分析,猜拳案例 // isContinue为是否开始游戏时你所输入的值 char isContinue; //y为开始,n为借宿 S ...
- Python使用函数实现杨辉三角
运行效果: 可在函数中指定阶层数,输出对应的杨辉三角 源代码如下: 1 # -*-coding:utf-8 -*- 2 ''' 3 chapter4_do.py 4 函数yanghui(n)用于输出n ...
- 导入,导出excel
/// <summary> /// 导出数据 /// </summary> /// <param name="XMMC"></param& ...
- java并发问题总结
1.java中产生并发问题的主要原因有哪三个? 原子性.可见性和有序性 2.什么是java内存模型? java虚拟机规范中用来屏蔽掉各种硬件和操作系统内存访问差异,java内存模型的主要目标是定义程序 ...
- 另类终端「GitHub 热点速览 v.22.15」
作者:HelloGitHub-小鱼干 除了编译器之外,终端也是我们日常打交道的软件之一.但,你用它看过股票吗?OpenBBTerminal 不仅能让你看股票,还能让你用科学的方法进行股票投资.说到投资 ...
- go interface{}使用
先上代码 func In(haystack []interface{}, needle interface{}) (bool, error) { sVal := reflect.ValueOf(hay ...