零基础入门语义分割-地表建筑物识别 Task2 数据扩增 -学习笔记
先给出task1的链接:task1-赛题理解
这一节进行数据扩增的试验
读取图片:
train_mask = pd.read_csv('./data/train_mask.csv', sep='\t', names=['name', 'mask'])
train_mask['name'] = train_mask['name'].apply(lambda x: './data/train/' + x)
img = cv2.imread(train_mask['name'].iloc[0])
mask = rle_decode(train_mask['mask'].iloc[0])
opencv数据扩增
垂直翻转
# 垂直翻转plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)plt.subplot(1, 2, 2)
plt.imshow(cv2.flip(img, 0))
水平翻转
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)plt.subplot(1, 2, 2)
plt.imshow(cv2.flip(img, 1))
随机裁剪
# 随机裁剪,裁剪的效果就是图片变小了。
#图片大小是512x, y = np.random.randint(0, 256), np.random.randint(0, 256)##随机生成一个元素,值>=low ;<hign
#x和y的数据类型是class 'int'
plt.figure(figsize=(16, 8))plt.subplot(1, 2, 1)
plt.imshow(img[x:x+256, y:y+256])plt.subplot(1, 2, 2)
plt.imshow(mask[x:x+256, y:y+256])
噪声
# 噪声
def noise(pic):for i in range(1500):pic[random.randint(0, pic.shape[0] - 1)][random.randint(0, pic.shape[1] - 1)][:] = 255return pic# random.randint(a, b)# 用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
img_copy = img.copy()
img_aug = noise(img_copy)plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)plt.subplot(1, 2, 2)
plt.imshow(img_aug)
仿射
# 仿射
def fangshe(pic):rows, cols = pic.shape[:2]point1 = np.float32([[50, 50], [300, 50], [50, 200]])point2 = np.float32([[10, 100], [300, 50], [100, 250]])M = cv2.getAffineTransform(point1, point2)dst = cv2.warpAffine(pic, M, (cols, rows), borderValue=(255, 255, 255))# 对图像进行变换(三点得到一个变换矩阵)# 我们知道三点确定一个平面,我们也可以通过确定三个点的关系来得到转换矩阵# 然后再通过warpAffine来进行变换return dstimg_copy = img.copy()
img_aug = fangshe(img_copy)plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)plt.subplot(1, 2, 2)
plt.imshow(img_aug)
albumentations 数据扩增
HorizontalFlip 水平翻转
# HorizontalFlip 水平翻转#p=1表示水平翻转,p=0表示垂直翻转
augments = A.HorizontalFlip(p=1)(image=img, mask=mask)
#augments的数据类型是class 'dict'
#augments['image']的数据类型是numpy.ndarray
img_aug, mask_aug = augments['image'], augments['mask']plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)plt.subplot(1, 2, 2)
plt.imshow(img_aug)
VerticalFlip 垂直翻转
# VerticalFlip 垂直翻转#p=1表示水平翻转,p=0表示垂直翻转
augments = A.VerticalFlip(p=1)(image=img, mask=mask)
#augments的数据类型是class 'dict'
#augments['image']的数据类型是numpy.ndarray
img_aug, mask_aug = augments['image'], augments['mask']plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)plt.subplot(1, 2, 2)
plt.imshow(img_aug)
RandomCrop 随机裁剪
# RandomCrop 随机裁剪augments = A.RandomCrop(p=1, height=256, width=256)(image=img, mask=mask)
#RandomCrop(height, width, always_apply=False, p=1.0)
img_aug, mask_aug = augments['image'], augments['mask']
#img_aug.shape == (256, 256, 3)
#mask_aug.shape == (256, 256)print(mask_aug.shape)plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)plt.subplot(1, 2, 2)
plt.imshow(img_aug)
图略
ShiftScaleRotate 旋转
# 旋转,旋转没有改变图片的维度
#ShiftScaleRotate 旋转augments = A.ShiftScaleRotate(p=1)(image=img, mask=mask)
Blur 模糊
augments = A.Blur(blur_limit=7,always_apply=False, p=0.5)(image=img, mask=mask)
Flip 翻转
#Flip 翻转augments = A.Flip(always_apply = False, p = 0.5)(image=img, mask=mask)
Transpose 转置
#Transpose 转置 将图像行和列互换augments = A.Transpose(always_apply=False,p=0.5)(image=img, mask=mask)
RandomGamma 随机Gamma变换
#RandomGamma随机Gamma变换augments = A.RandomGamma(gamma_limit=(80, 120), eps=1e-07, always_apply=False, p=0.5)(image=img, mask=mask)
RandomRotate90 随机旋转0个或多个90度
#RandomRotate90 随机旋转0个或多个90度。augments = A.RandomRotate90(always_apply=False, p=0.5)(image=img, mask=mask)
Rotate 随机旋转图片
#Rotate
#随机旋转图片(默认使用reflect方法扩充图片,可以改为参数等其他方法填充)。augments = A.Rotate(limit=90,interpolation=1,border_mode=4,value=None,mask_value=None,always_apply=False,p=0.5)(image=img, mask=mask)
CenterCrop 随机中心裁剪图片
#随机中心裁剪图片(参数为高宽,一定会进行裁剪,注意其输入为整数)。augments = A.CenterCrop(256,256,always_apply=False,p=1.0)(image=img, mask=mask)
OpticalDistortion 对图像进行光学畸变
#对图像进行光学畸变。
#OpticalDistortion(distort_limit=0.05,shift_limit=0.05,interpolation=1,border_mode=4,value=None,mask_value=None,always_apply=False,p=0.5)augments = A.OpticalDistortion(distort_limit=0.05,shift_limit=0.05,interpolation=1,border_mode=4,value=None,mask_value=None,always_apply=False,p=0.5)(image=img, mask=mask)
GridDistortion 对图像进行网格失真
#对图像进行网格失真。
#GridDistortion(num_steps=5, distort_limit=0.3, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)augments = A.GridDistortion(num_steps=5, distort_limit=0.3, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)(image=img, mask=mask)
ElasticTransform 随机对图像进行弹性变换
#随机对图像进行弹性变换。
#ElasticTransform(alpha = 1,sigma = 50,alpha_affine = 50,interpolation = 1,border_mode = 4,value = None,mask_value = None,always_apply = False,approximate = False,p = 0.5 )augments = A.ElasticTransform(alpha = 1,sigma = 50,alpha_affine = 50,interpolation = 1,border_mode = 4,value = None,mask_value = None,always_apply = False,approximate = False,p = 0.5 )(image=img, mask=mask)
RandomGridShuffle 随机网格洗牌
#RandomGridShuffle(grid=(3,3),always_apply=False,p=1.0)
#随机网格洗牌 参数:将图像以网格方式生成几块,并随机打乱。augments = A.RandomGridShuffle(grid=(3,3),always_apply=False,p=1.0)(image=img, mask=mask)
HueSaturationValue 色调饱和度值
#HueSaturationValue(hue_shift_limit=20,sat_shift_limit=30,val_shift_limit=20,always_apply=False,p=0.5)
#色调饱和度值 参数:随机色调、饱和度、值变化。augments = A.HueSaturationValue(hue_shift_limit=20,sat_shift_limit=30,val_shift_limit=20,always_apply=False,p=0.5)(image=img, mask=mask)
PadIfNeeded 填充
#PadIfNeeded 填充
augments = A.PadIfNeeded(min_height=1024,min_width=1024,border_mode=4,value=None,mask_value=None,always_apply=False,p=1.0)(image=img, mask=mask)
MotionBlur 运动模糊
#给图像加上运动模糊。运动模糊是景物图象中的移动效果。它比较明显地出现在长时间暴光或场景内的物体快速移动的情形里。augments = A.MotionBlur(blur_limit=7,always_apply=False,p=0.5)(image=img, mask=mask)
数据的读取:
第一步:定义Dataset的类
第二步:实例化Dataset
实例化后的对象可以进行索引数据的操作,同时还可以打印出数据集的长度。
第三步:实例化 DataLoder,批大小为 10
欢迎关注公众号:
零基础入门语义分割-地表建筑物识别 Task2 数据扩增 -学习笔记相关推荐
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task2:数据扩增方法
[天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task6:分割模型模型集成
[天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task5:模型训练与验证
[天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task4:评价函数与损失函数
[天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task3:网络模型结构发展
[天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...
- 【天池赛事】零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline
[天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...
- 【天池赛事】零基础入门语义分割-地表建筑物识别
https://tianchi.aliyun.com/competition/entrance/531872/introduction [天池赛事]零基础入门语义分割-地表建筑物识别:第一章 赛题及b ...
- 天池赛题解析:零基础入门语义分割-地表建筑物识别-CV语义分割实战(附部分代码)
赛题内容 赛题背景 赛题以计算机视觉为背景,要求选手使用给定的航拍图像训练模型并完成地表建筑物识别任务.为更好的引导大家入门,我们为本赛题定制了学习方案和学习任务,具体包括语义分割的模型和具体的应用案 ...
- 零基础入门语义分割——Task1 赛题理解
文章目录 一.赛题数据 二.数据标签 三.评价指标 四.读取数据 比赛地址:零基础入门语义分割-地表建筑物识别 一.赛题数据 遥感技术已成为获取地表覆盖信息最为行之有效的手段,遥感技术已经成功应用于地 ...
最新文章
- 解读模拟摇杆原理及实验
- C++ Primer 5th笔记(chap 15 OOP)构造函数和拷贝控制
- L1-013. 计算阶乘和
- Python-数据结构(二)
- Eclipse 修改文本编码方式
- 递归——阶乘加斐波那契数列(简单掌握递归思想的敲门砖)
- KM算法 详解+模板
- 2017哈尔滨ACM CCPC-final 总结
- 送走2007 ^_^ 迎来2008
- protues仿真闪退问题,亲测有效
- JQuery高效制作网页特效第六章jQuery选择器课后作业
- 雷锋科普:小米M2之芯高通APQ8064芯片组解析
- php写出个人所得税,php趣味编程-php求个人所得税
- (转)Java面试笔试题大汇总(最全+详细答案)
- zb怎么做渲染图_ZBrush渲染效果使用图文教程
- 随手笔记Cookie
- ajax thinkphp配合ajax的简单列子
- Excel中使用正则表达式的方法
- Java Thread 和 Park
- 首个企业架构TOGAF角色扮演案例培训的诞生
热门文章
- vue项目的三种开发模式
- java源代码众筹网站_java项目开发实战--使用ssm框架开发众筹网站
- 想做一个 基于安卓的智能手机校园订餐系统 求各位大神指导 提供宝贵意见 感谢你们!
- 史上最全“大数据”学习资源整理
- JAXB常用注解讲解(超详细)
- 中国健康、医疗大数据中心盘点(持续更新)
- linux kdump 分析工具,Ubuntu 15.10中的Kdump工具实战
- 利用无代码搭建“OA办公管理系统”
- 在ubuntu下删除mysql数据库
- O‘REILLY: Lightbulb End Watching —— 计算指定时间范围内多组时间差之和(秒数)