Java开发人员可以使用预先训练的机器学习模型快速实现图像分类或对象检测。
近年来,人们对机器学习的兴趣稳步增长。具体来说,企业现在在多种使用案例中使用机器学习进行图像识别。手机摄像头,可用于汽车工业,医疗保健,安全, 零售,仓库,农业中的自动产品跟踪,食品识别甚至实时翻译等应用。由于机器学习和视觉识别,机器可以在MRI和CT扫描中检测出癌症和新冠病毒。
如今,这些解决方案中的许多解决方案主要是使用开放源代码和专有ML工具包在Python中开发的,每个工具包都有自己的API。尽管Java在企业中很流行,但是没有任何标准可以用Java开发机器学习应用程序。 通过为Java应用程序开发人员提供一组标准的,灵活的和Java友好的视觉识别(VisRec)应用程序API,例如图像分类和对象检测,JSR-381就是为了解决这一差距而开发的。JSR-381的一些实现依赖于机器学习平台,例如TensorFlow,MXNet和DeepNetts。这些实现是基于Deep Java Library (DJL)(一种开源库) 由Amazon开发,以用Java构建机器学习。DJL 通过捆绑必需的图像处理例程,提供了与流行的机器学习框架,从而使其成为JSR-381用户的灵活简便的选择。
在本文中,我们演示了Java开发人员如何使用JSR-381 VisRec API通过DJL的预训练模型在不到10行代码中实现图像分类或对象检测。我们还将通过两个示例演示用户如何在不到10分钟的时间内使用经过预训练的机器学习模型。
使用预先训练的模型识别手写数字
视觉识别的一个有用的应用程序和“ hello world”示例是识别手写数字。识别手写数字对于人类来说似乎很容易。由于我们大脑中视觉和模式匹配子系统的处理能力以及协作能力,我们通常可以正确地识别出草率手写文档中的正确数字。但是,由于许多可能的变化,对于机器来说,这项看似简单的任务非常复杂。这是机器学习(尤其是视觉识别)的良好用例。JSR 381存储库就是一个很好的示例 ,该示例使用JSR-381 VisRec API正确识别手写数字。本示例将手写数字与MNIST手写数字数据集进行比较 ,这是一个可公开获取的超过6万张图片的数据库。预测图像代表什么称为图像分类。我们的示例查看一个新图像,并尝试确定它是特定数字的概率。
对于此任务,VisRec API提供了一个ImageClassifier接口,该接口可以专用于使用通用参数输入图像的特定Java类。它还提供了classify()方法,该方法执行图像分类并返回所有可能图像类别的类别概率图。根据VisRec API中的约定,每个模型都提供一个静态builder()方法,该方法返回相应的构建器对象,并允许开发人员配置所有相关设置,例如imageHeight,imageWidth。
构建分类器对象后,将输入图像输入分类器以识别图像。
运行此代码将产生以下输出。
该模型为图像中嵌入的数字标识了五个可能的选项,以及每个选项的关联概率。分类器正确预测基础数字为0,压倒性概率为99.98%
这种情况的一个明显概括是,当您需要检测同一图像中的不同对象时该怎么办?
使用预先训练的单发检测器(SSD)模型识别物体
单发检测器 (SSD)是一种使用单个深度神经网络检测图像中对象的机制。在此示例中,您使用预训练的SSD模型识别图像中的对象。目标检测是一项更具挑战性的视觉识别任务。除了对图像中的对象进行分类之外,对象检测还可以识别图像中对象的位置。它还可以围绕每个感兴趣的对象以及一个类(文本)标签绘制一个边界框。
SSD机制是机器学习中的最新发展,它与令人费解的模型相比,具有出乎意料的快速检测对象的能力,同时还保持了准确性。
通过DJL的JSR-381实施,用户可以访问可立即使用的,经过预先培训的SSD模型。DJL使用 ModelZoo 简化了模型的部署。在下面的代码块中,使用ModelZoo.loadModel()加载预训练的模型,实例化对象检测器类,然后将此模型应用于样本图像。
下一步是什么?
在本文中,我们只是简单地介绍了如何使用JSR-381 API的DJL实现。您可以使用ModelZoo中的预训练模型库来探索和实现更多模型,或者引入自己的模型。