#MV-CRNN
pytorch version: 0.3
代码和文件夹说明
代码
未列入的代码文件为旧代码,已不再使用。
train_main.py
训练代码
train_test.py
测试代码。
configuration.py
基本配置代码,包括超参、数据路径、模型等
model.py
定义网络模型,包括CNN1,CNN2, EncoderCNN, DecoderRNN等
train_CNN.py
对CNN1,CNN2进行预训练的代码
get_dataset.py
生成数据集与加载数据集的代码,用于训练与测试的数据加载
datasetSV.py
用于进行CNN预训练的单视角实验训练与测试,生成数据集与加载数据集的代码。
与get_dataset.py共用数据来源。数据路径在configuration.py中设置,数据的来源由matlab代码对off数据进行render得到。
metrics_logging.py、train_reports.py
格式化记录训练过程并可以在训练中查看训练情况。该代码来源于VoxNet项目。
plot_confusion_matrix.py
用于绘制confusion matrix图,主要针对ModelNet10
script_analysis.py
实验过程中的一些小测试
文件夹
data_preprocess文件夹
用于数据集的预处理。由off格式经过render得到各个视角的图像,并以mat格式进行存储。每个mat存储一个shape得到的所有view图像,格式为(view_NO,channel,height,width).
主函数为demo.m,可在代码中设置view的数目,是否进行旋转等设置。
Script_copeData.m 用于一键清理历史数据。使用时谨慎!!!
doc
文档。主要是论文。暂未开始。
checkpoints
训练过程中保存的网络模型参数。后续通过main_test.py从中选出测试精度最高的一组模型参数
pretrained_models
预训练的各种网络参数。包括cnn预训练参数,分步训练过程中的网络参数等
ref
参考内容
results
测试保存的结果
script文件夹
该文件夹内为各种实验shell脚本
configuration.py里的配置说明
gpu_num 采用的GPU数目
debug: 取True时为调试模式,测试程序是否可以全流程跑通,一个epoch里的循环只训练一次batch就break
Model
feat_size: CNN输出(或RNN输出)特征向量的长度
hidden_size: RNN隐藏单元长度
num_layers: RNN层数
num_classes: 分类数目
view_size: view数目
is_variable_length: 是否可变长view
cnn_type: CNN模块里采用的CNN网络类型,CNN1为ResNet18网络,CNN2为自行设计的3层卷机神经网络
is_single_channel:采用cnn2时输入view图像为单通道数据(实际上我们render的view图像三个通道图像是一样的,但是ResNet网络的输入要求是RGB图像)
cnn_pretrained: 预训练的CNN网络参数路径
rnn_mode: 采用的rnn网络类型LSTM和GRU
bidirectional:boolean,是否采用双向RNN
pooling_mode: Pooling层的类型,包括end, mean, weighted, max. end为直接输出最后一个结果,mean为element均值,weighted为加权均值,max
connected_by: CNN与RNN之间采用的网络连接层类型。None没有连接层,fc采用全连接层,highway采用highway
num_layers_hw: 当采用highway时该网络的层数
Preprocessing
num_threads: 数据集数据加载时并行线程数目
Training
num_epochs: 训练epoach数目
batch_size: mini-batch的大小
learning_rate: 训练学习率
fixed_CNN: boolean, 训练时固定CNN网络模块。这里主要指的是预训练的cnn部分,不包括FC和BN部分。
fixed_RNN: boolean, True,训练时固定RNN网络模块,不参与训练,此时需要加在预训练的网络参数,路径由init_rnn_model指定,为必需项。
finetuning: boolean, 是否对整个网络进行finetuning. True,需要加载训练的网络参数,路径由init_cnn_model和init_rnn_model指定. 当进行finetuning时,要求fixed_CNN = False和fixed_RNN = False。当采用finetuning时将LR减小10倍
lr_mode: 学习率变化模式。
save_step: 保存网络参数的步进,单位为epoach
save_itr: 保存网络参数的步进,单位为itr
CNN
RNN
pretrained
finetuning
load
save
True
False
False
False
-
10
True
False
True
False
00
10
False
True
True
False
10
01
False
False
True
True
01
11
Testing
batch_size_test: 测试时采用的batch size。由于测试时不需要计算梯度,显存占用少,所以可以比训练时的batch size大
repeat_num: 测试时重复次数
test_mode: 测试模式,包括single, view, model等。single,单个模型在变长view下的精度测试, view, 单个模型在不同view数目情况下的精度结果, model, 多个模型在变长view下的精度测试。
score: 精度评估方法,包括recall和F1
Path
data_dir: 数据集路径
metrics_fname: 训练日志保存路径
model_path: 网络参数保存路径
init_cnn_model: 预训练的网络参数路径,encoder部分
init_rnn_model: 预训练的网络参数路径,decoder部分
out_fname: 测试的分类预测结果
test_results: 测试精度矩阵保存结果
训练方法
以ModelNet10为例,ModelNet40类似:
采用train_CNN.py对CNN网络进行预训练,此时会得到cnn网络参数cnn_10.pkl;
固定CNN模块(fixed_CNN=True),对RNN网络进行训练(fixed_RNN=False). 注意finetuning=False. 训练后得到网络参数encoder_pretrained_10.pkl, decoder_pretrained_10.pkl
固定RNN模块(fixed_RNN=True),对CNN网络进行训练(fixed_CNN=False). 注意finetuning=False,LR*0.1. 训练后得到网络参数encoder_pretrained_01.pkl, decoder_pretrained_01.pkl
进行finetuning(finetuning=True). LR*0.1.训练后得到网络参数decoder_pretrained_11.pkl, decoder_pretrained_11.pkl
实验内容
For 3DV
ModelNet10
fixed length
FC + weighted (已完成)
var length
FC + no pose + weighted (已完成)
ModelNet40
fixed length
FC + weighted (未完成)
var length
FC + no pose + weighted (未完成)
For TMM
ModelNet10
fixed length
HW1 + weighted (已完成)
Pooling (已完成)
connected layer(已完成)
LSTM&GRU(已完成)
unidirectional & bidirectional (已完成)
var length
HW1 + pose + weighted (未完成)
HW1 + no pose + weighted (已完成)
ModelNet40
fixed length
HW1 + weighted (未完成)
var length
HW1+ pose + weighted (未完成)
ScanNet
实验结果
固定视角数目的网络模型的测试精度
method
Model10
ModelNet40
Sydney14
ShapeNet
83.5%
77%
-
VoxNet
92%
83%
FusionNet
93.11%
90.8%
VRN Ensemble
97.14%
95.54%
Klokov and Lempitsky
94.0%
91.8%
|
| MVCNN | - | 90.1% | |
| DeepPano | 85.45% | 77.63% | |
| GIFT | 92.35% | 83.10% | |
| Pairwise | 92.8% | 90.7% | |
| MVCNN-MultiRes | - | 91.4% | |
| our method | 95.26 | 89.22% | |
88.78%
可变视角数目时的网络模型的测试精度
ModelNet10
94.02%
ModelNet40
87.67%
网络模型参数的影响
Pooling
method
end
max
mean
weighted
accuracy
94.27%
94.60%
94.93%
95.26%
Connected Layer
method
None
FC
HW1
HW2
accuracy
94.71%
94.49%
95.26%
95.04%
bidirectional
method
unidirectional
bidirectional
accuracy
-
95.26%
LSTM/GRU
method
GRU
LSTM
accuracy
94.82%
95.26%
其它
固定长度模型测试变化长度:
蓝色为可变模型,红色为固定模型。我们发现可变模型为了提高适应性,降低了12视角时的精度,但是在1~2个视角的精度都得到了显著的提高。另外,该方法和训练有关系,因为固定模型的结果是“挑选”出来的最优结果,所以整体比可变模型的效果要好。
变化长度模型测试固定长度,结果肯定对应的view=12时的结果