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), ])
大概就这么些 我觉得可以试试的 其中标准化可以存疑 。
试了一下 感觉小量数据集上 其实两个的速度 差不多