关于Pointnet++的疑问有哪几点

这篇文章将为大家详细讲解有关关于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++的疑问有哪几点就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

新闻标题:关于Pointnet++的疑问有哪几点
分享地址:https://www.cdcxhl.com/article18/ggpcdp.html

成都网站建设公司_创新互联,为您提供企业网站制作网页设计公司网站维护网站内链网站设计公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设