数据预处理

马上毕业了,毕业之前将研究生阶段做过的一些工作做一些分享。本期将分享语义分割的一些前期预处理以及论文。

1 数据增强

1.1 几何增强

原图:

import cv2
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import io# img = io.imread('image.jpg')
# label = io.imread('label.jpg')img = cv2.imread('image.jpg')
label = cv2.imread('label.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # cv2默认为bgr顺序
label = cv2.cvtColor(label, cv2.COLOR_BGR2RGB) # cv2默认为bgr顺序
io.imshow(img)
<matplotlib.image.AxesImage at 0x274358194c8>

io.imshow(label)
<matplotlib.image.AxesImage at 0x274358e2e08>

水平翻转

  • 水平翻转: 水平镜像图像有助于增加方向的不变性(例如,行人可以以不同的方向出现)。在自然场景下,不建议垂直翻转,因为物体的垂直外观在场景中增加了重要的一致性(例如,网络知道天空是由它的位置决定的),但是像遥感图像这种俯瞰图,是可以垂直翻转的。
img_flip = cv2.flip(img, 1) # 1代表水平翻转,0代表垂直翻转,-1代表对角翻转
label_flip = cv2.flip(label, 1)
io.imshow(img_flip)
<matplotlib.image.AxesImage at 0x2743595c8c8>

io.imshow(label_flip)
<matplotlib.image.AxesImage at 0x2743699c608>

平移

  • 平移: 移动图像会阻止CNN总是看到训练图像的相同位置,因此它不会总是从第一层产生相同的激活(移位不变性)。
# 定义平移矩阵
import numpy as npM = np.float32([[1, 0, 100], [0, 1, 0]])
# 变换公式:dst(x, y) = src(M11x + M12y + M13, M21x + M22y + M23)
img_shift = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
label_shift = cv2.warpAffine(label, M, (label.shape[1], label.shape[0]))
io.imshow(img_shift)
<matplotlib.image.AxesImage at 0x27436a09248>

io.imshow(label_shift)
<matplotlib.image.AxesImage at 0x27436a73d08>

随机裁剪和缩放

  • 随机裁剪和缩放: 随机调整图像大小有助于模型看到每个对象的不同比例,并提高网络对不同图像分辨率的不变性。
h, w = img.shape[0], img.shape[1]
# 获取随机裁剪长度
crop_scale = np.random.randint(h//2, h) / h
crop_h = int(crop_scale * h)
crop_w = int(crop_scale * w)
h_begin = np.random.randint(0, h - crop_h)
w_begin = np.random.randint(0, w - crop_w)img_crop = img[h_begin: h_begin+crop_h, w_begin:w_begin+crop_w, :]
label_crop = label[h_begin: h_begin+crop_h, w_begin:w_begin+crop_w]# resize函数使用时dsize先是w再是h,正好相反
img_resize = cv2.resize(img_crop, (w, h))
label_resize = cv2.resize(label_crop, (w, h))
io.imshow(img_resize)
<matplotlib.image.AxesImage at 0x27436adefc8>

io.imshow(label_resize)
<matplotlib.image.AxesImage at 0x27436b524c8>

1.2 纹理增强

亮度和对比度

  • 亮度和对比度: 物体在图像中的清晰度取决于场景照明和相机灵敏度。通过随机增加或减少图像亮度来增加输入图像的虚拟变化,改善了网络的照明不变性。对比度就是图像中最暗和最亮区域之间的分隔。通过随机增强来增加这个范围有助于增加对阴影的不变性,并且通常会提高网络在低光照条件下的性能。
from albumentations import (Compose,RandomBrightnessContrast
)aug = Compose([RandomBrightnessContrast(brightness_limit=(0, 0.4), contrast_limit=(0, 0.4), p=1)])augmented = aug(image=img, mask=label)
image_bright_contrast = augmented['image']
gt_bright_contrast = augmented['mask']
io.imshow(image_bright_contrast)
<matplotlib.image.AxesImage at 0x27438dd1d08>

io.imshow(gt_bright_contrast)
<matplotlib.image.AxesImage at 0x27438e42d08>

  • 色调 饱和度 明度(HSV): 色调的取值范围是0~360度,用来表示颜色的类别,其中红色是0度,绿色是120度,蓝色是240度。饱和度高,颜色则深而艳。亮度的用来表示颜色的明暗程度。
from albumentations import (Compose,HueSaturationValue
)aug = Compose([HueSaturationValue(hue_shift_limit=20,sat_shift_limit=30,val_shift_limit=20,p=1)])augmented = aug(image=img, mask=label)
image_hsv = augmented['image']
gt_hsv = augmented['mask']
io.imshow(image_hsv)
<matplotlib.image.AxesImage at 0x27438eb0b08>

io.imshow(gt_hsv)
<matplotlib.image.AxesImage at 0x27438f16d88>

  • 运动模糊: 对图像进行模糊可以模拟部分拍摄场景的运动模糊,让网络对模糊图像的边界也具有较强的识别能力。
from albumentations import (Compose,MotionBlur
)aug = Compose([MotionBlur(blur_limit=7, p=1.0)])augmented = aug(image=img, mask=label)
image_MotionBlur = augmented['image']
gt_MotionBlur = augmented['mask']
io.imshow(image_MotionBlur)
<matplotlib.image.AxesImage at 0x2743906e448>

io.imshow(gt_MotionBlur)
<matplotlib.image.AxesImage at 0x274390d6c48>

  • 颜色抖动: 向每个RGB像素添加小的随机噪声有助于获得对一些相机失真的不变性。
from albumentations import (Compose,RGBShift
)aug = Compose([RGBShift(r_shift_limit=20,g_shift_limit=20,b_shift_limit=20,p=1.0)])augmented = aug(image=img, mask=label)
image_rgbshift = augmented['image']
gt_rgbshift = augmented['mask']
io.imshow(image_rgbshift)
<matplotlib.image.AxesImage at 0x2743a10eec8>

io.imshow(gt_rgbshift)
<matplotlib.image.AxesImage at 0x2743a17e408>

限制对比度的自适应直方图均衡化:

from albumentations import (Compose,CLAHE
)aug = Compose([CLAHE(clip_limit=2,tile_grid_size=(8, 8),p=1)])augmented = aug(image=img, mask=label)
image_CLAHE = augmented['image']
gt_CLAHE = augmented['mask']
io.imshow(image_CLAHE)
<matplotlib.image.AxesImage at 0x2743a1e2c88>

io.imshow(gt_CLAHE)
<matplotlib.image.AxesImage at 0x2743a5b0288>

其他增强

  • 超像素: 随机将图像上某个超像素块内的颜色替换为超像素的均值。
from albumentations import Compose
from albumentations.imgaug.transforms import IAASuperpixelsaug = Compose([IAASuperpixels(p_replace=0.1,n_segments=500,p=1)])augmented = aug(image=img, mask=label)
image_Superpixels = augmented['image']
gt_Superpixels = augmented['mask']
io.imshow(image_Superpixels)
<matplotlib.image.AxesImage at 0x2743a612ac8>

io.imshow(gt_Superpixels)
<matplotlib.image.AxesImage at 0x2743a658fc8>

  • 锐化: 增强图像细节。
from albumentations import Compose
from albumentations.imgaug.transforms import IAASharpenaug = Compose([IAASharpen(p=1)])augmented = aug(image=img, mask=label)
image_Sharpen = augmented['image']
gt_Sharpen = augmented['mask']
io.imshow(image_Sharpen)
<matplotlib.image.AxesImage at 0x2743a704c08>

io.imshow(gt_Sharpen)
<matplotlib.image.AxesImage at 0x2743b7457c8>

  • 透视变换:
from albumentations import Compose
from albumentations.imgaug.transforms import IAAPerspectiveaug = Compose([IAAPerspective(p=1)])augmented = aug(image=img, mask=label)
image_Perspective = augmented['image']
gt_Perspective = augmented['mask']
io.imshow(image_Perspective)
<matplotlib.image.AxesImage at 0x2743b7c9a08>

io.imshow(gt_Perspective)
<matplotlib.image.AxesImage at 0x2743b835288>

2 标准化与归一化

2.1 min-max归一化

  • 公式:对数据的数值范围进行特定缩放,但不改变其数据分布的一种线性特征变换。
import matplotlib.pyplot as plt
import cv2
import numpy as np
import seaborn as snsimage = cv2.imread('image.jpg')[:, :, 0]
min_ = np.min(image)
max_ = np.max(image)new_image = (image-min_) / (max_-min_)flat_image = np.reshape(image, -1)
flat_new_image = np.reshape(new_image, -1)
fig, ax = plt.subplots(1, 2)
sns.distplot(flat_image, ax=ax[0])
sns.distplot(flat_new_image, ax=ax[1])
plt.show()

2.2 z-score 标准化

  • 公式:将数值范围缩放到0附近, 但没有改变数据分布;
import matplotlib.pyplot as plt
import cv2
import numpy as np
import seaborn as snsimage = cv2.imread('image.jpg')[:, :, 0]
mean_ = np.mean(image)
std_ = np.std(image)new_image = (image-mean_) / std_flat_image = np.reshape(image, -1)
flat_new_image = np.reshape(new_image, -1)
fig, ax = plt.subplots(1, 2)
sns.distplot(flat_image, ax=ax[0])
sns.distplot(flat_new_image, ax=ax[1])
plt.show()

【语义分割专题】语义分割前期预处理工作--数据处理相关推荐

  1. 详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    https://www.tinymind.cn/articles/120 [ 导读]目前,计算机视觉是深度学习领域最热门的研究领域之一.计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形.算 ...

  2. 干货丨计算机视觉必读:图像分类、定位、检测,语义分割和实例分割方法梳理(经典长文,值得收藏)

    文章来源:新智元 作者:张皓 [导读]本文作者来自南京大学计算机系机器学习与数据挖掘所(LAMDA),本文直观系统地梳理了深度学习在计算机视觉领域四大基本任务中的应用,包括图像分类.定位.检测.语义分 ...

  3. Facebook人工智能实验室提出「全景分割」,实现实例分割和语义分割的统一

    原文来源:arxiv 作者:Alexander Kirillov.Kaiming He1.Ross Girshick.Carsten Rother.Piotr Dollar 「雷克世界」编译:嗯~阿童 ...

  4. 语义分割和实例分割_一文读懂语义分割与实例分割

    以人工智能为导向的现代计算机视觉技术,在过去的十年中发生了巨大的变化.今天,它被广泛用于图像分类.人脸识别.物体检测.视频分析以及机器人及自动驾驶汽车中的图像处理等领域.图像分割技术是目前预测图像领域 ...

  5. 一文详解计算机视觉五大技术:图像分类、对象检测、目标跟踪、语义分割和实例分割

    [ 导读]目前,计算机视觉是深度学习领域最热门的研究领域之一.计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形.算法.理论.系统.体系结构),数学(信息检索.机器学习),工程学(机器人.语 ...

  6. gcn语义分割_语义分割该如何走下去?

    来自 | 知乎    编辑 | 深度学习这件小事链接 | https://www.zhihu.com/question/390783647本文仅供交流,如有侵权,请联系删除   问题语义分割该如何走下 ...

  7. BiSeNet:用于实时语义分割的双边分割网络-7min精简论文阅读系列-Leon

    BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation BiSeNet:用于实时语义分割的双边分割网络 ...

  8. 计算机视觉:图像分类、物体检测、图像语义分割、实例分割和全景分割

    计算机视觉 图像分类 Image Classification 物体检测 Object Detection/ Object Localization 语义分割 Semantic Segmentatio ...

  9. 深度学习 --- CNN的变体在图像分类、图像检测、目标跟踪、语义分割和实例分割的简介(附论文链接)

    以上就是卷积神经网络的最基础的知识了,下面我们一起来看看CNN都是用在何处并且如何使用,以及使用原理,本人还没深入研究他们,等把基础知识总结完以后开始深入研究这几个方面,然后整理在写成博客,最近的安排 ...

最新文章

  1. 用python解“BCD解密”问题
  2. mysql数据库自动转储_mysql数据库数据定时封装转储
  3. 阿里开源的Arthas竟然还不会用?最佳实践来了!
  4. postman数据保存在哪里_Postman 历史记录导出的解决方案
  5. java 路由_RabbitMQ入门:路由(Routing)
  6. 1112个人赛,最长回文串常见算法讨论
  7. 做一个简单的python爬虫_python制作一个简单网络爬虫
  8. mongodb的用法
  9. Java-----Excel转HTML
  10. public 函数_C++:11友元函数、友元类
  11. Some Thoughts
  12. 114.114.114.114和8.8.8.8,哪个DNS好?
  13. 2018千元内的UGP VR一体机开箱评测:ugp vr一体机怎么样真的好吗?
  14. win11 如何将搜狗输入法设置成默认输入法
  15. C语言~~自制-拼图游戏
  16. infoQ 百度技术沙龙第25期回顾:海量数据处理技术解析
  17. 好累,好好思考今后要走的路
  18. php交易商城项目源代码,PHP源码交易商城网站整站源码(商业运行版)
  19. Unity CardboardVR应用在华为部分机型显示黑屏后自动退出
  20. 各大牛逼网站推荐系统

热门文章

  1. 在以TCP为连接方式的服务器中,为什么在服务端设计当中需要考虑心跳?
  2. 论文笔记:高精度室内定位研究评述及未来演进展望
  3. 深圳在职人才入户条件2023年版
  4. 学java的第九天,面向对象 23.2.15
  5. 微信内置浏览器清除缓存解决方案(实测有效)
  6. fpga时序逻辑(三段式状态机模板、rom实现、边沿检测)
  7. Java后端大数据 从0到1学习路线分析与规划
  8. 【Java核心技术大会 PPT分享】张家驹:云原生时代的Java — Quarkus及其最新进展...
  9. 2022年起重机械安全管理复训题库模拟考试平台操作
  10. linux 传输文件stpf,在Linux下搭建 miniGUI mStudio环境...-linux 全面剖析ps命令-纯Servlet实现文件上传_169IT.COM...