趙佳英
(浙大寧波理工學(xué)院圖書與信息技術(shù)中心,浙江 寧波315199)
近年來,超分辨率圖像重建技術(shù)主要分為3 類:一類是基于插值的,一類是基于重建的,另一種是基于學(xué)習(xí)的重建方法。目前,大多重建算法是基于樣本學(xué)習(xí)的,其通過大量的訓(xùn)練數(shù)據(jù),在神經(jīng)網(wǎng)絡(luò)模型中學(xué)習(xí)低分辨率和高分辨率圖像之間的某種對應(yīng)的映射關(guān)系,最后通過訓(xùn)練得到的模型來重建圖像數(shù)據(jù)。1984年,圖像超分辨率重建的概念被TSAI 等人首次提出;2016 年,DONG 等人提出了基于深度學(xué)習(xí)的卷積神經(jīng)網(wǎng)絡(luò)的超分辨率算法SRCNN;2017 年,LEDIG 等人結(jié)合生成對抗網(wǎng)絡(luò)提出了SRGAN 算法,在重構(gòu)圖像細(xì)節(jié)上有了更好的表現(xiàn)[1]。
本文設(shè)計開發(fā)的圖像重建工具軟件就是支持SRResNet 和SRGAN 算法的圖像重建工具,利用Tkinter 庫設(shè)計用戶圖像界面客戶端,加載訓(xùn)練得到的算法模型,將用戶上傳的低分辨率圖像轉(zhuǎn)換為超分辨率圖像,軟件支持png、jpg 等多種圖像格式,并支持圖像處理結(jié)果的下載保存。
本文使用的Python 版本為Python3.7。Pytorch 作為Python 的一個開源機(jī)器學(xué)習(xí)庫,是一個相當(dāng)簡潔且高效快速的框架,能夠支撐GPU 加速的張量計算和支持自動求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)。Tkinter 是Python 的標(biāo)準(zhǔn)GUI 工具包接口,支持按鈕、消息、標(biāo)簽等多種控件,為開發(fā)本文工具軟件的基礎(chǔ)客戶端窗口提供了基礎(chǔ)庫支持。Pillow 是Python 一個非常好用的圖像處理庫,提供了基礎(chǔ)的圖像處理功能,例如圖像裁剪、調(diào)整大小等,軟件在圖像加載、圖像大小顯示等方面提供了庫支持。
圖像分辨率指每英寸圖像內(nèi)像素點數(shù)量的存儲量,一定程度上,決定著圖像的清晰程度。超分辨率圖像重建是指將給定的低分辨率圖像利用特定的算法模型轉(zhuǎn)變成相對清晰的高分辨率圖像的技術(shù)。簡單地說,超分辨率圖像重建就是將小尺寸圖像通過算法模型重建為更為清晰的大尺寸圖像。本文開發(fā)的軟件支持SRResNet 和SRGAN 這2 種算法[2]。
1.2.1 SRResNet
SRResNet 是結(jié)合深度殘差網(wǎng)絡(luò)ResNet 模型提出的圖像重建算法,由卷積層和殘差模塊組成。殘差學(xué)習(xí)中引入了跳連接,解決了深度學(xué)習(xí)中增加網(wǎng)絡(luò)層深度出現(xiàn)的梯度消失問題。SRResNet 使用了子像素卷積層,不同于直接上采樣和插值,它利用多個相同大小的特征圖,拼接為一個大圖。
1.2.2 SRGAN
SRGAN 是超分辨率圖像重建利用生成對抗網(wǎng)絡(luò)模型的思想形成的算法。生成對抗網(wǎng)絡(luò)GAN 利用通過生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò)2 個模型之間的不斷博弈,提升模型效力。生成網(wǎng)絡(luò)模型不斷生成原始圖像來迷惑判別器,判別器盡力發(fā)現(xiàn)生成圖與原始圖之間的破綻。在不斷博弈過程中,生成網(wǎng)絡(luò)模型的生成技術(shù)不斷精進(jìn),判別網(wǎng)絡(luò)的糾錯能力也不斷提高。
作為工具軟件,軟件以客戶端形式打開,首先用戶設(shè)置圖像的放大比例,上傳需要處理的圖像,圖像格式支持基礎(chǔ)的png、jpg 等格式,之后選擇圖像重建算法,軟件目前支持SRResNet 和SRGAN 這2 種深度學(xué)習(xí)訓(xùn)練模型,利用之前參數(shù)已訓(xùn)練完成的模型處理圖像,將處理結(jié)果回顯至軟件窗口,支持下載保存功 能。軟件設(shè)計思路如圖1 所示。
圖1 軟件設(shè)計思路
模型訓(xùn)練計算機(jī)的配置如下:CPU 為i7-10710U;GPU 為NVIDIA GeForce MX250??紤]是計算機(jī)GPU配置不夠?qū)е碌膬?nèi)存溢出,本文使用CPU 對模型進(jìn)行訓(xùn)練和后續(xù)的圖像重建。
圖2 為SRResNet 模型,從前向傳播代碼可以看到,它包含激活函數(shù)為PReLU 的卷積,經(jīng)過殘差模塊,再通過無激活函數(shù)的卷積計算。結(jié)合前2 次卷積結(jié)果,進(jìn)行子像素卷積,最后進(jìn)行激活函數(shù)為tanh 的卷積模塊計算。
圖2 SRResNet 模型部分代碼
SRGAN 的生成器模型和SRResNet 模型一致,判別器網(wǎng)絡(luò)模型如圖3 所示。從前向傳播代碼中可以看到,判別器包含一個卷積計算,池化之后進(jìn)行全連接神經(jīng)網(wǎng)絡(luò)計算,經(jīng)過激活函數(shù)ReLU 處理后再進(jìn)行一次全連接運(yùn)算,最后一次Sigmoid 激活函數(shù)計算包含在Pytorch 的損失函數(shù)方法中。將上述2 種模型通過前向傳播、損失函數(shù)、反向傳播進(jìn)行處理,最終利用torch.save()將模型保存為pth 格式。
圖3 SRGAN 判別器網(wǎng)絡(luò)部分代碼
接下來,利用Tkinter 庫構(gòu)建用戶圖形界面,軟件支持jpg 和png 格式圖像,根據(jù)窗口大小,對圖像進(jìn)行縮放調(diào)整,并進(jìn)行了基本的容錯提醒,包含上傳圖像格式的提醒和未選擇放大比例的提醒。圖4 方法代碼是根據(jù)用戶選擇的模型進(jìn)行圖像超分辨率處理。首先根據(jù)加載模型,將用戶上傳的圖像轉(zhuǎn)換為RGB 格式,對圖像像素進(jìn)行歸一化操作,便于進(jìn)一步放入模型進(jìn)行處理,最后得到處理圖像結(jié)果。
圖4 調(diào)用模型處理圖像代碼
在程序目錄下利用命令提示符輸入Python softwareGui.py 運(yùn)行軟件,軟件設(shè)置了用戶使用過程中未設(shè)置參數(shù)提醒彈框提醒,如“未選擇放大比例”“請上傳png、jpg 格式圖片”等。本文使用了2 類圖進(jìn)行了軟件測試,分別為風(fēng)景圖像和動物圖像。通過圖像處理可以看到,2 種算法都表現(xiàn)了良好的圖像處理效果,如圖5 所示。SRResNet 處理得更顯平滑一些,SRGAN 在細(xì)節(jié)重構(gòu)方面做得更好一些。
圖5 軟件處理圖像結(jié)果
深度學(xué)習(xí)在圖像重建的模型算法已相對成熟,應(yīng)用大量的訓(xùn)練數(shù)據(jù),在神經(jīng)網(wǎng)絡(luò)模型中學(xué)習(xí)低分辨率和高分辨率圖像之間的某種對應(yīng)的映射關(guān)系,依據(jù)訓(xùn)練得到的模型重建圖像數(shù)據(jù)。本文設(shè)計開發(fā)的圖像重建工具軟件支持SRResNet 和SRGAN 算法,利用Tkinter 庫設(shè)計用戶圖像界面客戶端,加載訓(xùn)練得到的算法模型,將用戶上傳的低分辨率圖像轉(zhuǎn)換為超分辨率圖像,軟件支持png、jpg 等多個圖像格式,并支持圖像處理結(jié)果的下載保存。通過對圖像重建工具的軟件測試,軟件運(yùn)行正常,實現(xiàn)了基礎(chǔ)的低分辨率圖像處理功能,但支持的重建算法不夠全面,用戶可配置參數(shù)不多,軟件運(yùn)行對計算機(jī)性能的要求也較高,希望未來可以開發(fā)出更完善的圖像重建工具。