項目工作總結一

VC課最后的大作業(yè)(項目組)論文,沒有經(jīng)驗硬著頭皮寫的,發(fā)出來分享一下。文章借鑒了項目申報書、一些論文、莫凡的視頻學習思路和一本TF書籍。因為懶,所以就把這篇文章當做本項目的學期總結吧。


歷史黑白照片視頻檔案的智能著色軟件的初期工作和技術學習

摘要:國內(nèi)早期的照片視頻檔案大多是黑白色彩的,將黑白照片著色能夠還原鮮活時代特色。圖像著色的目標是為灰度圖像的每一個像素分配顏色,圖像智能著色的關鍵是構建訓練一個神經(jīng)網(wǎng)絡?,F(xiàn)有的著色開源代碼最終呈現(xiàn)的效果并不能滿足我國歷史黑白照片的著色效果,此項目通過學習、借鑒和修改,完成一個針對我國歷史黑白照片視頻智能著色的軟件。文章總結了小組成員在本學期對于此項目的初步研究,包括搜集相關資料、數(shù)據(jù)集的建立等前期準備工作。以及實現(xiàn)此項目的關鍵技術——深度學習開源框架TensorFlow的學習過程。

關鍵詞:黑白照片;智能著色;神經(jīng)網(wǎng)絡;圖像處理;TensorFlow

引言

在彩色照片出現(xiàn)之前,人們主要用黑白照片來記錄自己和親人的容貌。在我們的生活中,一些老照片很有紀念意義,特別是一些珍貴的黑白人像照片有著不可估量的收藏價值。而我國的照片檔案對于歷史的記錄更具保存價值,為了更好地展示照片的拍攝意義,反應當時人民生活環(huán)境,還原鮮活時代特色,有專門的的人員對其進行修復。但是目前的修復工作需要耗費較大的人力成本和時間成本,使用專業(yè)的圖像處理軟件手工需要進行繁瑣復雜的步驟。

隨著近年來數(shù)字技術和計算機技術的迅速發(fā)展,圖像自動著色技術得到了長足的發(fā)展。但是在以往的自動著色技術中,他們所使用的著色方法仍然費時費力,且細節(jié)信息還原度不高、物體邊界清晰度不高、缺乏用戶交互的依賴性較強。

而近年來利用現(xiàn)代人工智能的方法,即神經(jīng)網(wǎng)絡學習算法,并在ImageNet比賽的推動下,不斷改進神經(jīng)網(wǎng)絡,已經(jīng)可以做到較小誤差地處理圖像,提取圖像的特征。目前的著色開源項目在這些神經(jīng)網(wǎng)絡的結構基礎上構建出自己的著色神經(jīng)網(wǎng)絡,并通過數(shù)據(jù)集進行訓練測試,他們已經(jīng)能基本著色本國的一些黑白照片。然而他們對于我國黑白照片的著色效果并不好,原因是因為他們訓練神經(jīng)網(wǎng)絡的訓練集是國外的照片,照片特征帶有國外的特色。而對于我國歷史照片,對于人物,生活用品,衣物,建筑風格,色調(diào),時代背景的把握并不準確,所以著色效果很差。

因此我們的項目將借鑒已有的著色開源代碼,在此基礎上進行修改和創(chuàng)新,并改用當下拍攝的舊時代照片以及其對應的灰度圖片作為數(shù)據(jù)集,解決我國黑白老照片和視頻的上色問題。

神經(jīng)網(wǎng)絡的工作模式是這樣的:首先利用神經(jīng)網(wǎng)絡的信息提取的高效性,對圖像中的各類信息及特征進行提取,構建并訓練深度學習模型。訓練網(wǎng)絡時與原圖像進行對比,逐漸減小網(wǎng)絡輸出結果的信息、分類等各類型的損失。訓練完成后,只需向網(wǎng)絡輸入一張灰度圖片,即可生成一張顏色飽滿、鮮明逼真的彩色圖片。

為了構建出一個可以和其他已有模型競爭的神經(jīng)網(wǎng)絡,我們從長計議,將項目了解和技術學習作為項目的初步研究內(nèi)容來推進項目進行。我們小組分工明確,我主要以TensorFlow(后文均以TF代替)作為學習內(nèi)容,以本學期完成基礎TF學習為小目標,逐步向構建出優(yōu)秀的神經(jīng)網(wǎng)絡邁進。

1項目了解——前期準備

1.1解相關信息

在確定選題之后,我們在互聯(lián)網(wǎng)中搜索關鍵詞,不斷深入地查找,我們小組根據(jù)題目初步確定研究方向:機器學習、神經(jīng)網(wǎng)絡、圖像處理、軟件開發(fā)……我們閱讀和分析了相關信息,了解到智能著色需要使用人工智能中機器學習中的深度學習部分,需要使用到卷積神經(jīng)網(wǎng)絡等相關技術,所以我們將神經(jīng)網(wǎng)絡作為我們的初步研究對象。

1.2初步閱讀論文

在知網(wǎng)中以黑白智能著色作為索引關鍵詞,查找的相關論文都與卷積神經(jīng)網(wǎng)絡、密集神經(jīng)網(wǎng)絡、回歸神經(jīng)網(wǎng)絡有關,這讓我們更加明確了我們的目的。

在閱讀文獻的過程中我們了解到:以前的著色技術效率低下,隨著近年來數(shù)字技術、計算機技術的發(fā)展,圖像處理領域的應用廣泛?,F(xiàn)有的灰度圖像著色已經(jīng)可以實現(xiàn)給定一幅灰度圖像,通過一定算法得出一副彩色圖像,但還是存在一定問題。

圖1 外國網(wǎng)站著色效果

對于相關知識名詞,我們搜集到:圖像矩陣、圖像通道、RGB,CIE Lab、卷積神經(jīng)網(wǎng)絡、激勵函數(shù)、損失函數(shù)、訓練網(wǎng)絡、特征提取、數(shù)據(jù)集……

1.3確定學習思路

欠缺知識的我們就像沒有了水的魚兒,我們甚至不知道從哪里入手。在學長的建議和我們查找的資料支持下,我們了解到神經(jīng)網(wǎng)絡的重要性和關鍵性,所以我們計劃從神經(jīng)網(wǎng)絡著手學習,不斷解決我們對項目的疑惑。

根據(jù)網(wǎng)上的評價、難易程度和流行度,學長推薦我們首先學習TF,框架接口為Python語言。同時需要下載相應的IDE,配置相應的環(huán)境,學習Python語言。

2研究基礎——相關知識技術了解學習

2.1搭建編程環(huán)境

TF接口為Python,所以需要下載Python的運行環(huán)境:Python3.6,包括IDLE,它可以用來編寫簡單的Python代碼。

下載JetBrains PyCharml,改變項目解釋器Project Interpreter,找到Python.exe路徑。下載添加Package,即一些第三方庫,比如TensorFlow、scipy、scikit-learn……因為TF更新比較快,如果下載最新版本,在學習的過程中運行代碼時可能會有一些小差別。

搭建完成后,就可以在此軟件中運行項目源程序了。搭建編程環(huán)境為以后讀開源代碼和運行代碼做好了準備。

圖2 環(huán)境搭建

2.2編程語言學習

雖然TF使用Python作為接口,但是它的函數(shù)都是自己定義的。也就是說,不需要深入地學習Python,只需要掌握基礎語法就可以開始學習TF。Python學習的內(nèi)容有:數(shù)據(jù)類型:常量、整型、浮點型、字符串、列表、集合、元組。函數(shù)定義,條件控制語句。

2.3深度學習框架TF

神經(jīng)網(wǎng)絡的構建和訓練都需要TF來完成,所以在掌握了Python基礎后,學習TF是一條必經(jīng)之路,只有掌握了TF,才能讀懂代碼,才能理解其他人對于神經(jīng)網(wǎng)絡構建的思想,結構,我們才能進行修改。

本學期TF學習為主要工作內(nèi)容。

2.4整理數(shù)據(jù)集和開源項目

參考北京電子科技學院2019年3月學報《灰度圖像著色開源代碼》,我們獲取到了幾個基于深度學習的灰度圖像著色技術的開源代碼,了解到訓練深度學習模型的常用數(shù)據(jù)集和幾個經(jīng)典的圖像著色深度神經(jīng)網(wǎng)絡的模型。

數(shù)據(jù)集有:Image?Net數(shù)據(jù)集和Place365數(shù)據(jù)集。

開源代碼和模型有:Colorful image colorization(CNN模型)、Interactive Deep Colorization(CNN模型)、Automatic Colorization of Grayscale Images(CNN模型)和Deep Exemplar-based Colorization(CNN模型)

圖3?Automatic Colorization of Grayscale Images模型示意圖

2.5準備數(shù)據(jù)集

數(shù)據(jù)集作為訓練神經(jīng)網(wǎng)絡,完成智能著色的重要組成部分,必須搜集到合適的數(shù)據(jù)集。它分為三個部分:訓練集、驗證集和測試集。訓練集即為真實的彩色照片,用以訓練神經(jīng)網(wǎng)絡。驗證集也是一組真實的彩色照片,用以選出最優(yōu)的神經(jīng)網(wǎng)絡模型以及對其加以驗證。測試集即為需要進行智能著色的黑白照片,作用是對訓練好的神經(jīng)網(wǎng)絡進行性能評估和檢測,以驗證實驗項目的最終效果和著色完成情況。

為了有效地處理我國歷史黑白照片視頻,搜集的照片和視頻的訓練集來自當代拍攝的,能夠較好還原歷史和史實的視頻和影視作品中的彩色照片。包括描寫清末、民國初期、抗戰(zhàn)期間、解放前后、建國初期以及改革開放前后的城市、人民生活環(huán)境等大量照片;所需要的驗證集來自訓練集的一部分;需要搜集的測試集來自互聯(lián)網(wǎng)搜索的國家檔案局和各省市、地方檔案館網(wǎng)站中黑白照片的相關信息和資料。

圖4 數(shù)據(jù)集

3技術學習——深度學習框架

3.1 TF介紹

TF是一個采用數(shù)據(jù)流圖,用于數(shù)值計算的開源軟件庫。數(shù)據(jù)流圖用節(jié)點和線的有向圖來描述數(shù)學計算。節(jié)點一般用來表示施加的數(shù)學操作,但也可以表示數(shù)據(jù)輸入的起點/輸出的終點。圖中的線則表示在節(jié)點間相互聯(lián)系的多維數(shù)據(jù)數(shù)組,即張量。

圖5 TF數(shù)據(jù)流圖

TF只是學習深度學習、神經(jīng)網(wǎng)絡的一種工具,學習TF的目的應該是學習它所服務的神經(jīng)網(wǎng)絡技術,只有真正掌握了神經(jīng)網(wǎng)絡各部分的原理,編寫TF代碼才有意義。但也不是說只枯燥死板地學習理論知識,TF作為一種學習神經(jīng)網(wǎng)絡的途徑,它便于我們邊學習原理邊實踐訓練,發(fā)現(xiàn)問題、解決問題。

3.2深層神經(jīng)網(wǎng)絡

神經(jīng)網(wǎng)絡是一種數(shù)學模型,是存在于計算機的神經(jīng)系統(tǒng),由大量的神經(jīng)元相連接并進行計算,模仿人腦神經(jīng)系統(tǒng)進行信息處理功能。

它由大量的節(jié)點和之間的聯(lián)系構成。每個節(jié)點代表一種特定的輸出函數(shù)。每兩個節(jié)點間的連接都代表一個對于通過該連接信號的加權值。一個神經(jīng)元的功能是求得輸入向量與權向量的內(nèi)積后,經(jīng)一個非線性傳遞函數(shù)得到一個標量結果。

神經(jīng)網(wǎng)絡由很多層構成:輸入層負責接收信息,比如說一只貓的圖片。輸出層是計算機對這個輸入信息的認知:它是不是貓。隱藏層是對輸入信息的加工處理。


圖6 神經(jīng)網(wǎng)絡結構

下面具體介紹神經(jīng)網(wǎng)絡是如何被訓練和訓練的,此時就可以用到TF來學習神經(jīng)網(wǎng)絡了。

神經(jīng)網(wǎng)路的訓練需要很多數(shù)據(jù)作為學習的對象。比如他要判斷一張圖片是不是貓,就要輸入上千萬張的帶有標簽的貓貓狗狗的圖片,然后再訓練上千萬次,以達到對圖片有一個較高正確率的判斷。

對于y = 0.1*x + 0.3,此函數(shù)就是需要學習的對象,我們想要通過神經(jīng)網(wǎng)絡訓練出這樣的一個線性模型。函數(shù)有兩個參數(shù):weights和biases,通過tf.Variable()函數(shù)分別為其生成一個隨機數(shù)作為初始化數(shù)據(jù)。

3.2.1損失函數(shù)

因為訓練是一個過程,中間難免會出錯。我們深知,道路是曲折的,但前途是光明的。對于訓練過程中錯誤的結果,神經(jīng)網(wǎng)絡會對比它和正確答案之間的區(qū)別,然后把這個區(qū)別反向傳遞給神經(jīng)元,對每個相應的神經(jīng)元進行一點點的改變。那么下一次在訓練的時候就可以用已經(jīng)改進一點點的神經(jīng)元去得到更加稍微準確一點的結果。

以上監(jiān)督學習的神經(jīng)網(wǎng)絡模型的效果以及優(yōu)化的目標是通過損失函數(shù)來定義的。損失函數(shù)大多用交叉熵,它刻畫兩個概率分布之間的距離,如果將分類問題中“一個樣例屬于某一類別”看成一個概率事件,那么訓練數(shù)據(jù)的正確答案就符合一個概率分布。

然而神經(jīng)網(wǎng)絡的輸出卻不一定是一個概率分布。所以需要將神經(jīng)網(wǎng)絡前向傳播得到的結果變成概率分布:使用Softmax回歸,它是一層額外的處理層,可以將神經(jīng)網(wǎng)絡的輸出變成 一個概率分布。

3.2.2神經(jīng)網(wǎng)絡優(yōu)化

有了損失函數(shù),就可以以減小損失函數(shù)的值為目的去優(yōu)化神經(jīng)網(wǎng)絡了,梯度下降算法是最常用的神經(jīng)網(wǎng)絡優(yōu)化方法。它會法代式更新參數(shù),不斷沿著梯度的反方向讓參數(shù)朝著總損失更小的方向更新。

神經(jīng)網(wǎng)絡的優(yōu)化過程可以分為兩個階段,第一個階段先通過前向傳播算法計算得到預測值,井將預測值和真實值做對比得出兩者之間的差距,然后在第二個階段通過反向傳播算法計算損失函數(shù)對每一個參數(shù)的梯度,再根據(jù)梯度和學習率使用梯度下降算法更新每一個參數(shù)。

3.2.3激活函數(shù)

現(xiàn)實世界中絕大多數(shù)問題是無法通過線性解決的,比如函數(shù)y = x^2 - 0.5。所以需要將線性模型轉換成非線性的。解決方法是:給每個神經(jīng)元的輸出套上一個激活函數(shù)。

神經(jīng)元有一個被激活的過程,被激活的神經(jīng)元所傳遞的信息就是對輸出結果有價值的信息。如果輸出的結果是錯誤的,一些容易被激活的神經(jīng)元就會變得遲鈍,另外一些神經(jīng)元就會變得敏感。一次次訓練,神經(jīng)元的參數(shù)不斷改變,最后變得對真正重要的信息更為敏感。數(shù)學上可表示為幾個函數(shù):

圖7 激活函數(shù)舉例

3.3 MNIST數(shù)字手寫體識別

首先,MNIST手寫體數(shù)字識別數(shù)據(jù)集是NIST數(shù)據(jù)集的一個子集,它包含了60000張圖片作為訓練數(shù)據(jù),10000張圖片作為測試數(shù)據(jù)。在MNIST數(shù)據(jù)集中的每一張圖片都代表了0-9中的一個數(shù)字。圖片的大小都是28x28,且數(shù)字都會出現(xiàn)在圖片的正中間。

圖像并不能直接當做輸入傳給神經(jīng)網(wǎng)絡,通過一個函數(shù)可以將每一張圖片轉化為一個長度為784的一維數(shù)組(將二維像素矩陣轉化為一維形式便于提供給神經(jīng)網(wǎng)絡的輸入層),這個數(shù)組中的元素對應了圖片像素矩陣中的每一個數(shù)字。然后就可以開始編寫代碼構建一個神經(jīng)網(wǎng)絡并訓練了。

圖8 像素矩陣
圖9 MNIST神經(jīng)網(wǎng)絡結構

此例是3.2節(jié)的應用,掌握此例可以幫助我們理解神經(jīng)網(wǎng)絡各個環(huán)節(jié)的工作方式、作用和神經(jīng)網(wǎng)絡訓練的步驟:

定義結構和向前傳播算法的輸出結果;定義損失函數(shù)和選擇反向傳播優(yōu)化算法;生成會話,用訓練數(shù)據(jù)反復運行反向傳播算法。

3.4卷積神經(jīng)網(wǎng)絡

圖10 卷積神經(jīng)網(wǎng)絡結構

與前面提到的全連接神經(jīng)網(wǎng)絡一樣,卷積神經(jīng)網(wǎng)絡也是通過一層一層的節(jié)點組織起來的,卷積神經(jīng)網(wǎng)絡中的每一個節(jié)點都是一個神經(jīng)元。

除了結構相似,卷積神經(jīng)網(wǎng)絡的輸入輸出以及訓練流程與全連接神經(jīng)網(wǎng)絡也基本一致。以圖像分類為例,卷積神經(jīng)網(wǎng)絡的輸入層就是圖像的原始像素,而輸出層中的每一個節(jié)點代表了不同類別的可信度,它的損失函數(shù)以及參數(shù)的優(yōu)化過程都可以使用全連接神經(jīng)網(wǎng)絡的方式。

卷積神經(jīng)網(wǎng)絡和全連接神經(jīng)網(wǎng)絡的唯一區(qū)別在于神經(jīng)網(wǎng)絡中相鄰兩層的連接方式。在卷積神經(jīng)網(wǎng)絡的前幾層中,每一層的節(jié)點都被組織成一個三維矩。它的相鄰兩層之間只有部分節(jié)點相連。每兩層中的結點都要互相連接使得全連接神經(jīng)網(wǎng)絡處理圖像時參數(shù)太多,會導致計算速度減慢,也更容易導致過擬合問題(神經(jīng)網(wǎng)絡太過注意細節(jié),而忽略了整體變化趨勢)。

如圖10所示,一個卷積神經(jīng)網(wǎng)絡主要由以下5種結構組成:

輸入層。輸入層是整個神經(jīng)網(wǎng)絡的輸入,在處理圖像的卷積神經(jīng)網(wǎng)絡中,它一般代表了一張圖片的像素矩陣。比如圖1,最左側的三維矩陣就可以代表一張圖片。其中三維矩陣的長和寬代表了圖像的大小,深度代表了圖像的色彩通道。比如黑白圖片的深度為1,而在RGB色彩模式下,圖像的深度為3。

卷積層。卷積層是一個卷積神經(jīng)網(wǎng)絡中最為重要的部分。卷積層中每一個節(jié)點的輸入只是上一層神經(jīng)網(wǎng)絡的一小塊,這個小塊常用的大小有3x3或者5x5。卷積層通過分析神經(jīng)網(wǎng)絡的每一小塊從而提取出抽象程度更高的特征。每次卷積都會增加節(jié)點矩陣的深度,表示分析到了更深層的數(shù)據(jù)。

池化層(抽樣層)。池化層不會改變?nèi)S矩陣的深度,但是它可以縮小矩陣的大小。池化操作可以認為是將一張分辨率較高的圖片轉化為分辨率較低的圖片。通過池化層,可以進一步縮小最后全連接層中節(jié)點的個數(shù),從而達到減少整個神經(jīng)網(wǎng)絡中參數(shù)的目的。

全連接層。在經(jīng)過多輪卷積層和池化層的處理之后,可以認為圖像中的信息已經(jīng)被抽象成了信息含量更高的特征,可以通過這些特征進行分類了,但此時傳輸?shù)臄?shù)據(jù)仍然是一個三維矩陣形式。所以在特征提取完成之后,需要先將三維矩陣降成一維向量,并使用全連接層來完成分類任務。

Softmax層??梢缘玫疆斍皹永龑儆诓煌N類的概率分布情況。如圖10所示,神經(jīng)網(wǎng)絡最后的輸出是有10個元素的向量,這表示它計算出的數(shù)字0-9的概率。

3.5 圖像處理

圖像的亮度、對比度等屬性對圖像的影響是非常大的,相同物體在不同亮度、對比度下差別非常大。為了不讓這些因素影響到圖像識別問題的結果,對圖像數(shù)據(jù)進行預處理可以使訓練得到的神經(jīng)網(wǎng)絡模型盡量避免受到無關因素的影響。

圖11 圖像預處理效果

4結語

以上為我們小組和我在本學期的一些重點工作內(nèi)容,此項目對于歷史黑白視頻檔案著色技術的研究有很大意義,對于深度學習中神經(jīng)網(wǎng)絡的研究與現(xiàn)代人工智能發(fā)展接軌。在學習中不斷提升自學能力和解決問題的能力,此項目對我、對我們小組、對著色技術,對我國的照片檔案都有重要意義。

參考文獻:

[1] Iizuka S, Simo-Serra E, Ishikawa H. Let there be color!: joint end-to-end learning of global and local image priors for automatic image colorization with simultaneous classification[J]. ACM Transactions on Graphics (TOG), 2016, 35(4): 110.

[2]鄭澤宇,梁博文,顧思宇.TensorFlow實戰(zhàn)Google深度學習框架[M].北京:中國工信出版集團 電子工業(yè)出版社,2017.3

[3]田影,陳國棟,潘冠慈.基于卷積神經(jīng)網(wǎng)絡的黑白人物圖像多種合理著色的研究[J].通化師范學院學報(自然科學),2019

[4]徐中輝,呂維帥.基于卷積神經(jīng)網(wǎng)絡的圖像著色[J].江西理工大學 信息工程學院,2018

[5]張娜,秦品樂,曾建潮,李啟.基于密集神經(jīng)網(wǎng)絡的灰度圖像著色算法[J].中北大學 計算機科學與技術學院,2019

[6]余梓唐.一種利用回歸神經(jīng)網(wǎng)絡黑白圖像著色算法研究[J].義烏工商職業(yè)技術學院 機電信息分院,2012

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容