customize_transforms.md 1.5 KB

Customize Data Pipelines

  1. Write a new transform in a file, e.g., in my_pipeline.py. It takes a dict as input and returns a dict.

    import random
    from mmcv.transforms import BaseTransform
    from mmdet.registry import TRANSFORMS
    
    
    @TRANSFORMS.register_module()
    class MyTransform(BaseTransform):
       """Add your transform
    
       Args:
           p (float): Probability of shifts. Default 0.5.
       """
    
       def __init__(self, prob=0.5):
           self.prob = prob
    
       def transform(self, results):
           if random.random() > self.prob:
               results['dummy'] = True
           return results
    
  2. Import and use the pipeline in your config file. Make sure the import is relative to where your train script is located.

    custom_imports = dict(imports=['path.to.my_pipeline'], allow_failed_imports=False)
    
    train_pipeline = [
       dict(type='LoadImageFromFile'),
       dict(type='LoadAnnotations', with_bbox=True),
       dict(type='Resize', scale=(1333, 800), keep_ratio=True),
       dict(type='RandomFlip', prob=0.5),
       dict(type='MyTransform', prob=0.2),
       dict(type='PackDetInputs')
    ]
    
  3. Visualize the output of your transforms pipeline

To visualize the output of your transforms pipeline, tools/misc/browse_dataset.py can help the user to browse a detection dataset (both images and bounding box annotations) visually, or save the image to a designated directory. More details can refer to visualization documentation