_base_ = './yolov8_s_syncbn_fast_8xb16-500e_coco.py' # This config will refine bbox by mask while loading annotations and # transforming after `YOLOv5RandomAffine` # ========================modified parameters====================== use_mask2refine = True min_area_ratio = 0.01 # YOLOv5RandomAffine # ===============================Unmodified in most cases==================== pre_transform = [ dict(type='LoadImageFromFile', backend_args=_base_.backend_args), dict( type='LoadAnnotations', with_bbox=True, with_mask=True, mask2bbox=use_mask2refine) ] last_transform = [ # Delete gt_masks to avoid more computation dict(type='RemoveDataElement', keys=['gt_masks']), dict( type='mmdet.Albu', transforms=_base_.albu_train_transforms, bbox_params=dict( type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']), keymap={ 'img': 'image', 'gt_bboxes': 'bboxes' }), dict(type='YOLOv5HSVRandomAug'), dict(type='mmdet.RandomFlip', prob=0.5), dict( type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')) ] train_pipeline = [ *pre_transform, dict( type='Mosaic', img_scale=_base_.img_scale, pad_val=114.0, pre_transform=pre_transform), dict( type='YOLOv5RandomAffine', max_rotate_degree=0.0, max_shear_degree=0.0, scaling_ratio_range=(1 - _base_.affine_scale, 1 + _base_.affine_scale), max_aspect_ratio=_base_.max_aspect_ratio, # img_scale is (width, height) border=(-_base_.img_scale[0] // 2, -_base_.img_scale[1] // 2), border_val=(114, 114, 114), min_area_ratio=min_area_ratio, use_mask_refine=use_mask2refine), *last_transform ] train_pipeline_stage2 = [ *pre_transform, dict(type='YOLOv5KeepRatioResize', scale=_base_.img_scale), dict( type='LetterResize', scale=_base_.img_scale, allow_scale_up=True, pad_val=dict(img=114.0)), dict( type='YOLOv5RandomAffine', max_rotate_degree=0.0, max_shear_degree=0.0, scaling_ratio_range=(1 - _base_.affine_scale, 1 + _base_.affine_scale), max_aspect_ratio=_base_.max_aspect_ratio, border_val=(114, 114, 114), min_area_ratio=min_area_ratio, use_mask_refine=use_mask2refine), *last_transform ] train_dataloader = dict(dataset=dict(pipeline=train_pipeline)) _base_.custom_hooks[1].switch_pipeline = train_pipeline_stage2