Windows下mmdetection v2.20 复现和训练自己的数据集

目录

环境配置:

安装步骤:

训练

在标准数据集上进行训练

在自己制作的数据集上进行训练


环境配置:

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

奶盖芒果

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐