官方学习文档地址:https://mmcv.readthedocs.io/zh_CN/latest/understand_mmcv/registry.html 注意args是mmcv的核心就行
1.环境搭建
mmcv需要基cuda否则会报错:connot import* form mmcv.*
pip install mmcv-full
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
2.注册器Registry
2.1定义
注册器是由字符串到类的映射,或者或是字典到类映射。 注册器类似一个参数列表,基于一个注册器我们可以继承出很多转换器
2.2参数列表
Registry(name, build_func=None, parent=None, scope=None) 第一个参数那么是默认注册器的名字,和我们在实例化的时候的名字不是同一个 第二个参数构建函数,一般需要我们自己编写,使用默认的。
2.3实例
通过 @CONVERTERS.register_module() 装饰所实现的模块,字符串和类之间的映射就可以由 CONVERTERS 构建和维护
from mmcv.utils import Registry
CONVERTERS = Registry('converter')
from .builder import CONVERTERS
@CONVERTERS.register_module()
class Converter1(object):
def __init__(self, a, b):
self.a = a
self.b = b
3.执行器
有两种执行器,一种是以epoch为单位,一种是以是以iter为单位训练。以EpochBasedRunner为例做介绍
3.1定义
相当于epoch_fit的for循环,和torch一样只支持训练和验证。
3.1实例
(1) dataloader、model 和优化器等类初始化
model=...
optimizer = build_optimizer(model, cfg.optimizer)
data_loaders = [
build_dataloader(
ds,
cfg.data.samples_per_gpu,
cfg.data.workers_per_gpu,
...) for ds in dataset
]
``
(2) runner 类(训练器)初始化
```python
runner = build_runner(
cfg.runner,
default_args=dict(
model=model,
batch_processor=None,
optimizer=optimizer,
logger=logger))
(3)规定一些训练参数
runner.register_training_hooks(
cfg.lr_config,
optimizer_config,
cfg.checkpoint_config,
cfg.log_config,
...)
if cfg.get('custom_hooks', None):
custom_hooks = cfg.custom_hooks
for hook_cfg in cfg.custom_hooks:
hook_cfg = hook_cfg.copy()
priority = hook_cfg.pop('priority', 'NORMAL')
hook = build_from_cfg(hook_cfg, HOOKS)
runner.register_hook(hook, priority=priority)
(4)开启训练流 之前的工作都是定义训练内容,此时才是真正开启了训练
runner.run(data_loaders, cfg.workflow)
4.label文件输入输出
mmcv不支持xml格式的label文件,目前只支持 json、yaml、txt 和 pickle。
import mmcv
data = mmcv.load('test1.json')
data = mmcv.load('test.yaml')
data = mmcv.load('test.pkl')
print(data)
with open('test1.json', 'r' ,encoding='utf-8') as f:
data = mmcv.load(f, file_format='json')
print(data)
5.图片文件输入输出
语法和opencv很像:
import mmcv
img = mmcv.imread('./test.png')
mmcv.imshow(img)
img = mmcv.imread('./test.png', flag='grayscale')
mmcv.imshow(img)
mmcv.imwrite(img, 'out.jpg')
import cv2
img = cv2.imread("test.png")
imgGrey = cv2.imread("test.png", 0)
cv2.imshow("img", img)
cv2.imshow("imgGrey", imgGrey)
cv2.waitKey()
cv2.imwrite("Copy.jpg", imgGrey)
|