@@ -1,5 +1,5 @@ | |||||
_base_ = [ | _base_ = [ | ||||
'../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' | |||||
'../_base_/schedules/schedule_1x.py', '../_base_/datasets/coco_detection.py', '../_base_/default_runtime.py' | |||||
] | ] | ||||
norm_cfg = dict(type='BN', requires_grad=True) | norm_cfg = dict(type='BN', requires_grad=True) | ||||
model = dict( | model = dict( | ||||
@@ -61,71 +61,71 @@ model = dict( | |||||
nms=dict(type='nms', iou_threshold=0.6), | nms=dict(type='nms', iou_threshold=0.6), | ||||
max_per_img=100)) | max_per_img=100)) | ||||
dataset_type = 'CocoDataset' | |||||
classes = ('yiwei','loujian','celi','libei','fantie','lianxi','duojian','shunjian','shaoxi','jiahan','yiwu') | |||||
#dataset_type = 'CocoDataset' | |||||
#classes = ('yiwei','loujian','celi','libei','fantie','lianxi','duojian','shunjian','shaoxi','jiahan','yiwu') | |||||
img_norm_cfg = dict( | |||||
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) | |||||
#img_norm_cfg = dict( | |||||
# mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) | |||||
train_pipeline = [ | |||||
dict(type='LoadImageFromFile'), | |||||
dict(type='LoadAnnotations', with_bbox=True), | |||||
dict( | |||||
type='Resize', | |||||
img_scale=[(512, 512), (640, 640)], | |||||
multiscale_mode='value', | |||||
keep_ratio=True), | |||||
dict(type='RandomFlip', flip_ratio=[0.2,0.2,0.2], direction=['horizontal', 'vertical', 'diagonal']), | |||||
dict(type='BrightnessTransform', level=5, prob=0.5), | |||||
dict(type='ContrastTransform', level=5, prob=0.5), | |||||
dict(type='RandomShift', shift_ratio=0.5), | |||||
dict(type='MinIoURandomCrop', min_ious=(0.5, 0.7, 0.9), min_crop_size=0.8), | |||||
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=[(640, 640)], | |||||
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']), | |||||
]) | |||||
] | |||||
#train_pipeline = [ | |||||
# dict(type='LoadImageFromFile'), | |||||
# dict(type='LoadAnnotations', with_bbox=True), | |||||
# dict( | |||||
# type='Resize', | |||||
# img_scale=[(512, 512), (640, 640)], | |||||
# multiscale_mode='value', | |||||
# keep_ratio=True), | |||||
# dict(type='RandomFlip', flip_ratio=[0.2,0.2,0.2], direction=['horizontal', 'vertical', 'diagonal']), | |||||
# dict(type='BrightnessTransform', level=5, prob=0.5), | |||||
# dict(type='ContrastTransform', level=5, prob=0.5), | |||||
# dict(type='RandomShift', shift_ratio=0.5), | |||||
# dict(type='MinIoURandomCrop', min_ious=(0.5, 0.7, 0.9), min_crop_size=0.8), | |||||
# 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=[(640, 640)], | |||||
# 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( | |||||
samples_per_gpu=4, | |||||
workers_per_gpu=2, | |||||
train=dict( | |||||
type='AD_ClassBalancedDataset', | |||||
dataset=dict( | |||||
type=dataset_type, | |||||
img_prefix='data/coco/train2017/', | |||||
classes=classes, | |||||
ann_file='data/coco/annotations/instances_train2017.json', | |||||
pipeline=train_pipeline, | |||||
), | |||||
oversample_thr = 1.0), | |||||
val=dict( | |||||
type=dataset_type, | |||||
img_prefix='data/coco/train2017/', | |||||
classes=classes, | |||||
ann_file='data/coco/annotations/instances_train2017.json', | |||||
pipeline=test_pipeline), | |||||
test=dict( | |||||
type=dataset_type, | |||||
img_prefix='data/coco/train2017/', | |||||
classes=classes, | |||||
ann_file='data/coco/annotations/instances_train2017.json', | |||||
pipeline=test_pipeline)) | |||||
#data = dict( | |||||
# samples_per_gpu=4, | |||||
# workers_per_gpu=2, | |||||
# train=dict( | |||||
# type='AD_ClassBalancedDataset', | |||||
# dataset=dict( | |||||
# type=dataset_type, | |||||
# img_prefix='data/coco/train2017/', | |||||
# classes=classes, | |||||
# ann_file='data/coco/annotations/instances_train2017.json', | |||||
# pipeline=train_pipeline, | |||||
# ), | |||||
# oversample_thr = 1.0), | |||||
# val=dict( | |||||
# type=dataset_type, | |||||
# img_prefix='data/coco/train2017/', | |||||
# classes=classes, | |||||
# ann_file='data/coco/annotations/instances_train2017.json', | |||||
# pipeline=test_pipeline), | |||||
# test=dict( | |||||
# type=dataset_type, | |||||
# img_prefix='data/coco/train2017/', | |||||
# classes=classes, | |||||
# ann_file='data/coco/annotations/instances_train2017.json', | |||||
# pipeline=test_pipeline)) | |||||
# optimizer | # optimizer | ||||
optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) | optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) | ||||
@@ -139,5 +139,5 @@ lr_config = dict( | |||||
min_lr_ratio=1e-5) | min_lr_ratio=1e-5) | ||||
runner = dict(type='EpochBasedRunner', max_epochs=20) | runner = dict(type='EpochBasedRunner', max_epochs=20) | ||||
evaluation = dict(interval=1, metric='bbox') | |||||
checkpoint_config = dict(interval=1) | |||||
evaluation = dict(interval=10, metric='bbox') | |||||
checkpoint_config = dict(interval=5) |
@@ -1,6 +1,64 @@ | |||||
_base_ = './atss_r50_fpn_1x_coco.py' | |||||
_base_ = [ | |||||
'../_base_/datasets/coco_detection.py', | |||||
'../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py' | |||||
] | |||||
model = dict( | model = dict( | ||||
type='ATSS', | |||||
backbone=dict( | backbone=dict( | ||||
type='ResNeXt', | |||||
depth=101, | depth=101, | ||||
init_cfg=dict(type='Pretrained', | |||||
checkpoint='torchvision://resnet101'))) | |||||
groups=64, | |||||
base_width=4, | |||||
num_stages=4, | |||||
out_indices=(0, 1, 2, 3), | |||||
frozen_stages=1, | |||||
norm_cfg=norm_cfg, | |||||
style='pytorch', | |||||
init_cfg=dict( | |||||
type='Pretrained', checkpoint='/tmp/code/code_test/resnext101_64x4d-ee2c6f71.pth')), | |||||
neck=dict( | |||||
type='FPN', | |||||
in_channels=[256, 512, 1024, 2048], | |||||
out_channels=256, | |||||
start_level=1, | |||||
add_extra_convs='on_output', | |||||
num_outs=5), | |||||
bbox_head=dict( | |||||
type='ATSSHead', | |||||
num_classes=80, | |||||
in_channels=256, | |||||
stacked_convs=4, | |||||
feat_channels=256, | |||||
anchor_generator=dict( | |||||
type='AnchorGenerator', | |||||
ratios=[1.0], | |||||
octave_base_scale=8, | |||||
scales_per_octave=1, | |||||
strides=[8, 16, 32, 64, 128]), | |||||
bbox_coder=dict( | |||||
type='DeltaXYWHBBoxCoder', | |||||
target_means=[.0, .0, .0, .0], | |||||
target_stds=[0.1, 0.1, 0.2, 0.2]), | |||||
loss_cls=dict( | |||||
type='FocalLoss', | |||||
use_sigmoid=True, | |||||
gamma=2.0, | |||||
alpha=0.25, | |||||
loss_weight=1.0), | |||||
loss_bbox=dict(type='GIoULoss', loss_weight=2.0), | |||||
loss_centerness=dict( | |||||
type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)), | |||||
# training and testing settings | |||||
train_cfg=dict( | |||||
assigner=dict(type='ATSSAssigner', topk=9), | |||||
allowed_border=-1, | |||||
pos_weight=-1, | |||||
debug=False), | |||||
test_cfg=dict( | |||||
nms_pre=1000, | |||||
min_bbox_size=0, | |||||
score_thr=0.05, | |||||
nms=dict(type='nms', iou_threshold=0.6), | |||||
max_per_img=100)) | |||||
# optimizer | |||||
optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001) |
@@ -399,8 +399,8 @@ def main(): | |||||
#if on platform, change the classnum fit the user define dataset | #if on platform, change the classnum fit the user define dataset | ||||
if args.data_path is not None: | if args.data_path is not None: | ||||
coco_config=COCO(os.path.join(args.data_path,"annotations/instances_annotations.json")) | coco_config=COCO(os.path.join(args.data_path,"annotations/instances_annotations.json")) | ||||
cfg.data.train.dataset.img_prefix = os.path.join(args.data_path,"images") | |||||
cfg.data.train.dataset.ann_file = os.path.join(args.data_path,"annotations/instances_annotations.json") | |||||
cfg.data.train.img_prefix = os.path.join(args.data_path,"images") | |||||
cfg.data.train.ann_file = os.path.join(args.data_path,"annotations/instances_annotations.json") | |||||
cfg.data.val.img_prefix = os.path.join(args.data_path,"images") | cfg.data.val.img_prefix = os.path.join(args.data_path,"images") | ||||
cfg.data.val.ann_file = os.path.join(args.data_path,"annotations/instances_annotations.json") | cfg.data.val.ann_file = os.path.join(args.data_path,"annotations/instances_annotations.json") | ||||
@@ -411,7 +411,7 @@ def main(): | |||||
for cat in coco_config.cats.values(): | for cat in coco_config.cats.values(): | ||||
cfg.classes = cfg.classes + tuple([cat['name']]) | cfg.classes = cfg.classes + tuple([cat['name']]) | ||||
cfg.data.train.dataset.classes = cfg.classes | |||||
cfg.data.train.classes = cfg.classes | |||||
cfg.data.val.classes = cfg.classes | cfg.data.val.classes = cfg.classes | ||||
cfg.data.test.classes = cfg.classes | cfg.data.test.classes = cfg.classes | ||||
@@ -81,7 +81,14 @@ class Filter: | |||||
def filter(self, inputs, meta_list): | def filter(self, inputs, meta_list): | ||||
results = [] | results = [] | ||||
for dets, labels, feature, det_features, det_lloss, meta in zip(inputs['dets'], inputs['labels'], inputs['feature'], inputs['entropy'], inputs['learning_loss'], meta_list): | for dets, labels, feature, det_features, det_lloss, meta in zip(inputs['dets'], inputs['labels'], inputs['feature'], inputs['entropy'], inputs['learning_loss'], meta_list): | ||||
pred = Predict() | pred = Predict() | ||||
if len(labels) == 0: | |||||
result = Any() | |||||
result.Pack(pred, pred.DESCRIPTOR.file.package) | |||||
results.append([result.SerializeToString()]) | |||||
continue | |||||
meta['result'] = 'OK' | meta['result'] = 'OK' | ||||
meta['score'] = 0 | meta['score'] = 0 | ||||
@@ -104,18 +111,18 @@ class Filter: | |||||
label_id=index) | label_id=index) | ||||
) | ) | ||||
scores = dets[:,4] | |||||
entropy_nms = get_entropy_by_enms(labels, scores, det_features) | |||||
#scores = dets[:,4] | |||||
#entropy_nms = get_entropy_by_enms(labels, scores, det_features) | |||||
learning_loss_nms = get_lloss_by_lnms(labels, det_lloss, det_features) | |||||
#learning_loss_nms = get_lloss_by_lnms(labels, det_lloss, det_features) | |||||
meta['attributes']={} | |||||
#meta['attributes']={} | |||||
#meta['attributes']['feature'] = feature.tolist() | #meta['attributes']['feature'] = feature.tolist() | ||||
meta['attributes']['entropy'] = float(entropy) | |||||
meta['attributes']['learning_loss'] = float(learning_loss) | |||||
meta['attributes']['entropy_nms'] = float(entropy_nms) | |||||
meta['attributes']['learning_loss_nms'] = float(learning_loss_nms) | |||||
meta['attributes']['distance'] = 0 | |||||
#meta['attributes']['entropy'] = float(entropy) | |||||
#meta['attributes']['learning_loss'] = float(learning_loss) | |||||
#meta['attributes']['entropy_nms'] = float(entropy_nms) | |||||
#meta['attributes']['learning_loss_nms'] = float(learning_loss_nms) | |||||
#meta['attributes']['distance'] = 0 | |||||
result = Any() | result = Any() | ||||
result.Pack(pred, pred.DESCRIPTOR.file.package) | result.Pack(pred, pred.DESCRIPTOR.file.package) | ||||