使用pytorch利用albumentation库进行数据增强处理操作

废话不多话,直接上代码直接实操!!!

import cv2
from skimage.transform import AffineTransform, warp
import numpy as np
import skimage.io
import albumentations as A
from albumentations.core.transforms_interface import DualTransform
from albumentations.augmentations import functional as AF

def resize(image, size=(128, 128)):
    return cv2.resize(image, size)


def add_gaussian_noise(x, sigma):
    x += np.random.randn(*x.shape) * sigma
    x = np.clip(x, 0., 1.)
    return x


def _evaluate_ratio(ratio):
    if ratio <= 0.:
        return False
    return np.random.uniform() < ratio


def apply_aug(aug, image, mask=None):
    if mask is None:
        return aug(image=image)['image']
    else:
        augment = aug(image=image,mask=mask)
        return augment['image'],augment['mask']


class Transform:
    def __init__(self,  size=None, train=True,
                 BrightContrast_ration=0.,  noise_ratio=0., cutout_ratio=0.,
                 grid_distortion_ratio=0., elastic_distortion_ratio=0., 
                 piece_affine_ratio=0., ssr_ratio=0.,Rotate_ratio=0.,Flip_ratio=0.):
        self.size = size
        self.train = train
        self.noise_ratio = noise_ratio
        self.BrightContrast_ration = BrightContrast_ration
        self.cutout_ratio = cutout_ratio
        self.grid_distortion_ratio = grid_distortion_ratio
        self.elastic_distortion_ratio = elastic_distortion_ratio
        self.piece_affine_ratio = piece_affine_ratio
        self.ssr_ratio = ssr_ratio
        self.Rotate_ratio = Rotate_ratio
        self.Flip_ratio = Flip_ratio

        
    def __call__(self, example):
        if self.train:
            x, y = example
        else:
            x = example
        # --- Augmentation ---
        # --- Train/Test common preprocessing ---

        if self.size is not None:
            x = resize(x, size=self.size)

        # albumentations...
        
        # # 1. blur
        if _evaluate_ratio(self.BrightContrast_ration):
                x = apply_aug(A.RandomBrightnessContrast(p=1.0), x)
        #
        if _evaluate_ratio(self.noise_ratio):
            r = np.random.uniform()
            if r < 0.50:
                x = apply_aug(A.GaussNoise(var_limit=5. / 255., p=1.0), x)
            else:
                x = apply_aug(A.MultiplicativeNoise(p=1.0), x)
        
        # if _evaluate_ratio(self.cutout_ratio):
        #     # A.Cutout(num_holes=2,  max_h_size=2, max_w_size=2, p=1.0)  # Deprecated...
        #     x = apply_aug(A.CoarseDropout(max_holes=8, max_height=8, max_width=8, p=1.0), x)
        #
        if _evaluate_ratio(self.grid_distortion_ratio):
             x,y = apply_aug(A.GridDistortion(p=1.0), x,y)
        #
        if _evaluate_ratio(self.elastic_distortion_ratio):
             x,y = apply_aug(A.ElasticTransform(
                 sigma=50, alpha=1,  p=1.0), x,y)
        #
        if _evaluate_ratio(self.Rotate_ratio):
            x,y = apply_aug(A.Rotate(p=1.0),x,y)
        
        if _evaluate_ratio(self.Flip_ratio):
            x,y = apply_aug(A.Flip(p=1.0),x,y)
            
            
            
        # if _evaluate_ratio(self.piece_affine_ratio):
        #     x = apply_aug(A.IAAPiecewiseAffine(p=1.0), x)
        #
#         if _evaluate_ratio(self.ssr_ratio):
#             x = apply_aug(A.ShiftScaleRotate(
#                 shift_limit=0.0625,
#                 scale_limit=0.1,
#                 rotate_limit=30,
#                 p=1.0), x)
        if self.train:
            #y = y.astype(np.int64)
            return x, y
        else:
            return x
      
if __name__ == '__main__':
      import matplotlib.pyplot as plt
      from tqdm import tqdm 
      f, ax = plt.subplots(3,3, figsize=(16,18))
      img = skimage.io.imread('/home/ubuntu/Pictures/timg.jpeg')
      transform = Transform(affine=False,train=False,Flip_ratio=0.8)
      for i in tqdm(range(9)):
            aug_img = transform(img)
            ax[i//3,i%3].imshow(aug_img)
            #ax[i//3, i%3].set_title(f'aug_method:{infor}')
      plt.show()
      

相关csdn学习链接https://blog.csdn.net/zhangyuexiang123/article/details/107705311

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
D:\anaconda\envs\pytorch\python.exe C:\Users\23896\Desktop\bev-lane-det_dachaung-master\tools\train_openlane.py Traceback (most recent call last): File "C:\Users\23896\Desktop\bev-lane-det_dachaung-master\tools\train_openlane.py", line 6, in <module> from tools.val_openlane import PostProcessDataset File "C:\Users\23896\Desktop\bev-lane-det_dachaung-master\tools\val_openlane.py", line 23, in <module> configs = load_config_module(config_file) File "C:\Users\23896\Desktop\bev-lane-det_dachaung-master\utils\config_util.py", line 7, in load_config_module spec.loader.exec_module(configs) File "./openlane_config.py", line 1, in <module> import albumentations as A File "D:\anaconda\envs\pytorch\lib\site-packages\albumentations\__init__.py", line 5, in <module> from .core.composition import * File "D:\anaconda\envs\pytorch\lib\site-packages\albumentations\core\composition.py", line 8, in <module> from albumentations.augmentations.keypoints_utils import KeypointsProcessor File "D:\anaconda\envs\pytorch\lib\site-packages\albumentations\augmentations\__init__.py", line 4, in <module> from .functional import * File "D:\anaconda\envs\pytorch\lib\site-packages\albumentations\augmentations\functional.py", line 9, in <module> import skimage File "D:\anaconda\envs\pytorch\lib\site-packages\skimage\__init__.py", line 122, in <module> from ._shared import geometry File "geometry.pyx", line 1, in init skimage._shared.geometry ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject哪个包和numpy版本不兼容
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子私房菜

给小强一点爱心呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值