Apache spark 2.4:内置 Image Data Source的介绍
引言
图片分类以及对象检测的深度学习框架的发展使得在apache spark急需支持图片数据处理流程,在支持图片处理流程需要考虑到以下问题:处理不同格式, 大小以及色彩的图片, 如何快速检测图片处理的正确性。
通过图片数据源提供的标准图片抽象可以解决在图片数据处理过程中遇到的大部分问题,在Apache Spark 2.3中,MMLSpark 库提供ImageSchema.readImages API(see Microsoft’s post Image Data Support in Apache Spark)来处理图片数据, 在Apache Spark 2.4中,图片数据作为内置数据源将更易使用,用户可以该内置数据源从目录中批量导入图片进行数据处理。这篇博客主要图片数据源以及如何在databricks的产品里面使用该数据源。
图片导入
首先介绍通过Image Data Source如何将图片数据导入到Spark中,下面是PySpark的代码示例, 在Scala,Java以及R语言中也存在类似的API。
mage Data Source路径可以支持递归路径格式,如/path/to/dir/** , 也可以指定特定的分区目录, 如/path/to/dir/date=2018-01-02/category=automobile
图片模式
图片导入到Spark中是以DataFram列的形式存在的,该列包含了以下属性:
其中nChannels 表示color channels的数量,对于灰度图片该配置为1,彩色图片该配置为3, mode类型是整型数据, 指定数据类型以及数据通道顺序,其代表的类型一般都会有对应的OpenCV类型,具体的对应关系如下图所示:
通道顺序:
通道顺序指定了图片色彩的存储顺序,例如对于红,蓝,绿三通道的图片,存在6种不同的排列顺序,大部分库使用RGB或者BGR的顺序进行存储,OpenCV采用BGR的顺序进行存储。
代码示例
Deep Learning Pipelines 0.4版本之后,使用上述图片模式代替Deep Learning Pipelines项目的图片模式,,对于Deep Learning Pipelines的开发者,新的图片模式通道顺序已经从RGB更改为BGR,因此部分API需要显示指定通道顺序,下面是构建图片分类器的python代码示例:
下一步
现阶段通过df.smaple对DataFrame进行抽样是没有优化的,每次抽样需要读取全部图片,下一步将通过下推抽样算子到图片数据源这一层,避免读取全部图片数据,该功能将会在DataSource V2中进行发布。