Core Adumpted - when training on my own dataset (VOC format)
See original GitHub issueWhen 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:
- Created 4 years ago
- Comments:9
Top 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 >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
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.
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 ! )