![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pointnet
文章平均质量分 70
guyuezunting
这个作者很懒,什么都没留下…
展开
-
关于open3d的入门到放弃
首先,提醒大家,这真的是一片劝大家放弃open3d的文章,劝大家不要浪费时间去使用这个团队及其糟糕,说明及其匮乏的一个项目最近在做室内三维重构的项目,想到之前看过的open3d,访问github搜索open3d点进去看到他们新发布的0.13.0如下酷炫吧,以为看到了希望,开始折腾在jetson nano 2G上进行编译安装,第一此板子是arm架构,Ubuntu18.04,跟一般的amd架构的Ubuntu不一样,所有的编译需要找对应架构的才能编译通过,按照open3d提供的github上的安装步骤原创 2021-11-17 11:27:47 · 12813 阅读 · 15 评论 -
open3d numpy array 转换为point cloud
在三维点云处理过程中经常会自己造点点云数据进行展示,但是一般情况下都是用numpy array甚至是list把数据先存起来,但是open3d里面的visualization.draw_geometries([pcd])里面pcd是pointcloud的格式,所以需要把numpy array转换为point cloud官方给出了解决方法numpy转point cloudpcd = o3d.geometry.PointCloud()pcd.points = o3d.utility.Vect原创 2020-07-07 10:28:51 · 7846 阅读 · 0 评论 -
pointnet def eval_one_epoch(sess, ops, test_writer)
首先看具体代码实现def eval_one_epoch(sess, ops, test_writer): """ ops: dict mapping from string to tf ops """ is_training = False total_correct = 0 total_seen = 0 loss_sum = 0 total_seen_class = [0 for _ in range(NUM_CLASSES)] total_c原创 2020-06-29 23:05:40 · 308 阅读 · 0 评论 -
pointnet provider.rotate_point_cloud provider.jitter_point_cloud
首先看调用rotated_data = provider.rotate_point_cloud(current_data[start_idx:end_idx, :, :]) jittered_data = provider.jitter_point_cloud(rotated_data)pointnet工程中,current_data取出batchsize个pointnet模型数据。作为输入参数def rotate_point_cloud(batch_data):原创 2020-06-29 22:41:24 · 567 阅读 · 0 评论 -
pointnet train函数第二十五句 sess.run(init, {is_training_pl: True})
sess.run(init, {is_training_pl: True})运行第二十四句的chu'shi'hua原创 2020-06-29 15:33:52 · 173 阅读 · 0 评论 -
pointnet train函数第二十七句 for epoch in range(MAX_EPOCH):
for epoch in range(MAX_EPOCH): log_string('**** EPOCH %03d ****' % (epoch)) sys.stdout.flush() train_one_epoch(sess, ops, train_writer) eval_one_epoch(sess, ops, test_writer) ...原创 2020-06-29 23:07:01 · 6356 阅读 · 1 评论 -
pointnet shuffle_data(data, labels)
打乱point点云元数据顺序以及labels的顺序def shuffle_data(data, labels): """ Shuffle data and labels. Input: data: B,N,... numpy array label: B,... numpy array Return: shuffled data, label and shuffle indices """原创 2020-06-28 22:59:03 · 595 阅读 · 0 评论 -
pointnet provider.loadDataFile
首先看具体实现def load_h5(h5_filename): f = h5py.File(h5_filename) data = f['data'][:] label = f['label'][:] return (data, label)def loadDataFile(filename): return load_h5(filename)传入的参数是current_data, current_label = provider.loadDat原创 2020-06-28 22:09:27 · 236 阅读 · 1 评论 -
pointnet train函数第二十六句 ops
ops = {'pointclouds_pl': pointclouds_pl, 'labels_pl': labels_pl, 'is_training_pl': is_training_pl, 'pred': pred, 'loss': loss, 'train_op': train_op, 'merged': merged.原创 2020-06-28 21:28:40 · 239 阅读 · 0 评论 -
pointnet train函数第二十五句 sess.run(init, {is_training_pl: True})
sess.run(init, {is_training_pl: True})运行第二十四句的初始化op,同时初始化is_training_pl这个bool类型tensor初始值为true。此tensor在运行模型过程中多次用到原创 2020-06-28 15:30:35 · 291 阅读 · 0 评论 -
pointnet train函数 第二十四句 init = tf.global_variables_initializer()
init = tf.global_variables_initializer()初始化模型所有参数,像pointclouds_pl, labels_pl,is_training_pl这些都是placeholder进行了声明,并没有进行初始化,is_training_pl甚至连shape都没有指定因此需要调用tf对gragh中的全局variables进行初始化...原创 2020-06-28 15:26:26 · 852 阅读 · 0 评论 -
pointnet train函数二十一至二十三句
merged = tf.summary.merge_all() train_writer = tf.summary.FileWriter(os.path.join(LOG_DIR, 'train'), sess.graph) test_writer = tf.summary.FileWriter(os.path.join(LOG_DIR, 'test'))tf.summary主要用于tensorflow.原创 2020-06-28 11:37:29 · 146 阅读 · 0 评论 -
pointnet train函数第十六至第二十句
config = tf.ConfigProto() config.gpu_options.allow_growth = True config.allow_soft_placement = True config.log_device_placement = False sess = tf.Session(config=config)其十六~十九,属于即将初始化的session的config设置十六句初始化一个config,后面三句分.原创 2020-06-27 23:19:22 · 137 阅读 · 0 评论 -
pointnet train函数 第十五句
saver = tf.train.Saver()用来保存模型,包括优化器,model以及中间的各种参数原创 2020-06-27 23:07:32 · 134 阅读 · 0 评论 -
pointnet train第十四句 train_op = optimizer.minimize(loss, global_step=batch)
train_op = optimizer.minimize(loss, global_step=batch)第十三句初始化一个optimizer之后,通过minimize函数,最小化损失函数用来计算梯度以及更新参数。保存的优化次数保存在batch里面原创 2020-06-27 23:03:15 · 1881 阅读 · 0 评论 -
pointnet train函数第十三句 optimizer = tf.train.MomentumOptimizer
parser.add_argument('--optimizer', default='adam', help='adam or momentum [default: adam]')如上面代码所示,optimizer,因为最近adam优化算法比较流行,所以优化器默认adam算法 if OPTIMIZER == 'momentum': optimizer = tf.train.MomentumOptimizer(learning_rate, m.原创 2020-06-27 22:14:06 · 633 阅读 · 0 评论 -
pointnet 第十二句 learning_rate = get_learning_rate(batch)
learning_rate = get_learning_rate(batch)首先看具体实现def get_learning_rate(batch): learning_rate = tf.train.exponential_decay( BASE_LEARNING_RATE, # Base learning rate. batch * BATCH_SIZE, # Current ind.原创 2020-06-27 21:49:51 · 201 阅读 · 1 评论 -
pointnet train函数第十一句 accuracy = tf.reduce_sum(tf.cast(correct, tf.float32)) / float(BATCH_SIZE)
计算完pred跟labls的对比,equal,属于bool的32的tensor然后是这句accuracy = tf.reduce_sum(tf.cast(correct, tf.float32)) / float(BATCH_SIZE)、首先看tf.cast,类似C++中的强制类型转转,static cast从bool转换为float,然后通过tf.reduce_sum对correct进行求和,最后求均值,求得一个batchsize的平均精度...原创 2020-06-27 21:04:09 · 601 阅读 · 1 评论 -
pointnet train 第十句correct = tf.equal(tf.argmax(pred, 1), tf.to_int64(labels_pl))
correct = tf.equal(tf.argmax(pred, 1), tf.to_int64(labels_pl))首先看tf.argmax(pred,1)因为pred,是32,40的tensor,40那一维是40个模型中对应的概率,取最大的一个索引作为预测值,最后得到shape 32的tensor然后跟shape 32的labels_pl相比,即tf.equal,得到32的tensor,类型为bool...原创 2020-06-27 18:56:24 · 744 阅读 · 0 评论 -
pointnet (九)train函数,第九句
loss = MODEL.get_loss(pred, labels_pl, end_points)第七句,第八句是获得net以及transformnet,最终得到的值需要与label一起进行计算pointnet学习(六)train函数第七第八句pred, end_points = MODEL.get_model(pointclouds_pl, is_training_pl, bn_decay=bn_decay)返回的pred即为net,endpoint是transformnet现在看lo..原创 2020-06-27 11:35:12 · 432 阅读 · 0 评论 -
pintnet tf_util.dropout
net = tf_util.dropout(net, keep_prob=0.7, is_training=is_training, scope='dp1')具体实现如下def dropout(inputs, is_training, scope, keep_prob=0.5, noise_shape=None): """ Dropout layer..原创 2020-06-25 18:16:53 · 376 阅读 · 0 评论 -
pointnet input_transform_net2
先看工程中的调用 with tf.variable_scope('transform_net2') as sc: transform = feature_transform_net(net, is_training, bn_decay, K=64)with....类似C++里面的namespace、输入的net是shape[32,1024,1,64],pointcloud乘以transformnet训练输出的32个3x3的矩阵进行旋转平移,保证了点云旋转不变性,再为了旋转原创 2020-06-25 10:56:08 · 277 阅读 · 0 评论 -
pointnet tf_util.fully_connected
net = tf_util.fully_connected(net, 512, bn=True, is_training=is_training, scope='tfc1', bn_decay=bn_decay) net = tf_util.fully_connected(net, 256, bn=True, is_training=is_training, sc.原创 2020-06-23 17:07:33 · 495 阅读 · 0 评论 -
pointnet tf_util.max_pool2d
net = tf_util.max_pool2d(net, [num_point,1], padding='VALID', scope='tmaxpool')看下具体实现def max_pool2d(inputs, kernel_size, scope, stride=[2, 2], padding='VALID'):.原创 2020-06-23 16:19:42 · 467 阅读 · 1 评论 -
pointnet batch_norm_for_conv2d
outputs = batch_norm_for_conv2d(outputs, is_training, bn_decay=bn_decay, scope='bn')def batch_norm_for_conv2d(inputs, is_training, bn_decay, scope): """ Batch normalization on 2D convolutional maps. Args: inputs: Tensor, 4D BHWC input .原创 2020-06-23 15:03:12 · 331 阅读 · 0 评论 -
point net tf.nn.conv2d
计算一个4维的输入与对应的filter即卷积核的二维卷积计算tf.nn.conv2d( input, filters, strides, padding, data_format='NHWC', dilations=None, name=None)在此工程中outputs = tf.nn.conv2d(inputs, kernel, [1, stride_h, stride_w, 1], ...原创 2020-06-22 22:36:57 · 383 阅读 · 1 评论 -
_variable_with_weight_decay
查看具体实现:def _variable_with_weight_decay(name, shape, stddev, wd, use_xavier=True): """Helper to create an initialized Variable with weight decay. Note that the Variable is initialized with a truncated normal distribution. A weight decay is added o原创 2020-06-22 19:47:09 · 634 阅读 · 0 评论 -
_variable_with_weight_decay
查看具体实现:def _variable_with_weight_decay(name, shape, stddev, wd, use_xavier=True): """Helper to create an initialized Variable with weight decay. Note that the Variable is initialized with a truncated normal distribution. A weight decay is added o原创 2020-06-22 19:46:37 · 335 阅读 · 0 评论 -
tf.get_variable
tf.get_variable对传入的name的tensor进行初始化,在同一个graph下,如果不存在则初始化,如果存在则返回tf.compat.v1.get_variable( name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=None, collections=None, caching_device=None, partitioner=None, validate...原创 2020-06-22 19:18:44 · 1180 阅读 · 0 评论 -
windows tensorflow tf.nn.l2_loss
输入tensor的元素平方和除以2output = sum(t ** 2) / 2原创 2020-06-22 19:03:27 · 212 阅读 · 0 评论 -
pointnet学习(七)input_transform_net
因为getmodel中第一个net就是此函数,且函数语句较多,所以分开写首先看函数实现def input_transform_net(point_cloud, is_training, bn_decay=None, K=3): """ Input (XYZ) Transform Net, input is BxNx3 gray image Return: Transformation matrix of size 3xK """ batch_原创 2020-06-23 17:15:46 · 1054 阅读 · 0 评论 -
pointnet学习(八)tf_util.conv2d
pointnet学习(七)中input_transform_net函数,通过条用tf_util.conv2d构建net。tf_util.conv2d(input_image, 64, [1,3], padding='VALID', stride=[1,1], bn=True, is_training=is_training, scope='tconv1', bn_decay=b原创 2020-06-23 15:06:25 · 3060 阅读 · 0 评论 -
get_shape()[-1]
get_shape()[-1]获取最后一维长度。此工程拓展了一维,长度为1.原创 2020-06-22 18:30:39 · 1685 阅读 · 0 评论 -
pointnet学习(六)train函数第七第八句
第七句tf.summary.scalar('bn_decay', bn_decay)查看学习(二)https://blog.csdn.net/guyuezunting/article/details/106830677第八句pred, end_points = MODEL.get_model(pointclouds_pl, is_training_pl, bn_decay=bn_decay)字面意思是获取模型。调用的是配置模型的get_model,这里解读配置的是pointnet_cls.py.原创 2020-06-24 13:43:59 · 557 阅读 · 0 评论 -
pointnet学习(五)train函数,第五、六句
第五句batch = tf.Variable(0)声明一个tensor常量,值为0,主要是供第六句get_bn_decay使用作者给的解释是,这个batch用来设置glob_step。第六句bn_decay = get_bn_decay(batch),这一句用来设置train的过程中学习率的衰减系数的。具体实现如下:def get_bn_decay(batch): bn_momentum = tf.train.exponential_decay( ..原创 2020-06-22 11:53:41 · 930 阅读 · 1 评论 -
pointnet学习(四)tf.matmul() 和tf.multiply()的区别
tf.multiply(),是两个矩阵每个元素进行相乘,类似卷积。只是卷积乘积之后会求和,得到一个值,而这里得到的是一个矩阵所以必须两个矩阵的维度完全一样才行tf.matmul(),两个矩阵相乘,严格遵守线性代数里面的矩阵相乘规则,比如n*m的矩阵必须与m*?的矩阵得到n*?的矩阵。...原创 2020-06-22 10:23:46 · 236 阅读 · 0 评论 -
pointnet学习(三)pointnet train()函数,前四句
第一句是with tf.Graph().as_default():设置tensor所属的graph,具体原理目前不清楚,只是当前理解为模板背景第二句with tf.device('/gpu:'+str(GPU_INDEX)):设置tensor运行硬件环境为gpu。不过目前我的代码跑起来不知道什么原因没有用到gpu。非常慢第三句,第四句pointclouds_pl, labels_pl = MODEL.placeholder_inputs(BATCH_SIZE, NUM_PO原创 2020-06-22 10:04:20 · 644 阅读 · 1 评论 -
pointnet学习(二)tf.summary.scalar含义
tf.summary.scalar('bn_decay', bn_decay)用来TensorBoard 可视化原创 2020-06-18 13:02:57 · 678 阅读 · 2 评论 -
pointnet学习(一)tensorflow1.x版本---windows运行起来
终于在windows下跑起来pointnet源代码了。这里是针对无tensorflow基础,无python基础的人群写的,有此基础的可以看其他资料了安装anaconda,tensorflow以及cudnn的环节这里不描述了,后期重新整理发布。第一个坑,用vs打开,各种错误,建议用pycharm,配置好canaconda的python版本即可运行下去,第二个坑,数据集,对于初学者,h5是很陌生的概念,所以作者提前提醒,需要安装h5py,主要作用就是打开h5格式文件,如果没有运行程序,一定对这个原创 2020-06-12 10:34:00 · 1515 阅读 · 1 评论 -
pointnet数据集modelnet40_ply_hdf5_2048
为了学习最原始的pointnet的网络,一般初学者最头疼的就是运行作者的源码(%99.999运行不出来,尤其是windows),下载的半个月才下载好。因为国内没有资源,翻墙网络很差,不稳定,下载特别艰辛...原创 2020-06-09 16:43:28 · 4050 阅读 · 2 评论