美文网首页
mmdetection-安装

mmdetection-安装

作者: yanghedada | 来源:发表于2018-12-29 21:20 被阅读148次

被推荐尝试一下mmdetection,之后我就开始进行安装了

需求环境如下:

  • Linux (tested on Ubuntu 16.04 and CentOS 7.2)
  • Python 3.4+
  • PyTorch 0.4.1
  • Cython
  • mmcv

一个都不能错,特别是PyTorch 0.4.1是硬性规定。。。。😂

我的推荐是先下载,再安装。。。

1. 安装PyTorch 0.4.1:

pip install torch-0.4.1-cp36-cp36m-manylinux1_x86_64.whl
conda install pytorch-0.4.1-py36_cuda9.0.176_cudnn7.1.2_1.tar.bz2

2. 下载mmdetection

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
./compile.sh
python setup.py install

3. 下载预训练模型

Detection model zoo
Baseline model zoo

我使用resnet50,我是单卡的小傻瓜

4.设置config参数

就在config文件夹加下,
我只有一个类--face
faster_rcnn_r50_fpn_1x_voc0712.py
改了三处:

  1. num_classes=2(类别数+ 1)
  2. work_dir = './work_dirs/faster_rcnn_r50_fpn_1x_voc0712_V2'
  3. load_from = './ckpt/resnext101_64x4d-ee2c6f71.pth'
# model settings
model = dict(
    type='FasterRCNN',
    pretrained='modelzoo://resnet50',
    backbone=dict(
        type='ResNet',
        depth=50,
        num_stages=4,
        out_indices=(0, 1, 2, 3),
        frozen_stages=1,
        style='pytorch'),
    neck=dict(
        type='FPN',
        in_channels=[256, 512, 1024, 2048],
        out_channels=256,
        num_outs=5),
    rpn_head=dict(
        type='RPNHead',
        in_channels=256,
        feat_channels=256,
        anchor_scales=[2],
        anchor_ratios=[0.9, 1.0, 1.1],
        anchor_strides=[4, 8, 16, 32, 64],
        target_means=[.0, .0, .0, .0],
        target_stds=[1.0, 1.0, 1.0, 1.0],
        use_sigmoid_cls=True),
    bbox_roi_extractor=dict(
        type='SingleRoIExtractor',
        roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2),
        out_channels=256,
        featmap_strides=[4, 8, 16, 32]),
    bbox_head=dict(
        type='SharedFCBBoxHead',
        num_fcs=2,
        in_channels=256,
        fc_out_channels=1024,
        roi_feat_size=7,
        num_classes=2,
        target_means=[0., 0., 0., 0.],
        target_stds=[0.1, 0.1, 0.2, 0.2],
        reg_class_agnostic=False))
# model training and testing settings
train_cfg = dict(
    rpn=dict(
        assigner=dict(
            type='MaxIoUAssigner',
            pos_iou_thr=0.7,
            neg_iou_thr=0.3,
            min_pos_iou=0.3,
            ignore_iof_thr=-1),
        sampler=dict(
            type='RandomSampler',
            num=256,
            pos_fraction=0.5,
            neg_pos_ub=-1,
            add_gt_as_proposals=False),
        allowed_border=0,
        pos_weight=-1,
        smoothl1_beta=1 / 9.0,
        debug=False),
    rcnn=dict(
        assigner=dict(
            type='MaxIoUAssigner',
            pos_iou_thr=0.5,
            neg_iou_thr=0.5,
            min_pos_iou=0.5,
            ignore_iof_thr=-1),
        sampler=dict(
            type='RandomSampler',
            num=256,
            pos_fraction=0.25,
            neg_pos_ub=-1,
            add_gt_as_proposals=True),
        pos_weight=-1,
        debug=False))
test_cfg = dict(
    rpn=dict(
        nms_across_levels=False,
        nms_pre=2000,
        nms_post=2000,
        max_num=2000,
        nms_thr=0.2,
        min_bbox_size=0),
    rcnn=dict(
        score_thr=0.0, nms=dict(type='nms', iou_thr=0.2),
        max_per_img=2000)
    # soft-nms is also supported for rcnn testing
    # e.g., nms=dict(type='soft_nms', iou_thr=0.5, min_score=0.05)
)
# dataset settings
dataset_type = 'VOCDataset'
data_root = 'data/VOCdevkit/'
img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
data = dict(
    imgs_per_gpu=2,
    workers_per_gpu=2,
    train=dict(
        type='RepeatDataset',  # to avoid reloading datasets frequently
        times=3,
        dataset=dict(
            type=dataset_type,
            ann_file=[
                data_root + 'VOC2007/ImageSets/Main/trainval.txt',#trainval.txt
            ],
            img_prefix=[data_root + 'VOC2007/'],
            img_scale=(600, 600),
            img_norm_cfg=img_norm_cfg,
            size_divisor=32,
            flip_ratio=0.5,
            with_mask=False,
            with_crowd=True,
            with_label=True)),
    val=dict(
        type=dataset_type,
        ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt',
        img_prefix=data_root + 'VOC2007/',
        img_scale=(600, 600),
        img_norm_cfg=img_norm_cfg,
        size_divisor=32,
        flip_ratio=0,
        with_mask=False,
        with_crowd=True,
        with_label=True),
    test=dict(
        type=dataset_type,
        ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt',
        img_prefix=data_root + 'VOC2007/',
        img_scale=(600, 600),
        img_norm_cfg=img_norm_cfg,
        size_divisor=32,
        flip_ratio=0,
        with_mask=False,
        with_label=False,
        test_mode=True))
# optimizer
optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001)
optimizer_config = dict(grad_clip=dict(max_norm=35, norm_type=2))
# learning policy
lr_config = dict(policy='step', step=[3])  # actual epoch = 3 * 3 = 9
checkpoint_config = dict(interval=1)
# yapf:disable
log_config = dict(
    interval=100,
    hooks=[
        dict(type='TextLoggerHook'),
        # dict(type='TensorboardLoggerHook')
    ])
# yapf:enable
# runtime settings
total_epochs = 40  # actual epoch = 4 * 3 = 12
dist_params = dict(backend='nccl')
log_level = 'INFO'
work_dir = './work_dirs/faster_rcnn_r50_fpn_1x_voc0712_V2' # [2]
load_from = './ckpt/resnext101_64x4d-ee2c6f71.pth'
resume_from = None
workflow = [('train', 1)]

6. 修改voc.py

/mmdet/dataset/voc.py

由于其他地方我不会改,所以这能从这里下手。

from .xml_style import XMLDataset


class VOCDataset(XMLDataset):
    #
    # CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car',
    #            'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
    #            'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train',
    #            'tvmonitor')
    CLASSES = ('face',)

    def __init__(self, **kwargs):
        super(VOCDataset, self).__init__(**kwargs)
        if 'VOC2007' in self.img_prefix:
            self.year = 2007
        elif 'VOC2012' in self.img_prefix:
            self.year = 2012
        else:
            raise ValueError('Cannot infer dataset year from img_prefix')

7.训练

python train.py configs/faster_rcnn_r50_fpn_1x_voc0712.py --gpus 1 --validate

8.计算map

1 . 首先产生pkl

python test.py configs/faster_rcnn_r50_fpn_1x_voc0712.py work_dirs/faster_rcnn_r50_fpn_1x_voc0712/latest.pth --gpus=1 --out=eval/result.pkl
  1. 计算map
python voc_eval.py eval/result.pkl configs/faster_rcnn_r50_fpn_1x_voc0712.py

9.测试

import mmcv
from mmcv.runner import load_checkpoint
from mmdet.models import build_detector
from mmdet.apis import inference_detector, show_result
import cv2
import numpy as np
import os
cfg = mmcv.Config.fromfile('configs/faster_rcnn_r50_fpn_1x_voc0712.py')
cfg.model.pretrained = None

# YangHE/mmdetection-master/work_dirs/faster_rcnn_r50_fpn_1x_voc0712/epoch_1.pth
# construct the model and load checkpoint
model = build_detector(cfg.model, test_cfg=cfg.test_cfg)
# _ = load_checkpoint(model, 'https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth')
_ = load_checkpoint(model, 'work_dirs/faster_rcnn_r50_fpn_1x_voc0712/latest.pth')

# test a single image
img = mmcv.imread('test.jpg')
result = inference_detector(model, img, cfg)
# show_result(img, result)
# print(result[0].shape)
#
img = cv2.imread('test.jpg')
sores = result[0][:,-1]
ind = sores > 0.01
bboxes = result[0][ind,:-1]
for bbox in bboxes:
    bbox_int = bbox.astype(np.int32)
    left_top = (bbox_int[0], bbox_int[1])
    right_bottom = (bbox_int[2], bbox_int[3])
    cv2.rectangle(
        img, left_top, right_bottom,color=(0, 255, 0))
cv2.imshow("s", img)
cv2.waitKey(0)

总的来说由于这里框架不是特别熟,out of memory把我给惹毛了,用来50层的resnext效果不是特别好。。。就没再进行深入探究。。。。。

算是一次失败的尝试。。。。。。。。

相关文章

  • mmdetection-安装

    被推荐尝试一下mmdetection,之后我就开始进行安装了 需求环境如下: Linux (tested on U...

  • ubuntu ppa PHP

    安装mysql 安装php 安装nginx 安装Chrome 安装dock 安装node 安装wine 官方源列表梯子

  • 从零开始在 Ubuntu  下部署 Django + uwsgi

    整体安装流程 安装 ubuntu ,安装 pip, 安装 uwsgi, 安装 django安装 nginx整个请求...

  • step one

    安装chrome 安装terminator 安装nodejs 安装apache2 安装php7 安装mysql 重...

  • centos安装lnmp,redis

    安装nginx 安装nginx源 安装nginx 启动nginx 安装MySQL5.7.* 安装mysql源 安装...

  • liunx实操(centOS 6.8)

    初始化 配置JDK 安装tomcat 安装maven 安装vsftpd 安装Nginx 安装mysql 安装git...

  • CentOS 7 下RabbitMQ 3.7 安装与配置

    首先安装Erlang20.2 安装准备 创建Yum源 Erlang安装 安装 验证 RabbitMQ安装 安装准备...

  • 在VirtualBox上使用Bosh部署Cloud Foundr

    安装Bosh 安装 VirtualBox 略 安装Bosh 安装完成后运行下面命令确认安装成功 安装依赖库 安装后...

  • ubuntu安装nginx

    安装依赖 安装gcc g++的依赖: 安装pcre库: 安装zlib库: 安装openssl: 安装nginx 首...

  • Linux下安装pip3

    安装pip3需安装setuptools, 而安装setuptools需要安装zlib. 安装zlib 进入安装目录...

网友评论

      本文标题:mmdetection-安装

      本文链接:https://www.haomeiwen.com/subject/saaplqtx.html