详解Python中数据处理的方法总结及实现_第1页
详解Python中数据处理的方法总结及实现_第2页
详解Python中数据处理的方法总结及实现_第3页
详解Python中数据处理的方法总结及实现_第4页
详解Python中数据处理的方法总结及实现_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第详解Python中数据处理的方法总结及实现目录背景常用数据增强方法1、Compose2、RandomHflip3、RandomVflip4、RandomCrop5、Normalize6、Rotate7、RandomRotate8、Resize其他数据增强方法1、中心裁剪2、随机亮度增强3、随机对比度增强4、随机饱和度增强5、边界扩充拓展

背景

数据增强作为前处理的关键步骤,在整个计算机视觉中有着具足轻重的地位;

数据增强往往是决定数据集质量的关键,主要用于数据增广,在基于深度学习的任务中,数据的多样性和数量往往能够决定模型的上限;

本次记录主要是对数据增强中一些方法的源码实现;

常用数据增强方法

首先如果是使用Pytorch框架,其内部的torchvision已经包装好了数据增强的很多方法;

fromtorchvisionimporttransforms

data_aug=transforms.Compose[

transforms.Resize(size=240),

transforms.RandomHorizontalFlip(0.5),

transforms.ToTensor()

接下来自己实现一些主要的方法;

常见的数据增强方法有:Compose、RandomHflip、RandomVflip、Reszie、RandomCrop、Normalize、Rotate、RandomRotate

1、Compose

作用:对多个方法的排序整合,并且依次调用;

#排序(compose)

classCompose(object):

def__init__(self,transforms):

self.transforms=transforms

def__call__(self,img):

fortinself.transforms:

img=t(img)#通过循环不断调用列表中的方法

returnimg

2、RandomHflip

作用:随机水平翻转;

#随机水平翻转(randomhflip)

classRandomHflip(object):

def__call__(self,image):

ifrandom.randint(2):

returncv2.flip(image,1)

else:

returnimage

通过随机数0或1,实现对图像可能反转或不翻转;

3、RandomVflip

作用:随机垂直翻转

classRandomVflip(object):

def__call__(self,image):

ifrandom.randint(2):

returncv2.flip(image,0)

else:

returnimage

4、RandomCrop

作用:随机裁剪;

#缩放(scale)

defscale_down(src_size,size):

w,h=size

sw,sh=src_size

ifshh:

w,h=float(w*sh)/h,sh

ifsww:

w,h=sw,float(h*sw)/w

returnint(w),int(h)

#固定裁剪(fixedcrop)

deffixed_crop(src,x0,y0,w,h,size=None):

out=src[y0:y0+h,x0:x0+w]

ifsizeisnotNoneand(w,h)!=size:

out=cv2.resize(out,(size[0],size[1]),interpolation=cv2.INTER_CUBIC)

returnout

#随机裁剪(randomcrop)

classRandomCrop(object):

def__init__(self,size):

self.size=size

def__call__(self,image):

h,w,_=image.shape

new_w,new_h=scale_down((w,h),self.size)

ifw==new_w:

x0=0

else:

x0=random.randint(0,w-new_w)

ifh==new_h:

y0=0

else:

y0=random.randint(0,h-new_h)

​​​​​​​out=fixed_crop(image,x0,y0,new_w,new_h,self.size)

returnout

5、Normalize

作用:对图像数据进行正则化,也就是减均值除方差的作用;

#正则化(normalize)

classNormalize(object):

def__init__(self,mean,std):

:parammean:RGBorder

:paramstd:RGBorder

self.mean=np.array(mean).reshape(3,1,1)

self.std=np.array(std).reshape(3,1,1)

def__call__(self,image):

:paramimage:(H,W,3)RGB

:return:

return(image.transpose((2,0,1))/255.-self.mean)/self.std

6、Rotate

作用:对图像进行旋转;

#旋转(rotate)

defrotate_nobound(image,angle,center=None,scale=1.):

(h,w)=image.shape[:2]

#ifthecenterisNone,initializeitasthecenteroftheimage

ifcenterisNone:

center=(w//2,h//2)#performtherotation

M=cv2.getRotationMatrix2D(center,angle,scale)#这里是实现得到旋转矩阵

rotated=cv2.warpAffine(image,M,(w,h))#通过矩阵进行仿射变换

returnrotated

7、RandomRotate

作用:随机旋转,广泛适用于图像增强;

#随机旋转(randomrotate)

classFixRandomRotate(object):

#这里的随机旋转是指在0、90、180、270四个角度下的

def__init__(self,angles=[0,90,180,270],bound=False):

self.angles=angles

self.bound=bound

def__call__(self,img):

do_rotate=random.randint(0,4)

angle=self.angles[do_rotate]

ifself.bound:

img=rotate_bound(img,angle)

else:

img=rotate_nobound(img,angle)

returnimg

8、Resize

作用:实现缩放;

#大小重置(resize)

classResize(object):

def__init__(self,size,inter=cv2.INTER_CUBIC):

self.size=size

er=inter

def__call__(self,image):

returncv2.resize(image,(self.size[0],self.size[0]),interpolation=er)

其他数据增强方法

其他一些数据增强的方法大部分是特殊的裁剪;

1、中心裁剪

#中心裁剪(centercrop)

defcenter_crop(src,size):

h,w=src.shape[0:2]

new_w,new_h=scale_down((w,h),size)

x0=int((w-new_w)/2)

y0=int((h-new_h)/2)

out=fixed_crop(src,x0,y0,new_w,new_h,size)

returnout

2、随机亮度增强

#随机亮度增强(randombrightness)

classRandomBrightness(object):

def__init__(self,delta=10):

assertdelta=0

assertdelta=255

self.delta=delta

def__call__(self,image):

ifrandom.randint(2):

delta=random.uniform(-self.delta,self.delta)

image=(image+delta).clip(0.0,255.0)

#print('RandomBrightness,delta',delta)

returnimage

3、随机对比度增强

#随机对比度增强(randomcontrast)

classRandomContrast(object):

def__init__(self,lower=0.9,upper=1.05):

self.lower=lower

self.upper=upper

assertself.upper=self.lower,"contrastuppermustbe=lower."

assertself.lower=0,"contrastlowermustbenon-negative."

#expectsfloatimage

def__call__(self,image):

ifrandom.randint(2):

alpha=random.uniform(self.lower,self.upper)

#print('contrast:',alpha)

image=(image*alpha).clip(0.0,255.0)

returnimage

4、随机饱和度增强

#随机饱和度增强(randomsaturation)

classRandomSaturation(object):

def__init__(self,lower=0.8,upper=1.2):

self.lower=lower

self.upper=upper

assertself.upper=self.lower,"contrastuppermustbe=lower."

assertself.lower=0,"contrastlowermustbenon-negative."

def__call__(self,image):

ifrandom.randint(2):

alpha=random.uniform(self.lower,self.upper)

image[:,:,1]*=alpha

#print('RandomSaturation,alpha',alpha)

returnimage

5、边界扩充

#边界扩充(expandborder)

classExpandBorder(object):

def__init__(self,mode='constant',value=255,size=(336,336),resize=False):

self.mode=mode

self.value=value

self.resize=resize

self.size=size

def__call__(self,image):

h,w,_=image.shape

ifhw:

pad1=(h-w)//2

pad2=h-w-pad1

ifself.mode=='constant':

image=np.pad(image,((0,0),(pad1,pad2),(0,0)),

self.mode,constant_values=self.value)

else:

image=np.pad(image,((0,0),(pad1,pad2),(0,0))

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论