0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV4.x可实现加载模型与执行推断

OpenCV学堂 来源:OpenCV学堂 作者:OpenCV学堂 2022-07-30 11:58 次阅读

概述

OpenCV4.x发布以后,有很多新的特性与黑科技支持,无论是支持OpenVINO加速、图计算模块、二维码识别,还是DNN中新增加的人脸检测与识别模型,作为OpenCV开发者的我深深被吸引,几乎只要有时间就会一个一个的去发现与之前的不同之处。OpenCV DNN模块,不仅支持图像分类、对象检测、人脸检测、图像分割等操作除外,还支持对灰度图像的自动彩色化转换,而且效果十分靠谱,亲测有效!

着色模型(colorization model)

该模型是在2016发表在ECCV上面的,该模型与之前的基于CNN模型的不同之处在于,它是一个无监督的学习过程,不会把着色对象与训练生成看成是一个回归问题、而且是使用CIE Lab色彩空间,使用L分量作为输入,输出为颜色分量a,b,通过对颜色分量进行量化,把网络作为一个分类问题对待, 对得到输出结果,最终加上L分量之后,得到着色之后的图像,模型架构如下:

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

其中卷积层每一个block是有几个重复的conv卷积操作与ReLU + BN层构成!其中蓝色部分,是a,b颜色的313对ab量化表示。最终学习到的就是WxHx313输出,进一步转换为Color ab的输出, 加上L分量之后就是完整的图像输出!313对ab色彩空间量化表示如下:

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

针对自然场景下,ab值较低导致生成图像的失真问题,作者通过分类再平衡技术依靠训练阶段,通过对损失函数调整像素权重,实现了比较好的效果。作者的github上可以查看该模型的实现源码。

模型下载地址如下

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

论文地址

https://arxiv.org/abs/1606.02147

OpenCV中使用

下载ENet预训练模型,通过OpenCV DNN支持,可以实现加载模型与执行推断,对大多数的灰度图像实现自然着色,毫无违和感!步骤如下:

加载模型

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";

#加载网络
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)]

转换输入与执行

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)

#色彩空间转换
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为输入网络图像大小
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))

解码输出结果

#解码输出颜色值
(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)))

运行结果:

输入彩色图像,转为灰度图像,然后自动着色对比一下!

直接输入灰度图像,着色:

看效果,从此以后再也不担心灰度图像无法自动上色啦!

OpenCV成功解锁!

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47689
  • 人脸检测
    +关注

    关注

    0

    文章

    71

    浏览量

    16286
  • OpenCV
    +关注

    关注

    29

    文章

    611

    浏览量

    40786

原文标题:OpenCV4.0 灰度图像彩色化

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用全卷积网络模型实现图像分割

    OpenCv-C++-深度神经网络(DNN)模块-使用FCN模型实现图像分割
    发表于 05-28 07:33

    Vivado HLS实现OpenCV图像处理的设计流程与分析

    《》数据类型,这种类型用于模型化视频像素流处理,实质等同于hls::steam《》流的类型,而不是OpenCV中在外部memory中存储的matrix矩阵类型。因此,在HLS实现OpenCV
    发表于 07-08 08:30

    【飞凌嵌入式OKMX8MP-C 开发板试用体验】OpenCV-DNN移植&使用体验(基于YOLOV3模型识别物体)

    ); cvDestroyWindow("video"); }实际上效果不如直接用V4L2库转为MJPEG的效果好,OpenCV有意思的应用是图像处理和人工智能识别,这里我参考了飞凌文档提供的,基于YOLOV3模型
    发表于 02-21 00:22

    怎样使用PyTorch Hub去加载YOLOv5模型

    图像会自动传输到正确的模型设备。静音输出模型可以静默加载_verbose=False:输入通道要加载具有 4 个输入通道而不是默认的 3 个
    发表于 07-22 16:02

    如何利用OpenCV实现一种轻量级目标破检测模型

    讲的是 NanoDet,后续可能会跟上NanoDet的相关文章2020年,在深度学习目标检测领域诞生了yolov4,yolov5和nanodet这些优秀的检测模型,有许多的微信公众号报道这些算法模型。深度学习目标
    发表于 09-21 16:48

    【触觉智能Purple Pi开发板试用】FastestDet目标检测模型应用

    替代opencv最后执行 build.sh,编译出 FastestDet 程序0x2 测试 FastestDet将编译好的 FastestDet 连同 FastestDet模型文件,
    发表于 11-27 22:09

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

    在 CPU 上推断出 FP32 模型格式和 FP16 模型格式。 FP32 模型格式的推断速度比 FP16
    发表于 08-15 08:03

    请问在新CPU上推断INT8模型的速度是否比旧CPU快?

    与采用旧 CPU 的推理相比,在新 CPU 上推断的 INT8 模型的推理速度更快。
    发表于 08-15 08:28

    运行多个进程时,OpenVINO trade推断时间会增加是为什么?如何解决?

    通过运行两个进程来推断同一个模型推断时间翻倍。 使用OpenVINO™推断模型。 运行单个过程时,
    发表于 08-15 07:04

    Xilinx如何实现AI推断

    Xilinx 提供全面的硬件和软件解决方案,以实现 AI 推断。下图显示了高层次组件。
    发表于 06-01 10:29 899次阅读
    Xilinx如何<b class='flag-5'>实现</b>AI<b class='flag-5'>推断</b>

    如何使用OpenCV实现模型加载与推演

    今早在GitHub上收到一则issue,发信人为Suaro。 Suaro希望使用OpenCV实现模型加载与推演,但是没有成功,因此开了issue寻求我的帮助。 现场围观该Issue:
    的头像 发表于 11-27 09:43 2139次阅读

    Buffer加载AI模型的步骤

    我们在进行CNN模型推理的时候,需要预先从DDR或者ROM中加载AI模型
    的头像 发表于 01-23 09:36 2328次阅读
    Buffer<b class='flag-5'>加载</b>AI<b class='flag-5'>模型</b>的步骤

    从Buffer加载AI模型

    我们在进行CNN模型推理的时候,需要预先从DDR或者ROM中加载AI模型。大家平时一般用的是create from file的形式,为了保护自己的模型IP,...
    发表于 01-25 19:26 1次下载
    从Buffer<b class='flag-5'>加载</b>AI<b class='flag-5'>模型</b>

    如何在OpenCV实现CUDA加速

    OpenCV4.x中关于CUDA加速的内容主要有两个部分,第一部分是之前OpenCV支持的图像处理与对象检测传统算法的CUDA加速;第二部分是OpenCV4.2版本之后开始支持的针对深度学习卷积神经网络
    的头像 发表于 09-05 10:03 4530次阅读

    OpenCV 如何加载图片

    上都实现一遍。 OpenCV 的内容挺多的,而且不使用的话,容易忘记,所以通过制造工具的方式来给自己加深印象,平常要处理图片的时候,就可以用自己的工具直接处理,不需要每次都去重复的写代码。 今天我们就来看看,学习 OpenCV
    的头像 发表于 10-09 15:01 459次阅读