




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第详解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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 危险化学品仓储安全管理规范汇编
- 中小企业品牌推广方案设计思路
- (2025年标准)不流产协议书
- 2025年智能家居酒店式公寓租赁合同续租服务协议书
- 2025年度学校食堂运营保密管理协议
- 2025年度建筑工地职业病防护及安全隐患治理合作协议
- 软骨再生机制研究-洞察及研究
- 2025年度艺术画廊运营租赁担保协议:艺术空间租赁合同
- 2025年度智能化办公楼清洁维护及突发事件应急处理服务合同
- 2025年智能家居系统定制安装服务合同标准范本
- 水稻植保无人机服务协议
- 读后续写体育竞技个人成长课件高三英语二轮复习
- 箱式变电站技术规范书
- 有轨电车交通工程设施设计规范
- 施工安全村民告知书
- 快速入门穿越机-让你迅速懂穿越机
- 广州南方学院(原中山大学南方学院)学校办公室新闻宣传中心新闻管理岗招聘公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 儿童呼吸机基本使用
- 起重机械安全日管控、周排查、月调度制度
- 派出所民警心理健康辅导
- 民事诉讼法课件
评论
0/150
提交评论