MMDetection英文ドキュメント翻訳---2_new_data_Modelカスタムデータセット

7885 ワード

2:Train with customized datasetsトレーニングカスタムデータセット


In this note, you will know how to inference, test, and train predefined models with customized datasets.
この章では、独自のデータセットでモデルを訓練、テスト、事前訓練する方法について説明します.
We use the balloon dataset as an example to describe the whole process.
balloon datasetを例にこのプロセス全体を説明します
The basic steps are as below:
基本手順は次のとおりです.
  • Prepare the customized datasetカスタムデータセット
  • を準備
  • Prepare a config config config準備configファイル
  • Train, test, inference models on the customized dataset.カスタムデータセット上でのトレーニング、テスト、推定
  • Prepare the customized dataset独自のデータセットを準備


    There are three ways to support a new dataset in MMDetection:
  • reorganize the dataset into COCO format.データセットをcocoフォーマット
  • に再編成する
  • reorganize the dataset into a middle format.データセットを中間フォーマット
  • に再編成する
  • implement a new dataset.新しいデータセット
  • を実現
    Usually we recommend to use the first two methods which are usually easier than the third.
    In this note, we give an example for converting the data into COCO format.
    通常、3番目の方法よりも簡単な前の2つの方法を使用することをお勧めします.
    本稿では,データをcocoフォーマットに変換する例を示した.
    Note: MMDetection only supports evaluating mask AP of dataset in COCO format for now. So for instance segmentation task users should convert the data into coco format.
    注意:MMDetectionは現在、COCOフォーマットデータセットのmask APの評価のみをサポートしています.
    したがって、例えばタスクを分割する場合、ユーザはデータをcocoフォーマットに変換すべきである.

    COCO annotation format coco表記形式


    The necessary keys of COCO format for instance segmentation is as below, for the complete details, please refer here.以下はインスタンス分割に必要なCOCOフォーマットです.詳細は参照してください.
    >{
     "images": [image],
     "annotations": [annotation],
     "categories": [category]
    }
    
    
    image = {
     "id": int,
     "width": int,
     "height": int,
     "file_name": str,
    }
    
    annotation = {
     "id": int,
     "image_id": int,
     "category_id": int,
     "segmentation": RLE or [polygon],
     "area": float,
     "bbox": [x,y,width,height],
     "iscrowd": 0 or 1,
    }
    
    categories = [{
     "id": int,
     "name": str,
     "supercategory": str,
    }]
    

    Assume we use the balloon dataset.
    balloonデータセットを使用すると
    After downloading the data, we need to implement a function to convert the annotation format into the COCO format. Then we can use implemented COCODataset to load the data and perform training and evaluation.
    データをダウンロードした後、annotationフォーマットをCOCOフォーマットに変換する関数を実装する必要があります.次に、実装されたCODatasetを使用してデータをロードし、トレーニングと評価を実行することができます.
    If you take a look at the dataset, you will find the dataset format is as below:
    データセットを見ると、データセットのフォーマットは次のとおりです.
    >{'base64_img_data': '',
     'file_attributes': {},
     'filename': '34020010494_e5cb88e1c4_k.jpg',
     'fileref': '',
     'regions': {'0': {'region_attributes': {},
     'shape_attributes': {'all_points_x': [1020,
     1000,
     994,
     1003,
     1023,
     1050,
     1089,
     1134,
     1190,
     1265,
     1321,
     1361,
     1403,
     1428,
     1442,
     1445,
     1441,
     1427,
     1400,
     1361,
     1316,
     1269,
     1228,
     1198,
     1207,
     1210,
     1190,
     1177,
     1172,
     1174,
     1170,
     1153,
     1127,
     1104,
     1061,
     1032,
     1020],
     'all_points_y': [963,
     899,
     841,
     787,
     738,
     700,
     663,
     638,
     621,
     619,
     643,
     672,
     720,
     765,
     800,
     860,
     896,
     942,
     990,
     1035,
     1079,
     1112,
     1129,
     1134,
     1144,
     1153,
     1166,
     1166,
     1150,
     1136,
     1129,
     1122,
     1112,
     1084,
     1037,
     989,
     963],
     'name': 'polygon'}}},
     'size': 1115004}
    

    The annotation is a JSON file where each key indicates an image's all annotations. The code to convert the balloon dataset into coco format is as below.
    annotationはJSONファイルで、各キーは画像のすべてのannotationを表します.
    balloonデータセットをcocoフォーマットに変換するコードを以下に示します.
    >import os.path as osp
    
    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)
     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)
    

    Using the function above, users can successfully convert the annotation file into json format, then we can use CocoDataset to train and evaluate the model.
    上記の関数を使用すると、annotationファイルをjson形式に変換することに成功し、「CocoData set」を使用してモデルを訓練し、評価することができます.

    Prepare a config config configを準備する


    The second step is to prepare a config thus the dataset could be successfully loaded. Assume that we want to use Mask R-CNN with FPN, the config to train the detector on balloon dataset is as below. Assume the config is under directory configs/balloon/ and named as mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py , the config is as below.
    第2のステップはconfigを用意することで、データセットが正常にロードされます.FPN付きMask R-CNNを用いてballoonデータセット上でdetectorの構成を訓練したいと仮定すると以下のようになる.「configs/balloon/」ディレクトリの下に構成されていると仮定し、「mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py′は、以下のように構成されています.
    ># The new config inherits a base config to highlight the necessary modification
    _base_ = 'mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py'
    
    # We also need to change the num_classes in head to match the dataset's annotation
    model = dict(
     roi_head=dict(
     bbox_head=dict(num_classes=1),# num_classes 
     mask_head=dict(num_classes=1)))
    
    # Modify dataset related settings
    dataset_type = 'COCODataset'# 
    classes = ('balloon',)
    data = dict(
     train=dict(
     img_prefix='balloon/train/',
     classes=classes,
     ann_file='balloon/train/annotation_coco.json'),
     val=dict(
     img_prefix='balloon/val/',
     classes=classes,
     ann_file='balloon/val/annotation_coco.json'),
     test=dict(
     img_prefix='balloon/val/',
     classes=classes,
     ann_file='balloon/val/annotation_coco.json'))
    
    # We can use the pre-trained Mask RCNN model to obtain higher performance
    load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'
    # 
    

    Train a new modelは新しいモデルを訓練します


    To train a model with the new config,you can simply run新しいconfigトレーニングモデルを使用すると、簡単に実行できます
    >python tools/train.py configs/balloon/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_balloon.py
    

    For more detailed usages, please refer to the Case 1.

    Test and inferenceテストと推理


    To test the trained model,you can simply run訓練したモデルをテストするには、簡単に実行できます.
    >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
    

    For more detailed usages, please refer to the Case 1.