inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

Mmdetection 학습 중 unexpected keyword가 발생했습니다

2243

객체감지학생

작성한 질문수 6

0

현재 제공해주신 코드 바탕으로 mmdetection에서 ssd300 모델을 학습시키는 실습을 진행 중입니다.

그런데 train용 데이터셋을 생성하는 코드에서 아래와 같은 오류가 나타납니다.

# train용 Dataset 생성. 
datasets = [build_dataset(cfg.data.train)]

TypeError: DisasterDataset: __init__() got an unexpected keyword argument 'times'

 

제가 대충 찾아본 결과 config 파일 내 data 부분에서 repeatdataset에 times라는 인수가 있고, 이 부분에 문제가 있다고 합니다.(저는 지금 파일을 수정해서 disasterdataset으로 바뀌고 times=5 인수만 남아있는 상태)

data = dict(
    samples_per_gpu=8,
    workers_per_gpu=3,
    train=dict(
        type='DisasterDataset',
        times=5,
        dataset=dict(
            type='CocoDataset',
            ann_file='data/coco/annotations/instances_train2017.json',
            img_prefix='data/coco/train2017/',

(출처: https://github.com/open-mmlab/mmdetection/issues/5980)

 

그래서 cfg를 수정하면서 이 부분을 없애거나 주석처리 해서 해결하고자 하는데, 아래처럼 cfg내 요소를 수정할 수는 있는데, 없애거나 주석처리 하는 방법은 모르겠습니다.

cfg.data.train.type = 'DisasterDataset'
cfg.data.train.data_root = '/content/train/'
cfg.data.train.ann_file = 'xBD_train.json'
cfg.data.train.img_prefix = 'images

이 문제를 해결하는 방법에 대해 답변 듣고싶습니다. 이 repeatdataset 부분(코드에서는 data 밑 disasterdataset)을 수정하는 방법 이외에도 다른 방법이 있다면 꼭 배우고 싶습니다.

 

늘 좋은 강의 잘 듣고 있습니다.

감사합니다.

맨 아래는 문제가 생긴 cfg 전체 파일을 작성합니다.

input_size = 300
model = dict(
    type='SingleStageDetector',
    backbone=dict(
        type='SSDVGG',
        depth=16,
        with_last_pool=False,
        ceil_mode=True,
        out_indices=(3, 4),
        out_feature_indices=(22, 34),
        init_cfg=dict(
            type='Pretrained', checkpoint='open-mmlab://vgg16_caffe')),
    neck=dict(
        type='SSDNeck',
        in_channels=(512, 1024),
        out_channels=(512, 1024, 512, 256, 256, 256),
        level_strides=(2, 2, 1, 1),
        level_paddings=(1, 1, 0, 0),
        l2_norm_scale=20),
    bbox_head=dict(
        type='SSDHead',
        in_channels=(512, 1024, 512, 256, 256, 256),
        num_classes=4,
        anchor_generator=dict(
            type='SSDAnchorGenerator',
            scale_major=False,
            input_size=300,
            basesize_ratio_range=(0.15, 0.9),
            strides=[8, 16, 32, 64, 100, 300],
            ratios=[[2], [2, 3], [2, 3], [2, 3], [2], [2]]),
        bbox_coder=dict(
            type='DeltaXYWHBBoxCoder',
            target_means=[0.0, 0.0, 0.0, 0.0],
            target_stds=[0.1, 0.1, 0.2, 0.2])),
    train_cfg=dict(
        assigner=dict(
            type='MaxIoUAssigner',
            pos_iou_thr=0.5,
            neg_iou_thr=0.5,
            min_pos_iou=0.0,
            ignore_iof_thr=-1,
            gt_max_assign_all=False),
        smoothl1_beta=1.0,
        allowed_border=-1,
        pos_weight=-1,
        neg_pos_ratio=3,
        debug=False),
    test_cfg=dict(
        nms_pre=1000,
        nms=dict(type='nms', iou_threshold=0.45),
        min_bbox_size=0,
        score_thr=0.02,
        max_per_img=200))
cudnn_benchmark = True
dataset_type = 'DisasterDataset'
data_root = '/content/train/'
img_norm_cfg = dict(mean=[123.675, 116.28, 103.53], std=[1, 1, 1], to_rgb=True)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', with_bbox=True),
    dict(
        type='Expand',
        mean=[123.675, 116.28, 103.53],
        to_rgb=True,
        ratio_range=(1, 4)),
    dict(
        type='MinIoURandomCrop',
        min_ious=(0.1, 0.3, 0.5, 0.7, 0.9),
        min_crop_size=0.3),
    dict(type='Resize', img_scale=(300, 300), keep_ratio=False),
    dict(type='RandomFlip', flip_ratio=0.5),
    dict(
        type='PhotoMetricDistortion',
        brightness_delta=32,
        contrast_range=(0.5, 1.5),
        saturation_range=(0.5, 1.5),
        hue_delta=18),
    dict(
        type='Normalize',
        mean=[123.675, 116.28, 103.53],
        std=[1, 1, 1],
        to_rgb=True),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(300, 300),
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=False),
            dict(
                type='Normalize',
                mean=[123.675, 116.28, 103.53],
                std=[1, 1, 1],
                to_rgb=True),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img'])
        ])
]
data = dict(
    samples_per_gpu=8,
    workers_per_gpu=3,
    train=dict(
        type='DisasterDataset',
        times=5,
        dataset=dict(
            type='CocoDataset',
            ann_file='data/coco/annotations/instances_train2017.json',
            img_prefix='data/coco/train2017/',
            pipeline=[
                dict(type='LoadImageFromFile'),
                dict(type='LoadAnnotations', with_bbox=True),
                dict(
                    type='Expand',
                    mean=[123.675, 116.28, 103.53],
                    to_rgb=True,
                    ratio_range=(1, 4)),
                dict(
                    type='MinIoURandomCrop',
                    min_ious=(0.1, 0.3, 0.5, 0.7, 0.9),
                    min_crop_size=0.3),
                dict(type='Resize', img_scale=(300, 300), keep_ratio=False),
                dict(type='RandomFlip', flip_ratio=0.5),
                dict(
                    type='PhotoMetricDistortion',
                    brightness_delta=32,
                    contrast_range=(0.5, 1.5),
                    saturation_range=(0.5, 1.5),
                    hue_delta=18),
                dict(
                    type='Normalize',
                    mean=[123.675, 116.28, 103.53],
                    std=[1, 1, 1],
                    to_rgb=True),
                dict(type='DefaultFormatBundle'),
                dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
            ]),
        data_root='/content/train/',
        ann_file='xBD_train.json',
        img_prefix='images'),
    val=dict(
        type='DisasterDataset',
        ann_file='xBD_train.json',
        img_prefix='images',
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(
                type='MultiScaleFlipAug',
                img_scale=(300, 300),
                flip=False,
                transforms=[
                    dict(type='Resize', keep_ratio=False),
                    dict(
                        type='Normalize',
                        mean=[123.675, 116.28, 103.53],
                        std=[1, 1, 1],
                        to_rgb=True),
                    dict(type='ImageToTensor', keys=['img']),
                    dict(type='Collect', keys=['img'])
                ])
        ],
        data_root='/content/train/'),
    test=dict(
        type='DisasterDataset',
        ann_file='xBD_test.json',
        img_prefix='images',
        pipeline=[
            dict(type='LoadImageFromFile'),
            dict(
                type='MultiScaleFlipAug',
                img_scale=(300, 300),
                flip=False,
                transforms=[
                    dict(type='Resize', keep_ratio=False),
                    dict(
                        type='Normalize',
                        mean=[123.675, 116.28, 103.53],
                        std=[1, 1, 1],
                        to_rgb=True),
                    dict(type='ImageToTensor', keys=['img']),
                    dict(type='Collect', keys=['img'])
                ])
        ],
        data_root='/content/test/'))
evaluation = dict(interval=10, metric=['bbox'])
optimizer = dict(type='Adam', lr=0.0001, weight_decay=0.0001)
optimizer_config = dict()
lr_config = dict(
    policy='step',
    warmup=None,
    warmup_iters=500,
    warmup_ratio=0.001,
    step=[16, 22])
runner = dict(type='EpochBasedRunner', max_epochs=30)
checkpoint_config = dict(interval=10)
log_config = dict(
    interval=10,
    hooks=[
        dict(type='TextLoggerHook', interval=10),
        dict(
            type='WandbLoggerHook',
            interval=1,
            init_kwargs=dict(project='xBD', name='test'))
    ])
custom_hooks = [
    dict(type='NumClassCheckHook'),
    dict(type='CheckInvalidLossHook', interval=50, priority='VERY_LOW')
]
dist_params = dict(backend='nccl')
log_level = 'INFO'
load_from = '/content/mmdetection/checkpoints/mask_rcnn_r101_fpn_1x_coco_20200204-1efe0ed5.pth'
resume_from = None
workflow = [('train', 1)]
opencv_num_threads = 0
mp_start_method = 'fork'
auto_scale_lr = dict(enable=False, base_batch_size=64)
work_dir = '/content/drive/MyDrive/xBD/log_task1'
seed = 0
gpu_ids = range(0, 1)
device = 'cuda'

 

 

 

tensorflow python 머신러닝 배워볼래요? keras 딥러닝 컴퓨터-비전

답변 1

0

권 철민

안녕하십니까,

이게 먹힐지 모르겠군요.  아래와 같이 cfg를 dictionary 형태로 삭제해 보시지요. 

del cfg['data']['train']['times']

 

이게 안먹히면 

mmdetection/configs/ssd/ssd300_coco.py 가 있습니다. 여기서 52 라인에 times가 있습니다. 이걸 주석 처리 하시지요.  주석 처리후 커널을 재 기동해야(런타임 다시시작) 할 것 같습니다. 

감사합니다. 

 

MMDetection 버전 이슈

0

50

2

강의 환경설정 질문

0

61

2

Custom Dataset에서의 polygon 정보 관련

0

109

3

cvat.ai 보안 수준이 궁금합니다

0

97

2

캐클 nucleus 챌린지 runpod 실습 코드 에러 질문드립니다.

0

119

3

추론 결과의 Precision(또는 mAP) 평가 방법

0

93

2

mmdetection mask rcnn inferenct 실습 시 runpod 템플릿 관해서 질문드립니다.

0

67

2

runpod에서 google drive 연결 시 오류 발생

0

125

2

로드맵 선택

0

73

1

mmcv

0

65

2

Anchor box의 Positive 처리 위치

0

70

2

해당 강의 runpod 적용 후 에러 제보드립니다

0

95

2

run pod credit 관련 제보

0

121

2

mmdetection 2.x과 3.x 호환 관련 표기

0

87

2

mm_faster_rcnn_train_kitti.ipynb 실행 오류

0

112

3

질문 드립니다.

0

88

3

mm_faster_rcnn_train_coco_bccd 실행 오류 질문드립니다.

0

87

1

강사님께 수정을 제안드리고 싶은 것이 있습니다.

0

101

1

google automl efficientdet 다운로드 및 설치 오류

0

87

1

이상 탐지에 사용할 비전 기술 조언 부탁드립니다.

0

110

2

OpenCV 관련 질문드립니다.

0

86

2

mmcv 설치관련해서 문의드려요

0

352

3

강의 구성 관련해서 질문이 있습니다

1

140

2

모델 변환 성능 질문드립니다.

0

125

1