name: "kitti_equiv_drlim" ################################### Equivariance portion ################################## layers{ name: "trans_kitti_trn" type: HDF5_DATA top: "trans_data" top: "trans_labelvec" hdf5_data_param{ source: "trans_train.txt" batch_size: 128 } include: { phase: TRAIN } } layers{ name: "trans_kitti_tst" type: HDF5_DATA top: "trans_data" top: "trans_labelvec" hdf5_data_param{ source: "trans_test.txt" batch_size: 128 } include: { phase: TEST } } layers{ name: "trans_slice_data" type: SLICE bottom: "trans_data" top: "trans_data_a" top: "trans_data_b" slice_param{ slice_dim: 1 } } layers{ name: "trans_slice_label" type: SLICE bottom: "trans_labelvec" slice_param{ slice_point: 1 slice_point: 2 slice_point: 3 } top: "trans_label1" # indicates whether it belongs to transformation cluster 1 top: "trans_label2" # indicates whether it belongs to transformation cluster 2 top: "trans_label3" # indicates whether it belongs to transformation cluster 3 } layers{ name: "trans_mute" type: SILENCE bottom: "lab_autodummy1" bottom: "trans_label1" bottom: "trans_label2" bottom: "trans_label3" bottom: "lab_autodummy2" } layers{ name: "trans_conv1_a" type: CONVOLUTION bottom: "trans_data_a" top: "trans_conv1_a" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.0001 } bias_filler{ type: "constant" } } param: "conv1_w" param: "conv1_b" } layers{ name: "trans_pool1_a" type: POOLING bottom: "trans_conv1_a" top: "trans_pool1_a" pooling_param{ pool: MAX kernel_size: 3 stride: 2 } } layers{ name: "trans_relu1_a" type: RELU bottom: "trans_pool1_a" top: "trans_pool1_a" } layers{ name: "trans_conv2_a" type: CONVOLUTION bottom: "trans_pool1_a" top: "trans_conv2_a" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv2_w" param: "conv2_b" } layers{ name: "trans_relu2_a" type: RELU bottom: "trans_conv2_a" top: "trans_conv2_a" } layers{ name: "trans_pool2_a" type: POOLING bottom: "trans_conv2_a" top: "trans_pool2_a" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "trans_conv3_a" type: CONVOLUTION bottom: "trans_pool2_a" top: "trans_conv3_a" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 64 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv3_w" param: "conv3_b" } layers{ name: "trans_relu3_a" type: RELU bottom: "trans_conv3_a" top: "trans_conv3_a" } layers{ name: "trans_pool3_a" type: POOLING bottom: "trans_conv3_a" top: "trans_pool3_a" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "trans_ip1_a" type: INNER_PRODUCT bottom: "trans_pool3_a" top: "trans_ip1_a" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "gaussian" std: 0.1 } bias_filler{ type: "constant" } } param: "ip1_w" param: "ip1_b" } layers{ name: "trans_conv1_b" type: CONVOLUTION bottom: "trans_data_b" top: "trans_conv1_b" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.0001 } bias_filler{ type: "constant" } } param: "conv1_w" param: "conv1_b" } layers{ name: "trans_pool1_b" type: POOLING bottom: "trans_conv1_b" top: "trans_pool1_b" pooling_param{ pool: MAX kernel_size: 3 stride: 2 } } layers{ name: "trans_relu1_b" type: RELU bottom: "trans_pool1_b" top: "trans_pool1_b" } layers{ name: "trans_conv2_b" type: CONVOLUTION bottom: "trans_pool1_b" top: "trans_conv2_b" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv2_w" param: "conv2_b" } layers{ name: "trans_relu2_b" type: RELU bottom: "trans_conv2_b" top: "trans_conv2_b" } layers{ name: "trans_pool2_b" type: POOLING bottom: "trans_conv2_b" top: "trans_pool2_b" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "trans_conv3_b" type: CONVOLUTION bottom: "trans_pool2_b" top: "trans_conv3_b" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 64 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv3_w" param: "conv3_b" } layers{ name: "trans_relu3_b" type: RELU bottom: "trans_conv3_b" top: "trans_conv3_b" } layers{ name: "trans_pool3_b" type: POOLING bottom: "trans_conv3_b" top: "trans_pool3_b" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "trans_ip1_b" type: INNER_PRODUCT bottom: "trans_pool3_b" top: "trans_ip1_b" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "gaussian" std: 0.1 } bias_filler{ type: "constant" } } param: "ip1_w" param: "ip1_b" } layers{ name: "trans_ip1_c1" type: INNER_PRODUCT bottom: "trans_ip1_b" top: "trans_ip1_c1" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "xavier" } bias_filler{ type: "constant" } } } layers{ name: "trans_ip1_c2" type: INNER_PRODUCT bottom: "trans_ip1_b" top: "trans_ip1_c2" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "xavier" } bias_filler{ type: "constant" } } } layers{ name: "trans_ip1_c3" type: INNER_PRODUCT bottom: "trans_ip1_b" top: "trans_ip1_c3" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "xavier" } bias_filler{ type: "constant" } } } layers{ name: "trans_loss1" type: CONTRASTIVE_LOSS contrastive_loss_param{ margin: 0.1 } bottom: "trans_ip1_a" bottom: "trans_ip1_c1" bottom: "trans_label1" top: "trans_loss1" } layers{ name: "trans_loss2" type: CONTRASTIVE_LOSS contrastive_loss_param{ margin: 0.1 } bottom: "trans_ip1_a" bottom: "trans_ip1_c2" bottom: "trans_label2" top: "trans_loss2" } layers{ name: "trans_loss3" type: CONTRASTIVE_LOSS contrastive_loss_param{ margin: 0.1 } bottom: "trans_ip1_a" bottom: "trans_ip1_c3" bottom: "trans_label3" top: "trans_loss3" } ################################### DrLIM portion ################################## layers{ name: "drlim_kitti_trn" type: HDF5_DATA top: "drlim_data" top: "drlim_label" hdf5_data_param{ source: "train_drlim.txt" batch_size: 128 } include: { phase: TRAIN } } layers{ name: "drlim_kitti_tst" type: HDF5_DATA top: "drlim_data" top: "drlim_label" hdf5_data_param{ source: "test_drlim.txt" batch_size: 128 } include: { phase: TEST } } layers{ name: "drlim_slice_data" type: SLICE bottom: "drlim_data" top: "drlim_data_a" top: "drlim_data_b" slice_param{ slice_dim: 1 } } layers{ name: "drlim_conv1_a" type: CONVOLUTION bottom: "drlim_data_a" top: "drlim_conv1_a" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.0001 } bias_filler{ type: "constant" } } param: "conv1_w" param: "conv1_b" } layers{ name: "drlim_pool1_a" type: POOLING bottom: "drlim_conv1_a" top: "drlim_pool1_a" pooling_param{ pool: MAX kernel_size: 3 stride: 2 } } layers{ name: "drlim_relu1_a" type: RELU bottom: "drlim_pool1_a" top: "drlim_pool1_a" } layers{ name: "drlim_conv2_a" type: CONVOLUTION bottom: "drlim_pool1_a" top: "drlim_conv2_a" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv2_w" param: "conv2_b" } layers{ name: "drlim_relu2_a" type: RELU bottom: "drlim_conv2_a" top: "drlim_conv2_a" } layers{ name: "drlim_pool2_a" type: POOLING bottom: "drlim_conv2_a" top: "drlim_pool2_a" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "drlim_conv3_a" type: CONVOLUTION bottom: "drlim_pool2_a" top: "drlim_conv3_a" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 64 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv3_w" param: "conv3_b" } layers{ name: "drlim_relu3_a" type: RELU bottom: "drlim_conv3_a" top: "drlim_conv3_a" } layers{ name: "drlim_pool3_a" type: POOLING bottom: "drlim_conv3_a" top: "drlim_pool3_a" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "drlim_ip1_a" type: INNER_PRODUCT bottom: "drlim_pool3_a" top: "drlim_ip1_a" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "gaussian" std: 0.1 } bias_filler{ type: "constant" } } param: "ip1_w" param: "ip1_b" } layers{ name: "drlim_conv1_b" type: CONVOLUTION bottom: "drlim_data_b" top: "drlim_conv1_b" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.0001 } bias_filler{ type: "constant" } } param: "conv1_w" param: "conv1_b" } layers{ name: "drlim_pool1_b" type: POOLING bottom: "drlim_conv1_b" top: "drlim_pool1_b" pooling_param{ pool: MAX kernel_size: 3 stride: 2 } } layers{ name: "drlim_relu1_b" type: RELU bottom: "drlim_pool1_b" top: "drlim_pool1_b" } layers{ name: "drlim_conv2_b" type: CONVOLUTION bottom: "drlim_pool1_b" top: "drlim_conv2_b" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv2_w" param: "conv2_b" } layers{ name: "drlim_relu2_b" type: RELU bottom: "drlim_conv2_b" top: "drlim_conv2_b" } layers{ name: "drlim_pool2_b" type: POOLING bottom: "drlim_conv2_b" top: "drlim_pool2_b" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "drlim_conv3_b" type: CONVOLUTION bottom: "drlim_pool2_b" top: "drlim_conv3_b" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 64 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv3_w" param: "conv3_b" } layers{ name: "drlim_relu3_b" type: RELU bottom: "drlim_conv3_b" top: "drlim_conv3_b" } layers{ name: "drlim_pool3_b" type: POOLING bottom: "drlim_conv3_b" top: "drlim_pool3_b" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "drlim_ip1_b" type: INNER_PRODUCT bottom: "drlim_pool3_b" top: "drlim_ip1_b" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "gaussian" std: 0.1 } bias_filler{ type: "constant" } } param: "ip1_w" param: "ip1_b" } layers{ name: "drlim_loss" type: CONTRASTIVE_LOSS contrastive_loss_param{ margin: 1.0 } bottom: "drlim_ip1_a" bottom: "drlim_ip1_b" bottom: "drlim_label" top: "drlim_loss" } ################################### Classification portion ################################## layers{ name: "cls_kitti_trn" type: HDF5_DATA top: "cls_data" top: "cls_label" hdf5_data_param{ source: "train_cls.txt" batch_size: 128 } include: { phase: TRAIN } } layers{ name: "cls_kitti_tst" type: HDF5_DATA top: "cls_data" top: "cls_label" hdf5_data_param{ source: "test_cls.txt" batch_size: 128 } include: { phase: TEST } } layers{ name: "cls_mute" type: SILENCE bottom: "cls_label" bottom: "cls_dummy" } layers{ name: "cls_conv1" type: CONVOLUTION bottom: "cls_data" top: "cls_conv1" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.0001 } bias_filler{ type: "constant" } } param: "conv1_w" param: "conv1_b" } layers{ name: "cls_pool1" type: POOLING bottom: "cls_conv1" top: "cls_pool1" pooling_param{ pool: MAX kernel_size: 3 stride: 2 } } layers{ name: "cls_relu1" type: RELU bottom: "cls_pool1" top: "cls_pool1" } layers{ name: "cls_conv2" type: CONVOLUTION bottom: "cls_pool1" top: "cls_conv2" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 32 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv2_w" param: "conv2_b" } layers{ name: "cls_relu2" type: RELU bottom: "cls_conv2" top: "cls_conv2" } layers{ name: "cls_pool2" type: POOLING bottom: "cls_conv2" top: "cls_pool2" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "cls_conv3" type: CONVOLUTION bottom: "cls_pool2" top: "cls_conv3" blobs_lr: 1 blobs_lr: 2 convolution_param{ num_output: 64 pad: 2 kernel_size: 5 stride: 1 weight_filler{ type: "gaussian" std: 0.01 } bias_filler{ type: "constant" } } param: "conv3_w" param: "conv3_b" } layers{ name: "cls_relu3" type: RELU bottom: "cls_conv3" top: "cls_conv3" } layers{ name: "cls_pool3" type: POOLING bottom: "cls_conv3" top: "cls_pool3" pooling_param{ pool: AVE kernel_size: 3 stride: 2 } } layers{ name: "cls_ip1" type: INNER_PRODUCT bottom: "cls_pool3" top: "cls_ip1" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 64 weight_filler{ type: "gaussian" std: 0.1 } bias_filler{ type: "constant" } } param: "ip1_w" param: "ip1_b" } layers{ name: "cls_ip2" type: INNER_PRODUCT bottom: "cls_ip1" top: "cls_ip2" blobs_lr: 1 blobs_lr: 2 inner_product_param{ num_output: 397 weight_filler{ type: "gaussian" std: 0.1 } bias_filler{ type: "constant" } } } layers{ name: "cls_accuracy" type: ACCURACY bottom: "cls_ip2" bottom: "cls_label" top: "cls_accuracy" } layers{ name: "cls_loss" type: SOFTMAX_LOSS bottom: "cls_ip2" bottom: "cls_label" top: "cls_loss" }