LoginSignup
0
0

mmdetectionでカスタムCOCOデータセットに対応する方法

Posted at

mmdetectionでカスタムデータに対応するための邪道な方法です

公式ではcustomdataset用のconfigで元のconfigを
overwriteして使う方法が出ていますが…

これモデルを変えるごとにoverwriteするパラメータが違うので
configいちいち作らねばなりません

元のconfigたちはcocoのデータセットがデフォルトで入っているため
cocoの情報をいじればモデル変更時のconfig書き換えを最小限にできます

・カスタムデータセット(1クラス)を準備
・データ形式はcoco
・フォルダ構造(フォルダ構造はこの通りにつくることでconfig書き換えの手間が大幅削減)
  ├─coco
  │ ├─annotations
  │ │ ├─instances_train2017.json
  │ │ └─instances_val2017.json
  │ ├─train2017(train用画像のフォルダ)
  │ └─val2017(valid用画像のフォルダ)

mmdet/datasets/coco.pyの変更

mmdet/datasets/coco.pyにcocoのクラス名が記載されています
そこをカスタムデータセットに合うように変更します
paletteは表示の色なのでお好みで

13行目付近

mmdet/datasets/coco.py
@DATASETS.register_module()
class CocoDataset(BaseDetDataset):
    """Dataset for COCO."""
    METAINFO = {
        'classes':
        ('abnormal'),
        # palette is a list of color tuples, which is used for visualization.
        'palette':
        [(220, 20, 60)]
    }
    # METAINFO = {
    #     'classes':
    #     ('person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train',
    #      'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign',
    #      'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep',
    #      'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',
    #      'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard',
    #      'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard',
    #      'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork',
    #      'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
    #      'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair',
    #      'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv',
    #      'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave',
    #      'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase',
    #      'scissors', 'teddy bear', 'hair drier', 'toothbrush'),
    #     # palette is a list of color tuples, which is used for visualization.
    #     'palette':
    #     [(220, 20, 60), (119, 11, 32), (0, 0, 142), (0, 0, 230), (106, 0, 228),
    #      (0, 60, 100), (0, 80, 100), (0, 0, 70), (0, 0, 192), (250, 170, 30),
    #      (100, 170, 30), (220, 220, 0), (175, 116, 175), (250, 0, 30),
    #      (165, 42, 42), (255, 77, 255), (0, 226, 252), (182, 182, 255),
    #      (0, 82, 0), (120, 166, 157), (110, 76, 0), (174, 57, 255),
    #      (199, 100, 0), (72, 0, 118), (255, 179, 240), (0, 125, 92),
    #      (209, 0, 151), (188, 208, 182), (0, 220, 176), (255, 99, 164),
    #      (92, 0, 73), (133, 129, 255), (78, 180, 255), (0, 228, 0),
    #      (174, 255, 243), (45, 89, 255), (134, 134, 103), (145, 148, 174),
    #      (255, 208, 186), (197, 226, 255), (171, 134, 1), (109, 63, 54),
    #      (207, 138, 255), (151, 0, 95), (9, 80, 61), (84, 105, 51),
    #      (74, 65, 105), (166, 196, 102), (208, 195, 210), (255, 109, 65),
    #      (0, 143, 149), (179, 0, 194), (209, 99, 106), (5, 121, 0),
    #      (227, 255, 205), (147, 186, 208), (153, 69, 1), (3, 95, 161),
    #      (163, 255, 0), (119, 0, 170), (0, 182, 199), (0, 165, 120),
    #      (183, 130, 88), (95, 32, 0), (130, 114, 135), (110, 129, 133),
    #      (166, 74, 118), (219, 142, 185), (79, 210, 114), (178, 90, 62),
    #      (65, 70, 15), (127, 167, 115), (59, 105, 106), (142, 108, 45),
    #      (196, 172, 0), (95, 54, 80), (128, 76, 255), (201, 57, 1),
    #      (246, 0, 122), (191, 162, 208)]
    # }

mmdet/evaluation/functional/class_names.pyの変更

72行目付近

mmdet/evaluation/functional/class_names.py
def coco_classes() -> list:
    """Class names of COCO."""
    # return [
    #     'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train',
    #     'truck', 'boat', 'traffic_light', 'fire_hydrant', 'stop_sign',
    #     'parking_meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep',
    #     'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',
    #     'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard',
    #     'sports_ball', 'kite', 'baseball_bat', 'baseball_glove', 'skateboard',
    #     'surfboard', 'tennis_racket', 'bottle', 'wine_glass', 'cup', 'fork',
    #     'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
    #     'broccoli', 'carrot', 'hot_dog', 'pizza', 'donut', 'cake', 'chair',
    #     'couch', 'potted_plant', 'bed', 'dining_table', 'toilet', 'tv',
    #     'laptop', 'mouse', 'remote', 'keyboard', 'cell_phone', 'microwave',
    #     'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase',
    #     'scissors', 'teddy_bear', 'hair_drier', 'toothbrush'
    # ]
    return [
        'abnormal'
    ]

configのnum_classesを変更

使いたいモデルのconfigを開いてnum_classesを探してください
cocoはデフォルトnum_classes=80になっているので今回はnum_classes=1にします

以上!

学習はこちらを参考にどうぞ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0