iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >如何使用Node.js在深度学习中做图片预处理
  • 743
分享到

如何使用Node.js在深度学习中做图片预处理

2024-04-02 19:04:59 743人浏览 安东尼
摘要

这篇文章给大家分享的是有关如何使用node.js在深度学习中做图片预处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景最近在做一个和对象识别相关的项目,由于团队内技术栈偏向

这篇文章给大家分享的是有关如何使用node.js深度学习中做图片预处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

背景

最近在做一个和对象识别相关的项目,由于团队内技术栈偏向 javascript,在已经用 pythonTensorflow 搭建好了对象识别服务器后,为了不再增加团队成员维护成本,所以尽可能将训练和识别之外的任务交给 node.js 来做,下面要讲到的图片预处理就是其中之一。

这里对还不了解深度学习的人就几个概念做个简单的解释

  1. 对象识别:对象识别可理解为计算机在一张图片中发现某个或某些指定的物体,比如找到里面所有的狗。

  2. 训练:计算机学会对象识别这个本领就像人类学会说话一样,需要不断地练习,深度学习中管这个过程叫做 “训练”。

  3. 训练集:人类学会说话需要看别人怎么说,听别人的声音等等,这些能够让自己学会说话的信息在深度学习中称为训练集,只不过对象识别中需要的训练集只有图片。

做图片预处理的目的是为了解决对象识别中训练集不足的问题。当对象识别应用于某个专用领域的时候,就会遇到这个问题。如果你是识别一只狗,这样的图片一大把,而且有人已经训练好了,并且可以提供服务给大家使用了。如果你是识别团队内的文化衫,这样的图片就太少了,费了老半天劲拍 100 张,这样的数据量依然少得可怜。要知道网上那些成熟的 ai 服务,训练集随随便便就成千上万,甚至以亿为单位。当然,专用领域一般需求也比较简单,需要识别出来的东西种类不多,特征也比较明显,但是仍然会希望训练集越大越好,这时候就可以对所拥有的图片做一些处理,来生成新的图片,从而扩充当前的训练集,这个过程就叫图片预处理了。

常见的图片预处理方式有以下几种:

  • 旋转。由于旋转的角度可以是任意值,所以需要随机生成一些角度来旋转,这又称为随机旋转。

  • 翻转。相当于在图片旁边放面镜子,新图片就是镜子内的图片,一般有水平翻转和竖直翻转两种。

  • 调节亮度。调节过手机的亮度就能体会这个意思。

  • 调节饱和度。调节过传统电视就能体会到这个意思,饱和度越高,色彩显示越鲜艳,反之给人一种冷色的感觉。

  • 调节色相。这个相当于给整个图片变颜色一样,想象一下以前调出来的绿色电视。

  • 调节对比度。这个会让图片亮的地方更亮,暗的地方更暗。也可以想象一下电视上的对比度调节,不得不说电视机启蒙了这些专业名词。

上述每项操作都需要视场景而选择,目前适用于我们团队的处理方式主要也就是上面这些。还有一些白化、Gamma 处理等操作,由于不是那么直观,有兴趣的人可以自己去了解。

安装 gm

gm 是一个图片处理的 npm 库,性能在 Node.js 库中应该算佼佼者了,它底层默认使用的是 GraphicsMagick,所以你需要先安装 GraphicsMagick,在 Mac 系统中直接用 Homebrew 安装:

brew install graphicsmagick

其他系统的安装方式可以直接前往官网查看。

如果你需要在图片上添加文字,还需要安装 ghostscript,在 Mac 上可以用 brew install ghostscript 安装。由于本文没涉及到这一个功能,所以可以不用安装。

同时,需要将 gm 安装在你的项目下:

npm i gm -S

预处理

为了直观,我选了一张图片作为预处理对象:

如何使用Node.js在深度学习中做图片预处理

另外,在本文的示例代码中,每种预处理方法的函数名都是参照 TensorflowImage 模块的同名方法而定,更多处理图片的方法可以前往 Tensorflow 文档官网自行查看,同时去 gm 官方文档 中寻找相同作用的方法。

翻转

沿 Y 轴翻转用到了 gm.flip 方法:

import gm from 'gm';


function flip(inputPath, outputPath, callback) {
  gm(inputPath)
    .flip()
    .write(outputPath, callback);
}

翻转后的效果如下图所示:

如何使用Node.js在深度学习中做图片预处理

沿 X 轴翻转用到了 gm.flop 方法:

import gm from 'gm';


function flop(inputPath, outputPath, callback) {
  gm(inputPath)
    .flop()
    .write(outputPath, callback);
}

翻转后的效果如下图所示:

如何使用Node.js在深度学习中做图片预处理

你还可以把 .flip.flop 组合起来使用,形成对角线翻转的效果:

如何使用Node.js在深度学习中做图片预处理

如果把原图看成一个前端组件,即一个购物按钮组,里面每个按钮的背景可以自定义,按钮里面由文字、分隔线、文字三种元素组成,那么上面翻转后的图片是可以看成同一个组件的,即可以拿来作为训练集。

有时候,翻转带来的效果并不是自己想要的,可能翻转后,和原来的图片就不应该视作同一个东西了,这时候这种方法就有局限性了。

调整亮度

相比之后,调整亮度就显得更加普适了,无论是什么图片,调整亮度后,里面的东西依然还是原来的那个东西。

调整亮度用到了 gm.modulate 方法:


function adjustBrightness(inputPath, outputPath, brightness, callback) {
  gm(inputPath)
    .modulate(brightness, 100, 100)
    .write(outputPath, callback);
}

.modulate 方法是一个多功能的方法,可以同时调整图片的亮度、饱和度和色相三种特性,这三种特性分别对应着该方法的三个参数,这里只调整亮度,所以只改变第一个参数(比 100 高则是增加亮度,比 100 低则是减少亮度),其他保持 100 基准值不变。

我把亮度从 0 - 200 的图片都生成了出来,并进行了对比,选出了一个亮度处理较为合适的区间。可以看看 0 - 200 之间相邻亮度相差为 10 的图片之间的差别(提示:每张图片的左上角标识出了该图片的亮度):

如何使用Node.js在深度学习中做图片预处理

可以看到亮度为 60 以下的图片,都太暗了,细节不够明显,亮度为 150 以上的图片,都太亮了,也是细节不够明显。而经过多张图片综合对比之后,我认为 [60, 140] 这个区间的图片质量比较好,与原图相比不会丢失太多细节。

再来看看亮度为 50 和 60 的两张图片,其实看起来像是一张图片一样,不符合训练集多样性的原则,更何况是相邻亮度相差为 1 的两张图片。所以最终决定作为训练集的相邻两张图片亮度差为 20,这样差异就比较明显,比如亮度为 80 和亮度为 100 的两张图片。

最终,调节亮度产生的新图片将会是 4 张。从亮度为 60 的图片开始,每增加 20 亮度就选出来加入训练集,直到亮度为 140 的图片,其中亮度为 100 的图片不算。

调节饱和度

调节饱和度也是用 .modulate 方法,只不过是调节第二个参数:


function adjustSaturation(inputPath, outputPath, saturation, callback) {
  gm(inputPath)
    .modulate(100, saturation, 100)
    .write(outputPath, callback);
}

同样按调节亮度的方法来确定饱和度的范围以及训练集中相邻两张图片的饱和度相差多少。可以看看相邻饱和度相差为 10 的图片之间的差别(提示:每张图片的左上角标识出了该图片的饱和度):

如何使用Node.js在深度学习中做图片预处理

调节饱和度的产生的图片细节没有丢,大多都能够用作训练集中的图片,与亮度一样,饱和度相差 20 的两张图片差异性明显。另外,饱和度大于 140 的时候,图片改变就不明显了。所以调节饱和度产生的新图片将会是 6 张。从饱和度为 0 的图片开始,每增加 20 饱和度就选出来加入训练集,直到饱和度为 140 的图片,其中饱和度为 100 的图片不算。

调节色相

调节色相的方法在此场景下是最有用的方法,产生的训练集最多,率先来看下色相相邻为 10 的图片之间的差距吧(提示:每张图片的左上角标识出了该图片的色相):

如何使用Node.js在深度学习中做图片预处理

几乎每个图片都能作为新的训练集,由于色相调节范围只能在 0 - 200 之间,所以从色相为 0 的图片开始,每增加 10 色相就选出来加入训练集,直到色相为 190 的图片,其中色相为 100 的图片不算。 这样就能够产生 20 张图片作为训练集。

至于调节色相的代码则和亮度、饱和度一样,只是改变了第三个参数:


function adjustHue(inputPath, outputPath, hue, callback) {
  gm(inputPath)
    .modulate(100, 100, hue)
    .write(outputPath, callback);
}

调节色相并不是万能的,只是适用于这个场景,当然,我们团队的需求都是类似这个场景的。但是,如果你要训练识别梨的人工智能,告诉它有个蓝色的梨显然是不合适的。

调节对比度

调整对比度用到了 gm.contrast 方法:


function adjustContrast(inputPath, outputPath, multiplier, callback) {
  gm(inputPath)
    .contrast(multiplier)
    .write(outputPath, callback);
}

下面是对比度因子从 -10 到 10 之间的图像,可以看到图片质量较好的区间是 [-5, 2],其他都会丢失一些细节。另外相邻对比度因子的图片之间的差异也比较明显,所以每张图片都可作为训练集,这样又多出 7 张图片。

如何使用Node.js在深度学习中做图片预处理

感谢各位的阅读!关于“如何使用Node.js在深度学习中做图片预处理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 如何使用Node.js在深度学习中做图片预处理

本文链接: https://www.lsjlt.com/news/73961.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Node.js在深度学习中做图片预处理
    这篇文章给大家分享的是有关如何使用Node.js在深度学习中做图片预处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景最近在做一个和对象识别相关的项目,由于团队内技术栈偏向 ...
    99+
    2024-04-02
  • PHP中如何进行图像处理和深度学习?
    PHP是一种常见的开发语言,被广泛应用于构建Web应用程序和网站。虽然它并不是一个专门用于图像处理和深度学习的工具,但PHP社区提供了许多现成的库和框架,可以用于这些任务。下面将介绍几个常用的PHP库和框架,并讨论它们如何进行图像处理和深度...
    99+
    2023-05-23
    深度学习 PHP图像处理 PHP深度学习
  • Python深度学习之使用Albumentations对图像做增强
    目录一、导入所需的库二、定义可视化函数显示图像上的边界框和类标签三、获取图像和标注四、使用RandomSizedBBoxSafeCrop保留原始图像中的所有边界框五、定义增强管道六、...
    99+
    2024-04-02
  • 在PHP中如何进行深度学习开发?
    随着人工智能的发展,深度学习已成为当前最热门和前沿的技术之一。作为一种强大的机器学习算法,深度学习在图像识别、自然语言处理、语音识别等领域得到了广泛的应用和发展。在这里我们将探讨如何在PHP中开展深度学习开发。一、PHP中的深度学习框架目前...
    99+
    2023-05-14
    深度学习 开发 PHP
  • 如何使用PHP进行深度迁移学习和知识图谱?
    随着人工智能技术的不断发展,深度学习已经成为了当今最热门的技术之一。而在深度学习中,深度迁移学习和知识图谱也是备受关注的技术,它们可以帮助我们更好地挖掘数据,并为我们带来更加准确的预测模型。那么,如何使用PHP进行深度迁移学习和知识图谱呢?...
    99+
    2023-05-21
    知识图谱 PHP 深度迁移学习
  • 如何在Python中处理图片处理的问题
    如何在Python中处理图片处理的问题,需要具体代码示例在如今的数字化时代,图片已经成为人们日常生活中不可或缺的一部分。我们随时随地可以通过手机拍摄、下载网络上的图片。然而,有时我们需要对这些图片进行一些处理,如裁剪、缩放、滤镜等操作。本文...
    99+
    2023-10-22
    Python 图片处理
  • 如何使用深度学习和OpenCV进行目标检测
    这篇文章给大家分享的是有关如何使用深度学习和OpenCV进行目标检测的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用深度学习和 OpenCV 进行目标检测基于深度学习的对象检测时,您可能会遇到三种主要的对象检测...
    99+
    2023-06-22
  • 怎么在Python中使用numpy处理图片
    怎么在Python中使用numpy处理图片?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端...
    99+
    2023-06-14
  • Keras中如何使用学习率调度器
    Keras提供了一个Callback类,可以在模型训练过程中动态地调整学习率。可以通过在fit()方法中传入callbacks参数来...
    99+
    2024-04-02
  • 如何在.net中使用预处理指令符
    今天就跟大家聊聊有关如何在.net中使用预处理指令符,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是预处理指令符?当C#编译器找到一条预处理指令#if,最后找到一条指令时,#en...
    99+
    2023-06-14
  • [超级详细]如何在深度学习训练模型过程中使用GPU加速
    前言 在深度学习当中,我们训练模型通常要对模型进行反复的优化训练,仅用CPU来进行训练的话需要花费很长时间,但是我们可以使用GPU来加速训练模型,这样就可以大大减少我们训练模型花费的时间。下图是我在训...
    99+
    2023-09-28
    python 深度学习 tensorflow keras 人工智能
  • PHP中如何使用imagettftext函数处理图片
    PHP中如何使用imagettftext函数处理图片,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。定义写 ttf 文字到图中。语法:array imagettf...
    99+
    2023-06-17
  • 如何在PHP中使用数据预处理函数
    数据预处理函数是一种用于 PHP 和数据库之间进行交互的方法。由于 SQL 非常容易受到注入式攻击的攻击,数据预处理函数的使用让我们能够更加安全地处理数据。在本文中,我们将学习如何在 PHP 中使用数据预处理函数。什么是数据预处理函数?数据...
    99+
    2023-05-18
    函数 PHP 数据预处理
  • 【深度学习:入门】如何配置CUDA,使用gpu本地训练
    文章目录 Cuda的下载及安装cuda版本cuda下载 cuDNN下载及安装cuDNN下载 配置环境变量测试CUDA下载torch包验证cuda是否可用 Cuda的下载及安装 ...
    99+
    2023-09-01
    深度学习 人工智能 python pytorch
  • Java 学习笔记:如何在 Django 中使用 NumPy 实现数据处理?
    在 Django 中使用 NumPy 可以帮助我们更方便地进行数据处理和分析。NumPy 是一个用于科学计算的 Python 库,它提供了一个多维数组对象和一组用于处理这些数组的函数。在本文中,我们将介绍如何在 Django 中使用 Nu...
    99+
    2023-09-27
    学习笔记 numy django
  • 如何在conda虚拟环境中配置cuda+cudnn+pytorch深度学习环境
    首先,我们要明确,我们是要在虚拟环境中安装cuda和cuDNN!!!只需要在虚拟环境中安装就可以了。 下面的操作默认你安装好了python 一、conda创建并激活虚拟环境 前提:确...
    99+
    2023-03-23
    conda中配置cuda conda中配置cudnn conda中配置pytorch学习环境 pytorch学习环境
  • 如何在PHP中实现图片上传和处理
    随着移动互联网的发展,图片已经成为了用户分享和沟通的重要离不开的元素。传统的图片上传需要通过FTP或者HTTP的方式进行,但是这种方式不仅繁琐,而且操作不友好。为了解决这个问题,人们逐渐开始使用PHP语言实现图片上传和处理。在本篇文章中,我...
    99+
    2023-05-20
    PHP 图片处理 图片上传
  • vue项目中如何使用vue-cropper做图片裁剪
    这篇文章主要介绍了vue项目中如何使用vue-cropper做图片裁剪的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue项目中如何使用vue-cropper做图片裁剪文章都会有所收获,下面我们一起来看看吧。一...
    99+
    2023-07-04
  • 如何使用 PHP 函数处理图片数据?
    php 提供多种函数处理图像数据,包括创建、修改和显示图像,利用 gd 库实现。常用 php 图像处理函数有:imagecreate(创建图像)、imagecopy(复制图像)、imag...
    99+
    2024-05-01
    php 图片数据处理
  • 深度学习:使用UNet做图像语义分割,训练自己制作的数据集,详细教程
    语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同,语义分割需要判断图像每个像素点的类别,进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等...
    99+
    2023-08-31
    深度学习 计算机视觉 语义分割 python pytorch
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作