作者:黄星源、樊亮、陈桦、斯国一
深度学习的发展不仅突破了许多视觉难题,也加速了计算机视觉领域相关技术的进步。本文主要从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。
依概率p水平翻转:transforms.RandomHorizontalFlip(p=0.5);
依概率p垂直翻转:transforms.RandomVerticalFlip(p=0.5);
随机旋转:transforms.RandomRotation。
对图像进行随机遮挡: transforms.RandomErasing。
尺寸变换:transforms.Resize;
标准化:transforms.Normalize;
填充:transforms.Pad;
修改亮度、对比度和饱和度:transforms.ColorJitter;
转灰度图:transforms.Grayscale;
依概率p转为灰度图:transforms.RandomGrayscale;
线性变换:transforms.LinearTransformation();
仿射变换:transforms.RandomAffine;
将数据转换为PILImage:transforms.ToPILImage;
转为tensor,并归一化至[0-1]:transforms.ToTensor;
用户自定义方法:transforms.Lambda。
transforms.RandomChoice(transforms): 从给定的一系列transforms中选一个进行操作;
transforms.RandomApply(transforms, p=0.5): 给一个transform加上概率,依概率进行操作;
transforms.RandomOrder: 将transforms中的操作随机打乱。
常用的数据扩增库
1. torchvision
pytorch官方提供的数据扩增库,提供了基本的数据扩增方法,可以无缝与torch进行集成;但数据扩增方法种类较少,且速度中等;
链接:https://github.com/pytorch/vision2