hikey970学习-012 hikey970上移植图像去雨深度神经网络算法

摘要:本文在hikey970嵌入式设备上运行图像去雨深度神经网络算法,验证hikey970运行神经网络模型的性能与效果。

一、图像去雨简介
    图像去雨处理指的是对于一张雨中的图片,去除画面中的雨滴,得到还原后的图片,与图片去雾、超分辨率等同属CV领域中图像处理的范畴。去雨作为一种偏向low level的图像处理,本质上是分离图片中的内容与叠加的雨滴模式,并加以去除。这一问题以往多采用字典学习、稀疏编码等方法加以建模。在2017年的CVPR中同时出现了2篇使用deep learning处理去雨问题的文章,本文将对其中的一篇文章“Removing rain from single images via a deep detail network”的demo例子移植到hikey970上运行。
    本文使用的是一种新的基于深度卷积神经网络(CNN)结构的图像去雨算法,用于去除单个图像的雨滴条纹。受深度残差网络(ResNet)的启发,通过改变映射形式简化了学习过程,该算法使用了一个深度细节网络(deep detail network),直接减少从输入到输出的映射范围,使学习过程更容易。为了进一步提高去雨效果,该算法在训练中使用先验的图像域知识,聚焦高频细节,消除背景干扰,并将模型聚焦于图像中的雨结构。
《hikey970学习-012 hikey970上移植图像去雨深度神经网络算法》
论文:
X. Fu, J. Huang, D. Zeng, Y. Huang, X. Ding and J. Paisley. “Removing Rain from Single Images via a Deep Detail Network”, CVPR, 2017.
http://www.columbia.edu/~jwp2128/Papers/FuHuangetal2017.pdf
代码:https://xueyangfu.github.io/projects/cvpr2017.html

    为什么要将图像去雨深度神经网络算法移植到hikey970嵌入式设备上运行?这是因为图像去雨算法的应用领域主要在监控视频、比赛视频等需要增强画质的场合中,大部分情况下这些场合中不适宜使用高性能计算机、服务器来运行该算法,所使用的图像处理设备必须能够解决计算性能受限、网络带宽不足、功耗要求高等问题,而hikey970作为一款新推出的面向人工智能应用的高性能低功耗嵌入式计算设备,完全可以满足要求,因此我们选择把该算法移植到hikey970上。
《hikey970学习-012 hikey970上移植图像去雨深度神经网络算法》

二、hikey970运行环境准备
(1)检查依赖库
    在hikey970上使用的是python3.5运行该算法,使用的深度学习框架是tensorflow,需要调用的依赖库如下:

tensorflow
opencv
matplotlib
numpy
re

在执行程序之前,务必安装好以上的库,可参考前面的文章:
hikey970学习-011 hikey970上安装opencv:
https://blog.csdn.net/qqqzmy/article/details/82855377
hikey970学习-009 tensorflow环境的搭建:
https://blog.csdn.net/qqqzmy/article/details/82767635

(2)遇到的import问题解决
    在执行import matplotlib.pyplot as plt可能会遇见问题:
《hikey970学习-012 hikey970上移植图像去雨深度神经网络算法》
解决方法是安装cairocffi,安装方法如下:

sudo apt-get install python3-cairocffi

参考:https://blog.csdn.net/w5688414/article/details/78901997

(3)代码修改
去掉编译器选择语句,因为我们是在python3中运行的:

#!/usr/bin/env python2

把程序中的配置、调用GPU的语句去掉:

##################### Select GPU device ####################################
#os.environ['CUDA_VISIBLE_DEVICES'] = "0"
############################################################################
#os.environ['CUDA_VISIBLE_DEVICES'] = str(monitoring_gpu.GPU_INDEX)
############################################################################

#config = tf.ConfigProto()
#config.gpu_options.per_process_gpu_memory_fraction = 0.5
#config.gpu_options.allow_growth = True

修改with tf.Session(config=config) as sess:为with tf.Session() as sess:

在确保了上述的环境和调用库没有问题之后,便可以开始算法的移植与运行了

三、运行程序
(1)下载代码和模型参数文件
    通过tftp把下载下来的代码和模型参数文件传到hikey970上,注意使用binary模式传输,不然调用参数文件会报错
传输命令:

tftp
>tftp get 192.168.0.100:<filename>

具体的传输操作参考:
hikey970学习-010 lebian系统与window系统tftp传文件:
https://blog.csdn.net/qqqzmy/article/details/82845397
(2)终端输入:

python3 testing.py

程序运行过程,会有一些warming,不影响结果,最终会显示出去雨前以及去雨后的效果图
《hikey970学习-012 hikey970上移植图像去雨深度神经网络算法》
最终的处理出来的结果:
《hikey970学习-012 hikey970上移植图像去雨深度神经网络算法》
《hikey970学习-012 hikey970上移植图像去雨深度神经网络算法》
    左边是未处理的原图,右边是处理完后的图片,可以看到雨线基本被去除了,而图像细节部分依旧保留完好。去雨算法在hikey970上移植运行成功。

四、总结
(1)本文中的算法网络是基于ResNet的,网络的层数以及参数量相对于嵌入式计算设备来说还是比较“厚重”的,但是hikey970依旧可以运行起来,给出我们想要的结果;
(2)hikey970可以实现深度学习算法的快速移植与实现,图像去雨算法的代码、模型参数从服务器上移植过来并不需要太多的修改。同时,基于linux系统的hikey970接用其他外部设备非常便利,比如摄像头,用于实现实时现场图像处理,后面会有专门的文章讲解实时摄像设备的使用;
(3)后续工作还可以做许多优化,使用在嵌入式设备上的模型需要部分结构修改使其轻量化、使其适配嵌入式设备计算单元的特点。在嵌入式设备方面可以加入多线程,提高同步处理速度;
(4)目前hikey970刚推出不久,整套开发流程并不完善,存在许多的bug需要去解决,板子上原先安装的库有点偏少,需要自己去加装各种必备的库后才能运行,在依赖库的搭建上花费的功夫特别多。

参考链接:
https://www.leiphone.com/news/201707/ZXZ450ilP3PnyUUx.html
https://xueyangfu.github.io/projects/cvpr2017.html

    原文作者:神经网络算法
    原文地址: https://blog.csdn.net/qqqzmy/article/details/82870377
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞