1. 程式人生 > >hikey970學習-012 hikey970上移植影象去雨深度神經網路演算法

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),直接減少從輸入到輸出的對映範圍,使學習過程更容易。為了進一步提高去雨效果,該演算法在訓練中使用先驗的影象域知識,聚焦高頻細節,消除背景干擾,並將模型聚焦於影象中的雨結構。 在這裡插入圖片描述 論文: 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執行環境準備 (1)檢查依賴庫     在hikey970上使用的是python3.5執行該演算法,使用的深度學習框架是tensorflow,需要呼叫的依賴庫如下:

tensorflow
opencv
matplotlib
numpy
re

(2)遇到的import問題解決     在執行import matplotlib.pyplot as plt可能會遇見問題: 在這裡插入圖片描述 解決方法是安裝cairocffi,安裝方法如下:

sudo apt-get install python3-cairocffi

(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>
python3 testing.py

程式執行過程,會有一些warming,不影響結果,最終會顯示出去雨前以及去雨後的效果圖 在這裡插入圖片描述 最終的處理出來的結果: 在這裡插入圖片描述 在這裡插入圖片描述     左邊是未處理的原圖,右邊是處理完後的圖片,可以看到雨線基本被去除了,而影象細節部分依舊保留完好。去雨演算法在hikey970上移植執行成功。

四、總結 (1)本文中的演算法網路是基於ResNet的,網路的層數以及引數量相對於嵌入式計算裝置來說還是比較“厚重”的,但是hikey970依舊可以執行起來,給出我們想要的結果; (2)hikey970可以實現深度學習演算法的快速移植與實現,影象去雨演算法的程式碼、模型引數從伺服器上移植過來並不需要太多的修改。同時,基於linux系統的hikey970接用其他外部裝置非常便利,比如攝像頭,用於實現實時現場影象處理,後面會有專門的文章講解實時攝像裝置的使用; (3)後續工作還可以做許多優化,使用在嵌入式裝置上的模型需要部分結構修改使其輕量化、使其適配嵌入式裝置計算單元的特點。在嵌入式裝置方面可以加入多執行緒,提高同步處理速度; (4)目前hikey970剛推出不久,整套開發流程並不完善,存在許多的bug需要去解決,板子上原先安裝的庫有點偏少,需要自己去加裝各種必備的庫後才能執行,在依賴庫的搭建上花費的功夫特別多。