91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Node.js在深度學(xué)習(xí)中做圖片預(yù)處理

倩倩 ? 來源:lq ? 作者: SandaG ? 2019-09-20 15:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

最近在做一個(gè)和對(duì)象識(shí)別相關(guān)的項(xiàng)目,由于團(tuán)隊(duì)內(nèi)技術(shù)棧偏向 JavaScript ,在已經(jīng)用 PythonTensorflow 搭建好了對(duì)象識(shí)別服務(wù)器后,為了不再增加團(tuán)隊(duì)成員維護(hù)成本,所以盡可能將訓(xùn)練和識(shí)別之外的任務(wù)交給 Node.js 來做,今天要講到的圖片預(yù)處理就是其中之一。

這里對(duì)還不了解深度學(xué)習(xí)的人就幾個(gè)概念做個(gè)簡(jiǎn)單的解釋。

對(duì)象識(shí)別:對(duì)象識(shí)別可理解為計(jì)算機(jī)在一張圖片中發(fā)現(xiàn)某個(gè)或某些指定的物體,比如找到里面所有的狗。

訓(xùn)練:計(jì)算機(jī)學(xué)會(huì)對(duì)象識(shí)別這個(gè)本領(lǐng)就像人類學(xué)會(huì)說話一樣,需要不斷地練習(xí),深度學(xué)習(xí)中管這個(gè)過程叫做 “訓(xùn)練”。

訓(xùn)練集:人類學(xué)會(huì)說話需要看別人怎么說,聽別人的聲音等等,這些能夠讓自己學(xué)會(huì)說話的信息在深度學(xué)習(xí)中稱為訓(xùn)練集,只不過對(duì)象識(shí)別中需要的訓(xùn)練集只有圖片。

做圖片預(yù)處理的目的是為了解決對(duì)象識(shí)別中訓(xùn)練集不足的問題。當(dāng)對(duì)象識(shí)別應(yīng)用于某個(gè)專用領(lǐng)域的時(shí)候,就會(huì)遇到這個(gè)問題。如果你是識(shí)別一只狗,這樣的圖片一大把,而且有人已經(jīng)訓(xùn)練好了,并且可以提供服務(wù)給大家使用了。如果你是識(shí)別團(tuán)隊(duì)內(nèi)的文化衫,這樣的圖片就太少了,費(fèi)了老半天勁拍 100 張,這樣的數(shù)據(jù)量依然少得可憐。要知道網(wǎng)上那些成熟的 AI 服務(wù),訓(xùn)練集隨隨便便就成千上萬,甚至以億為單位。當(dāng)然,專用領(lǐng)域一般需求也比較簡(jiǎn)單,需要識(shí)別出來的東西種類不多,特征也比較明顯,但是仍然會(huì)希望訓(xùn)練集越大越好,這時(shí)候就可以對(duì)所擁有的圖片做一些處理,來生成新的圖片,從而擴(kuò)充當(dāng)前的訓(xùn)練集,這個(gè)過程就叫圖片預(yù)處理了。

常見的圖片預(yù)處理方式有以下幾種:

旋轉(zhuǎn) 。由于旋轉(zhuǎn)的角度可以是任意值,所以需要隨機(jī)生成一些角度來旋轉(zhuǎn),這又稱為隨機(jī)旋轉(zhuǎn)。

翻轉(zhuǎn) 。相當(dāng)于在圖片旁邊放面鏡子,新圖片就是鏡子內(nèi)的圖片,一般有水平翻轉(zhuǎn)和豎直翻轉(zhuǎn)兩種。

調(diào)節(jié)亮度 。調(diào)節(jié)過手機(jī)的亮度就能體會(huì)這個(gè)意思。

調(diào)節(jié)飽和度 。調(diào)節(jié)過傳統(tǒng)電視就能體會(huì)到這個(gè)意思,飽和度越高,色彩顯示越鮮艷,反之給人一種冷色的感覺。

調(diào)節(jié)色相 。這個(gè)相當(dāng)于給整個(gè)圖片變顏色一樣,想象一下以前調(diào)出來的綠色電視。

調(diào)節(jié)對(duì)比度 。這個(gè)會(huì)讓圖片亮的地方更亮,暗的地方更暗。也可以想象一下電視上的對(duì)比度調(diào)節(jié),不得不說電視機(jī)啟蒙了這些專業(yè)名詞。

上述每項(xiàng)操作都需要視場(chǎng)景而選擇,目前適用于我們團(tuán)隊(duì)的處理方式主要也就是上面這些。還有一些白化、Gamma 處理等操作,由于不是那么直觀,有興趣的人可以自己去了解。

安裝

gm

gm 是一個(gè)圖片處理的 npm 庫(kù),性能在 Node.js 庫(kù)中應(yīng)該算佼佼者了,它底層默認(rèn)使用的是 GraphicsMagick ,所以你需要先安裝 GraphicsMagick ,在 Mac 系統(tǒng)中直接用 Homebrew

安裝:

brew install graphicsmagick

其他系統(tǒng)的安裝方式可以直接 前往官網(wǎng) 查看。

如果你需要在圖片上添加文字,還需要安裝 ghostscript ,在 Mac 上可以用

brew install ghostscript

安裝。由于本文沒涉及到這一個(gè)功能,所以可以不用安裝。

同時(shí),需要將 gm 安裝在你的項(xiàng)目下:

npm i gm -S

預(yù)處理

為了直觀,我選了一張圖片作為預(yù)處理對(duì)象:

另外,在本文的示例代碼中,每種預(yù)處理方法的函數(shù)名都是參照 Tensorflow 中 Image

模塊的同名方法而定,更多處理圖片的方法可以 前往 Tensorflow 文檔官網(wǎng) 自行查看,同時(shí)去 gm 官方文檔 中尋找相同作用的方法。

翻轉(zhuǎn)

沿 Y 軸翻轉(zhuǎn)用到了 gm 的 .flip

方法:

import gm from ‘gm’;/*** 沿 Y 軸翻轉(zhuǎn),即上下顛倒 * @param inputPath 輸入的圖像文件路徑 * @param outputPath 輸出的圖像文件路徑 * @param callback 處理后的回調(diào)函數(shù) */function flip(inputPath, outputPath, callback) { gm(inputPath) .flip() .write(outputPath, callback);}

翻轉(zhuǎn)后的效果如下圖所示:

沿 X 軸翻轉(zhuǎn)用到了 gm 的 .flop 方法:

import gm from ‘gm’;/*** 沿 X 軸翻轉(zhuǎn),即上下顛倒 * @param inputPath 輸入的圖像文件路徑 * @param outputPath 輸出的圖像文件路徑 * @param callback 處理后的回調(diào)函數(shù) */function flop(inputPath, outputPath, callback) { gm(inputPath) .flop() .write(outputPath, callback);}

翻轉(zhuǎn)后的效果如下圖所示:

你還可以把 .flip 和 .flop 組合起來使用,形成對(duì)角線翻轉(zhuǎn)的效果:

如果把原圖看成一個(gè)前端組件,即一個(gè)購(gòu)物按鈕組,里面每個(gè)按鈕的背景可以自定義,按鈕里面由文字、分隔線、文字三種元素組成,那么上面翻轉(zhuǎn)后的圖片是可以看成同一個(gè)組件的,即可以拿來作為訓(xùn)練集。

有時(shí)候,翻轉(zhuǎn)帶來的效果并不是自己想要的,可能翻轉(zhuǎn)后,和原來的圖片就不應(yīng)該視作同一個(gè)東西了,這時(shí)候這種方法就有局限性了。

調(diào)整亮度

相比之后,調(diào)整亮度就顯得更加普適了,無論是什么圖片,調(diào)整亮度后,里面的東西依然還是原來的那個(gè)東西。

調(diào)整亮度用到了 gm 的 .modulate 方法:

/*** 調(diào)整亮度 * @param inputPath 輸入的圖像文件路徑 * @param outputPath 輸出的圖像文件路徑 * @param brightness 圖像亮度的值,基準(zhǔn)值是 100,比 100 高則是增加亮度,比 100 低則是減少亮度 * @param callback 處理后的回調(diào)函數(shù) */function adjustBrightness(inputPath, outputPath, brightness, callback) {gm(inputPath) .modulate(brightness, 100, 100) .write(outputPath, callback);}

.modulate 方法是一個(gè)多功能的方法,可以同時(shí)調(diào)整圖片的亮度、飽和度和色相三種特性,這三種特性分別對(duì)應(yīng)著該方法的三個(gè)參數(shù),這里只調(diào)整亮度,所以只改變第一個(gè)參數(shù)(比 100 高則是增加亮度,比 100 低則是減少亮度),其他保持 100 基準(zhǔn)值不變。

我把亮度從 0 - 200 的圖片都生成了出來,并進(jìn)行了對(duì)比,選出了一個(gè)亮度處理較為合適的區(qū)間??梢钥纯?0 - 200 之間相鄰亮度相差為 10 的圖片之間的差別( 提示:每張圖片的左上角標(biāo)識(shí)出了該圖片的亮度):

可以看到亮度為 60 以下的圖片,都太暗了,細(xì)節(jié)不夠明顯,亮度為 150 以上的圖片,都太亮了,也是細(xì)節(jié)不夠明顯。而經(jīng)過多張圖片綜合對(duì)比之后,我認(rèn)為 [60, 140] 這個(gè)區(qū)間的圖片質(zhì)量比較好,與原圖相比不會(huì)丟失太多細(xì)節(jié)。

再來看看亮度為 50 和 60 的兩張圖片,其實(shí)看起來像是一張圖片一樣,不符合訓(xùn)練集多樣性的原則,更何況是相鄰亮度相差為 1 的兩張圖片。所以最終決定作為訓(xùn)練集的相鄰兩張圖片亮度差為 20,這樣差異就比較明顯,比如亮度為 80 和亮度為 100 的兩張圖片。

最終,調(diào)節(jié)亮度產(chǎn)生的新圖片將會(huì)是 4 張。 從亮度為 60 的圖片開始,每增加 20 亮度就選出來加入訓(xùn)練集,直到亮度為 140 的圖片,其中亮度為 100 的圖片不算。

調(diào)節(jié)飽和度

調(diào)節(jié)飽和度也是用 .modulate 方法,只不過是調(diào)節(jié)第二個(gè)參數(shù):

/*** 調(diào)整飽和度 * @param inputPath 輸入的圖像文件路徑 * @param outputPath 輸出的圖像文件路徑 * @param saturation 圖像飽和度的值,基準(zhǔn)值是 100,比 100 高則是增加飽和度,比 100 低則是減少飽和度 * @param callback 處理后的回調(diào)函數(shù) */function adjustSaturation(inputPath, outputPath, saturation, callback) {gm(inputPath) .modulate(100, saturation, 100) .write(outputPath, callback);}

同樣按調(diào)節(jié)亮度的方法來確定飽和度的范圍以及訓(xùn)練集中相鄰兩張圖片的飽和度相差多少??梢钥纯聪噜忥柡投认嗖顬?10 的圖片之間的差別( 提示:每張圖片的左上角標(biāo)識(shí)出了該圖片的飽和度):

調(diào)節(jié)飽和度的產(chǎn)生的圖片細(xì)節(jié)沒有丟,大多都能夠用作訓(xùn)練集中的圖片,與亮度一樣,飽和度相差 20 的兩張圖片差異性明顯。另外,飽和度大于 140 的時(shí)候,圖片改變就不明顯了。 所以調(diào)節(jié)飽和度產(chǎn)生的新圖片將會(huì)是 6 張。從飽和度為 0 的圖片開始,每增加 20 飽和度就選出來加入訓(xùn)練集,直到飽和度為 140 的圖片,其中飽和度為 100 的圖片不算。

調(diào)節(jié)色相

調(diào)節(jié)色相的方法在此場(chǎng)景下是最有用的方法,產(chǎn)生的訓(xùn)練集最多,率先來看下色相相鄰為 10 的圖片之間的差距吧( 提示:每張圖片的左上角標(biāo)識(shí)出了該圖片的色相):

幾乎每個(gè)圖片都能作為新的訓(xùn)練集,由于色相調(diào)節(jié)范圍只能在 0 - 200 之間, 所以從色相為 0 的圖片開始,每增加 10 色相就選出來加入訓(xùn)練集,直到色相為 190 的圖片,其中色相為 100 的圖片不算。 這樣就能夠產(chǎn)生 20 張圖片作為訓(xùn)練集。

至于調(diào)節(jié)色相的代碼則和亮度、飽和度一樣,只是改變了第三個(gè)參數(shù):

/*** 調(diào)整色相 * @param inputPath 輸入的圖像文件路徑 * @param outputPath 輸出的圖像文件路徑 * @param hue 圖像色相的值,基準(zhǔn)值是 100,比 100 高則是增加色相,比 100 低則是減少色相 * @param callback 處理后的回調(diào)函數(shù) */function adjustHue(inputPath, outputPath, hue, callback) { gm(inputPath) .modulate(100, 100, hue).write(outputPath, callback);}

調(diào)節(jié)色相并不是萬能的,只是適用于這個(gè)場(chǎng)景,當(dāng)然,我們團(tuán)隊(duì)的需求都是類似這個(gè)場(chǎng)景的。但是,如果你要訓(xùn)練識(shí)別梨的人工智能,告訴它有個(gè)藍(lán)色的梨顯然是不合適的。

調(diào)節(jié)對(duì)比度

調(diào)整對(duì)比度用到了 gm 的 .contrast 方法:

/*** 調(diào)整對(duì)比度 * @param inputPath 輸入的圖像文件路徑 * @param outputPath 輸出的圖像文件路徑 * @param multiplier 調(diào)節(jié)對(duì)比度的因子,默認(rèn)是 0,可以為負(fù)值,n 表示增加 n 次對(duì)比度,-n 表示降低 n 次對(duì)比度 * @param callback 處理后的回調(diào)函數(shù) */function adjustContrast(inputPath, outputPath, multiplier, callback) {gm(inputPath) .contrast(multiplier) .write(outputPath, callback);}

下面是對(duì)比度因子從 -10 到 10 之間的圖像,可以看到圖片質(zhì)量較好的區(qū)間是 [-5, 2],其他都會(huì)丟失一些細(xì)節(jié)。另外相鄰對(duì)比度因子的圖片之間的差異也比較明顯,所以每張圖片都可作為訓(xùn)練集,這樣又多出 7 張圖片。

總結(jié)

通過上述 5 種方法,可以在一張圖片的基礎(chǔ)上額外獲得 40 張圖片,即訓(xùn)練集是原來的 40 倍。這還是在沒有多種方法混合使用的情況下,如果混合使用,恐怕幾百倍都不止。

gm

還支持對(duì)圖片進(jìn)行其他處理方式,你可以自己去發(fā)掘,每種方式在特定場(chǎng)景下都有自己的局限性,需要你去甄選。希望大家都有一個(gè)自己滿意的訓(xùn)練集。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1096

    瀏覽量

    42346
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4877

    瀏覽量

    90113
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5599

    瀏覽量

    124434
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    OpenClaw搭建教程:云服務(wù)器一鍵部署完整流程

    基于Node.js運(yùn)行的開源AIAgent框架,因此部署方式和很多Node.js應(yīng)用類似。只要具備一臺(tái)Linux云服務(wù)器,并安裝Node.js環(huán)境,就可以完成OpenClaw的部署。根據(jù)官方文檔的說明
    的頭像 發(fā)表于 03-12 14:39 ?117次閱讀

    Docker容器化部署完全指南

    我們團(tuán)隊(duì)從 2019 年開始全面容器化,目前線上跑著 800+ 個(gè)容器,覆蓋 Java、Go、Node.js、Python 四種技術(shù)棧。這篇文章把從安裝到生產(chǎn)環(huán)境踩過的坑全部整理出來。
    的頭像 發(fā)表于 02-09 14:09 ?459次閱讀

    從0到1搭建實(shí)時(shí)日志監(jiān)控系統(tǒng):基于WebSocket + Elasticsearch的實(shí)戰(zhàn)方案

    低成本、實(shí)時(shí)性高的日志監(jiān)控系統(tǒng)。 2. 技術(shù)選型 數(shù)據(jù)存儲(chǔ) :Elasticsearch(高效檢索與聚合) 實(shí)時(shí)推送 :WebSocket(全雙工通信,避免HTTP輪詢) 后端服務(wù) :Node.js
    發(fā)表于 01-09 16:43

    穿孔機(jī)頂頭檢測(cè)儀 機(jī)器視覺深度學(xué)習(xí)

    ,能適用惡劣工況,粉塵、高溫、氧化皮等惡劣環(huán)境均可正常工作。 測(cè)量原理 利用頂頭與周圍的物質(zhì)(水、空氣、導(dǎo)盤等)紅外輻射能量的差異,用熱成像相機(jī)拍攝出清晰的圖片,再通過深度
    發(fā)表于 12-22 14:33

    鋰電池制造 | 電芯預(yù)處理工藝的步驟詳解

    電芯預(yù)處理是鋰電池包制造的首要工序,無論是新能源汽車的續(xù)航穩(wěn)定性,還是儲(chǔ)能系統(tǒng)的循環(huán)壽命,其根基都可追溯至預(yù)處理工序?qū)﹄娦疽恢滦缘陌芽?,其核心在于通過系統(tǒng)檢測(cè)與篩選消除量產(chǎn)電芯的性能差異,為后續(xù)組裝
    的頭像 發(fā)表于 08-11 14:53 ?1652次閱讀
    鋰電池制造 | 電芯<b class='flag-5'>預(yù)處理</b>工藝的步驟詳解

    FPGA機(jī)器學(xué)習(xí)的具體應(yīng)用

    ,越來越多地被應(yīng)用于機(jī)器學(xué)習(xí)任務(wù)。本文將探討 FPGA 機(jī)器學(xué)習(xí)的應(yīng)用,特別是加速神經(jīng)網(wǎng)
    的頭像 發(fā)表于 07-16 15:34 ?2924次閱讀

    【M-K1HSE開發(fā)板免費(fèi)體驗(yàn)】M-K1HSE開發(fā)板構(gòu)建HELLO WORLD頁(yè)面

    工程存放的位置,其他參數(shù)保持默認(rèn)設(shè)置即可,點(diǎn)擊【finish 】。 其中Node用來配置當(dāng)前工程運(yùn)行的Node.js版本,可選擇使用已有的Node.js或下載新的Node.js版本 4
    發(fā)表于 07-15 04:31

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)函數(shù)

    用的云函數(shù)項(xiàng)目 確保本地Node.js環(huán)境版本正確(建議用nvm管理版本) ? 五步調(diào)試大法: 【第一步】環(huán)境配置 項(xiàng)目根目錄創(chuàng)建.agclirc文件,填上你的開發(fā)者賬號(hào)信息: { \"
    發(fā)表于 05-22 17:29

    HarmonyOS5云服務(wù)技術(shù)分享--ArkTS開發(fā)Node環(huán)境

    ? 你好呀,開發(fā)者小伙伴們!今天我們來聊聊如何在HarmonyOS(ArkTS API 9及以上)玩轉(zhuǎn)云函數(shù),特別是結(jié)合Node.js和HTTP觸發(fā)器的開發(fā)技巧。文章會(huì)手把手帶你從零開始,用最接地
    發(fā)表于 05-22 17:21

    HarmonyOS5云服務(wù)技術(shù)分享--云函數(shù)創(chuàng)建配置指南

    存。 ??運(yùn)行環(huán)境??:支持Node.js 14/18、Python3、Java 1.8,選你熟悉的語言。 ??Step 3:編寫函數(shù)代碼?? ??在線編輯??(適合簡(jiǎn)單代碼):WebIDE里直接寫代碼,支持
    發(fā)表于 05-22 17:08

    KaihongOS操作系統(tǒng):開發(fā)環(huán)境搭建

    自動(dòng)進(jìn)行開發(fā)環(huán)境診斷。如果診斷結(jié)果如下圖所示, 表示 ohpm 沒有安裝。 處理方法: Node.js 安裝路徑下啟動(dòng) cmd 命令行工具。 執(zhí)行以下命令切換 NPM 源。 npm config
    發(fā)表于 04-23 07:27

    嵌入式AI技術(shù)之深度學(xué)習(xí):數(shù)據(jù)樣本預(yù)處理過程中使用合適的特征變換對(duì)深度學(xué)習(xí)的意義

    ? 作者:蘇勇Andrew 使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)機(jī)器學(xué)習(xí),網(wǎng)絡(luò)的每個(gè)層都將對(duì)輸入的數(shù)據(jù)一次抽象,多層神經(jīng)網(wǎng)絡(luò)構(gòu)成深度學(xué)習(xí)的框架,可以深度理解數(shù)
    的頭像 發(fā)表于 04-02 18:21 ?1530次閱讀

    【教程】Node-REDChirpstack節(jié)點(diǎn)使用指南

    物聯(lián)網(wǎng)應(yīng)用開發(fā),LoRaWAN技術(shù)因其低功耗、遠(yuǎn)距離傳輸?shù)忍攸c(diǎn)而備受關(guān)注。Chirpstack作為最流行的LoRaWAN服務(wù)器之一,與Node-RED的集成為我們提供了強(qiáng)大的物聯(lián)網(wǎng)應(yīng)用開發(fā)能力
    的頭像 發(fā)表于 03-27 19:33 ?1294次閱讀
    【教程】<b class='flag-5'>Node</b>-RED<b class='flag-5'>中</b>Chirpstack節(jié)點(diǎn)使用指南

    FPGA Verilog HDL語法之編譯預(yù)處理

    Verilog HDL語言和C語言一樣也提供了編譯預(yù)處理的功能?!熬幾g預(yù)處理”是Verilog HDL編譯系統(tǒng)的一個(gè)組成部分。Verilog HDL語言允許程序中使用幾種特殊的命令(它們不是一般
    的頭像 發(fā)表于 03-27 13:30 ?1464次閱讀
    FPGA Verilog HDL語法之編譯<b class='flag-5'>預(yù)處理</b>

    樹莓派上構(gòu)建和部署 Node.js 項(xiàng)目

    探索RaspberryPi上構(gòu)建和部署Node.js項(xiàng)目的最佳實(shí)踐。通過我們的專業(yè)提示和技巧,克服常見挑戰(zhàn),使您的項(xiàng)目順利運(yùn)行。去年圣誕節(jié),我收到了一份極其令人著迷的禮物,它占據(jù)了我許多周末的時(shí)間
    的頭像 發(fā)表于 03-25 09:44 ?686次閱讀
    <b class='flag-5'>在</b>樹莓派上構(gòu)建和部署 <b class='flag-5'>Node.js</b> 項(xiàng)目