MMDetection实际上是一个用于目标检测的工具包,面向深度学习时代的。
目标检测
实例分割
440+个预训练模型
60+篇论文复现
常用学术数据集
两阶段检测器
一阶段检测器
级联检测器
无锚框检测器
Transformer
训练工具
测试工具
推理API
MMCV是所有这个OpenMMLab系列包括MMDetection,MMClassification等的各种东西的一个基础的组件,就是你用什么你都得装这个。
参考:
开始你的第一步 — MMDetection 3.3.0 文档
步骤 0. 使用 MIM 安装 MMEngine 和 MMCV。
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"
步骤 1. 安装 MMDetection。
方案 b:如果你将 mmdet 作为依赖或第三方 Python 包,使用 MIM 安装:
!mim install mmdet
验证
import mmdet
mmdet.__version__
MMDetection提供400余个性优良的预训练模型,开箱即用,几行Python API即可调用强大的检测能力,几行Python API即可调用强大的检测能力。
MMDetection涵盖 60余个目标检测算法,并提供方便易用的工具,经过简单的配置文件改写和调参就可以训练自己的目标检测工具。
我们想用这些模型就可以从这个地方去点击它的链接就可以直接下载。
https://github.com/open-mmlab/mmdetection/tree/main/configs/mask_rcnn
AP:检测里面用来衡量指标的东西,满分是100分,最差是0分,越大越好
也可以通过这行代码区搜索一下mmdetection里的模型
!mim search mmdet --model maskrcnn
!mim search mmdet --model 'mask r-cnn'
搜索出来了
!mim download mmdet --config mask-rcnn_r50_fpn_2x_coco --dest .
运行命令后,当前目录下多了两个文件,一个叫配置文件.py,一个叫参数文件。
怎么用它呢?
from mmdet.apis import init_detector,inference_detector,show_result_pyplot
config_file = ''
不知道init_detector需要传递哪些参数
设置参数信息
config_file = 'mask-rcnn_r50_fpn_2x_coco.py'
checkpoint_file = 'mask_rcnn_r50_fpn_2x_coco_bbox_mAP-0.392__segm_mAP-0.354_20200505_003907-3e542a40.pth'
了解一下返回的是什么模型
model = init_detector(config_file,checkpoint_file)
result = inference_detector(model,'demo.jpg')
import mmcv
from mmdet.registry import VISUALIZERS
image = mmcv.imread('demo.jpg')
# init the visualizer(execute this block only once)
visualizer = VISUALIZERS.build(model.cfg.visualizer)
# the dataset_meta is loaded from the checkpoint and
# then pass to the model in init_detector
visualizer.dataset_meta = model.dataset_meta
# show the results
visualizer.add_datasample(
'demo.jpg',
image,
data_sample=result,
draw_gt=False,
wait_time=0,
out_file='outputs/result.png' # optionally, write to output file
)
visualizer.show()
参考链接
https://github.com/open-mmlab/mmdetection/issues/10380
https://github.com/open-mmlab/mmdetection/issues/10829
# Note : Show_result_pyplot was removed after mmdet version 2.0. OpenCV imshow is used instead.
# import mmdet.apis module
from mmdet.apis import init_detector, inference_detector
from mmdet.registry import VISUALIZERS
import cv2
import mmcv
# path to model file
config_file = 'rtmdet_tiny_8xb32-300e_coco.py'
# path to weight file
checkpoint_file = 'rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'
# create model and load weights
model = init_detector(config_file, checkpoint_file, device='cpu')
# init visualizer
visualizer = VISUALIZERS.build(model.cfg.visualizer)
# the dataset_meta is loaded from the checkpoint and
# then pass to the model in init_detector
visualizer.dataset_meta = model.dataset_meta
# path to the image you want to test
img = 'demo/demo.jpg'
img = cv2.imread(img)
# apply the model to the image and get the output
result = inference_detector(model, img)
img = mmcv.imconvert(img, 'bgr', 'rgb')
visualizer.add_datasample(
name='result',
image=img,
data_sample=result,
draw_gt=False,
pred_score_thr=0.3,
show=False)
img = visualizer.get_image()
img = mmcv.imconvert(img, 'bgr', 'rgb')
cv2.imshow('result', img)
cv2.waitKey(0)
深度学习模型的训练涉及几个方面:
在MMDetection (及其他 OpenMMLab 项目中),所有这些项目都涵盖在一个配置文件中,一个配
置文件定义了一个完整的训练过程
这个pth文件实际上就是一个Pytorch的一个参数文件,它就储存了我们训练好的所有模型的参数。
使用基于COCO预训练的检测模型作为梯度下降的“起点”
使用自己的数据进行“微调训练”通常需要降低学习率
实际上训练的过程就是相当于基于损失函数去做梯度下降,寻找最小梯度,使得损失函数最小的这样一种参数的过程
把原来的配置文件的名字贴过来,意思是基于这个配置文件作为配置文件,然后把它的已有的配置全部给导出来。MMDetection在读取配置文件的时候就会找到这里面的每个项目,然后去读入进来。
版本不匹配
pip uninstall mmcv
pip install mmcv==1.4.0
from mmcv import Config
config = Config.fromfile('main.py') #从我们刚才定义好的只有一行的配置文件去把配置给它读进来
print(config.pretty_text) # 查看配置文件信息
mim train mmdet main.py
main.py文件时我们继承了官方配置文件后的配置文件
"images":数据集里全部的图像的信息
"annotations":全部标注的信息
“categories”:全部物体类别的信息