中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Pointnet++的疑問有哪幾點

發布時間:2021-12-17 17:09:16 來源:億速云 閱讀:315 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關關于Pointnet++的疑問有哪幾點,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。


1


首先是分類任務的準確率


論文中的ssg版本能夠達到90.7%。但是筆者以及問過的同學,都只能達到90.2%左右。于是筆者仔細思考了原因,參考文章告訴我們的信息,覺得問題有可能出在以下幾點:


1、數據集的選擇。用的官方數據集(2048點)對應90.7%,換成作者自備數據里(10000點)的話,準確率達到91.9%。筆者測試的是前者。所以這里沒問題。

關于Pointnet++的疑問有哪幾點


2、領域選取方法。兩種方法KNN/ball query ,也會對準確率帶來影響。代碼里默認的是后者。所以問題也不是出在這。

關于Pointnet++的疑問有哪幾點


3、運行evaluate.py的時候,要有votes = 12,這個也會對結果有影響。

其余的參數設置,比如學習率、batch_size都是默認的,與論文中所提的沒差別,所以不會出什么問題。

但是最終結果還是達不到論文里的90.7%。

與作者溝通也未能獲得很好的回饋。


2


另一個困擾的問題,是參數量的計算。從PointNet到PointNet++,這個參數量筆者始終沒搞明白,這里把計算過程放上來,希望有同學一起看看。


1、PointNet++中分類任務ssg版本的計算。

筆者把特征提取部分和分類任務部分分開算。特征提取部分主要是1*1卷積,需要注意weight+bias,公式里的綠色的‘+1’表示bias的數量。

特征提取部分:

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

總參數內存:

bytes_num = (conv_num+fc_num)*4=5,876,128bytes(即5.8MB,不到論文說的8.7MB)

關于Pointnet++的疑問有哪幾點

這里需要注意一點,計算conv_num的公式里,用紅字標出來的‘+3’,這是代碼里提到的,pointnet_sa_module首先進行sample_and_group運算,來看代碼做了什么:


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的操作,把特征和坐標進行了拼接,所以最終輸出的channel層個數是channel+3。注釋部分也提了。

所以計算conv_num的公式里有紅色的‘+3’,所以這部分需要注意。

但是即便注意到了這點,最終結果也與論文提的8.7MB不符。


2.這里還想提一點,上一張圖中,我們注意到作者說pointnet的Model size是40MB,但是pointnet論文里是這么寫的:

關于Pointnet++的疑問有哪幾點

3.5MB。

不知道兩個數字為什么不一致。這個我沒有去計算,因為T-net確實太繁瑣了,暫時挖個坑吧。

關于關于Pointnet++的疑問有哪幾點就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

竹溪县| 郴州市| 汾阳市| 台山市| 嘉兴市| 桃园县| 六安市| 平山县| 江油市| 铁岭县| 博白县| 武邑县| 三门县| 菏泽市| 兴义市| 万山特区| 新巴尔虎右旗| 内江市| 北流市| 铜梁县| 广元市| 辰溪县| 桐庐县| 建德市| 精河县| 陆良县| 太仓市| 库尔勒市| 北京市| 宁南县| 长沙县| 龙山县| 通化市| 温宿县| 宁化县| 军事| 上杭县| 谢通门县| 凤台县| 陆河县| 陵川县|