最近在看论文,想要使用卷积神经网络对于蛋白质结构数据进行处理。发现使用pointnet++对于三维数据的处理是比较新的方法。那么我就开始对pointnet++的源代码徐学习并且做学习笔记。以便于更好的理解使用深度学习的方法对于三维物体的研究思路。
pointnet++对于对象物体的研究主要分为两种方法,第一种是整体分类的方法。第二是对于三维物体的分割。那么由于我们所需要的正是要对于三维物体的局部进行研究,那么这样使用分割的方法就更加的有效。
对于代码的分析:(代码下载于github-pointnet2)
import argparse
import math
from datetime import datetime
import h5py
import numpy as np
import tensorflow as tf
import socket
import importlib
import os
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(BASE_DIR)
sys.path.append(BASE_DIR)
sys.path.append(os.path.join(ROOT_DIR, 'models'))
sys.path.append(os.path.join(ROOT_DIR, 'utils'))
import provider
import tf_util
import part_dataset_all_normal
首先看part_sag中的train_one_hot.py代码的模块信息。
import argparse
在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数。万能的python就自带了argprase包使得这一工作变得简单而规范。通过命令调用代码的时候所输入的参数的设置模块(自我理解)。
import h5py
h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多。group是像文件夹一样的容器,它好比python中的字典,有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,”值”就是组成员对象本身(组或者数据集)。可以非常方便的存放训练数据。
import socket
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
socket和file的区别:
file模块是针对某个指定文件进行【打开】【读写】【关闭】
socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
代码中只是用了HOSTNAME = socket.gethostname()获得了一个主机的IP就没有了其他操作,故不进行深层理解。
import importlib
在程序运行的过程中,根据变量或者配置动态的决定导入哪个模块。使用这个模块的好处是,在运行的过程中选择需要引入的模块是灵活的。
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(BASE_DIR)
sys.path.append(BASE_DIR)
sys.path.append(os.path.join(ROOT_DIR, 'models'))
sys.path.append(os.path.join(ROOT_DIR, 'utils'))
获取文件所在目录的完整路径。那么BSAE_DIR的值就是文件所在的完整路径。
如我们的文件路径为:C:\Users\Administrator\Desktop\pointnet2-master\part_seg\train_one_hot.py
那么BASE_DIR的结果应为:C:\Users\Administrator\Desktop\pointnet2-master\part_seg\
而ROOT_DIR的结果应为:C:\Users\Administrator\Desktop\pointnet2-master\
sys.path.append(BASE_DIR)
sys.path.append(os.path.join(ROOT_DIR, 'models'))
sys.path.append(os.path.join(ROOT_DIR, 'utils'))
这三个添加路径的操作将当前文件路径与models和utils文件路径都添加了进来。这样方面后面模块的导入。
import provider
没有找到相关的文档。标注
import tf_util
代码中没有用到该模块
import part_dataset_all_normal
同上
最后三个模块需要有进一步的理解将更新。
模块部分就学习到这里,下一篇将学习程序的内容。