From dcad9905acd786847e5137c2c9aeef2cda645c36 Mon Sep 17 00:00:00 2001 From: Yu Xiang Date: Thu, 16 Jun 2016 16:47:15 -0700 Subject: [PATCH] add kitti tracking vgg --- .../cfgs/kitti_tracking_multiscale_vgg16.yml | 19 + ...tti_tracking_test_vgg16_rcnn_multiscale.sh | 36 ++ .../solver_rcnn_multiscale.prototxt | 15 + .../test_rcnn_multiscale.prototxt | 556 +++++++++++++++++ .../train_rcnn_multiscale.prototxt | 584 ++++++++++++++++++ 5 files changed, 1210 insertions(+) create mode 100644 fast-rcnn/experiments/cfgs/kitti_tracking_multiscale_vgg16.yml create mode 100755 fast-rcnn/experiments/scripts/kitti_tracking_test_vgg16_rcnn_multiscale.sh create mode 100644 fast-rcnn/models/VGG16/kitti_tracking_test/solver_rcnn_multiscale.prototxt create mode 100644 fast-rcnn/models/VGG16/kitti_tracking_test/test_rcnn_multiscale.prototxt create mode 100644 fast-rcnn/models/VGG16/kitti_tracking_test/train_rcnn_multiscale.prototxt diff --git a/fast-rcnn/experiments/cfgs/kitti_tracking_multiscale_vgg16.yml b/fast-rcnn/experiments/cfgs/kitti_tracking_multiscale_vgg16.yml new file mode 100644 index 0000000..5ad237e --- /dev/null +++ b/fast-rcnn/experiments/cfgs/kitti_tracking_multiscale_vgg16.yml @@ -0,0 +1,19 @@ +EXP_DIR: kitti_tracking +IS_RPN: False +IS_MULTISCALE: True +REGION_PROPOSAL: 'RPN' +TRAIN: + SCALES_BASE: !!python/tuple [3.0] + NUM_PER_OCTAVE: 1 + IMS_PER_BATCH: 2 + FG_FRACTION: 0.25 + FG_THRESH: !!python/tuple [0.7, 0.5, 0.5] + BG_THRESH_HI: !!python/tuple [0.7, 0.5, 0.5] + BG_THRESH_LO: !!python/tuple [0.1, 0.1, 0.1] + BBOX_THRESH: !!python/tuple [0.7, 0.5, 0.5] + ROI_THRESHOLD: 0.01 + SNAPSHOT_INFIX: kitti +TEST: + SCALES_BASE: !!python/tuple [3.0] + NUM_PER_OCTAVE: 1 + NMS: 0.5 diff --git a/fast-rcnn/experiments/scripts/kitti_tracking_test_vgg16_rcnn_multiscale.sh b/fast-rcnn/experiments/scripts/kitti_tracking_test_vgg16_rcnn_multiscale.sh new file mode 100755 index 0000000..4566f6b --- /dev/null +++ b/fast-rcnn/experiments/scripts/kitti_tracking_test_vgg16_rcnn_multiscale.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set -x +set -e + +export PYTHONUNBUFFERED="True" + +LOG="experiments/logs/kitti_tracking_test_vgg16_rcnn_multiscale.txt.`date +'%Y-%m-%d_%H-%M-%S'`" +exec &> >(tee -a "$LOG") +echo Logging output to "$LOG" + +time ./tools/train_net.py --gpu $1 \ + --solver models/VGG16/kitti_tracking_test/solver_rcnn_multiscale.prototxt \ + --weights data/imagenet_models/VGG16.v2.caffemodel \ + --imdb kitti_tracking_training_trainval \ + --cfg experiments/cfgs/kitti_tracking_multiscale_vgg16.yml \ + --iters 80000 + +image_set="testing" + +for i in {0..28} +do + +seq_num=$(printf '%04d' "$i") +echo $seq_num + +time ./tools/test_net.py --gpu $1 \ + --def models/VGG16/kitti_tracking_test/test_rcnn_multiscale.prototxt \ + --net output/kitti_tracking/kitti_tracking_training_trainval/vgg16_fast_rcnn_multiscale_trainval_kitti_iter_80000.caffemodel \ + --imdb kitti_tracking_$image_set\_$seq_num \ + --cfg experiments/cfgs/kitti_tracking_multiscale_vgg16.yml + +# copy the detection result +cp output/kitti_tracking/kitti_tracking_$image_set\_$seq_num/vgg16_fast_rcnn_multiscale_trainval_kitti_iter_80000/$seq_num.txt data/KITTI_Tracking/detection_trainval_vgg16/$image_set + +done diff --git a/fast-rcnn/models/VGG16/kitti_tracking_test/solver_rcnn_multiscale.prototxt b/fast-rcnn/models/VGG16/kitti_tracking_test/solver_rcnn_multiscale.prototxt new file mode 100644 index 0000000..4771d0d --- /dev/null +++ b/fast-rcnn/models/VGG16/kitti_tracking_test/solver_rcnn_multiscale.prototxt @@ -0,0 +1,15 @@ +train_net: "models/VGG16/kitti_tracking_test/train_rcnn_multiscale.prototxt" +base_lr: 0.001 +lr_policy: "step" +gamma: 0.1 +stepsize: 60000 +display: 20 +average_loss: 100 +momentum: 0.9 +weight_decay: 0.0005 +# We disable standard caffe solver snapshotting and implement our own snapshot +# function +snapshot: 0 +# We still use the snapshot prefix, though +snapshot_prefix: "vgg16_fast_rcnn_multiscale_trainval" +#debug_info: true diff --git a/fast-rcnn/models/VGG16/kitti_tracking_test/test_rcnn_multiscale.prototxt b/fast-rcnn/models/VGG16/kitti_tracking_test/test_rcnn_multiscale.prototxt new file mode 100644 index 0000000..b8f9d3e --- /dev/null +++ b/fast-rcnn/models/VGG16/kitti_tracking_test/test_rcnn_multiscale.prototxt @@ -0,0 +1,556 @@ +name: "CaffeNet" +input: "data" +input_shape { + dim: 1 + dim: 3 + dim: 227 + dim: 227 +} +input: "rois" +input_shape { + dim: 1 # to be changed on-the-fly to num ROIs + dim: 5 # [batch ind, x1, y1, x2, y2] zero-based indexing +} +layer { + name: "conv1_1" + type: "Convolution" + bottom: "data" + top: "conv1_1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu1_1" + type: "ReLU" + bottom: "conv1_1" + top: "conv1_1" +} +layer { + name: "conv1_2" + type: "Convolution" + bottom: "conv1_1" + top: "conv1_2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu1_2" + type: "ReLU" + bottom: "conv1_2" + top: "conv1_2" +} +layer { + name: "pool1" + type: "Pooling" + bottom: "conv1_2" + top: "pool1" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv2_1" + type: "Convolution" + bottom: "pool1" + top: "conv2_1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu2_1" + type: "ReLU" + bottom: "conv2_1" + top: "conv2_1" +} +layer { + name: "conv2_2" + type: "Convolution" + bottom: "conv2_1" + top: "conv2_2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu2_2" + type: "ReLU" + bottom: "conv2_2" + top: "conv2_2" +} +layer { + name: "pool2" + type: "Pooling" + bottom: "conv2_2" + top: "pool2" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv3_1" + type: "Convolution" + bottom: "pool2" + top: "conv3_1" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu3_1" + type: "ReLU" + bottom: "conv3_1" + top: "conv3_1" +} +layer { + name: "conv3_2" + type: "Convolution" + bottom: "conv3_1" + top: "conv3_2" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu3_2" + type: "ReLU" + bottom: "conv3_2" + top: "conv3_2" +} +layer { + name: "conv3_3" + type: "Convolution" + bottom: "conv3_2" + top: "conv3_3" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu3_3" + type: "ReLU" + bottom: "conv3_3" + top: "conv3_3" +} +layer { + name: "pool3" + type: "Pooling" + bottom: "conv3_3" + top: "pool3" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv4_1" + type: "Convolution" + bottom: "pool3" + top: "conv4_1" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu4_1" + type: "ReLU" + bottom: "conv4_1" + top: "conv4_1" +} +layer { + name: "conv4_2" + type: "Convolution" + bottom: "conv4_1" + top: "conv4_2" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu4_2" + type: "ReLU" + bottom: "conv4_2" + top: "conv4_2" +} +layer { + name: "conv4_3" + type: "Convolution" + bottom: "conv4_2" + top: "conv4_3" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu4_3" + type: "ReLU" + bottom: "conv4_3" + top: "conv4_3" +} +layer { + name: "pool4" + type: "Pooling" + bottom: "conv4_3" + top: "pool4" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv5_1" + type: "Convolution" + bottom: "pool4" + top: "conv5_1" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu5_1" + type: "ReLU" + bottom: "conv5_1" + top: "conv5_1" +} +layer { + name: "conv5_2" + type: "Convolution" + bottom: "conv5_1" + top: "conv5_2" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu5_2" + type: "ReLU" + bottom: "conv5_2" + top: "conv5_2" +} +layer { + name: "conv5_3" + type: "Convolution" + bottom: "conv5_2" + top: "conv5_3" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu5_3" + type: "ReLU" + bottom: "conv5_3" + top: "conv5_3" +} +layer { + name: 'feature' + type: 'FeatureExtrapolating' + bottom: 'conv5_3' + top: 'conv5_feature' + feature_extrapolating_param { + scale_string: "3.0" + num_scale_base: 1 + num_per_octave: 1 + } +} +layer { + name: "roi_pool5" + type: "ROIPooling" + bottom: "conv5_feature" + bottom: "rois" + top: "pool5" + roi_pooling_param { + pooled_w: 7 + pooled_h: 7 + spatial_scale: 0.0625 # 1/16 + } +} +layer { + name: "fc6" + type: "InnerProduct" + bottom: "pool5" + top: "fc6" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 4096 + } +} +layer { + name: "relu6" + type: "ReLU" + bottom: "fc6" + top: "fc6" +} +layer { + name: "drop6" + type: "Dropout" + bottom: "fc6" + top: "fc6" + dropout_param { + dropout_ratio: 0.5 + } +} +layer { + name: "fc7" + type: "InnerProduct" + bottom: "fc6" + top: "fc7" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 4096 + } +} +layer { + name: "relu7" + type: "ReLU" + bottom: "fc7" + top: "fc7" +} +layer { + name: "drop7" + type: "Dropout" + bottom: "fc7" + top: "fc7" + dropout_param { + dropout_ratio: 0.5 + } +} +layer { + name: "subcls_score" + type: "InnerProduct" + bottom: "fc7" + top: "subcls_score" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 473 # 472 + 1 + weight_filler { + type: "gaussian" + std: 0.01 + } + bias_filler { + type: "constant" + value: 0 + } + } +} +layer { + name: "subcls_prob" + type: "Softmax" + bottom: "subcls_score" + top: "subcls_prob" +} +layer { + name: "cls_score" + type: "InnerProduct" + bottom: "subcls_score" + top: "cls_score" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 4 + weight_filler { + type: "gaussian" + std: 0.01 + } + bias_filler { + type: "constant" + value: 0 + } + } +} +layer { + name: "bbox_pred" + type: "InnerProduct" + bottom: "subcls_score" + top: "bbox_pred" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 16 + weight_filler { + type: "gaussian" + std: 0.001 + } + bias_filler { + type: "constant" + value: 0 + } + } +} +layer { + name: "cls_prob" + type: "Softmax" + bottom: "cls_score" + top: "cls_prob" +} diff --git a/fast-rcnn/models/VGG16/kitti_tracking_test/train_rcnn_multiscale.prototxt b/fast-rcnn/models/VGG16/kitti_tracking_test/train_rcnn_multiscale.prototxt new file mode 100644 index 0000000..be7559b --- /dev/null +++ b/fast-rcnn/models/VGG16/kitti_tracking_test/train_rcnn_multiscale.prototxt @@ -0,0 +1,584 @@ +name: "VGGNet" +layer { + name: 'data' + type: 'Python' + top: 'data' + top: 'rois' + top: 'labels' + top: 'bbox_targets' + top: 'bbox_inside_weights' + top: 'bbox_outside_weights' + top: 'sublabels' + python_param { + module: 'roi_data_layer.layer' + layer: 'RoIDataLayer' + param_str: "'num_classes': 4" + } +} +#layer { +# name: 'roi_visualizing' +# type: 'Python' +# bottom: 'rois' +# bottom: 'data' +# python_param { +# module: 'roi_visualizing_layer.layer' +# layer: 'RoIVisualizingLayer' +# } +#} +layer { + name: "conv1_1" + type: "Convolution" + bottom: "data" + top: "conv1_1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu1_1" + type: "ReLU" + bottom: "conv1_1" + top: "conv1_1" +} +layer { + name: "conv1_2" + type: "Convolution" + bottom: "conv1_1" + top: "conv1_2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 64 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu1_2" + type: "ReLU" + bottom: "conv1_2" + top: "conv1_2" +} +layer { + name: "pool1" + type: "Pooling" + bottom: "conv1_2" + top: "pool1" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv2_1" + type: "Convolution" + bottom: "pool1" + top: "conv2_1" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu2_1" + type: "ReLU" + bottom: "conv2_1" + top: "conv2_1" +} +layer { + name: "conv2_2" + type: "Convolution" + bottom: "conv2_1" + top: "conv2_2" + param { + lr_mult: 0 + decay_mult: 0 + } + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + num_output: 128 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu2_2" + type: "ReLU" + bottom: "conv2_2" + top: "conv2_2" +} +layer { + name: "pool2" + type: "Pooling" + bottom: "conv2_2" + top: "pool2" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv3_1" + type: "Convolution" + bottom: "pool2" + top: "conv3_1" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu3_1" + type: "ReLU" + bottom: "conv3_1" + top: "conv3_1" +} +layer { + name: "conv3_2" + type: "Convolution" + bottom: "conv3_1" + top: "conv3_2" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu3_2" + type: "ReLU" + bottom: "conv3_2" + top: "conv3_2" +} +layer { + name: "conv3_3" + type: "Convolution" + bottom: "conv3_2" + top: "conv3_3" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 256 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu3_3" + type: "ReLU" + bottom: "conv3_3" + top: "conv3_3" +} +layer { + name: "pool3" + type: "Pooling" + bottom: "conv3_3" + top: "pool3" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv4_1" + type: "Convolution" + bottom: "pool3" + top: "conv4_1" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu4_1" + type: "ReLU" + bottom: "conv4_1" + top: "conv4_1" +} +layer { + name: "conv4_2" + type: "Convolution" + bottom: "conv4_1" + top: "conv4_2" + param { + lr_mult: 0.1 + decay_mult: 1 + } + param { + lr_mult: 0.2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu4_2" + type: "ReLU" + bottom: "conv4_2" + top: "conv4_2" +} +layer { + name: "conv4_3" + type: "Convolution" + bottom: "conv4_2" + top: "conv4_3" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu4_3" + type: "ReLU" + bottom: "conv4_3" + top: "conv4_3" +} +layer { + name: "pool4" + type: "Pooling" + bottom: "conv4_3" + top: "pool4" + pooling_param { + pool: MAX + kernel_size: 2 + stride: 2 + } +} +layer { + name: "conv5_1" + type: "Convolution" + bottom: "pool4" + top: "conv5_1" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu5_1" + type: "ReLU" + bottom: "conv5_1" + top: "conv5_1" +} +layer { + name: "conv5_2" + type: "Convolution" + bottom: "conv5_1" + top: "conv5_2" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu5_2" + type: "ReLU" + bottom: "conv5_2" + top: "conv5_2" +} +layer { + name: "conv5_3" + type: "Convolution" + bottom: "conv5_2" + top: "conv5_3" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + convolution_param { + num_output: 512 + pad: 1 + kernel_size: 3 + } +} +layer { + name: "relu5_3" + type: "ReLU" + bottom: "conv5_3" + top: "conv5_3" +} +layer { + name: 'feature' + type: 'FeatureExtrapolating' + bottom: 'conv5_3' + top: 'conv5_feature' + feature_extrapolating_param { + scale_string: "3.0" + num_scale_base: 1 + num_per_octave: 1 + } +} +layer { + name: "roi_pool5" + type: "ROIPooling" + bottom: "conv5_feature" + bottom: "rois" + top: "pool5" + roi_pooling_param { + pooled_w: 7 + pooled_h: 7 + spatial_scale: 0.0625 # 1/16 + } +} +layer { + name: "fc6" + type: "InnerProduct" + bottom: "pool5" + top: "fc6" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 4096 + } +} +layer { + name: "relu6" + type: "ReLU" + bottom: "fc6" + top: "fc6" +} +layer { + name: "drop6" + type: "Dropout" + bottom: "fc6" + top: "fc6" + dropout_param { + dropout_ratio: 0.5 + } +} +layer { + name: "fc7" + type: "InnerProduct" + bottom: "fc6" + top: "fc7" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 4096 + } +} +layer { + name: "relu7" + type: "ReLU" + bottom: "fc7" + top: "fc7" +} +layer { + name: "drop7" + type: "Dropout" + bottom: "fc7" + top: "fc7" + dropout_param { + dropout_ratio: 0.5 + } +} +layer { + name: "subcls_score" + type: "InnerProduct" + bottom: "fc7" + top: "subcls_score" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 473 # 472 + 1 + weight_filler { + type: "gaussian" + std: 0.01 + } + bias_filler { + type: "constant" + value: 0 + } + } +} +layer { + name: "loss_subcls" + type: "SoftmaxWithLoss" + bottom: "subcls_score" + bottom: "sublabels" + top: "loss_subcls" + loss_weight: 1.2 +} +layer { + name: "cls_score" + type: "InnerProduct" + bottom: "subcls_score" + top: "cls_score" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 4 + weight_filler { + type: "gaussian" + std: 0.01 + } + bias_filler { + type: "constant" + value: 0 + } + } +} +layer { + name: "bbox_pred" + type: "InnerProduct" + bottom: "subcls_score" + top: "bbox_pred" + param { + lr_mult: 1 + decay_mult: 1 + } + param { + lr_mult: 2 + decay_mult: 0 + } + inner_product_param { + num_output: 16 + weight_filler { + type: "gaussian" + std: 0.001 + } + bias_filler { + type: "constant" + value: 0 + } + } +} +layer { + name: "loss_cls" + type: "SoftmaxWithLoss" + bottom: "cls_score" + bottom: "labels" + top: "loss_cls" + loss_weight: 1 +} +layer { + name: "loss_bbox" + type: "SmoothL1Loss" + bottom: "bbox_pred" + bottom: "bbox_targets" + bottom: "bbox_inside_weights" + bottom: "bbox_outside_weights" + top: "loss_bbox" + loss_weight: 1 +}