mvcnn代码详解_MV-CRNN: Learning Multi-view Representation with LSTM for 3D Shape Recognition and Retriev...

#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时的结果

你可能感兴趣的:(mvcnn代码详解)