question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Core Adumpted - when training on my own dataset (VOC format)

See original GitHub issue

When I start to train faster-rcnn-r50 on my own dataset, there’s a problem I cannot figure out.

I defined my own data set type and initialized it.

from .registry import DATASETS
from .xml_style import XMLDataset


@DATASETS.register_module
class HRRSDDataset(XMLDataset):

    CLASSES = ('ship', 'bridge', 'ground track field', 'storage tank',
               'basketball court', 'tennis court', 'airplane', 'baseball diamond',
               'harbor', 'vehicle', 'crossroad', 'T junction', 'parking lot')

    def __init__(self, **kwargs):
        super(HRRSDDataset, self).__init__(**kwargs)
        self.year = 2007

My configurations:

# model settings
model = dict(
    type='FasterRCNN',
    pretrained='torchvision://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=[8],
        anchor_ratios=[0.5, 1.0, 2.0],
        anchor_strides=[4, 8, 16, 32, 64],
        target_means=[.0, .0, .0, .0],
        target_stds=[1.0, 1.0, 1.0, 1.0],
        loss_cls=dict(
            type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),
        loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)),
    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=14,
        target_means=[0., 0., 0., 0.],
        target_stds=[0.1, 0.1, 0.2, 0.2],
        reg_class_agnostic=False,
        loss_cls=dict(
            type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
        loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)))
# 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,
        debug=False),
    rpn_proposal=dict(
        nms_across_levels=False,
        nms_pre=2000,
        nms_post=2000,
        max_num=2000,
        nms_thr=0.7,
        min_bbox_size=0),
    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=512,
            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=1000,
        nms_post=1000,
        max_num=1000,
        nms_thr=0.7,
        min_bbox_size=0),
    rcnn=dict(
        score_thr=0.05, nms=dict(type='nms', iou_thr=0.5), max_per_img=100)
    # 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 = 'HRRSDDataset'
data_root = 'data/VOCdevkit/HRRSD/'
img_norm_cfg = dict(
    mean=[91.55, 92.79, 85.09], std=[54.28, 52.65, 51.91], to_rgb=True)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', with_bbox=True),
    dict(type='Resize', img_scale=(1333, 800), keep_ratio=True),
    dict(type='RandomFlip', flip_ratio=0.5),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size_divisor=32),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels']),
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(1333, 800),
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='Pad', size_divisor=32),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img']),
        ])
]
data = dict(
    imgs_per_gpu=2,
    workers_per_gpu=2,
    train=dict(
        type=dataset_type,
        ann_file=data_root + 'ImageSets/Main/train.txt',
        img_prefix=data_root,
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        ann_file=data_root + 'ImageSets/Main/val.txt',
        img_prefix=data_root,
        pipeline=test_pipeline),
    test=dict(
        type=dataset_type,
        ann_file=data_root + 'ImageSets/Main/val.txt',
        img_prefix=data_root,
        pipeline=test_pipeline))
# optimizer
optimizer = dict(type='SGD', lr=0.02, 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',
    warmup='linear',
    warmup_iters=500,
    warmup_ratio=1.0 / 3,
    step=[8, 11])
checkpoint_config = dict(interval=1)
# yapf:disable
log_config = dict(
    interval=50,
    hooks=[
        dict(type='TextLoggerHook'),
        # dict(type='TensorboardLoggerHook')
    ])
# yapf:enable
# runtime settings
total_epochs = 12
dist_params = dict(backend='nccl')
log_level = 'INFO'
work_dir = './work_dirs/faster_rcnn_r50_fpn_1x--hrrsd'
load_from = None # 'checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth' #
resume_from = None
workflow = [('train', 1)]

Finally when I try to start training, I got:

(open-mmlab) [user3@~/CODE/mmdetection]$python tools/train.py configs/collin/faster_rcnn_r50_fpn_1x--hrrsd.py
2019-09-28 17:41:35,810 - INFO - Distributed training: False
2019-09-28 17:41:36,405 - INFO - load model from: torchvision://resnet50
2019-09-28 17:41:36,893 - WARNING - The model and loaded state dict do not match exactly

unexpected key in source state_dict: fc.weight, fc.bias

2019-09-28 17:41:43,913 - INFO - Start running, host: user3@optimal6, work_dir: /home/user3/CODE/mmdetection/work_dirs/faster_rcnn_r50_fpn_1x--hrrsd
2019-09-28 17:41:43,913 - INFO - workflow: [('train', 1)], max: 12 epochs
段错误 (核心已转储)

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:9

github_iconTop GitHub Comments

4reactions
CrazyStoneonRoadcommented, Sep 30, 2019

This error is because of gcc version. I finally upgraded gcc to 5.4 and g++ to 5.5. After that, I removed the old mmdetection folder, and unzip a new one, then python setup.py develop.
Then I repeated what have been done before, and it started running.

0reactions
CrazyStoneonRoadcommented, Oct 24, 2019

I’m sorry, but I don’t think we have the same problem.

My running returned Segment error (core dumped) after several seconds.

But I still suggest you to check your g++ installation. (not gcc ! )

Read more comments on GitHub >

github_iconTop Results From Across the Web

Object Detection Training — Preparing your custom dataset
Object Detection Training — Preparing your custom dataset. Tutorial on annotating your custom image dataset in the Pascal VOC format.
Read more >
COCO and Pascal VOC data format for Object detection
In Pascal VOC we create a file for each of the image in the dataset. In COCO we have one file each, for...
Read more >
Tutorial 2: Customize Datasets - MMDetection's documentation!
Reorganize new data formats to existing format. The simplest way is to convert your dataset to existing dataset formats (COCO or PASCAL VOC)....
Read more >
Train Tensorflow Object Detection on own dataset
This answer is not meant to be the right or only way of training the object detection module. ... Create your own PASCAL...
Read more >
Bounding boxes augmentation for object detection
pascal_voc is a format used by the Pascal VOC dataset. Coordinates of a bounding box are encoded with four values in pixels: [x_min,...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found