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

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

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

OpenCV4.x可實(shí)現(xiàn)加載模型與執(zhí)行推斷

OpenCV學(xué)堂 ? 來(lái)源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-07-30 11:58 ? 次閱讀

概述

OpenCV4.x發(fā)布以后,有很多新的特性與黑科技支持,無(wú)論是支持OpenVINO加速、圖計(jì)算模塊、二維碼識(shí)別,還是DNN中新增加的人臉檢測(cè)與識(shí)別模型,作為OpenCV開發(fā)者的我深深被吸引,幾乎只要有時(shí)間就會(huì)一個(gè)一個(gè)的去發(fā)現(xiàn)與之前的不同之處。OpenCV DNN模塊,不僅支持圖像分類、對(duì)象檢測(cè)、人臉檢測(cè)、圖像分割等操作除外,還支持對(duì)灰度圖像的自動(dòng)彩色化轉(zhuǎn)換,而且效果十分靠譜,親測(cè)有效!

著色模型(colorization model)

該模型是在2016發(fā)表在ECCV上面的,該模型與之前的基于CNN模型的不同之處在于,它是一個(gè)無(wú)監(jiān)督的學(xué)習(xí)過(guò)程,不會(huì)把著色對(duì)象與訓(xùn)練生成看成是一個(gè)回歸問(wèn)題、而且是使用CIE Lab色彩空間,使用L分量作為輸入,輸出為顏色分量a,b,通過(guò)對(duì)顏色分量進(jìn)行量化,把網(wǎng)絡(luò)作為一個(gè)分類問(wèn)題對(duì)待, 對(duì)得到輸出結(jié)果,最終加上L分量之后,得到著色之后的圖像,模型架構(gòu)如下:

34f45596-0f47-11ed-ba43-dac502259ad0.jpg

其中卷積層每一個(gè)block是有幾個(gè)重復(fù)的conv卷積操作與ReLU + BN層構(gòu)成!其中藍(lán)色部分,是a,b顏色的313對(duì)ab量化表示。最終學(xué)習(xí)到的就是WxHx313輸出,進(jìn)一步轉(zhuǎn)換為Color ab的輸出, 加上L分量之后就是完整的圖像輸出!313對(duì)ab色彩空間量化表示如下:

350e034c-0f47-11ed-ba43-dac502259ad0.jpg

針對(duì)自然場(chǎng)景下,ab值較低導(dǎo)致生成圖像的失真問(wèn)題,作者通過(guò)分類再平衡技術(shù)依靠訓(xùn)練階段,通過(guò)對(duì)損失函數(shù)調(diào)整像素權(quán)重,實(shí)現(xiàn)了比較好的效果。作者的github上可以查看該模型的實(shí)現(xiàn)源碼。

模型下載地址如下

https://github.com/e-lab/ENet-training

論文地址

https://arxiv.org/abs/1606.02147

OpenCV中使用

下載ENet預(yù)訓(xùn)練模型,通過(guò)OpenCV DNN支持,可以實(shí)現(xiàn)加載模型與執(zhí)行推斷,對(duì)大多數(shù)的灰度圖像實(shí)現(xiàn)自然著色,毫無(wú)違和感!步驟如下:

加載模型

modelTxt="D:/projects/models/color/colorization_deploy_v2.prototxt";
modelBin="D:/projects/models/color/colorization_release_v2.caffemodel";
pts_txt="D:/projects/models/color/pts_in_hull.npy";

#加載網(wǎng)絡(luò)
net=cv.dnn.readNetFromCaffe(modelTxt,modelBin)
pts_in_hull=np.load(pts_txt)#loadclustercenters

#populateclustercentersas1x1convolutionkernel
pts_in_hull=pts_in_hull.transpose().reshape(2,313,1,1)
net.getLayer(net.getLayerId('class8_ab')).blobs=[pts_in_hull.astype(np.float32)]
net.getLayer(net.getLayerId('conv8_313_rh')).blobs=[np.full([1,313],2.606,np.float32)]

轉(zhuǎn)換輸入與執(zhí)行

frame=cv.imread("D:/images/yuan_test.png")
h,w=frame.shape[:2]
img_rgb=(frame[:,:,[2,1,0]]*1.0/255).astype(np.float32)

#色彩空間轉(zhuǎn)換
img_lab=cv.cvtColor(img_rgb,cv.COLOR_BGR2Lab)
img_l=img_lab[:,:,0]#pulloutLchannel
(H_orig,W_orig)=img_rgb.shape[:2]#originalimagesize

#resize為輸入網(wǎng)絡(luò)圖像大小
img_rs=cv.resize(img_rgb,(W_in,H_in))
img_lab_rs=cv.cvtColor(img_rs,cv.COLOR_BGR2Lab)

#選擇一L通道分量
img_l_rs=img_lab_rs[:,:,0]
img_l_rs-=50#subtract50formean-centering

#輸入L分量,開始操作
net.setInput(cv.dnn.blobFromImage(img_l_rs))
ab_dec=net.forward()[0,:,:,:].transpose((1,2,0))

解碼輸出結(jié)果

#解碼輸出顏色值
(H_out,W_out)=ab_dec.shape[:2]
ab_dec_us=cv.resize(ab_dec,(W_orig,H_orig))
img_lab_out=np.concatenate((img_l[:,:,np.newaxis],ab_dec_us),axis=2)
img_bgr_out=np.clip(cv.cvtColor(img_lab_out,cv.COLOR_Lab2BGR),0,1)

顯示著色圖像

#顯示著色
frame=cv.resize(frame,(w,h))
cv.imshow('origin',frame)
cv.imshow('gray',cv.cvtColor(frame,cv.COLOR_RGB2GRAY))

#fix4.0imshowissue
cv.normalize(img_bgr_out,img_bgr_out,0,255,cv.NORM_MINMAX)
cv.imshow('colorized',cv.resize(np.uint8(img_bgr_out),(w,h)))

運(yùn)行結(jié)果:

輸入彩色圖像,轉(zhuǎn)為灰度圖像,然后自動(dòng)著色對(duì)比一下!

直接輸入灰度圖像,著色:

看效果,從此以后再也不擔(dān)心灰度圖像無(wú)法自動(dòng)上色啦!

OpenCV成功解鎖!

審核編輯:彭靜

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

    關(guān)注

    1

    文章

    3112

    瀏覽量

    48658
  • 人臉檢測(cè)
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    16436
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    624

    瀏覽量

    41214

原文標(biāo)題:OpenCV4.0 灰度圖像彩色化

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenCV4.8 CUDA編程代碼教程

    OpenCV4支持通過(guò)GPU實(shí)現(xiàn)CUDA加速執(zhí)行,實(shí)現(xiàn)對(duì)OpenCV圖像處理程序的加速運(yùn)行,當(dāng)前支持加速的模塊包括如下。
    的頭像 發(fā)表于 12-05 09:56 ?954次閱讀
    <b class='flag-5'>OpenCV</b>4.8 CUDA編程代碼教程

    Vivado HLS實(shí)現(xiàn)OpenCV圖像處理的設(shè)計(jì)流程與分析

    《》數(shù)據(jù)類型,這種類型用于模型化視頻像素流處理,實(shí)質(zhì)等同于hls::steam《》流的類型,而不是OpenCV中在外部memory中存儲(chǔ)的matrix矩陣類型。因此,在HLS實(shí)現(xiàn)OpenCV
    發(fā)表于 07-08 08:30

    【飛凌嵌入式OKMX8MP-C 開發(fā)板試用體驗(yàn)】OpenCV-DNN移植&使用體驗(yàn)(基于YOLOV3模型識(shí)別物體)

    ); cvDestroyWindow("video"); }實(shí)際上效果不如直接用V4L2庫(kù)轉(zhuǎn)為MJPEG的效果好,OpenCV有意思的應(yīng)用是圖像處理和人工智能識(shí)別,這里我參考了飛凌文檔提供的,基于YOLOV3模型
    發(fā)表于 02-21 00:22

    怎樣使用PyTorch Hub去加載YOLOv5模型

    圖像會(huì)自動(dòng)傳輸?shù)秸_的模型設(shè)備。靜音輸出模型可以靜默加載_verbose=False:輸入通道要加載具有 4 個(gè)輸入通道而不是默認(rèn)的 3 個(gè)
    發(fā)表于 07-22 16:02

    如何利用OpenCV實(shí)現(xiàn)一種輕量級(jí)目標(biāo)破檢測(cè)模型

    講的是 NanoDet,后續(xù)可能會(huì)跟上NanoDet的相關(guān)文章2020年,在深度學(xué)習(xí)目標(biāo)檢測(cè)領(lǐng)域誕生了yolov4,yolov5和nanodet這些優(yōu)秀的檢測(cè)模型,有許多的微信公眾號(hào)報(bào)道這些算法模型。深度學(xué)習(xí)目標(biāo)
    發(fā)表于 09-21 16:48

    【觸覺(jué)智能Purple Pi開發(fā)板試用】FastestDet目標(biāo)檢測(cè)模型應(yīng)用

    替代opencv最后執(zhí)行 build.sh,編譯出 FastestDet 程序0x2 測(cè)試 FastestDet將編譯好的 FastestDet 連同 FastestDet模型文件,
    發(fā)表于 11-27 22:09

    推斷FP32模型格式的速度比CPU上的FP16模型格式快是為什么?

    在 CPU 上推斷出 FP32 模型格式和 FP16 模型格式。 FP32 模型格式的推斷速度比 FP16
    發(fā)表于 08-15 08:03

    統(tǒng)計(jì)數(shù)據(jù)加載模型的研究與實(shí)現(xiàn)

    通過(guò)對(duì)統(tǒng)計(jì)信息化過(guò)程中遇到的問(wèn)題進(jìn)行分析,將統(tǒng)計(jì)元數(shù)據(jù)引入統(tǒng)計(jì)信息系統(tǒng),推進(jìn)統(tǒng)計(jì)數(shù)據(jù)標(biāo)準(zhǔn)化,并提出基于SDMX(統(tǒng)計(jì)數(shù)據(jù)元數(shù)據(jù)交換)標(biāo)準(zhǔn)的數(shù)據(jù)加載模型。數(shù)據(jù)加載模型
    發(fā)表于 01-09 14:17 ?11次下載

    Xilinx如何實(shí)現(xiàn)AI推斷

    Xilinx 提供全面的硬件和軟件解決方案,以實(shí)現(xiàn) AI 推斷。下圖顯示了高層次組件。
    發(fā)表于 06-01 10:29 ?1019次閱讀
    Xilinx如何<b class='flag-5'>實(shí)現(xiàn)</b>AI<b class='flag-5'>推斷</b>

    如何使用OpenCV來(lái)實(shí)現(xiàn)模型加載與推演

    今早在GitHub上收到一則issue,發(fā)信人為Suaro。 Suaro希望使用OpenCV來(lái)實(shí)現(xiàn)模型加載與推演,但是沒(méi)有成功,因此開了issue尋求我的幫助。 現(xiàn)場(chǎng)圍觀該Issue:
    的頭像 發(fā)表于 11-27 09:43 ?2344次閱讀

    Buffer加載AI模型的步驟

    我們?cè)谶M(jìn)行CNN模型推理的時(shí)候,需要預(yù)先從DDR或者ROM中加載AI模型。
    的頭像 發(fā)表于 01-23 09:36 ?2533次閱讀
    Buffer<b class='flag-5'>加載</b>AI<b class='flag-5'>模型</b>的步驟

    OpenCV中支持的非分類與檢測(cè)視覺(jué)模型

    前面給大家分別匯總了OpenCV中支持的圖像分類與對(duì)象檢測(cè)模型,視覺(jué)視覺(jué)任務(wù)除了分類與檢測(cè)還有很多其他任務(wù),這里我們就來(lái)OpenCV中支持的非分類與檢測(cè)的視覺(jué)模型匯總一下。
    的頭像 發(fā)表于 08-19 09:10 ?1226次閱讀

    如何在OpenCV實(shí)現(xiàn)CUDA加速

    OpenCV4.x中關(guān)于CUDA加速的內(nèi)容主要有兩個(gè)部分,第一部分是之前OpenCV支持的圖像處理與對(duì)象檢測(cè)傳統(tǒng)算法的CUDA加速;第二部分是OpenCV4.2版本之后開始支持的針對(duì)深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-05 10:03 ?4991次閱讀

    OpenCV 如何加載圖片

    實(shí)現(xiàn)一遍。 OpenCV 的內(nèi)容挺多的,而且不使用的話,容易忘記,所以通過(guò)制造工具的方式來(lái)給自己加深印象,平常要處理圖片的時(shí)候,就可以用自己的工具直接處理,不需要每次都去重復(fù)的寫代碼。 今天我們就來(lái)看看,學(xué)習(xí) OpenCV 如何
    的頭像 發(fā)表于 10-09 15:01 ?668次閱讀

    如何使用Tensorflow保存或加載模型

    TensorFlow是一個(gè)廣泛使用的開源機(jī)器學(xué)習(xí)庫(kù),它提供了豐富的API來(lái)構(gòu)建和訓(xùn)練各種深度學(xué)習(xí)模型。在模型訓(xùn)練完成后,保存模型以便將來(lái)使用或部署是一項(xiàng)常見的需求。同樣,加載已保存的
    的頭像 發(fā)表于 07-04 13:07 ?1168次閱讀