mmpose管道pipelines

train_pipeline = [
    dict(type='LoadImage', backend_args=backend_args),
    dict(type='GetBBoxCenterScale'),
    dict(type='RandomFlip', direction='horizontal'),
    dict(type='RandomHalfBody'),
    dict(
        type='RandomBBoxTransform', scale_factor=[0.5, 1.5], rotate_factor=90),
    dict(type='TopdownAffine', input_size=codec['input_size']),
    dict(type='PhotometricDistortion'),
    dict(
        type='Albumentation',
        transforms=[
            dict(type='Blur', p=0.1),
            dict(type='MedianBlur', p=0.1),
            dict(
                type='CoarseDropout',
                max_holes=1,
                max_height=0.4,
                max_width=0.4,
                min_holes=1,
                min_height=0.2,
                min_width=0.2,
                p=1.0),
        ]),
    dict(
        type='GenerateTarget',
        encoder=codec,
        use_dataset_keypoint_weights=True),
    dict(type='PackPoseInputs')
]
val_pipeline = [
    dict(type='LoadImage', backend_args=backend_args),
    dict(type='GetBBoxCenterScale'),
    dict(type='TopdownAffine', input_size=codec['input_size']),
    dict(type='PackPoseInputs')
]

配置文件里面的代码是用来定义训练和验证时的数据处理流程(pipeline)的。每个流程是由一系列的字典(dict)组成的列表(list),每个字典表示一个数据处理的操作(operation)。每个操作都有一个类型(type)和一些参数(args)。下面我简单地解释一下你给出的代码中的每个操作的作用:

  • LoadImage:加载图像文件,可以指定后端(backend)为cv2pillow
  • GetBBoxCenterScale:根据人体边界框(bounding box)计算中心点(center)和缩放比例(scale)。
  • RandomFlip:随机地水平翻转图像和关键点,可以指定翻转的概率(prob)和翻转的方向(direction)。
  • RandomHalfBody:随机地选择一半的人体进行姿态估计,可以提高模型对遮挡和截断情况的鲁棒性,可以指定选择半身的概率(prob)和最小人体数量(num_joints_half_body)。
  • RandomBBoxTransform:随机地对人体边界框进行缩放和旋转,可以提高模型对不同尺度和角度的适应性,可以指定缩放因子(scale_factor)和旋转因子(rotate_factor)。
  • TopdownAffine:根据中心点和缩放比例对图像进行仿射变换,使得人体位于图像中心,并且有固定的大小,可以指定输入图像的尺寸(input_size)和输出图像的尺寸(output_size)。
  • PhotometricDistortion:对图像进行光学畸变,包括亮度、对比度、饱和度、色调等,可以提高模型对不同光照条件的鲁棒性,可以指定各种畸变的范围(brightness_delta, contrast_range, saturation_range, hue_delta)。
  • Albumentation:使用[Albumentations]库提供的一些数据增强方法,例如模糊(Blur)、中值滤波(MedianBlur)、粗粒噪声(CoarseDropout)等,可以提高模型对不同图像质量的鲁棒性,可以指定各种增强方法的类型(type)、概率(p)和参数。
  • GenerateTarget:根据关键点生成目标张量(tensor),用于训练神经网络,可以指定编码器(encoder)、是否使用数据集提供的关键点权重(use_dataset_keypoint_weights)、是否使用高斯核函数来平滑关键点分布(use_gaussian_kernel_function)、是否使用高斯混合模型来表示多模态分布(use_gaussian_mixture_model)等。
  • PackPoseInputs:将处理后的图像和目标张量打包成一个字典,用于输入神经网络。

猜你喜欢

转载自blog.csdn.net/u010087338/article/details/132837802