穆衛(wèi)衛(wèi) 郭鵬博
(天津師范大學(xué) 天津市 300387)
藝術(shù)是人們情感交流的媒介,它使我們的生活更加美好,人工智能和藝術(shù)的“跨界融合”成為當(dāng)今研究的熱點(diǎn)之一。本文利用深度學(xué)習(xí)模型,設(shè)計(jì)了圖像風(fēng)格變換、圖像修復(fù)等功能。此外,為了給用戶提供一個(gè)更加健康、便捷、豐富的藝術(shù)交流環(huán)境,此網(wǎng)站也設(shè)計(jì)了投票、留言以及基于WebSocket 通信協(xié)議和“自動(dòng)禁言”的聊天室功能。為眾多藝術(shù)圖片愛好者提供一個(gè)更加智能化的圖片展示、處理與交流平臺。
風(fēng)格遷移是指創(chuàng)建一張新圖像,保留目標(biāo)圖像的內(nèi)容,同時(shí)抓住參考圖像的風(fēng)格,盡可能的使內(nèi)容損失函數(shù)和風(fēng)格損失函數(shù)最小化[1]。
風(fēng)格遷移使用卷積層的中間特征還原出對應(yīng)這種特征的原始圖像[1],圖像還原的方法是梯度下降。設(shè)原始內(nèi)容圖像為,原始風(fēng)格圖像為,待生成圖像為,因此組合的內(nèi)容損失和的風(fēng)格損失,定義總損失:
其中:α,β 是平衡兩個(gè)損失的超參數(shù)。
在快速圖像風(fēng)格遷移中,不使用優(yōu)化的方法逐步迭代生成,而是使用訓(xùn)練好的生成網(wǎng)絡(luò)直接生成。快速圖像風(fēng)格遷移由生成網(wǎng)絡(luò)和損失網(wǎng)絡(luò)兩個(gè)神經(jīng)網(wǎng)絡(luò)組成[2],如圖1所示:左側(cè)虛線框內(nèi)為生成網(wǎng)絡(luò)(fw,w 為權(quán)重參數(shù)),即一個(gè)深度殘差網(wǎng)絡(luò);右側(cè)虛線框內(nèi)為損失網(wǎng)絡(luò)(φ)。利用損失網(wǎng)絡(luò)來定義內(nèi)容和風(fēng)格損失,根據(jù)損失值來訓(xùn)練生成網(wǎng)絡(luò)。
圖1:VGG-16 卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
WGAN-GP 是基于Wasserstein 距離實(shí)現(xiàn)的改進(jìn)版生成對抗網(wǎng)絡(luò)[4]。其對Smooth L1 損失函數(shù)進(jìn)行了優(yōu)化:加入梯度懲罰GP 項(xiàng),避免梯度爆炸[5]。在保證生成器梯度變化的前提下,WGAN-GP 能夠使模型在訓(xùn)練過程中表現(xiàn)得更加穩(wěn)定。
本文借助端到端的U-NET網(wǎng)絡(luò)結(jié)構(gòu)可以直接生成圖像的優(yōu)勢,構(gòu)建待處理照片和生成圖片間的映射關(guān)系[5]。判別器與生成器相互協(xié)同對抗,使生成圖片的效果更佳。
DeOldify 是用于恢復(fù)和著色老照片的深度學(xué)習(xí)項(xiàng)目,它采用了效率更高的NoGAN 訓(xùn)練方法[6]。相比于傳統(tǒng)的GAN,它可以將復(fù)原圖片的細(xì)節(jié)處理得更好、效果更加逼真,其對于保證視頻著色的穩(wěn)定性來說至關(guān)重要。
目前,DeOldify 擁有Artistic、Stable 和Video 三種型號,每種型號都有其關(guān)鍵的優(yōu)勢和劣勢,適用于不同用例。
DFA(Deterministic Finite Automaton),即確定有窮自動(dòng)機(jī),其通過事件和當(dāng)前的狀態(tài)確定下一個(gè)狀態(tài)。算法核心為建立了大量以敏感詞為基礎(chǔ)的敏感詞樹,對文本中的文字進(jìn)行敏感詞匹配時(shí),首先,進(jìn)行文本的預(yù)處理,過濾掉起干擾作用的無意義字符[7]。預(yù)處理完成后,匹配根節(jié)點(diǎn)是待檢測文本第一個(gè)字的樹,匹配成功后,對根節(jié)點(diǎn)的子樹依次進(jìn)行檢索,最終確定待檢測文本是否為敏感詞。若是,進(jìn)行文本拋棄;若否,檢測剩余文本。DFA 過濾敏感詞算法在實(shí)現(xiàn)文字過濾時(shí)速度較快。
數(shù)據(jù)庫技術(shù)是數(shù)據(jù)處理和信息管理系統(tǒng)的核心,主要用于大量數(shù)據(jù)的組織存儲(chǔ)問題。MySQL 是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),擁有體積小、運(yùn)行速度快、成本低的特點(diǎn),適合此量級網(wǎng)站的使用。
本文選用自由、靈活、可擴(kuò)展性強(qiáng)的flask 框架創(chuàng)建并運(yùn)行一個(gè)web 應(yīng)用程序,它可以實(shí)現(xiàn)python 后端代碼和keras 的模型訓(xùn)練語法的對接,方便實(shí)現(xiàn)深度學(xué)習(xí)模型執(zhí)行上線定時(shí)任務(wù)。相比于flask 的模板引擎jinjia2 提供的前端結(jié)構(gòu),本文在flask 中集成了Bootstrap 開源前端框架,Bootstrap 框架所提供的用戶界面組件可以創(chuàng)建更加整潔規(guī)范且生動(dòng)的頁面。
由于flask 并沒有提供一個(gè)全面的表單驗(yàn)證機(jī)制,為了保證代碼的簡潔和可維護(hù)性,本文使用了wtforms 表單驗(yàn)證插件進(jìn)行對用戶請求數(shù)據(jù)的驗(yàn)證。同時(shí),在后端采用tensorflow 框架以完成圖片處理工作。
交互式圖片藝術(shù)網(wǎng)站功能結(jié)構(gòu)圖如圖2所示。功能設(shè)計(jì)如下:
圖2:交互式圖片藝術(shù)網(wǎng)站功能結(jié)構(gòu)圖
用戶注冊登錄模塊實(shí)現(xiàn)了用戶的賬戶注冊和網(wǎng)站登錄功能。用戶在注冊界面輸入賬號、郵箱、密碼、電話等信息后,可以完成賬戶的注冊。在登錄界面,用戶輸入賬戶信息即可登錄網(wǎng)站,進(jìn)入個(gè)人主頁。
個(gè)人中心模塊實(shí)現(xiàn)了作品上傳、查看留言、作品刪除等功能。用戶在選擇想要上傳的圖片后,輸入作者、日期及作品描述相關(guān)信息后完成作品上傳。用戶可以在個(gè)人中心讀取來自其他用戶的留言,并進(jìn)行回復(fù)。
2.3.1 快速圖像風(fēng)格遷移
快速圖像風(fēng)格遷移可以讓圖片擁有特定風(fēng)格畫派的明顯紋理結(jié)構(gòu)。用戶上傳待處理圖片后,選擇想要的圖片風(fēng)格。系統(tǒng)進(jìn)行圖片風(fēng)格轉(zhuǎn)換,返回具有特定風(fēng)格的圖片。
2.3.2 修復(fù)模糊、褶皺圖片
模糊與褶皺圖片修復(fù)功能可以幫助用戶修復(fù)由于拍攝、存儲(chǔ)不當(dāng)而造成損傷的圖片,自動(dòng)彌補(bǔ)圖像損失的細(xì)節(jié)。
2.3.3 圖片上色黑白照片上色功能可實(shí)現(xiàn)老照片的色彩修復(fù),使黑白圖片變得更加鮮活,最大程度還原歷史場景。
此模塊實(shí)現(xiàn)了多用戶在線交流功能。為了保證一個(gè)綠色健康的交流環(huán)境,網(wǎng)絡(luò)聊天室會(huì)對交流者的發(fā)言進(jìn)行快速過濾,包含敏感詞匯的消息將被禁止顯示。
用戶在看到自己感興趣的作品后可以使用在線留言功能向作者留言,交流個(gè)人的感受并與作者探討。
3.1.1 圖片上傳
在前端使用ajax 上傳圖片,需要?jiǎng)?chuàng)建FormData 對象,改變ajax 中的data 屬性,在ajax 中設(shè)置processData:false,contentType:false,async:false 參數(shù)。
后端的視圖函數(shù)接收用戶圖片上傳的請求后,調(diào)用flask_uploads.UploadSet 對象的save 函數(shù)接收并存儲(chǔ)圖像。為了節(jié)省數(shù)據(jù)庫空間并且保證網(wǎng)站的響應(yīng)速度,該視圖函數(shù)只將圖片的名稱和地址存入數(shù)據(jù)庫,圖片文件存儲(chǔ)在服務(wù)器本地文件夾中。
3.1.2 圖片展示
服務(wù)器讀取用戶上傳成功的圖片文件后,通過對圖片進(jìn)行base64 編碼操作,將處理后獲得的圖片流傳遞給前端,并在前端的img 標(biāo)簽中以base64 編碼形式添加圖片完成顯示。
3.2.1 快速圖像風(fēng)格遷移
用戶進(jìn)入圖片風(fēng)格變換頁面,上傳原圖片,同時(shí)選擇濾鏡風(fēng)格,點(diǎn)擊“生成圖片”。系統(tǒng)獲取到上傳的圖片及濾鏡,開啟線程并調(diào)用訓(xùn)練好的圖像遷移模型對圖片進(jìn)行風(fēng)格化處理。處理完成后,由系統(tǒng)自動(dòng)檢測圖片生成路徑,返回生成圖片。如圖3所示。
圖3:快速圖像風(fēng)格遷移
3.2.2 圖片修復(fù)
用戶進(jìn)入照片修復(fù)頁面,上傳需要修復(fù)處理的圖片。從模糊圖片修復(fù)、褶皺圖片修復(fù)和黑白圖片上色三個(gè)功能中進(jìn)行選擇,點(diǎn)擊“修復(fù)圖片”。
服務(wù)器端在獲取上傳的圖片及修復(fù)信息后,開啟線程調(diào)用已經(jīng)訓(xùn)練完成的模型進(jìn)行圖片修復(fù)。處理完成后,同樣由系統(tǒng)自動(dòng)檢測圖片生成路徑,返回生成圖片。
本文使用Bootstarp 前端框架設(shè)計(jì)前端聊天室頁面,使用websocket 協(xié)議在客戶端與服務(wù)器之間建立起全雙工的通信方式,實(shí)現(xiàn)消息的發(fā)送和接收??蛻舳耸褂胹ocket.io.js,服務(wù)器端使用flask-socketio 擴(kuò)展。首先,在運(yùn)行環(huán)境中用pip 安裝flasksocketio。
在前端引入socket.io.js,用戶輸入消息點(diǎn)擊發(fā)送按鈕,消息通過socket.emit 發(fā)送到服務(wù)端。服務(wù)器端用@socketio.on 裝飾器裝飾的函數(shù)接收和處理消息。在此事件處理中開啟敏感詞匯過濾線程,在線程中利用DFA 算法實(shí)現(xiàn)敏感詞匯過濾,包含敏感詞匯的消息將被自動(dòng)拋棄,合法的消息將被存入需發(fā)送給客戶端的message隊(duì)列,返回一個(gè)消息的html 字符串,并對其進(jìn)行渲染。通過設(shè)置broadcast=True,把消息廣播到與服務(wù)器建立websocket 鏈接的所有客戶端。客戶端同樣用socket.on 方法接收返回信息,將其添加到顯示區(qū)域。
網(wǎng)絡(luò)聊天室交互界面如圖4所示。
圖4:網(wǎng)絡(luò)聊天室交互界面
建立數(shù)據(jù)庫。在數(shù)據(jù)庫中建立相互關(guān)聯(lián)的數(shù)據(jù)表,以此實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)。
(1)用戶注冊表。用戶注冊表主要用于存儲(chǔ)用戶賬號數(shù)據(jù),包含賬號、郵箱、密碼、電話等,ID 作為唯一標(biāo)識。
(2)作品信息表。作品信息表主要用于記錄用戶上傳作品及其相關(guān)信息,包含主題、作者、日期、描述等。
(3)投票匯總表。投票匯總表主要用于對投票活動(dòng)進(jìn)行數(shù)據(jù)匯總和信息統(tǒng)計(jì),包含:作者、主題、日期、得票數(shù)等。
(4)留言記錄表。留言記錄表主要用于記錄留言信息,包含留言者、文本內(nèi)容、作者。
傳統(tǒng)圖片網(wǎng)站的單一功能已經(jīng)不能滿足藝術(shù)圖片愛好者的需求,基于人工智能深度學(xué)習(xí)的多元化圖片分享網(wǎng)站讓用戶可以用一種新的方式創(chuàng)作圖片,填補(bǔ)了藝術(shù)圖片方向上社區(qū)分享型網(wǎng)站的空白。自動(dòng)分類、圖片配樂等功能的逐步完善,將會(huì)不斷增強(qiáng)用戶體驗(yàn),使網(wǎng)站更加智能化。