首页 > 编程语言 >Java 中的机器学习正在加速图像处理 Java 开发人员可以使用预训练的机器学习模型快速实现图像分类或对象检测。

Java 中的机器学习正在加速图像处理 Java 开发人员可以使用预训练的机器学习模型快速实现图像分类或对象检测。

时间:2023-05-08 17:48:21浏览次数:65  
标签:机器 示例 对象 模型 开发人员 AWS 图像 Java

来源: https://www.infoworld.com/article/3601711/machine-learning-in-java-is-speeding-image-processing.html

 

近年来,人们对机器学习的兴趣稳步增长。具体来说,企业现在在各种用例中使用机器学习进行图像识别。在 汽车行业、 医疗保健、 安全、 零售、 仓库中的自动化产品跟踪、 农业和农业、 食品识别 甚至 通过指向手机摄像头的实时翻译中都有应用。由于机器学习和视觉识别,机器可以  在 MRI 和 CT 扫描中 检测癌症 和 COVID-19 。

如今,其中许多解决方案主要是使用开源和专有 ML 工具包在 Python 中开发的,每个工具包都有自己的 API。尽管Java 在企业中很受欢迎,但没有任何标准可以用 Java 开发机器学习应用程序。JSR-381 的 开发旨在通过为 Java 应用程序开发人员提供一组用于视觉识别 (VisRec) 应用程序(例如图像分类和对象检测)的标准、灵活且对 Java 友好的 API 来弥补这一差距。JSR-381 有几个依赖机器学习平台的实现,例如 TensorFlow、MXNet 和 DeepNetts。其中一个实现 是基于Deep Java Library  (DJL),一个开源库    由亚马逊开发,用于在 Java 中构建机器学习。DJL通过捆绑必要的图像处理例程 ,为 TensorFlow、  MXNet和 PyTorch等流行的机器学习框架提供挂钩 ,使其成为 JSR-381 用户的灵活而简单的选择。 

在本文中,我们演示了 Java 开发人员如何使用 JSR-381 VisRec API 在不到 10 行代码的情况下通过 DJL 的预训练模型实现图像分类或对象检测。我们还通过两个示例演示了用户如何在不到 10 分钟的时间内使用预训练的机器学习模型。让我们开始吧!

使用预训练模型识别手写数字

视觉识别的一个有用应用程序和“hello world”示例是识别手写数字。识别手写数字对人类来说似乎很容易。由于我们大脑中视觉和模式匹配子系统的处理能力和协作,我们通常可以从草率的手写文档中正确辨别出正确的数字。然而,由于许多可能的变化,这个看似简单的任务对于机器来说非常复杂。这是机器学习的一个很好的用例,特别是视觉识别。JSR 381 存储库有一个很好的 示例 ,它使用 JSR-381 VisRec API 来正确识别手写数字。此示例将手写数字与MNIST 手写数字数据集进行比较 ,一个包含超过 6 万张图像的公开数据库。预测图像代表什么称为图像分类。我们的示例查看一张新图像并尝试确定它是什么特定数字的概率。

对于此任务,VisRec API 提供了一个 ImageClassifier 接口,该接口可以专门用于使用通用参数的输入图像的特定 Java 类。它还提供了一个 classify() 方法,该方法执行图像分类并返回所有可能图像类别的类别概率图。按照 VisRec API 的约定,每个模型都提供一个静态的 builder() 方法,该方法返回相应的构建器对象,并允许开发人员配置所有相关设置,例如 imageHeight、imageWidth。

inputClass(BufferedImage.class). With that you specify the class which is used to represent the image. 要为我们的手写数字示例定义图像分类器,您可以使用 imageHeight(28) 和 i配置输入处理 mageWidth(28) 以将输入图像的大小调整为 28x28 形状,因为这是用于训练模型的原始大小。

构建分类器对象后,将输入图像提供给分类器以识别图像。


屏幕截图 2020 年 12 月 18 日下午 2.43.09
  AWS

运行此代码会产生以下输出。

屏幕截图 2020 年 12 月 18 日下午 2.44.26   AWS

该模型为图像中嵌入的数字确定了五个可能的选项,并为每个选项关联了概率。分类器以 99.98% 的压倒性概率正确预测基础数字为 0

这种情况的一个明显概括是当您需要检测同一图像中的不同对象时该怎么做的问题?

使用预训练的单次检测器 (SSD) 模型识别对象

Single Shot Detector  (SSD) 是一种使用单个深度神经网络检测图像中对象的机制。在此示例中,您使用预训练的 SSD 模型识别图像中的对象。目标检测是一项更具挑战性的视觉识别任务。除了对图像中的对象进行分类外,对象检测还可以识别图像中对象的位置。它还可以在每个感兴趣的对象周围绘制一个边界框以及一个类(文本)标签。 

SSD 机制是机器学习的最新发展,它能以惊人的速度检测对象,同时与计算密集型模型相比还能保持准确性。您可以通过了解 SSD MultiBox — 深度学习中的实时对象检测 博客文章和深入学习一书中 的练习了解更多关于 SSD 模型的信息。   

通过 DJL 的 JSR-381 实施,用户可以访问可立即使用的 SSD 模型的预训练实施。DJL 使用 ModelZoo 来简化模型部署。在以下代码块中,您使用 ModelZoo.loadModel() 加载预训练模型,实例化对象检测器类并将该模型应用于示例图像。

屏幕截图 2020 年 12 月 18 日下午 2.45.25   AWS

这是我们可以使用的新图像。

屏幕截图 2020 年 12 月 18 日下午 2.46.23   AWS

在此图像上运行我们的代码会产生以下结果:

屏幕截图 2020 12 18 下午 2.47.14   AWS

如果您想将每个检测到的对象周围的边界框添加到图像上,您只需添加几行代码即可。有关详细信息,请参阅 完整的 GitHub 示例。该模型对三个感兴趣的对象(自行车、汽车和狗)进行分类,在每个对象周围绘制一个边界框,并提供由概率反映的置信度。

屏幕截图 2020 12 18 下午 2.48.10   AWS

下一步是什么?

在这篇文章中,我们只是粗浅地介绍了您可以使用 JSR-381 API 的 DJL 实现做什么。您可以使用 ModelZoo 中预训练模型的存储库探索和实施更多模型,或引入您自己的模型。

我们还邀请您查看DJL,这是一个由Amazon 的 Java 开发人员为 Java 社区 构建的开源库。我们试图简化在 Java 中开发和部署机器学习。请加入我们的使命。 

DJL 有很多用例,您可以  为客户服务 开发一个问答应用程序,对您的瑜伽姿势进行姿势估计 或 训练您自己的模型 来检测您后院的入侵者。我们的 Spring Boot 入门工具包 还可以直接将 ML 与您的 Spring Boot 应用程序集成。您可以通过我们的介绍性博客、  网站 和 示例库了解更多关于 DJL 的信息 。前往我们的Github 存储库并在我们的 Slack频道 上与我们协作。  

标签:机器,示例,对象,模型,开发人员,AWS,图像,Java
From: https://www.cnblogs.com/Amos-Turing/p/17382439.html

相关文章

  • 搭建智能电驱型四足机器人系统平台和六自由度工业机械臂系统平台
    ♪搭建智能电驱型四足机器人系统平台,2018年2月-2018年6月:参与内容:[1] 设计基于CPG(中央模式发生器)的步态控制算法;[2] 利用Simulink与Adams构建虚拟样机并联合仿真;[3] 基于C++与RTOS(实时控制系统)设计智能电驱型四足机器人实物平台;[4] 实现对角小跑、行为、爬坡与越障等的......
  • JavaScript
    JavaScript概述ECMAScript和JavaScript的关系1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就......
  • ThreadLocal让你的多线程编程更简单【Java多线程必备】
    一、介绍ThreadLocal是Java中的一个线程局部变量,该变量在多线程并发执行时,为每个线程都提供了一个独立的副本。简单来说,ThreadLocal提供了一种在多线程环境中,使每个线程绑定自己独立的变量的方法,每个线程可以独立地改变自己的副本,而不会影响其他线程所对应的副本。二、特性1.......
  • java内存模型&synchronized和volatile在jmm上的区别
    转载:https://www.bilibili.com/video/BV1B24y1T7Qp/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=46d50b5d646b50dcb2a208d3946b1598......
  • Java程序接入ChatGPT
    目录0前言1还想体验的小伙伴可以试试2Java接入前准备3官方支持接入语言4调用费用5接口调用说明6代码实现6.1postman调用6.2Java调用7小结0前言之前文章中我们聊过怎么注册使用最近很火的ChatGPT?这期我们来看看怎么在Java中调用ChatGPT接口。传送门花了1块钱体验一......
  • JAVA快速开发框架 一键生成表单模板代码
    从计算机诞生开始,虽然编程的形式随着硬件及软件的不断进步而不停迭代,但是从事计算机技术行业的人员始终与编写代码的任务紧密联系在一起。因此如何提高软件开发的效率和质量,一直是软件工程领域的重要问题之一。这一方面是由于在不同软件开发过程中存在大量相似代码复用的情况,多次......
  • 机器学习算法原理——逻辑斯谛回归
    文章目录逻辑斯谛回归二项逻辑斯谛回归模型极大似然估计多项逻辑斯谛回归模型总结归纳逻辑斯谛回归写在前面:逻辑斯谛回归最初是数学家Verhulst用来研究人口增长是所发现的,是一个非常有趣的发现过程,b站有更详细的背景及过程推导,在此不再赘述:https://www.bilibili.com/video/BV1N......
  • JAVA快速开发框架 一键生成表单模板代码
    从计算机诞生开始,虽然编程的形式随着硬件及软件的不断进步而不停迭代,但是从事计算机技术行业的人员始终与编写代码的任务紧密联系在一起。因此如何提高软件开发的效率和质量,一直是软件工程领域的重要问题之一。这一方面是由于在不同软件开发过程中存在大量相似代码复用的情况,多次编......
  • Javascript异步编程的4种方法
    你可能知道,Javascript语言的执行环境是"单线程"(singlethread)。所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须......
  • java netty socket实例:报文长度+报文内容,springboot
    前言说实话,javanetty方面的资料不算多,尤其是自定义报文格式的,少之又少自己写了个简单的收发:报文长度+报文内容发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完善服务端启动可以直接用类文件启动,也可以通过springboot。我这里写的是用springboot启动的,可以自己按照需求自......