↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:黄星源、樊亮、陈桦、斯国一
深度学习的发展不仅突破了许多视觉难题,也加速了计算机视觉领域相关技术的进步。本文主要从CV数据处理、CV模型(CNN)、CV模型训练流程以及CV模型集成对计算机视觉的基础知识和基本环节进行了讲解。
CV数据下载
https://tianchi.aliyun.com/competition/entrance/531795/information(阿里天池-零基础入门CV赛事)
CV数据处理
五种数据读取方法
目前较为主流的Python图像库的基本使用方法:
1. matplotlib
matplotlib是Python的绘图库,在科学绘图领域被广泛使用。使用plt.imread()读取图片将其储存为一个RGB像素值矩阵,再进行处理。故其可以与opencv或pillow结合使用,只需要传入像素值矩阵,matplotlib便可以接手处理接下来想要完成的操作。
2. PIL(pillow)
PIL即Python Imaging Library,而pillow是PIL的一个分支。pillow提供了常见的图像读取和处理的操作,它比opencv更为轻巧,且可以与ipython notebook无缝集成。使用Image.open()读取图片储存为一个对象,并非是numpy矩阵。
3. OpenCV
OpenCV是一个跨平台的计算机视觉库,是今天介绍的所有图像库中最全面也最强大的库。使用cv2.imread()读取图片将其储存为一个BGR像素值矩阵,故若要结合使用matplotlib则要先进行转化。
4. skimage
skimage包是scikit-image SciKit (toolkit for SciPy) 的简称,它对scipy.ndimage进行了扩展,提供了更多的图片处理功能。skimage包由许多的子模块组成,各个子模块功能不同。使用io.imread()读取图片将其储存为一个RGB像素值矩阵。
5. imageio
Imageio是一个Python库,提供了一个简单的接口用于读取和写入各种图像数据,包括动画图像,视频,体积数据和科学格式。使用imageio.imread()读取图片将其储存为一个RGB像素值矩阵。
五种数据扩增技巧
在深度学习模型的训练过程中,数据扩增是必不可少的环节。现有深度学习的参数非常多,一般的模型可训练的参数量基本上都是万到百万级别,而训练集样本的数量很难有这么多,数据扩增可以扩展样本空间。
扩增一般不会改变标签;对于物体检测,数据扩增会改变物体坐标位置;对于图像分割,数数据扩增方法有很多:从颜色空间、尺度空间到样本空间,同时根据不同任务数据扩增都有相应的区别。对于图像分类,数据据扩增会改变像素标签。以torchvision.transforms为例,首先整体了解数据扩增的方法,包括:
1. 裁剪
中心裁剪:transforms.CenterCrop;
随机裁剪:transforms.RandomCrop;
随机长宽比裁剪:transforms.RandomResizedCrop;
上下左右中心裁剪:transforms.FiveCrop;
上下左右中心裁剪后翻转: transforms.TenCrop。
2. 翻转和旋转
依概率p水平翻转:transforms.RandomHorizontalFlip(p=0.5);
依概率p垂直翻转:transforms.RandomVerticalFlip(p=0.5);
随机旋转:transforms.RandomRotation。
3. 随机遮挡
对图像进行随机遮挡: transforms.RandomErasing。
4. 图像变换
尺寸变换:transforms.Resize;
标准化:transforms.Normalize;
填充:transforms.Pad;
修改亮度、对比度和饱和度:transforms.ColorJitter;
转灰度图:transforms.Grayscale;
依概率p转为灰度图:transforms.RandomGrayscale;
线性变换:transforms.LinearTransformation();
仿射变换:transforms.RandomAffine;
将数据转换为PILImage:transforms.ToPILImage;
转为tensor,并归一化至[0-1