2021-11-23号更新

mmdetection中的hook函数

重难点总结:

  1. # step1: 根据官方文档,getattr(self,'name')等同于self.name
  2. # sept2: 这是23中设计模式中的观察者模块式,即主类可以监听其他类的

案例分析

  1. import sys
  2. class HOOK:
  3. def before_breakfirst(self, runner):
  4. print('{}:吃早饭之前晨练30分钟'.format(sys._getframe().f_code.co_name))
  5. print(runner.name)
  6. def after_breakfirst(self, runner):
  7. print('{}:吃早饭之前晨练30分钟'.format(sys._getframe().f_code.co_name))
  8. def before_lunch(self, runner):
  9. print('{}:吃午饭之前跑上实验'.format(sys._getframe().f_code.co_name))
  10. def after_lunch(self, runner):
  11. print('{}:吃完午饭午休30分钟'.format(sys._getframe().f_code.co_name))
  12. def before_dinner(self, runner):
  13. print('{}: 没想好做什么'.format(sys._getframe().f_code.co_name))
  14. def after_dinner(self, runner):
  15. print('{}: 没想好做什么'.format(sys._getframe().f_code.co_name))
  16. def after_finish_work(self, runner, are_you_busy=False):
  17. if are_you_busy:
  18. print('{}:今天事贼多,还是加班吧'.format(sys._getframe().f_code.co_name))
  19. else:
  20. print('{}:今天没啥事,去锻炼30分钟'.format(sys._getframe().f_code.co_name))
  21. class Runner(object):
  22. def __init__(self, name):
  23. self.name = name
  24. self._hooks = [] # 将hook对象放进这里 <__main__.Runner object at 0x7f626e>
  25. def register_hook(self, hook):
  26. # 这里不做优先级判断,直接在头部插入HOOK
  27. self._hooks.insert(0, hook)
  28. def call_hook(self, hook_name):
  29. for hook in self._hooks: # 这里的hook是HOOK实例出来的对象
  30. # print(getattr(hook, hook_name)) # 这里可以反射出before_breakfirst 方法
  31. # print(self) # self是runner对象
  32. getattr(hook, hook_name)(self) # 这里 传进去的self其实是runner对象
  33. # getattr(hook, hook_name)('haha')
  34. def run(self):
  35. print('开始启动我的一天')
  36. self.call_hook('before_breakfirst')
  37. self.call_hook('after_breakfirst')
  38. self.call_hook('before_lunch')
  39. self.call_hook('after_lunch')
  40. self.call_hook('before_dinner')
  41. self.call_hook('after_dinner')
  42. self.call_hook('after_finish_work')
  43. print('~~睡觉~~')
  44. # 实例化
  45. hook = HOOK()
  46. runner = Runner('小明')
  47. runner.register_hook(hook)
  48. runner.run()
  • 2021年12-13 10:35更新

mmdetection使用tensorboard可视化训练过程

  • 安装tensorboard
  • 配置文件中加入下面信息
  1. log_config = dict(
  2. interval=1,
  3. hooks=[
  4. dict(type='TextLoggerHook'),
  5. dict(type='TensorboardLoggerHook')
  6. ]
  7. )

错误一: 由于coco 数据集错误导致的报错 --时间2021年6月9号

  • 报错信息:
  1. fatal: not a git repository (or any parent up to mount point /media/yuqing)
  2. Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
  3. loading annotations into memory...
  4. Traceback (most recent call last):
  5. File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/site-packages/mmcv/utils/registry.py", line 51, in build_from_cfg
  6. return obj_cls(**args)
  7. File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/custom.py", line 88, in __init__
  8. self.data_infos = self.load_annotations(self.ann_file)
  9. File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/coco.py", line 47, in load_annotations
  10. self.coco = COCO(ann_file)
  11. File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/api_wrappers/coco_api.py", line 22, in __init__
  12. super().__init__(annotation_file=annotation_file)
  13. File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/site-packages/pycocotools/coco.py", line 85, in __init__
  14. dataset = json.load(f)
  15. File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/json/__init__.py", line 296, in load
  16. parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  17. File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/json/__init__.py", line 348, in loads
  18. return _default_decoder.decode(s)
  19. File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/json/decoder.py", line 340, in decode
  20. raise JSONDecodeError("Extra data", s, end)
  21. json.decoder.JSONDecodeError: Extra data: line 1 column 3 (char 2)
  22. During handling of the above exception, another exception occurred:
  23. Traceback (most recent call last):
  24. File "tools/train.py", line 188, in <module>
  25. main()
  26. File "tools/train.py", line 184, in main
  27. meta=meta)
  28. File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/apis/train.py", line 140, in train_detector
  29. val_dataset = build_dataset(cfg.data.val, dict(test_mode=True))
  30. File "/media/yuqing/My Passport/cv_coder/mmdetection-2.12.0/mmdet/datasets/builder.py", line 71, in build_dataset
  31. dataset = build_from_cfg(cfg, DATASETS, default_args)
  32. File "/home/yuqing/anaconda3/envs/yolodet/lib/python3.7/site-packages/mmcv/utils/registry.py", line 54, in build_from_cfg
  33. raise type(e)(f'{obj_cls.__name__}: {e}')
  34. 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. 小白上学のcanvas零基础

    <canvas> 元素 <canvas> 看起来和 <img> 元素很相像,唯一的不同就是它并没有 src 和 alt 属性.实际上,<canvas> ...

  2. HTML5离线存储整理

    前端html部分 //canvas.html <!DOCTYPE html> <html manifest="/test.appcache"> <he ...

  3. CSS揭秘之《多重边框》

    1.box-shadow还接受第四个参数(称作"扩张半径"), 通过指定正值或负值, 可以让投影面积加大或者减小2.如果我们想要一道实线边框其实也是可以通过box-shadow来模 ...

  4. ES6-11学习笔记--let

    新声明方式:let 1.不属于顶层对象 window 2.不允许重复声明 3.不存在变量提升 4.暂时性死区 5.块级作用域   原来var声明: var a = 5; console.log(a); ...

  5. AS之去掉顶部标题栏

    在该目录下,将原本<style name的这行代码改为: <style name="Theme.Tongxunlu" parent="Theme.Materi ...

  6. java中public和缺省这两个访问权限的根本区别?

    为了区分开public和缺省的区别,我们要引进包(package)的概念.包就像咱们磁盘上的目录一样,马克-to-win.package a;就是定义说当前的目录为a.底下编的任何的类,都会出现在当前 ...

  7. JBOSS 7.1.1上的DB2和Orcale数据库配置

      将IBM DB2和Oracle数据源配置到JBOSS 7.1.1      第1步:  打开Standalone.xml文件将以下代码添加到数据源的子系统中,并根据数据库URL和数据源的用户名和密 ...

  8. css过渡效果和盒子缩放大小的结合

    给盒子一个鼠标经过时放大里面的图片效果在css中使用过渡效果transition结合 <html lang="en"> <head> <meta ch ...

  9. python 面试题汇总

    1丶元组(list)和列表(tuple)的区别: 一:共同点: ①: 可以放置任意数据类型的有序集合,都是可以存放数字,字符串,对象等. ②:都支持 负索引,切片,随意嵌套等操作 二:不同点: ①: ...

  10. SpringCloud入门简述

    1.微服务简述 ​ 微服务,是一个小型的服务,也是一种设计理念,将一个大型繁杂的系统拆分为多个小型的服务,进行独立部署,这些服务在独立进程中运行,通过特定的协议进行通信 ​ 优点: 轻量化:一个服务不 ...