這篇文章將為大家詳細(xì)講解有關(guān)關(guān)于Pointnet++的疑問有哪幾點(diǎn),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)專注于察哈爾右翼后網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供察哈爾右翼后營銷型網(wǎng)站建設(shè),察哈爾右翼后網(wǎng)站制作、察哈爾右翼后網(wǎng)頁設(shè)計(jì)、察哈爾右翼后網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造察哈爾右翼后網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供察哈爾右翼后網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
首先是分類任務(wù)的準(zhǔn)確率
論文中的ssg版本能夠達(dá)到90.7%。但是筆者以及問過的同學(xué),都只能達(dá)到90.2%左右。于是筆者仔細(xì)思考了原因,參考文章告訴我們的信息,覺得問題有可能出在以下幾點(diǎn):
1、數(shù)據(jù)集的選擇。用的官方數(shù)據(jù)集(2048點(diǎn))對應(yīng)90.7%,換成作者自備數(shù)據(jù)里(10000點(diǎn))的話,準(zhǔn)確率達(dá)到91.9%。筆者測試的是前者。所以這里沒問題。
2、領(lǐng)域選取方法。兩種方法KNN/ball query ,也會對準(zhǔn)確率帶來影響。代碼里默認(rèn)的是后者。所以問題也不是出在這。
3、運(yùn)行evaluate.py的時候,要有votes = 12,這個也會對結(jié)果有影響。
其余的參數(shù)設(shè)置,比如學(xué)習(xí)率、batch_size都是默認(rèn)的,與論文中所提的沒差別,所以不會出什么問題。
但是最終結(jié)果還是達(dá)不到論文里的90.7%。
與作者溝通也未能獲得很好的回饋。
另一個困擾的問題,是參數(shù)量的計(jì)算。從PointNet到PointNet++,這個參數(shù)量筆者始終沒搞明白,這里把計(jì)算過程放上來,希望有同學(xué)一起看看。
1、PointNet++中分類任務(wù)ssg版本的計(jì)算。
筆者把特征提取部分和分類任務(wù)部分分開算。特征提取部分主要是1*1卷積,需要注意weight+bias,公式里的綠色的‘+1’表示bias的數(shù)量。
特征提取部分:
conv_num= (3+1)*64+(64+1)*64+(64+1)*128+ (128+3+1)*128+(128+1)*128+(128+1)*256+ (256+3+1)*256+(256+1)*512+(512+1)*1024=802624
分類部分:
fc_num = (1024+1)*512+(512+1)*256+(256+1)*40= 666408
總參數(shù)內(nèi)存:
bytes_num = (conv_num+fc_num)*4=5,876,128bytes(即5.8MB,不到論文說的8.7MB)
這里需要注意一點(diǎn),計(jì)算conv_num的公式里,用紅字標(biāo)出來的‘+3’,這是代碼里提到的,pointnet_sa_module首先進(jìn)行sample_and_group運(yùn)算,來看代碼做了什么:
sample_and_group(npoint, radius, nsample, xyz, points, knn=False, use_xyz=True): ''' Input: npoint: int32 radius: float32 nsample: int32 xyz: (batch_size, ndataset, 3) TF tensor points: (batch_size, ndataset, channel) TF tensor, if None will just use xyz as points knn: bool, if True use kNN instead of radius search use_xyz: bool, if True concat XYZ with local point features, otherwise just use point features Output: new_xyz: (batch_size, npoint, 3) TF tensor new_points: (batch_size, npoint, nsample, 3+channel) TF tensor idx: (batch_size, npoint, nsample) TF tensor, indices of local points as in ndataset points grouped_xyz: (batch_size, npoint, nsample, 3) TF tensor, normalized point XYZs (subtracted by seed point XYZ) in local regions ''' new_xyz = gather_point(xyz, farthest_point_sample(npoint, xyz)) # (batch_size, npoint, 3) if knn: _,idx = knn_point(nsample, xyz, new_xyz) else: idx, pts_cnt = query_ball_point(radius, nsample, xyz, new_xyz) grouped_xyz = group_point(xyz, idx) # (batch_size, npoint, nsample, 3) grouped_xyz -= tf.tile(tf.expand_dims(new_xyz, 2), [1,1,nsample,1]) # translation normalization if points is not None: grouped_points = group_point(points, idx) # (batch_size, npoint, nsample, channel) if use_xyz: new_points = tf.concat([grouped_xyz, grouped_points], axis=-1) # (batch_size, npoint, nample, 3+channel) else: new_points = grouped_points else: new_points = grouped_xyz return new_xyz, new_points, idx, grouped_xyz
有一個concate的操作,把特征和坐標(biāo)進(jìn)行了拼接,所以最終輸出的channel層個數(shù)是channel+3。注釋部分也提了。
所以計(jì)算conv_num的公式里有紅色的‘+3’,所以這部分需要注意。
但是即便注意到了這點(diǎn),最終結(jié)果也與論文提的8.7MB不符。
2.這里還想提一點(diǎn),上一張圖中,我們注意到作者說pointnet的Model size是40MB,但是pointnet論文里是這么寫的:
3.5MB。
不知道兩個數(shù)字為什么不一致。這個我沒有去計(jì)算,因?yàn)門-net確實(shí)太繁瑣了,暫時挖個坑吧。
關(guān)于關(guān)于Pointnet++的疑問有哪幾點(diǎn)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。