mmetection之Hybrid Task Cascade训练自己的数据集(VIA标注)

https://github.com/open-mmlab/mmdetection

根据官网配置好mmdetection所需环境,我用的pytorch1.4.0,cuda10,按照官方文档要求配置就可以https://github.com/open-mmlab/mmdetection/blob/master/docs/install.md

主要介绍如何将VIA标注的数据集转换成HTC需要的格式,在VIAhttp://www.robots.ox.ac.uk/~vgg/software/via/via-1.0.6.html

上使用多边形标注将自己的数据集标注好,我的数据集TRAIN-2477张图片,VAL-788张图片,对应json文件分别为train_end.json和val_end.json

一,将via标注的数据集转换为常用的coco格式,转换工具https://download.csdn.net/download/qq_37754309/12710210
二,转换为常用coco格式的json文件后还需要生成htc需要的stuffthingmaps文件夹下面的图片

1,进入https://github.com/nightrome/cocostuffapi下载后将PythonAPI/pycocotools/cocostuffhelper.py中第140行到150行改为

 # Create label map
    #labelMap = cocoSegmentationToSegmentationMap(coco, imgId, includeCrowd=includeCrowd)
    labelMap = cocoSegmentationToSegmentationMap(coco, imgId, checkUniquePixelLabel=False, includeCrowd=includeCrowd)
    labelMap = labelMap.astype(np.int8)
    labelMap = labelMap + 91
# Get color map and convert to PIL's format
    cmap = getCMap()
    cmap = (cmap * 255).astype(int)
    padding = np.zeros((256-cmap.shape[0], 3), np.int8)
    cmap = np.vstack((cmap, padding))
    cmap = cmap.reshape((-1))
    cmap = np.uint8(cmap).tolist()
    assert len(cmap) == 768, 'Error: Color map must have exactly 256*3 elements!'

2,将PythonAPI/cocostuff/cocoSegmentationToPngDemo.py复制到PythonAPI下,即PythonAPI/cocoSegmentationToPngDemo.py

将PythonAPI/cocoSegmentationToPngDemo.py中第75行到88行注释掉并将annPath设置为我们在第一步中转换好的json文件

def cocoSegmentationToPngDemo(dataDir='coco/', dataTypeAnn='train2017', dataTypeRes='examples', \
        pngFolderName='export_png', isAnnotation=True, exportImageLimit=2477):
    # Define paths
    annPath = '/home/fst/work/dataset/instances_train2017.json'
    if isAnnotation:
        pngFolder = '%s/annotations/%s' % (dataDir, pngFolderName)

根据上图路径生成的图片放在PythonAPI/coco/annotations/export_png文件夹下面,但此图片是彩色的,而stuffthingmaps中所需要的图片为灰度图,使用opencv对export_png下的图片进行灰度化,生成stuffthingmaps下的train2017和val2017文件夹下的图片

mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── coco
│   │   ├── annotations
│   │   │   ├── instances_train2017.json(第一步中转换出的coco格式的json文件)
│   │   │   ├── instances_val2017.json(第一步中转换出的coco格式的json文件)
│   │   ├── train2017(原图)
│   │   ├── val2017(原图)
|   |     ├── stuffthingmaps
│   │   │   ├── train2017(第二步灰度化后的图片)
│   │   │   ├── val2017(第二步灰度化后的图片)

准备好数据集以后就可以开始训练了

sudo python3 train.py /mmdetection-master/configs/htc/htc_x101_32x4d_fpn_16x1_20e_coco.py

我的htc_x101_32x4d_fpn_16x1_20e_coco.py配置如下

_base_ = './htc_r50_fpn_1x_coco.py'
model = dict(
    pretrained='open-mmlab://resnext101_32x4d',
    backbone=dict(
        type='ResNeXt',
        depth=101,
        groups=32,
        base_width=4,
        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'))
data = dict(samples_per_gpu=2, workers_per_gpu=1)
optimizer = dict(type='SGD', lr=0.001, momentum=0.9, weight_decay=0.0001)
optimizer_config = dict(grad_clip=dict(max_norm=5, norm_type=2))
# learning policy
lr_config = dict(step=[16, 19])
total_epochs = 20

等待它训练完就可以进行测试啦。

如果想要对训练过程进行可视化,只需在配置文件中加入如下代码即可,使用tensorboard进行可视化

log_config = dict(
    interval=50,
    hooks=[
        dict(type='TextLoggerHook'),
        dict(type='TensorboardLoggerHook')
    ])

如果训练意外中断,需要继续训练时,可使用以下语句

python3 tools/train.py configs下的配置文件 --resume-from work_dirs下之前训练好的模型

测试代码

import os
import cv2
from mmdet.apis import init_detector, inference_detector, show_result_pyplot
import mmcv
import time
config_file = '/mmdetection-master/work_dirs/htc_x101_32x4d_fpn_16x1_20e_coco0810/htc_x101_32x4d_fpn_16x1_20e_coco.py'##训练后生成的配置文件
checkpoint_file = '/mmdetection-master/work_dirs/htc_x101_32x4d_fpn_16x1_20e_coco0810/epoch_20.pth'#训练后生成的模型文件

# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file, device='cuda:0')
img_path = '/test/0813/'#测试图片路径
for filename in os.listdir(img_path):
    img = os.path.join(img_path, filename)
    result = inference_detector(model, img)
    img = model.show_result(img, result, score_thr=0.6, show=False)
    # visualize the results in a new window
    cv2.imwrite('/test_result/0813/'+filename, img)

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值