博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
chamfer_pcd
阅读量:5168 次
发布时间:2019-06-13

本文共 3069 字,大约阅读时间需要 10 分钟。

import tensorflow as tfimport numpy as npdef distance_matrix(array1, array2):    """    arguments:        array1: the array, size: (num_point, num_feature)        array2: the samples, size: (num_point, num_feature)    returns:        distances: each entry is the distance from a sample to array1            , it's size: (num_point, num_point)    """    num_point, num_features = array1.shape    expanded_array1 = tf.tile(array1, (num_point, 1))    expanded_array2 = tf.reshape(            tf.tile(tf.expand_dims(array2, 1),                    (1, num_point, 1)),            (-1, num_features))    distances = tf.norm(expanded_array1-expanded_array2, axis=1)    distances = tf.reshape(distances, (num_point, num_point))    return distancesdef av_dist(array1, array2):    """    arguments:        array1, array2: both size: (num_points, num_feature)    returns:        distances: size: (1,)    """    distances = distance_matrix(array1, array2)    distances = tf.reduce_min(distances, axis=1)    distances = tf.reduce_mean(distances)    return distancesdef av_dist_sum(arrays):    """    arguments:        arrays: array1, array2    returns:        sum of av_dist(array1, array2) and av_dist(array2, array1)    """    array1, array2 = arrays    av_dist1 = av_dist(array1, array2)    av_dist2 = av_dist(array2, array1)    return av_dist1+av_dist2def chamfer_distance_tf(array1, array2):    batch_size, num_point, num_features = array1.shape    dist = tf.reduce_mean(               tf.map_fn(av_dist_sum, elems=(array1, array2), dtype=tf.float64)           )    return distdef array2samples_distance(array1, array2):    """    arguments:        array1: the array, size: (num_point, num_feature)        array2: the samples, size: (num_point, num_feature)    returns:        distances: each entry is the distance from a sample to array1    """    num_point, num_features = array1.shape    expanded_array1 = np.tile(array1, (num_point, 1))    expanded_array2 = np.reshape(            np.tile(np.expand_dims(array2, 1),                    (1, num_point, 1)),            (-1, num_features))    distances = np.linalg.norm(expanded_array1-expanded_array2, axis=1)    distances = np.reshape(distances, (num_point, num_point))    distances = np.min(distances, axis=1)    distances = np.mean(distances)    return distancesdef chamfer_distance_numpy(array1, array2):    batch_size, num_point, num_features = array1.shape    dist = 0    for i in range(batch_size):        av_dist1 = array2samples_distance(array1[i], array2[i])        av_dist2 = array2samples_distance(array2[i], array1[i])        dist = dist + (av_dist1+av_dist2)/batch_size    return distif __name__=='__main__':    batch_size = 3    num_point = 10    num_features = 3    np.random.seed(1)    array1 = np.random.randint(0, high=4, size=(batch_size, num_point, num_features))    array2 = np.random.randint(0, high=4, size=(batch_size, num_point, num_features))    print (array1)    #print(array2)    print('numpy: ', chamfer_distance_numpy(array1, array2))

  

转载于:https://www.cnblogs.com/BambooEatPanda/p/10974184.html

你可能感兴趣的文章
创建代码仓库
查看>>
理解裸机部署过程ironic
查看>>
Django 组件-ModelForm
查看>>
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>
Generate SSH key
查看>>
URL中不应出现汉字
查看>>
SSH框架面试总结----1
查看>>
如何防止Arp攻击
查看>>
ClassList 标签的用法
查看>>
小细节:Java中split()中的特殊分隔符 小数点
查看>>
【编程思想】【设计模式】【行为模式Behavioral】中介者模式Mediator
查看>>
后端接口时间戳或者随机数的作用
查看>>
IOS越狱环境搭建
查看>>
tomcat docBase 和 path
查看>>
java默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结
查看>>
复杂度分析
查看>>
Vue笔记:使用 axios 发送请求
查看>>
富文本编辑器 - RichEditor
查看>>
LintCode刷题笔记-- Count1 binary
查看>>