数据增广albumentations用法 -借例 hw3 食物分类-

previous work:

开启第三个作业 食物分类 ,

        有的人找不到数据集地址 放一个 :ml2021spring-hw3 | Kaggle

前言:

这个作业 每类带标签的数据很少, 然后又是可以看到的真实的图片,一般面对这种 ,我们都需要做数据增广。 所以着part1 我们就一起来探索数据增广的方式 。

先说说 我对数据增广的理解。众所周知,数据增广的方式有很多,然后我们该选哪种呢 ?好吧 我承认 我非常的想用autoaugment 但是那个需要高版本的torchvision   我等会装了再试试 。

        不过没用auto 我用的是albumentations  这个模块。听说这个模块很快  今天来试试吧! 不过这个albu真的很奇怪    需要像下面这样用。

train_trans = A.Compose([
    A.RandomResizedCrop(224,224),
])
        x = self.x[index]
        if self.transform != None:
            xT = self.transform(image=x)
        y = self.y[index]
        return  self.toTensor(xT['image']), y, x

增广实验 : 

一  :  随机裁剪并且resize 

A.RandomResizedCrop(224,224),   

下图左是原图  右边是裁剪  我我看了看 大概看9个 只有1个增广后分不清 有时候都能看清 所以这种增广还是不错的  。而且 考虑到 拍摄食物时 镜头远近 不一样 所以这种增广我觉得很合适这个数据集。 

二  :  放射变换 :

A.Affine()

这个小幅度的可以接受  但是大幅度的就会很离谱  出现一大片黑色 。 待定。

A.PiecewiseAffine()  这个是从中间放射  会变得挺奇怪 

 3 中心裁剪 

A.CenterCrop(180,180)

 这个是可以的  而且到时候可以取256 然后裁剪224  

 四 : 粗粒度丢弃 

A.CoarseDropout(8 ,8, 8)

我觉得不行   至少下面这个不行  这两个参数可以调整 黑洞的数量  长宽   其实小的还是可以接受的 

 五 裁剪 

可能有用 但是我不想手动指定 对不起    注意C大写 

A.Crop( 0,0,100,100)

 

 六: 裁剪并填充   还有其他裁剪 都很类似  

A.CropAndPad(px=100)  这个就是 缩小啊  不是裁剪  px是像素 也可以用比例   我觉得 这个  不太行  很少 有这种拍摄环境把 +
A.RandomCropNearBBox()   需要加一个 bbox 使用   应该取这个框里的 然后随机 变  
transform(image=x, cropping_bbox=[20,20, 80 ,80])

七 : 弹性变换 

A.ElasticTransform()

我觉得不行  不行 实在是太搞笑了  看那个鸡蛋  就是随机拉 然后复制  

八 翻转 

A.Flip()      就是随机翻转  上下翻转不是很适合这个数据集 有些东西没有倒过来放的道理  

所以 左右翻转比较好一点 。  :  A.HorizontalFlip()  左右翻转 大部分还跟原来差不多 。 

9 扭曲 :  

A.GridDistortion(distort_limit=0.6)
A.OpticalDistortion(distort_limit=0.5, p =1)
  其实还可以  扭曲程度低 一点可以接受  0.6的扭曲 还是可以看出来一个样子的  注意p是 0.5

 

10 保持比例resize  

A.LongestMaxSize(max_size=50, p =0.5)

很难看出来差别  但是也不好用 因为我们网络输入一般要固定  就是把最长边设为maxsize  然后resize

11  填充 

A.PadIfNeeded()   这啥 啊  好吧 就是对称填充  然后 如果边上少一点就可以这样  如果填充很多倍就是地毯。。。

12 : 透视法 

A.Perspective(scale=(0.5,0.6))   如果度数小了 没啥意义  大了  就看不出来东西了 会把视角放在 物体表面 

        

 14 旋转 

A.Rotate(( -45,45), p =1)   旋转  我觉得在一定角度内的旋转还可以  

------------------------------------------------------------------------------------------------------------------------------

像素变换

上面都是空间变换  下面我们看看 。 

1 模糊 

彻底弄懂高斯模糊,均值模糊和中值模糊_66Kevin的博客-CSDN博客_均值模糊

A.Blur(blur_limit=10,p =1)
     就是跟近视了一样  感觉实际工程中可能有用 有时候照片没拍好 就这样子 

 A.GlassBlur(p=1)    和                  A.GaussianBlur()

A.MedianBlur(p=1)  中值模糊  使用具有随机孔径线性大小的中值滤波器模糊输入图像

A.MotionBlur(p=1)   运动模糊  像一个运动中的物体  这个数据集不适合 。 人脸识别可能有用 

 2 对比度受限的自适应直方图均衡  啥啊 ?

        应该就是加一组 自适应直方图 他的对比度是受限的  如果把限制打到100 就很奇怪了  不过下面啥啊 恐怖片吗   其实可以尝试 因为拍摄的曝光不同的话 

 

 3 通道丢失 

A.ChannelDropout(p=1)    这个好啊  就是换了个光源嘛  下面这些东西 换个灯依然能看出是啥 

当然  除了那个黑咕隆咚的 

  通道转换  :

ChannelShuffle(p=1)  感觉跟上面那个差不多    但我拒绝  因为这个 真的很多 我都分不出来了 

 

4 Colorjitter

A.ColorJitter(p=1)  随机改变图像的亮度、对比度和饱和度   好吧 我不得不承认 像素变换这边都是一堆乱七八糟的  矮个里挑高个就成。 

 5 下采样 

A.Downscale(p=1)    这个必须可以   就是模糊一点 。 

 5 抽象画   (浮雕)

A.Emboss(alpha=(0.1, 1),p=1)  

抽象画是我自己起的名字  其实感觉就是 把一个东西  画出来一样 刻版  还可以 挺好看的 

 6 均衡化 

A.Equalize(p=1)   直方图均衡化 (Histogram Equalization) 就是把一个已知灰度概率密度分布的图像经过一种变换,使之演变为一幅具有均匀灰度概率密度分布的新图像。  说白了 就是图像像素分布均匀一点 不要有的地方很白 有的地方很黄    这个吧  我有点嫌恶心 再见 

7 图片借用 

用另外的图片 对数据进行增强  

target_image = cv2.imread('1.jpg')
A.FDA(reference_images=[target_image],p1,read_fn=lambda x: x)    FDA是一个小的风格迁移  但是 你这是咋迁的呀 .......

A.HistogramMatching(reference_images=[target_image],p=1,read_fn=lambda x: x)

直方图 均衡化 

A.PixelDistributionAdaptation([target_image],p=1, read_fn=lambda x:x)  

PCA一系列变换出的黑色料理 

8 抽特征PCA 

A.FancyPCA(p=1)

对于一张图 抽出主要特征  不是不可以 好吧 

 9 噪声 

高斯噪声 

A.GaussNoise((10,200.0),p=1)   下面图 我打乱了顺序 你能看出哪个是原图吗   还有高斯模糊 

   iso噪声  A.ISONoise(p=1)   有点像用相机去拍 ,  加个滤镜 

 

A.MultiplicativeNoise(p=1)

 乘性噪声   乘性噪声就是伴随信号的噪声 信号强 噪声就大 信号弱 噪声就小 

强者恒强  但抱歉 我喜欢的是 共同富裕  

我好讨厌空调啊  啊啊啊啊啊啊 为什么世界上有空调这种东西???????????????头痛死了 根本不想呆下去 。 

11: 图像压缩 

A.ImageCompression(quality_lower=20,p=1)  说实话 看不出来哪压缩了 

 

 12 翻转像素 

A.InvertImg(p=1)  听着就不靠谱好嘛   不过 我觉得吧 其实翻转和不反转 信息量都是一样的 也就是说 转了白转 对于一个网络 不过虽然信息量一样 但是对于不同图片还是不一样的 

        

 13 标准化   

A.Normalize (p=1)

这个 就不谈了 有时候 事情真的不能只看表象  就像这个标准化 明明把图片弄得人不人,鬼不鬼的  但是大家就是都在用  而且还都说效果好   我是理解不能 

 14 改像素位数 

A.Posterize(8,p=1)  反正是看不出啥 变化  想想也是 仅仅改变位数而已  

 15 切换 每个通道像素值 

 

A.RGBShift(p=1)  怎么了 输错了 是吗? 还要换换 
 
 

 16 随机自然现象 

下面是起雾了 能看出来吗  A.RandomFog(0.6,p=1)

 下面下雨啦    A.RandomRain(p=1)

下面有影子   :

A.RandomShadow(p=1)

 冬雪雪冬小大寒  :A.RandomSnow(p=1)

 ???? 谁开的远光灯啊   没素质   :随机太阳耀斑 

A.RandomSunFlare(p=1)

17 : 随机色调曲线 

A.RandomToneCurve(p=1)

 18 锐化 

锋利的剑 锐利的眼

A.Sharpen((1,1),p=1)

19 日化 

A.Solarize(p=1)

有点像红外 图 

20 超像素 

随机挑出一些幸运区域 被附近的平均像素替代  这个有点像那个马赛克 

A.Superpixels(p=1)

21 灰度

哦 我亲爱的 食物们 你们死的好惨啊 

A.ToGray(p=1)

22 棕褐色 

A.ToSepia(p=1)    是墨镜 我带了棕褐色的墨镜 

23  还有一些增强方式 我没更新到最新版本 所以就没有  

 我来回顾一下  我想用在食物分类这个数据集上的增强方式都有哪些呢 ?

train_trans = A.Compose([
    A.RandomResizedCrop(224,224),
    A.CenterCrop(224,224),
    A.CoarseDropout(8 ,8, 8),
    A.HorizontalFlip(),
    A.OpticalDistortion(distort_limit=0.5, p =1),
    A.Rotate(( -45,45), p =1),
    A.MedianBlur(p=1),
    A.ChannelDropout(p=1),
    A.ColorJitter(p=1),
    A.Downscale(p=1),
    A.Emboss(alpha=(0.1, 1),p=1),
    A.FancyPCA(p=1),
    A.ISONoise(p=1),
    A.Normalize (p=1),
    A.RandomToneCurve(p=1),
    A.Sharpen((0.2,0.6),p=1),
    A.Superpixels(p=1),
])

大概就这么些 我觉得可以试试的 其中标准化可以存疑 。 

试了一下 感觉小量数据集上 其实两个的速度 差不多  

猜你喜欢

转载自blog.csdn.net/YI_SHU_JIA/article/details/123554377