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源码阅读的更多相关文章

  1. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  2. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  3. 【原】FMDB源码阅读(一)

    [原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...

  4. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  5. 【原】AFNetworking源码阅读(五)

    [原]AFNetworking源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中提及到了Multipart Request的构建方法- [AFHTTP ...

  6. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  7. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  8. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

  9. 【原】AFNetworking源码阅读(一)

    [原]AFNetworking源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 AFNetworking版本:3.0.4 由于我平常并没有经常使用AFNetw ...

随机推荐

  1. mpvue 如何使用腾讯视频插件?

    1.在小程序微信开放平台:设置 --- 第三方服务里,申请腾讯视频插件2.申请成功后就可以在项目中使用了 具体使用步骤如下:1.在项目目录src下的main.js中加入下面代码,这里代码会被编译到ap ...

  2. vue重构--H5--canvas实现粒子时钟

    上一篇文章讲解了如何用js+canvas实现粒子时钟,本篇文章 ,主要是使用vue重构,让它在vue也能使用. 我们使用简单的方式重构,不使用vue工程,先加入vue cdn的地址,如下: <s ...

  3. 《头号玩家》AI电影调研报告(一)

    观<头号玩家>AI电影调研报告 一. 前言 有一部电影,上映开始就能让世界各不同年龄段.身处不同文化的人在一瞬间达到心意相通:其中的一些镜头,让影迷.游戏迷.ACG爱好者等拥有截然不同兴趣 ...

  4. Spring集成web环境(使用封装好的工具)

    接上文spring集成web环境(手动实现) ##########代码接上文############# spring提供了一个监听器ContextLoaderListener对上述功能的封装,该监听器 ...

  5. spring配置数据源(交给spring容器完成)

    ##将DataSource的创建权交给spring容器去完成 1.导入spring依赖 <dependency> <groupId>org.springframework< ...

  6. Power App门户

    1.创建门户 在powerapp应用中添加新应用选择:门户. 填写名称和地址,地址写完后会检测可用,创建会等待几分钟. 2.门户组件 节,容器分为1.2.3列 1.文本:可编辑字体 2.图像:可选择连 ...

  7. VsCode 常用插件清单

    插件离线安装说明 在一些内网开发环境中,无法做到在线安装,这个时候就需要对插件进行离线安装 了 打开 VSCode 插件市场网址 Extensions for the Visual Studio fa ...

  8. DjangoRestFramework框架三种分页功能的实现 - 在DjangoStarter项目模板中封装

    前言 继续Django后端开发系列文章.刚好遇到一个分页的需求,就记录一下. Django作为一个"全家桶"型的框架,本身啥都有,分页组件也是有的,但默认的分页组件没有对API开发 ...

  9. vue学习day01

    什么是 vue 构建用户界面 用 vue 往 html 页面中填充数据,非常的方便 框架 框架是一套现成的解决方案,程序员只能遵守框架的规范,去编写自己的业务功能! 要学习 vue,就是在学习 vue ...

  10. vue 设置动态标题

    在 router/index.js 文件中设置 meta:{title:'标题'} 和 router.beforeEach,即可实现功能, 代码如下: import { createRouter, c ...