From 1f24dc740c38c291ad72e0f58cd743a9d16c2450 Mon Sep 17 00:00:00 2001 From: cyx Date: Thu, 16 Feb 2023 17:08:52 +0800 Subject: [PATCH] update for inference --- configs/AD_mlops/AD_mlops_test18.py | 130 +++++++++++++------------- configs/atss/atss_r101_fpn_1x_coco.py | 64 ++++++++++++- tools/train.py | 6 +- transformer/postprocess.py | 25 +++-- 4 files changed, 145 insertions(+), 80 deletions(-) diff --git a/configs/AD_mlops/AD_mlops_test18.py b/configs/AD_mlops/AD_mlops_test18.py index 7f5ceaf..a38a959 100644 --- a/configs/AD_mlops/AD_mlops_test18.py +++ b/configs/AD_mlops/AD_mlops_test18.py @@ -1,5 +1,5 @@ _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) model = dict( @@ -61,71 +61,71 @@ model = dict( nms=dict(type='nms', iou_threshold=0.6), 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 = 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) 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) diff --git a/configs/atss/atss_r101_fpn_1x_coco.py b/configs/atss/atss_r101_fpn_1x_coco.py index 5225d2a..2335ea6 100644 --- a/configs/atss/atss_r101_fpn_1x_coco.py +++ b/configs/atss/atss_r101_fpn_1x_coco.py @@ -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( + type='ATSS', backbone=dict( + type='ResNeXt', 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) diff --git a/tools/train.py b/tools/train.py index 296d913..d910d5d 100644 --- a/tools/train.py +++ b/tools/train.py @@ -399,8 +399,8 @@ def main(): #if on platform, change the classnum fit the user define dataset if args.data_path is not None: 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.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(): 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.test.classes = cfg.classes diff --git a/transformer/postprocess.py b/transformer/postprocess.py index d68e7b1..7a3c0c4 100644 --- a/transformer/postprocess.py +++ b/transformer/postprocess.py @@ -81,7 +81,14 @@ class Filter: def filter(self, inputs, meta_list): 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): + pred = Predict() + if len(labels) == 0: + result = Any() + result.Pack(pred, pred.DESCRIPTOR.file.package) + results.append([result.SerializeToString()]) + continue + meta['result'] = 'OK' meta['score'] = 0 @@ -104,18 +111,18 @@ class Filter: 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']['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.Pack(pred, pred.DESCRIPTOR.file.package)