PointNet part segment部分學(xué)習(xí)

文獻(xiàn)筆記:

1.把點云的區(qū)域分割表示為一個逐點識別的問題。

(We formulate part segmentation as a per-point classification problem.)

把點的mIoU(?)作為評價指標(biāo),計算mIoU值的具體方法如下(分清category的mIoU、shape的mIoU、part type的mIoU):

首先,對于分類C中的每一個形狀S,計算該形狀S的mIoU值:對于C中的每一個部分(part type),計算理論值和預(yù)測值之間的IoU值 ,如果某個部分的預(yù)測值和理論值組成的union中點為空,我們把這個部分IoU設(shè)為1。之后我們計算該category中的所有部分(part type)的IoU值,將這些IoU的平均值作為該形狀的mIoU值。

之后,當(dāng)我們要計算category的mIoU值時,我們把屬于當(dāng)前category中的所有形狀的mIoU值做平均值,該平均值即為category的mIoU值。

以上是論文中對于各個方法的結(jié)果比較。

2.關(guān)于PointNet Segmentation Network,它是識別網(wǎng)絡(luò)的一個擴(kuò)展。局部點特征(第二次變換網(wǎng)絡(luò)feature transform的輸出)和全局點特征(最大池化層的輸出)被關(guān)聯(lián)在一起。分割網(wǎng)絡(luò)不使用dropout。訓(xùn)練參數(shù)跟識別網(wǎng)絡(luò)的完全一樣。

對于基礎(chǔ)的分割網(wǎng)絡(luò),為了達(dá)到最好的分割效果,作者還是做出了如下的一些修改:

a.增加了一個one-hot向量來表示輸入的類型,并別把它和最大池化層的輸出聯(lián)系在一起

b.在某些層增加了神經(jīng)元,并且增加了skip links跳轉(zhuǎn)鏈接來收集不同層的局部點特征,把他們連接在一起,共同組成分割網(wǎng)絡(luò)的作為輸入的點特征。

此外,文章最后還提到法向量估計(法向量預(yù)測結(jié)果在某些區(qū)域甚至比真實值更平滑,連續(xù)性更好)。還通過實驗驗證了分割網(wǎng)絡(luò)的健壯性。對于識別網(wǎng)絡(luò)的部分,網(wǎng)絡(luò)對數(shù)據(jù)損壞和數(shù)據(jù)缺失并不是特別敏感,因為點的全局特征是從關(guān)鍵點的集合中提取的。對于分割網(wǎng)絡(luò)來說,它同樣具有穩(wěn)定性。結(jié)合逐點特征和學(xué)習(xí)到的全局形狀特征,對每點部分的標(biāo)簽進(jìn)行了預(yù)測。下圖說明的分割結(jié)果的一致性。


代碼部分:

模型:

1.model部分的代碼儲存在pointnet_part_seg中,get_model函數(shù)定義了如上圖9的網(wǎng)絡(luò),包括classification network以及segmentation network;

2.get_transform函數(shù)和get_transform_K函數(shù)定義了figure 9中的變換網(wǎng)絡(luò)T1和T2,可以看到T1和T2這兩個變換網(wǎng)絡(luò)本身也是由卷積層、池化層和全連接層等構(gòu)成的;

3.get_loss函數(shù)包含了對損失設(shè)計,總的損失包括三部分,分別是:seg_loss(分割的交叉熵?fù)p失,通過tf.nn.sparse_softmax_cross_entropy_with_logits()來獲得)、label_loss(標(biāo)記的交叉熵?fù)p失,但是最后計算loss時weight取1,實際結(jié)果中沒有這項的貢獻(xiàn))、mat_diff_loss(變換矩陣Transform本身是正交矩陣,計算出的正交矩陣的正則化偏差Regularization loss)

train.py:

1.batch默認(rèn)值32,epoc默認(rèn)值200,在train函數(shù)前面定義了學(xué)習(xí)率和衰減率等參數(shù),定義了需要讀寫的文件的位置,包括訓(xùn)練文件和測試文件的位置,模型的儲存和日志的儲存。以及l(fā)abel到one_hot的轉(zhuǎn)換函數(shù)。

2.train函數(shù):

首先確定learning rate以及學(xué)習(xí)率衰減的參數(shù),這里是指數(shù)衰減

bn

(batch normalization 主要解決的是中間訓(xùn)練層數(shù)據(jù)分布發(fā)生改變的情況,再輸入之前進(jìn)行歸一化處理,網(wǎng)絡(luò)無需適應(yīng)不同的數(shù)據(jù)分布,從而加速訓(xùn)練。BN層本質(zhì)上就是對上一層的輸出進(jìn)行處理,得到下一層的輸入。實現(xiàn)BN層的難點在于如何使得歸一化不破壞上一層所學(xué)習(xí)到的特征。引入可學(xué)習(xí)參數(shù)\gamma, \beta 進(jìn)行變換,讓BN層網(wǎng)絡(luò)通過學(xué)習(xí),恢復(fù)原始網(wǎng)絡(luò)的特征分布。從數(shù)學(xué)上看就是,在不改變特征分布的前提下,通過變換來改變均值和方差的大小,得到歸一化的效果)?

momentum

(增加一個動量項,一般來說,主要用在權(quán)重更新的時候,如果前一次的momentum與這次的梯度負(fù)方向相同,那么動量項會使下降的幅度更大,目的是為了加速收斂)

之后是一些初始化、以及tensorflow的config

最后是train_one_epoch函數(shù),以及eval_one_epoch函數(shù)。

剛接觸深度學(xué)習(xí),有些概念不是很明白,希望今后能多接觸,努力學(xué)



在b站上發(fā)現(xiàn)了作者的一個視頻,可能有些幫助:

https://www.bilibili.com/video/av28340597?from=search&seid=7171823237791363931

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

相關(guān)閱讀更多精彩內(nèi)容

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