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

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

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

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

OpenCV學堂 ? 來源:OpenCV學堂 ? 作者:OpenCV學堂 ? 2022-07-30 11:58 ? 次閱讀

概述

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

著色模型(colorization model)

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

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

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

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

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

模型下載地址如下

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

論文地址

https://arxiv.org/abs/1606.02147

OpenCV中使用

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

加載模型

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)))

運行結(jié)果:

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

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

看效果,從此以后再也不擔心灰度圖像無法自動上色啦!

OpenCV成功解鎖!

審核編輯:彭靜

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

    關(guān)注

    1

    文章

    3243

    瀏覽量

    48836
  • 人臉檢測
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    16462
  • OpenCV
    +關(guān)注

    關(guān)注

    31

    文章

    635

    瀏覽量

    41347

原文標題:OpenCV4.0 灰度圖像彩色化

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

收藏 人收藏

    評論

    相關(guān)推薦

    OpenCV4.8 CUDA編程代碼教程

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

    如何用OpenCV的相機捕捉視頻進行人臉檢測--基于米爾NXP i.MX93開發(fā)板

    : breakvideo.release()cv2.destroyAllWindows() 保存后執(zhí)行”python3 opencv_test.py OpenCV裝好后,可以為后面的人臉檢測提供可行性。 要
    發(fā)表于 11-15 17:58

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

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

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

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

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

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

    如何利用OpenCV實現(xiàn)一種輕量級目標破檢測模型

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

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

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

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

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

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

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

    如何使用OpenCV實現(xiàn)模型加載與推演

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

    Buffer加載AI模型的步驟

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

    OpenCV中支持的非分類與檢測視覺模型

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

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

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

    OpenCV 如何加載圖片

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

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

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