当前位置:网站首页>「记录」MMDetection入门篇
「记录」MMDetection入门篇
2022-07-29 17:14:00 【ViatorSun】
OpenMMLab是一个深度学习高级库,通过OpenMMLab 软件栈可以看出来,低层依旧使用的 Pytorch,因此用户并不是在学一个全新的库,而是更加高级,更加方便的Pytorch库,OpenMMLab可以给用户带来更高的效率,使得用户只关注核心算法即可,不用再在配置文件上浪费更多时间
MMdet 主要由 4 个部分组成,datasets、models、core 和 apis
另外,MMCV 是面向整个 OpenMMLab 所有开源库的,里面都是通用类和工具类,方便下游各个 codebase 复用


backbone
mmdet/models/backbones
__all__ = [ 'RegNet', 'ResNet', 'ResNetV1d', 'ResNeXt', 'SSDVGG', 'HRNet', 'Res2Net',
'HourglassNet', 'DetectoRS_ResNet', 'DetectoRS_ResNeXt', 'Darknet',
'ResNeSt', 'TridentResNet' ]
通过 MMCV 中的注册器机制,你可以通过 dict 形式的配置来实例化任何已经注册的类,非常方便和灵活。
# 骨架的预训练权重路径
pretrained='torchvision://resnet50',
backbone=dict(
type='ResNet', # 骨架类名,后面的参数都是该类的初始化参数
depth=50,
num_stages=4,
out_indices=(0, 1, 2, 3),
frozen_stages=1,
norm_cfg=dict(type='BN', requires_grad=True),
norm_eval=True,
style='pytorch'),
neck
neck 可以认为是 backbone 和 head 的连接层,主要负责对 backbone 的特征进行高效融合和增强,能够对输入的单尺度或者多尺度特征进行融合、增强输出等。
mmdet/models/necks
__all__ = [
'FPN', 'BFP', 'ChannelMapper', 'HRFPN', 'NASFPN', 'FPN_CARAFE', 'PAFPN',
'NASFCOS_FPN', 'RFP', 'YOLOV3Neck'
]
最常用的应该是 FPN,一个典型用法是:
neck=dict(
type='FPN',
in_channels=[256, 512, 1024, 2048], # 骨架多尺度特征图输出通道
out_channels=256, # 增强后通道输出
num_outs=5), # 输出num_outs个多尺度特征图
head
目标检测算法输出一般包括分类和框坐标回归两个分支,不同算法 head 模块复杂程度不一样,灵活度比较高。在网络构建方面,理解目标检测算法主要是要理解 head 模块。
MMDetection 中 head 模块又划分为 two-stage 所需的 RoIHead 和 one-stage 所需的 DenseHead,
- 所有的 one-stage 算法的 head 模块都在mmdet/models/dense_heads中
- 而 two-stage 算法还包括额外的mmdet/models/roi_heads
几乎每个算法都包括一个独立的 head
# dense_heads:
__all__ = [
'AnchorFreeHead', 'AnchorHead', 'GuidedAnchorHead', 'FeatureAdaption',
'RPNHead', 'GARPNHead', 'RetinaHead', 'RetinaSepBNHead', 'GARetinaHead',
'SSDHead', 'FCOSHead', 'RepPointsHead', 'FoveaHead',
'FreeAnchorRetinaHead', 'ATSSHead', 'FSAFHead', 'NASFCOSHead',
'PISARetinaHead', 'PISASSDHead', 'GFLHead', 'CornerHead', 'YOLACTHead',
'YOLACTSegmHead', 'YOLACTProtonet', 'YOLOV3Head', 'PAAHead',
'SABLRetinaHead', 'CentripetalHead', 'VFNetHead', 'TransformerHead'
]
需要注意的是:two-stage 或者 mutli-stage 算法,会额外包括一个区域提取器 roi extractor,用于将不同大小的 RoI 特征图统一成相同大小。
虽然 head 部分的网络构建比较简单,但是由于正负样本属性定义、正负样本采样和 bbox 编解码模块都在 head 模块中进行组合调用,故
MMDetection 中最复杂的模块就是 head。
下载配置文件
建议在 Conda环境中,在Pycharm中好像不能用,暂时还不知道是什么原因造成的
# 安装 mim
pip install openmim
mim search mmdet --model "mask r-cnn"
mim download mmdet --config "mask_rcnn_r50_fpn_2x_coco" --dest .
注意!--dest .
中间有空格
运行测试模型
from mmdet.apis import init_detector, inference_detector, train_detector, show_result_pyplot
from mmdet.datasets import build_dataset
from mmcv import Config
import mmcv
import os.path as osp
import multiprocessing
if __name__ == '__main__':
multiprocessing.freeze_support()
config_file = 'solo_r50_fpn_3x_coco.py'
checkpoint_file = 'solo_r50_fpn_3x_coco_20210901_012353-11d224d7.pth'
model = init_detector(config_file, checkpoint_file, device='cuda:0')
# print(model)
cfg = Config.fromfile(config_file)
dataset = [build_dataset(cfg.data.train)]
mmcv.mkdir_or_exist(osp.abspath('./work_dir_sum'))
train_detector(model, dataset, cfg, distributed=False, validate=False)
# 推理演示图像
result = inference_detector(model, '81.jpg')
show_result_pyplot(model,'81.jpg', result)
边栏推荐
猜你喜欢
随机推荐
大数阶乘计算
[网络]路由路由策略
【南瓜书ML】(task5)支持向量机的数学推导(更新ing)
[High Concurrency] I used multithreading to optimize the massive data proofreading system under the billion-level traffic e-commerce business, and the performance was directly improved by 200%!!(The w
Arduino框架下轻量级ssd1306 I2C屏幕驱动库
What is the GMAT test?
掘金量化:通过history方法获取数据,和新浪财经,雪球同用等比复权因子。不同于同花顺
Ernie-gram, 显式、完备的 n-gram 掩码语言模型,实现了显式的 n-gram 语义单元知识建模。
go defer panic recover入门
hihoCoder #1143 : 骨牌覆盖问题·一
【WeChat Mini Program】Zero Basic Learning | Mini Program Grammar
js选择多张图片对比功能插件
接口内容01文档:postman学习路线
Interface content 01 document: postman learning route
鸡兔同笼
#夏日挑战赛# HarmonyOS - 实现签名功能
Six basic experiments of STC8h1k28
(笔记)Build was configured to prefer settings repositories over project repositories but 解决方法
特殊的类——集合与泛型(C#)
hihoCoder#1037 : 数字三角形(DP)