文章目录[隐藏]
目录
环境配置:
cuda 10.2 + python 3.7 +torch 1.6.0 + torchvision 0.7
conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.2 -c pytorch
mmdetection部署:
a.使用 MIM 来安装 MMDetection,MIM 能够自动地安装 OpenMMLab 的项目以及对应的依赖包
pip install openmim
mim install mmdet
b.安装 MMDetection:
pip install mmdet
自动安装在:C:\Users\candicej\AppData\Local\Temp\tmpbc5b9kpp\mmdetection路径下
c.安装额外的依赖以使用 Instaboost, 全景分割, 或者 LVIS 数据集
# 安装 instaboost 依赖
pip install instaboostfast
# 安装全景分割依赖
pip install git+https://github.com/cocodataset/panopticapi.git
# 安装 LVIS 数据集依赖
pip install git+https://github.com/lvis-dataset/lvis-api.git
# 安装 albumentations 依赖
pip install albumentations>=0.3.2 --no-binary imgaug,albumentations
pip list 看一下已经有了mmdet了
d.测试一下
from mmdet.apis import init_detector, inference_detector
import mmcv
# 指定模型的配置文件和 checkpoint 文件路径
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
# 根据配置文件和 checkpoint 文件构建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')
# 测试单张图片并展示结果
img = 'test.jpg' # 或者 img = mmcv.imread(img),这样图片仅会被读一次
result = inference_detector(model, img)
# 在一个新的窗口中将结果可视化
model.show_result(img, result)
# 或者将可视化结果保存为图片
model.show_result(img, result, out_file='result.jpg')
注意要从http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth 下载权重文件放在checkpoints路径下。
检测结果:
在单张照片上的示例:
python demo/image_demo.py demo/demo.jpg configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
检测结果:
-------------------------------------------------------------------------------------------------------------------
训练:
在标准数据集上进行训练
ps: 由于coco数据集太大了,暂时先不进行测试了,拿了官方一个balloon的数据训练了一下。
下载地址:Releases · matterport/Mask_RCNN · GitHub
注意!!!很重要,我的电脑显卡是1050ti 4G ,根本跑不起,这里提醒一下后面的小朋友如果显存小于8G,就不需要尝试了,就算改学习率那些参数也没用,我都试过了。。。。
然后我就用了实验室的服务器跑的(4块1080ti的GPU)。
下面接着将怎么运行以及结果。
1. 下载balloon数据集:
(路径随意,我给了一个示例)
2. 将balloon数据集转化为coco格式:
import os.path as osp
import mmcv
def convert_balloon_to_coco(ann_file, out_file, image_prefix):
data_infos = mmcv.load(ann_file)
annotations = []
images = []
obj_count = 0
for idx, v in enumerate(mmcv.track_iter_progress(data_infos.values())):
filename = v['filename']
img_path = osp.join(image_prefix, filename)
# print(img_path)
height, width = mmcv.imread(img_path).shape[:2]
images.append(dict(
id=idx,
file_name=filename,
height=height,
width=width))
bboxes = []
labels = []
masks = []
for _, obj in v['regions'].items():
assert not obj['region_attributes']
obj = obj['shape_attributes']
px = obj['all_points_x']
py = obj['all_points_y']
poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]
poly = [p for x in poly for p in x]
x_min, y_min, x_max, y_max = (
min(px), min(py), max(px), max(py))
data_anno = dict(
image_id=idx,
id=obj_count,
category_id=0,
bbox=[x_min, y_min, x_max - x_min, y_max - y_min],
area=(x_max - x_min) * (y_max - y_min),
segmentation=[poly],
iscrowd=0)
annotations.append(data_anno)
obj_count += 1
coco_format_json = dict(
images=images,
annotations=annotations,
categories=[{'id':0, 'name': 'balloon'}])
mmcv.dump(coco_format_json, out_file)
# 注释文件的路径
# ann_file = 'H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/train/via_region_data.json'
# out_file = 'H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/train/annotation_coco.json'
# # 存储所有照片的路径
# image_prefix = 'H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/train'
# convert_balloon_to_coco(ann_file, out_file, image_prefix)
ann_file = 'H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/val/via_region_data.json'
out_file = 'H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/val/annotation_coco.json'
image_prefix = 'H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/val'
convert_balloon_to_coco(ann_file, out_file, image_prefix)
3. 在/config/balloon创建配置文件,命名为 mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py
# 这个新的配置文件继承自一个原始配置文件,只需要突出必要的修改部分即可
_base_ = 'H:/cv/code/mmdetection/configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py'
# 我们需要对头中的类别数量进行修改来匹配数据集的标注
model = dict(
roi_head=dict(
bbox_head=dict(num_classes=1),
mask_head=dict(num_classes=1)))
# 修改数据集相关设置
dataset_type = 'COCODataset'
classes = ('balloon',)
data = dict(
train=dict(
img_prefix='H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/train/',
classes=classes,
ann_file='H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/train/annotation_coco.json'),
val=dict(
img_prefix='H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/val/',
classes=classes,
ann_file='H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/val/annotation_coco.json'),
test=dict(
img_prefix='H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/val/',
classes=classes,
ann_file='H:/cv/code/mmdetection/data/coco/balloon_dataset/balloon/val/annotation_coco.json'))
# 我们可以使用预训练的 Mask R-CNN 来获取更好的性能
load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'
4. 下载预训练权重到checkpoints路径下:
(第二个文件)
5. (注意:这一步如果GPU配置够好可以忽略)根据自己的GPU修改学习率,workers,百度一下,线性原则,
的coco_instance 修改samples和workers
在schedule_1x修改lr
6. 开始训练
python tools/train.py configs/balloon/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py
训练结果:
权重 文件保存在work_dirs下
7. 测试训练完毕的模型
python tools/test.py configs/balloon/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py work_dirs/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py/latest.pth --eval bbox segm
python demo/image_demo.py demo/ball.jpg configs/balloon/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py work_dirs/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon/epoch_10.pth
效果还不错哈。
在自己制作的数据集上进行训练4.
1. 安装labelme,记住首先安装pyqt5,不然运行labelme会报错
2. 标注数据
3. 把数据转化为coco格式
参考链接:
https://github.com/open-mmlab/mmdetection
版权声明:本文为CSDN博主「奶盖芒果」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/candice5566/article/details/122373047
暂无评论