diff --git a/solver.prototxt b/solver.prototxt new file mode 100644 index 0000000..fdc9015 --- /dev/null +++ b/solver.prototxt @@ -0,0 +1,17 @@ +net: "train_val.prototxt" +base_lr: 0.001 +lr_policy: "step" +stepsize: 10000 +gamma: 0.100000 +max_iter: 15000 +iter_size: 1 +clip_gradients: 10.000000 +test_iter: 1 +test_interval: 300000 +snapshot: 50 +momentum: 0.900000 +weight_decay: 0.0005 +display: 100 +solver_mode: GPU +test_initialization: false +snapshot_prefix: "snapshots/snapshot" diff --git a/train.py b/train.py index 53758fb..4b4981d 100644 --- a/train.py +++ b/train.py @@ -11,7 +11,6 @@ import matplotlib.pyplot as plt import caffe import cv2 import random -import scipy.ndimage as nd @@ -285,7 +284,7 @@ def get_args(): parser.add_argument("--debug-dir", default='debug', type=str, help="Dump images for debugging") parser.add_argument("--print-count", default=10, type=int, - help="Dump images for debugging") + help="How often to print progress") args = parser.parse_args() print args diff --git a/train_val.prototxt b/train_val.prototxt new file mode 100644 index 0000000..760af37 --- /dev/null +++ b/train_val.prototxt @@ -0,0 +1,845 @@ +input: "data" +input_dim: 1 + +# change to input_dim: 1 if not using color inputs +input_dim: 3 + +input_dim: 256 +input_dim: 256 + +input: "gt" +input_dim: 1 +input_dim: 1 +input_dim: 256 +input_dim: 256 + +layer { + name: "Convolution1" + type: "Convolution" + bottom: "data" + top: "Convolution1" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_0_0" + type: "ReLU" + bottom: "Convolution1" + top: "Convolution1" +} +layer { + name: "Convolution2" + type: "Convolution" + bottom: "Convolution1" + top: "Convolution2" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_0_1" + type: "ReLU" + bottom: "Convolution2" + top: "Convolution2" +} +layer { + name: "Convolution3" + type: "Convolution" + bottom: "Convolution2" + top: "Convolution3" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_0_2" + type: "ReLU" + bottom: "Convolution3" + top: "Convolution3" +} +layer { + name: "Convolution4" + type: "Convolution" + bottom: "Convolution3" + top: "Convolution4" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_0_3" + type: "ReLU" + bottom: "Convolution4" + top: "Convolution4" +} +layer { + name: "Convolution5" + type: "Convolution" + bottom: "Convolution4" + top: "Convolution5" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_0_4" + type: "ReLU" + bottom: "Convolution5" + top: "Convolution5" +} +layer { + name: "Convolution6" + type: "Convolution" + bottom: "Convolution5" + top: "Convolution6" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_0_5" + type: "ReLU" + bottom: "Convolution6" + top: "Convolution6" +} +layer { + name: "Convolution7" + type: "Convolution" + bottom: "Convolution6" + top: "Convolution7" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_0_6" + type: "ReLU" + bottom: "Convolution7" + top: "Convolution7" +} +layer { + name: "Pooling1" + type: "Pooling" + bottom: "Convolution1" + top: "Pooling1" + pooling_param { + pool: AVE + kernel_size: 2 + stride: 2 + } +} +layer { + name: "Convolution8" + type: "Convolution" + bottom: "Pooling1" + top: "Convolution8" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_1_0" + type: "ReLU" + bottom: "Convolution8" + top: "Convolution8" +} +layer { + name: "Convolution9" + type: "Convolution" + bottom: "Convolution8" + top: "Convolution9" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_1_1" + type: "ReLU" + bottom: "Convolution9" + top: "Convolution9" +} +layer { + name: "Convolution10" + type: "Convolution" + bottom: "Convolution9" + top: "Convolution10" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_1_2" + type: "ReLU" + bottom: "Convolution10" + top: "Convolution10" +} +layer { + name: "Convolution11" + type: "Convolution" + bottom: "Convolution10" + top: "Convolution11" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_1_3" + type: "ReLU" + bottom: "Convolution11" + top: "Convolution11" +} +layer { + name: "Convolution12" + type: "Convolution" + bottom: "Convolution11" + top: "Convolution12" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_1_4" + type: "ReLU" + bottom: "Convolution12" + top: "Convolution12" +} +layer { + name: "Convolution13" + type: "Convolution" + bottom: "Convolution12" + top: "Convolution13" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_1_5" + type: "ReLU" + bottom: "Convolution13" + top: "Convolution13" +} +layer { + name: "Pooling2" + type: "Pooling" + bottom: "Convolution8" + top: "Pooling2" + pooling_param { + pool: AVE + kernel_size: 2 + stride: 2 + } +} +layer { + name: "Convolution14" + type: "Convolution" + bottom: "Pooling2" + top: "Convolution14" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_2_0" + type: "ReLU" + bottom: "Convolution14" + top: "Convolution14" +} +layer { + name: "Convolution15" + type: "Convolution" + bottom: "Convolution14" + top: "Convolution15" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_2_1" + type: "ReLU" + bottom: "Convolution15" + top: "Convolution15" +} +layer { + name: "Convolution16" + type: "Convolution" + bottom: "Convolution15" + top: "Convolution16" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_2_2" + type: "ReLU" + bottom: "Convolution16" + top: "Convolution16" +} +layer { + name: "Convolution17" + type: "Convolution" + bottom: "Convolution16" + top: "Convolution17" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_2_3" + type: "ReLU" + bottom: "Convolution17" + top: "Convolution17" +} +layer { + name: "Convolution18" + type: "Convolution" + bottom: "Convolution17" + top: "Convolution18" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_2_4" + type: "ReLU" + bottom: "Convolution18" + top: "Convolution18" +} +layer { + name: "Pooling3" + type: "Pooling" + bottom: "Convolution14" + top: "Pooling3" + pooling_param { + pool: AVE + kernel_size: 2 + stride: 2 + } +} +layer { + name: "Convolution19" + type: "Convolution" + bottom: "Pooling3" + top: "Convolution19" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_3_0" + type: "ReLU" + bottom: "Convolution19" + top: "Convolution19" +} +layer { + name: "Convolution20" + type: "Convolution" + bottom: "Convolution19" + top: "Convolution20" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_3_1" + type: "ReLU" + bottom: "Convolution20" + top: "Convolution20" +} +layer { + name: "Convolution21" + type: "Convolution" + bottom: "Convolution20" + top: "Convolution21" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_3_2" + type: "ReLU" + bottom: "Convolution21" + top: "Convolution21" +} +layer { + name: "Convolution22" + type: "Convolution" + bottom: "Convolution21" + top: "Convolution22" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "conv_3_3" + type: "ReLU" + bottom: "Convolution22" + top: "Convolution22" +} +layer { + name: "upsample_1" + type: "Deconvolution" + bottom: "Convolution13" + top: "upsample_1" + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + kernel_size: 4 + num_output: 32 + group: 32 + stride: 2 + pad: 1 + weight_filler: { type: 'bilinear' } + bias_term: false + } +} +layer { + name: "upsample_2" + type: "Deconvolution" + bottom: "Convolution18" + top: "upsample_2" + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + kernel_size: 8 + num_output: 32 + group: 32 + stride: 4 + pad: 2 + weight_filler: { type: 'bilinear' } + bias_term: false + } +} +layer { + name: "upsample_3" + type: "Deconvolution" + bottom: "Convolution22" + top: "upsample_3" + param { + lr_mult: 0 + decay_mult: 0 + } + convolution_param { + kernel_size: 16 + num_output: 32 + group: 32 + stride: 8 + pad: 4 + weight_filler: { type: 'bilinear' } + bias_term: false + } +} +layer { + name: "merged" + type: "Concat" + bottom: "Convolution7" + bottom: "upsample_1" + bottom: "upsample_2" + bottom: "upsample_3" + top: "merged" +} +layer { + name: "Convolution26" + type: "Convolution" + bottom: "merged" + top: "Convolution26" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 3 + kernel_size: 7 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "merged_conv" + type: "ReLU" + bottom: "Convolution26" + top: "Convolution26" +} +layer { + name: "Convolution27" + type: "Convolution" + bottom: "Convolution26" + top: "Convolution27" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "ReLU1" + type: "ReLU" + bottom: "Convolution27" + top: "Convolution27" +} +layer { + name: "Convolution28" + type: "Convolution" + bottom: "Convolution27" + top: "Convolution28" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "rep_layer_0" + type: "ReLU" + bottom: "Convolution28" + top: "Convolution28" +} +layer { + name: "Convolution29" + type: "Convolution" + bottom: "Convolution28" + top: "Convolution29" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 32 + pad: 2 + kernel_size: 5 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "ReLU2" + type: "ReLU" + bottom: "Convolution29" + top: "Convolution29" +} +layer { + name: "Convolution30" + type: "Convolution" + bottom: "Convolution29" + top: "out" + param { + lr_mult: 1 + } + param { + lr_mult: 2 + } + convolution_param { + num_output: 2 + pad: 0 + kernel_size: 1 + stride: 1 + weight_filler { + type: "msra" + } + } +} +layer { + name: "baselines_7_loss_0" + type: "SoftmaxWithLoss" + bottom: "out" + bottom: "gt" + top: "loss" + loss_weight: 1.0 +}