| @@ -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) | ||||