介绍内置图像数据源在Apache 2.4火花
2018年12月10日, 在工程的博客
介绍
与最近的进步深度学习图像分类框架和对象检测、标准图像处理的需求在Apache火花从来没有更大的。图像处理和预处理的具体挑战——例如,图片(如有不同的格式。,jpeg, png等),尺寸,和配色方案,没有简单的方法来测试正确性(静默失败)。
图像数据源地址这些问题代码你可以通过提供的标准表示对来自特定的图像的细节和抽象表示。
Apache 2.3提供了火花ImageSchema.readImagesAPI(参见微软的文章在Apache火花图像数据支持),这是最初的开发MMLSpark图书馆。在Apache 2.4火花,这是更容易使用,因为它现在是一个内置的数据源。使用图像数据源,您可以从目录和加载图像得到DataFrame与单个图像列。
这篇文章描述了一个图像数据源,展示了它的使用深度学习管道在砖bob体育亚洲版统一的分析平台bob体育客户端下载。
图像导入
让我们看看如何通过图像数据读入火花图像来源。在PySpark,您可以导入图片如下:
image_df = spark.read。格式(“图像”).load (“/路径/ /图片”)
类似的api存在Scala、Java和R。
图像数据来源,可以导入一个嵌套目录结构(例如,使用一个路径/ / dir / * * /路径
)。对于更具体的图片,您可以使用分区发现通过指定一个路径分区目录(即路径/道路/ / dir /日期= 2018-01-02 /类别=汽车
)。
意象图式
图像加载与单个列称为“DataFrame形象。“这是一个struct-type列以下字段:
图片:结构体包含所有图像数据||——来源:字符串代表源URI||——高度:整数,图像像素的高度||——宽度:整数,图像在像素宽度||——nChannels:整数,颜色通道的数量||——模式:整数,OpenCV类型||——数据:二进制,实际的形象
虽然大多数领域都是不言而喻的,一些值得的解释:
nChannels:颜色通道的数量。灰度图像的典型值是1、3为彩色图像(例如,RGB),和4彩色图像alpha通道。
模式:整数标记提供了如何解释数据字段的信息。它指定了数据类型和通道秩序中存储的数据。字段的值预计(但不执行)映射到一个OpenCV下面显示的类型。OpenCV类型被定义为1、2、3或4通道和几个像素值的数据类型。
映射类型的数字OpenCV(数据类型x频道数量):
数据:图像数据存储在一个二进制格式。图像数据被表示为一个三维数组的尺寸形状(高度、宽度、nChannels)和数组类型t的值指定的模式。数组存储在存储顺序。
通道顺序
通道顺序指定颜色的顺序存储。例如,如果你有一个典型的三个通道图像用红、蓝、绿的组件,有六个可能的排序。大多数图书馆使用RGB或BGR。三(四)通道OpenCV类型预计将在BGR (A)。
代码示例
深度学习管道提供了一个简单的方法开始毫升使用图像。从0.4版开始,深度学习管道使用上面描述的意象图式为图像格式,取代前图像模式中定义的格式深度学习管道项目。
在Python的例子中,我们使用学习转移到构建一个定制的图像分类器:
#图像源目录路径sample_img_dir =…#使用新的图像读取图像数据计划image_df = spark.read。格式(“图像”).load (sample_img_dir)#砖显示包含内置的图像显示的支持显示器(image_df)#分割训练和测试数据集train_df test_df = image_df.randomSplit ([0.6,0.4])#火车逻辑回归InceptionV3生成的特性:featurizer = DeepImageFeaturizer (inputCol =“图像”outputCol =“特征”modelName =“InceptionV3”)#构建逻辑回归变换lr = LogisticRegression(麦克斯特=20.regParam =0.05elasticNetParam =0.3labelCol =“标签”)#构建毫升管道p =管道(阶段= [featurizer, lr))#创建我们的模型p_model = p.fit (train_df)#运行我们的模型对测试数据集tested_df = p_model.transform (test_df)#评估我们的模型评估者= MulticlassClassificationEvaluator (metricName =“准确性”)打印("测试集精度= "+str(evaluator.evaluate (tested_df.select (“预测”,“标签”))))
请注意:对于深度学习管道开发人员,新的图像模式变化的顺序从RGB颜色通道BGR。以减少混乱,一些内部api现在需要显式地指定排序。
接下来是什么
是很有帮助的,如果你可以返回的DataFrame通过示例df.sample
,但抽样不优化。为了改善这种情况,我们需要降低采样算子图像数据源,以便它不需要读每一个图像文件。此功能将被添加在数据源V2在未来。
新形象功能计划在将来的版本中在Apache火花和砖,所以请继续关注更新。你也可以尝试深入学习例如笔记本电脑在砖运行时5.0毫升。
阅读更多
为进一步阅读图像数据来源,以及如何使用它:
确认
由于丹尼·李,斯蒂芬妮Bodoff,朱尔斯s Damji贡献。