49 樣式遷移【動(dòng)手學(xué)深度學(xué)習(xí)v2】

樣式遷移(Style Transfer)
- 計(jì)算機(jī)視覺(jué)的應(yīng)用之一,將樣式圖片中的樣式(比如油畫風(fēng)格等)遷移到內(nèi)容圖片(比如實(shí)拍的圖片)上,得到合成圖片
- 可以理解成為一個(gè)濾鏡,但相對(duì)于濾鏡來(lái)講具有更大的靈活性,一個(gè)濾鏡通常只能夠改變圖片的某個(gè)方面,如果要達(dá)到理想中的風(fēng)格,可能需要嘗試大量不同的組合,這個(gè)過(guò)程的復(fù)雜程度不亞于模型調(diào)參
基于 CNN 的樣式遷移
- 奠基性工作
- 使用神經(jīng)網(wǎng)絡(luò)修改內(nèi)容圖片,使其在樣式上接近風(fēng)格圖片

- 上圖中的內(nèi)容圖像為西雅圖郊區(qū)的雷尼爾山國(guó)家公園風(fēng)景照,樣式圖像為主題為秋天橡樹的油畫,最終輸出的合成圖像應(yīng)用了樣式圖像的油畫筆觸讓整體顏色更加鮮艷,同時(shí)保留了內(nèi)容圖像中物體主體的形狀
工作原理

1、首先初始化合成圖片(例如將其初始化為內(nèi)容圖片)
- 輸入中有一張內(nèi)容圖片(Content Image)和一張樣式圖片(Style Image)
- 模型所要訓(xùn)練的不是卷積神經(jīng)網(wǎng)絡(luò)的權(quán)重,而是合成圖片,它是樣式遷移過(guò)程中唯一需要更新的變量,即樣式遷移所需迭代的參數(shù)模型
2、然后選擇一個(gè)預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)來(lái)抽取圖片的特征(該卷積神經(jīng)網(wǎng)絡(luò)的模型參數(shù)在訓(xùn)練中不用更新)
- 內(nèi)容圖片、樣式圖片之后和合成圖片(Synthesised Image)之前各有一個(gè)卷積神經(jīng)網(wǎng)絡(luò),上圖中只畫了三層,看起來(lái)有三個(gè)三層的卷積神經(jīng)網(wǎng)絡(luò),實(shí)際上三個(gè)卷積神經(jīng)網(wǎng)絡(luò)都是一樣的(它們的權(quán)重是一樣的)
3、這個(gè)深度神經(jīng)網(wǎng)絡(luò)憑借多個(gè)層逐級(jí)抽取圖像的特征,因此可以選擇其中某些層的輸出作為內(nèi)容特征或者樣式特征(上圖中的卷積神經(jīng)網(wǎng)絡(luò)第二層輸出內(nèi)容特征,第一層和第三層輸出樣式特征)
- 對(duì)于一張輸入圖片來(lái)講,每一層的卷積神經(jīng)網(wǎng)絡(luò)都會(huì)有一個(gè)輸出(特征),整個(gè)基于 CNN 的樣式遷移的目的是訓(xùn)練出一張合成圖片,使得合成圖片和內(nèi)容圖片放進(jìn)同樣一個(gè)卷積神經(jīng)網(wǎng)絡(luò)的時(shí)候,合成圖片在某一層的輸出能夠匹配上內(nèi)容圖片在某一層的損失(內(nèi)容損失,Content Loss),即它們?cè)趦?nèi)容上是相近的;同理,合成圖片和內(nèi)容圖片所使用的是同一個(gè)卷積神經(jīng)網(wǎng)絡(luò),在某些層的輸出(特征)在樣式上能夠匹配的上。如果訓(xùn)練出一張合成圖片同時(shí)滿足以上需求的話,就可以認(rèn)為它既保留了內(nèi)容圖片的內(nèi)容,又保留了樣式圖片的樣式
- 一般來(lái)說(shuō),越靠近輸入層,越容易抽取圖片的細(xì)節(jié)信息;反之,越容易抽取圖片的全局信息
- 為了避免合成圖片過(guò)多地保留內(nèi)容圖片的細(xì)節(jié),選擇靠近輸出的層(即內(nèi)容層)來(lái)輸出圖片的內(nèi)容特征
- 選擇不同層的輸出(即風(fēng)格層)來(lái)匹配局部和全局的樣式
- 在使用卷積神經(jīng)網(wǎng)絡(luò)抽取特征時(shí),只需要用到從輸入層到最靠近輸出層的內(nèi)容層或者樣式層之間的所有層
- 因?yàn)樵谟?xùn)練的時(shí)候無(wú)需改變預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)的模型參數(shù),所以可以在訓(xùn)練開始之前就提取出內(nèi)容特征和風(fēng)格特征
4、通過(guò)前向傳播(實(shí)線箭頭方向)計(jì)算樣式遷移的損失函數(shù),并通過(guò)反向傳播(虛線箭頭方向)迭代模型參數(shù),即不斷更新合成圖片
- 樣式遷移常用的損失函數(shù)由三部分組成:(1)內(nèi)容損失通過(guò)平方誤差函數(shù)衡量合成圖片與內(nèi)容圖片在內(nèi)容特征上的差異,使合成圖片與內(nèi)容圖片在內(nèi)容特征上接近;(2)樣式損失也是通過(guò)平方誤差函數(shù)衡量合成圖片與樣式圖片在樣式特征上的差異,使合成圖片與樣式圖片在樣式特征上接近;(3)全變分損失有助于減少合成圖片中的噪點(diǎn),有時(shí)學(xué)到的合成圖像中有大量高頻噪點(diǎn)(即有特別亮或者特別暗的顆粒像素),常用全變分去噪(Total Variation Denoising),通過(guò)降低全變分損失,能夠盡可能使臨近的像素值相似,來(lái)進(jìn)行去噪
- 樣式遷移的損失函數(shù)是內(nèi)容損失、樣式損失和總變化損失的加權(quán)和,通過(guò)調(diào)節(jié)這些權(quán)重超參數(shù),可以權(quán)衡合成圖片在保留內(nèi)容、樣式遷移以及去噪三方面的相對(duì)重要性
- 對(duì)于給定的輸入,如果簡(jiǎn)單地調(diào)用前向傳播函數(shù),只能獲得最后一層的輸出,因?yàn)檫€需要中間層的輸出,所以需要進(jìn)行逐層計(jì)算,保留內(nèi)容層和風(fēng)格層的輸出
- 在樣式遷移中,合成圖片是訓(xùn)練期間唯一需要更新的變量,因此可以將合成圖片視為模型參數(shù),模型的前向傳播只需要返回模型參數(shù)即可
5、最后當(dāng)模型訓(xùn)練結(jié)束時(shí),輸出樣式遷移的模型參數(shù)即為最終的合成圖片
- 因?yàn)楹铣蓤D片是樣式遷移所需迭代的模型參數(shù),所以只能在訓(xùn)練的過(guò)程中抽取合成圖片的內(nèi)容特征和樣式特征
- 合成圖片保留了內(nèi)容圖片的內(nèi)容,并同時(shí)遷移了樣式圖片的樣式
總結(jié)
1、樣式遷移常用的損失函數(shù)由 3 部分組成:內(nèi)容損失、樣式損失和全變分損失
- 內(nèi)容損失使合成圖片與內(nèi)容圖片在內(nèi)容特征上接近
- 樣式損失使合成圖片與樣式圖片在樣式特征上接近
- 全變分損失有助于減少合成圖片中的噪點(diǎn)
2、可以通過(guò)預(yù)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)來(lái)抽取圖像的特征,并通過(guò)最小化損失函數(shù)來(lái)不斷更新合成圖片來(lái)作為模型參數(shù)
3、使用格拉姆矩陣表達(dá)樣式層輸出的樣式
Q&A
- 1、越靠近輸出端內(nèi)容還原度越高還是越靠近輸入端內(nèi)容還原度越高?style、content 層的選取是不是也是根據(jù)經(jīng)驗(yàn)?
- ?QA P3 - 00:00?
- 2、為什么這地方不需要算梯度,y.detach(),是因?yàn)榫W(wǎng)絡(luò)不更新,只有輸入更新嗎?
- ?QA P3 - 00:26?

- 3、二、三、四、五階統(tǒng)計(jì)信息有哪些啊?
- ?QA P3 - 01:05?
- 4、協(xié)方差矩陣、格萊姆矩陣、統(tǒng)計(jì)直方圖這三個(gè)之間是相互包含嗎?都能代表樣式?
- ?QA P3 - 01:30?
- 5、老師,TV 損失可以理解為圖像平滑技術(shù)嗎?
- ?QA P3 - 02:07?
- 6、為什么卷積層的 kernel 不需要參加訓(xùn)練?
- ?QA P3 - 02:15?
- 7、更新的權(quán)重是對(duì)圖片的,那模型的權(quán)重是在哪里訓(xùn)練的?
- ?QA P3 - 02:33?
- 8、核心優(yōu)化的是一個(gè)參數(shù)矩陣?每做一張圖片的風(fēng)格遷移,都要重新訓(xùn)練一遍?有什么方法能一勞永逸嗎?
- ?QA P3 - 03:11?
- 9、語(yǔ)義分割是不是也可以用樣式遷移來(lái)實(shí)現(xiàn),原圖是內(nèi)容, label 是樣式圖片
- ?QA P3 - 04:48?
- 10、樣式遷移目前有很廣泛的商業(yè)價(jià)值應(yīng)用嗎?是不是因?yàn)椴辉趺茨墚a(chǎn)品化,大家現(xiàn)在不怎么玩了
- ?QA P3 - 05:11?
- 11、是不是也可以用領(lǐng)域自適應(yīng)常用的 mdd 距離度量
- ?QA P3 - 06:34?
- 12、RNN 和一維卷積區(qū)別大嗎?
- ?QA P3 - 06:44?
- 13、會(huì)介紹 GAN 嗎?
- ?QA P3 - 06:52?
- 14、新的目標(biāo)檢測(cè)競(jìng)賽什么時(shí)候?
- ?QA P3 - 07:26?
----end----
其他參考
1、《動(dòng)手學(xué)深度學(xué)習(xí)》,PPT,https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_17.pdf
2、《動(dòng)手學(xué)深度學(xué)習(xí)》,教材,https://zh-v2.d2l.ai/chapter_computer-vision/neural-style.html