创建和探索数据存储的图像分类
这个例子显示了如何创建、读取、并提高图像数据存储用于培训深入学习网络。特别是,这个例子展示了如何创建一个ImageDatastore
对象从一组图片,阅读和提取数据存储的属性,并创建一个augmentedImageDatastore
在训练使用。
创建图像数据存储
使用一个imageDatastore
对象来管理大量的图片不能完全适合在内存中。大型集合图像是常见的在深度学习应用程序中,经常涉及训练成千上万的标记图像。这些图像通常存储在一个文件夹,子文件夹包含图片为每个类。
下载数据集
这个示例使用的示例食物图像的数据集,其中包含978照片的食物在九类和大小大约是77 MB。下载ExampleFoodImageDataset.zip
文件从MathWorks网站,然后解压文件。
zipFile = matlab.internal.examples.download金宝appSupportFile (“nnet”,“数据/ ExampleFoodImageDataset.zip”);filepath = fileparts (zipFile);dataFolder = fullfile (filepath,“ExampleFoodImageDataset”);解压缩(zipFile dataFolder);
这个数据集的图像被分成子文件夹为每个类。
创建一个图像数据存储图片的路径及其子文件夹。使用文件夹名称的标签名称。
foodImds = imageDatastore (dataFolder,…“IncludeSubfolders”,真的,…“LabelSource”,“foldernames”);
数据存储的属性
提取数据存储的属性。
找到观察的总数。这个数据集有978个观测分成九类。
numObs =长度(foodImds.Labels)
numObs = 978
找到观察每个类的数量。你可以看到这个数据集不包含在每个类同等数量的观察。
numObsPerClass = countEachLabel (foodImds)
numObsPerClass =9×2表标签数_________________ _____ caesar_salad 26 caprese_salad 15 french_fries 181 greek_salad 24汉堡238 hot_dog 31披萨299生鱼片寿司40 124
您还可以使用柱状图显示分布的类标签。
直方图(foodImds.Labels)组(gca,“TickLabelInterpreter”,“没有”)
探索数据存储
检查数据是否如预期通过查看一个随机选择的图像数据存储。
numObsToShow = 8;idx = randperm (numObs numObsToShow);imshow (imtile (foodImds.Files (idx),“GridSize”(2 - 4),“ThumbnailSize”100年[100]))
您还可以查看图片属于一个特定的类。
类=“披萨”;idxClass =找到(foodImds。标签= =类);idx = randsample (idxClass numObsToShow);imshow (imtile (foodImds.Files (idx),“GridSize”(2 - 4),“ThumbnailSize”100年[100]));
仔细看看个人图像数据存储或文件夹中使用图片浏览器(图像处理工具箱)应用程序。
图像增强
增加使您能够训练网络是扭曲图像数据不变。例如,您可以添加随机旋转输入图像,这样一个网络是存在旋转不变。一个augmentedImageDatastore
对象提供了一种方便的方法来应用一组有限的对应二维图像分类问题。
定义一个扩展计划。这个方案适用于随机旋转之间(-90、90)度和随机[1,2]之间的比例。增强数据存储自动调整图像的大小inputSize
在训练价值。
imageAugmenter = imageDataAugmenter (…“RandRotation”(-90 90),…“RandScale”[1,2]);inputSize = (100 - 100);
使用扩充方案,定义了增强图像数据存储。
augFoodImds = augmentedImageDatastore (inputSize foodImds,…“DataAugmentation”,imageAugmenter);
增强数据存储包含相同数量的图像与原始图像数据存储。
augFoodImds.NumObservations
ans = 978
当您使用一个增强图像数据存储的训练图像数据存储训练数据随机扰乱对于每一个时代,一个时代是一个完整的通过训练算法在整个训练数据集。因此,每个时代都使用稍微不同的数据集,但训练图像的实际数量在每个时代不会改变。
可视化增强数据
想象你想使用的增强图像数据训练网络。
洗牌的数据存储。
augFoodImds = shuffle (augFoodImds);
的augmentedImageDatastore
对象读取数据存储时,不应用转换存储转换后的图像在内存中。因此,每次读取相同的图片,你看到一个对应的随机组合定义。
使用读
函数读增广数据存储的一个子集。
subset1 =阅读(augFoodImds);
之前重置数据存储的状态调用读和读数据存储的一个子集。
重置(augFoodImds) subset2 =阅读(augFoodImds);
显示两个子集的增强图像。
imshow (imtile (subset1.input,“GridSize”,(2 - 4)))
imshow (imtile (subset2.input,“GridSize”,(2 - 4)))
你可以看到两个实例显示相同的图像用不同的转换。转换应用到图像深度学习是有用的应用程序,你可以训练网络随机改变图像的版本。这样做使网络不同的图像类,使它学会分类图片,即使他们有不同的视觉属性。
在创建您的数据存储对象,使用深层网络设计师应用程序或trainNetwork
函数来训练一个图像分类网络。例如,看到的学习使用Pretrained网络传输。
更多信息预处理图像深度学习应用程序,看看预处理图像深度学习。你也可以运用更高级的扩增,如不同程度的亮度或饱和,通过使用变换
和结合
功能。有关更多信息,请参见数据存储深度学习。
另请参阅
trainNetwork
|深层网络设计师|augmentedImageDatastore
|imageDatastore