在使用CNN預(yù)測(cè)HEVC的CU分割 (3) -- 構(gòu)建神經(jīng)網(wǎng)絡(luò)模型中弯洗,已經(jīng)介紹了兩種最基本的用于預(yù)測(cè)CU分割的神經(jīng)網(wǎng)絡(luò)架構(gòu)旅急。架構(gòu)的設(shè)計(jì)很重要,一個(gè)不好的神經(jīng)網(wǎng)絡(luò)可能導(dǎo)致模型很難訓(xùn)練牡整,所以這篇文章我準(zhǔn)備介紹一下我想到的其它不同的模型藐吮,用于嘗試。
我已經(jīng)使用了一種神經(jīng)網(wǎng)絡(luò)模型進(jìn)行了訓(xùn)練和測(cè)試果正,并將代碼放在了GitHub炎码,里面介紹了我的模型架構(gòu)盟迟,以及驗(yàn)證結(jié)果:
GitHub - wolverinn/HEVC-CU-depths-prediction-CNN: Using convolutional neural networks to predict the Coding Units (CUs) depths in HEVC intra-prediction mode, in order to reduce the time of the encoding process in HEVC.
按照上一篇文章的思路秋泳,模型大體上可以分為兩類(lèi),一種是模仿HEVC預(yù)測(cè)CU分割的思路攒菠,分別對(duì)每一層進(jìn)行分割或者不分割的判斷迫皱,訓(xùn)練多個(gè)二分類(lèi)器;另一種思路就是直接根據(jù)每個(gè)64x64的CTU輸入預(yù)測(cè)對(duì)應(yīng)的16個(gè)label的輸出。這篇文章都是基于第二種思路卓起。
最直接的方法就是上一篇中提到的直接預(yù)測(cè)16個(gè)label和敬,但是這樣當(dāng)然會(huì)很難訓(xùn)練,甚至無(wú)法訓(xùn)練戏阅。所以我想到了以下的一些變換方式昼弟,減少每個(gè)輸入需要預(yù)測(cè)的label數(shù)量。
1. 對(duì)64x64的CTU中的每一個(gè)16x16的塊奕筐,預(yù)測(cè)一個(gè)label
看到有論文這樣做的舱痘,是直接不以64x64作為輸入,而是以更小的16x16作為輸入离赫。根據(jù)分割信息和圖片的對(duì)應(yīng)關(guān)系芭逝,可以知道16x16對(duì)應(yīng)的分割信息就是只有一個(gè)label。不過(guò)這樣做的缺點(diǎn)就是渊胸,僅僅根據(jù)16x16理論上是不足以判斷出0旬盯、1、2翎猛、3這四層的分割信息的胖翰,最多只能判斷到了16x16的這一層,也就是第2層办成,是否繼續(xù)往下分割泡态。由于沒(méi)有更上層的信息,理論上沒(méi)法判斷是0還是1迂卢。
所以我的方案是輸入一個(gè)64x64的整個(gè)CTU某弦,先經(jīng)過(guò)卷積層和池化層,變?yōu)橐粋€(gè)16x16xn大小的矩陣之后而克,再和當(dāng)前需要判斷的16x16拼接起來(lái)靶壮,共同經(jīng)過(guò)接下來(lái)的卷積、池化员萍、全連接層腾降。
2. 對(duì)每一個(gè)32x32的塊,預(yù)測(cè)一個(gè)label
一個(gè)完整的64x64大小的CTU由四個(gè)32x32的塊組成碎绎,每個(gè)32x32的塊又包含四個(gè)label信息螃壤。但是這里的想法是只預(yù)測(cè)出一個(gè)label信息:0,1或者2筋帖,如果是0或1說(shuō)明這個(gè)32x32的塊本身就不需要分割了奸晴,如果是2,說(shuō)明需要繼續(xù)分割為16x16日麸,而至于分割成16x16之后還是否需要繼續(xù)分割到第3層寄啼,也就是8x8,那么對(duì)于這種情況還需要再訓(xùn)練另一個(gè)分類(lèi)器。所以這種方案一共要訓(xùn)練兩個(gè)不同的網(wǎng)絡(luò)墩划。第一個(gè)網(wǎng)絡(luò)用于從32x32的輸入預(yù)測(cè)一個(gè)label作為輸出涕刚,可能取值為0,1乙帮,2.第二個(gè)網(wǎng)絡(luò)用于在前一個(gè)網(wǎng)絡(luò)輸出為2的情況下杜漠,進(jìn)一步判斷分割出來(lái)的每個(gè)16x16的塊是否需要分割,是一個(gè)二分類(lèi)器察净。
3. 對(duì)每一個(gè)32x32的塊碑幅,預(yù)測(cè)四個(gè)label
這個(gè)方案只需要訓(xùn)練一個(gè)網(wǎng)絡(luò),就能預(yù)測(cè)出0塞绿、1沟涨、2、3的結(jié)果作為輸出异吻。之前用64x64作為輸入的時(shí)候裹赴,要預(yù)測(cè)16個(gè)label,而一個(gè)64x64可以分成四個(gè)32x32诀浪,因此一個(gè)32x32就對(duì)應(yīng)4個(gè)label棋返,每個(gè)label的取值是0、1雷猪、2睛竣、3. 這個(gè)方法其實(shí)就是在直接用64x64預(yù)測(cè)16個(gè)label的基礎(chǔ)上縮小了規(guī)模,并且比起直接用16x16預(yù)測(cè)一個(gè)label這個(gè)方法還是有一定道理的求摇,因?yàn)槔碚撋?2x32只能判斷1射沟、2、3這三個(gè)的情況与境,對(duì)于上層的64x64验夯,其實(shí)是沒(méi)法判斷到底要不要作分割的。不過(guò)摔刁,這種方案下挥转,只有結(jié)果中四個(gè)label全都預(yù)測(cè)為0,才能是0共屈,稍微作了一些限制绑谣,所以還是可以先訓(xùn)練試試看一下最終的結(jié)果是否有效
以上的幾種方案,都可以用ResNet再試一下