1
0
Fork 0
mirror of synced 2024-05-03 20:42:24 +12:00

Add caffe prototxt for cunet/upcunet

This commit is contained in:
nagadomi 2018-11-14 06:26:24 +09:00
parent 1b946a5484
commit 07db4e8e43
3 changed files with 1698 additions and 0 deletions

View file

@ -0,0 +1,794 @@
layer {
name: "input"
type: "Input"
top: "Input1"
input_param {
shape {
dim: 1
dim: 3
dim: 312
dim: 312
}
}
}
layer {
name: "Convolution1"
type: "Convolution"
bottom: "Input1"
top: "Convolution1"
convolution_param {
num_output: 32
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU1"
type: "ReLU"
bottom: "Convolution1"
top: "Convolution1"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution2"
type: "Convolution"
bottom: "Convolution1"
top: "Convolution2"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU2"
type: "ReLU"
bottom: "Convolution2"
top: "Convolution2"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution3"
type: "Convolution"
bottom: "Convolution2"
top: "Convolution3"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU3"
type: "ReLU"
bottom: "Convolution3"
top: "Convolution3"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution4"
type: "Convolution"
bottom: "Convolution3"
top: "Convolution4"
convolution_param {
num_output: 128
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU4"
type: "ReLU"
bottom: "Convolution4"
top: "Convolution4"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution5"
type: "Convolution"
bottom: "Convolution4"
top: "Convolution5"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU5"
type: "ReLU"
bottom: "Convolution5"
top: "Convolution5"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling1"
type: "Pooling"
bottom: "Convolution5"
top: "Pooling1"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution6"
type: "Convolution"
bottom: "Pooling1"
top: "Convolution6"
convolution_param {
num_output: 8
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU6"
type: "ReLU"
bottom: "Convolution6"
top: "Convolution6"
}
layer {
name: "Convolution7"
type: "Convolution"
bottom: "Convolution6"
top: "Convolution7"
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid1"
type: "Sigmoid"
bottom: "Convolution7"
top: "Convolution7"
}
layer {
name: "Flatten1"
type: "Flatten"
bottom: "Convolution7"
top: "Flatten1"
}
layer {
name: "Scale1"
type: "Scale"
bottom: "Convolution5"
bottom: "Flatten1"
top: "Scale1"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Deconvolution1"
type: "Deconvolution"
bottom: "Scale1"
top: "Deconvolution1"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU7"
type: "ReLU"
bottom: "Deconvolution1"
top: "Deconvolution1"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Crop1"
type: "Crop"
bottom: "Convolution2"
bottom: "Deconvolution1"
top: "Crop1"
crop_param {
axis: 2
offset: 4
}
}
layer {
name: "Eltwise1"
type: "Eltwise"
bottom: "Crop1"
bottom: "Deconvolution1"
top: "Eltwise1"
eltwise_param {
operation: SUM
}
}
layer {
name: "Convolution8"
type: "Convolution"
bottom: "Eltwise1"
top: "Convolution8"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU8"
type: "ReLU"
bottom: "Convolution8"
top: "Convolution8"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution9"
type: "Convolution"
bottom: "Convolution8"
top: "Convolution9"
convolution_param {
num_output: 3
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "Convolution10"
type: "Convolution"
bottom: "Convolution9"
top: "Convolution10"
convolution_param {
num_output: 32
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU9"
type: "ReLU"
bottom: "Convolution10"
top: "Convolution10"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution11"
type: "Convolution"
bottom: "Convolution10"
top: "Convolution11"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU10"
type: "ReLU"
bottom: "Convolution11"
top: "Convolution11"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution12"
type: "Convolution"
bottom: "Convolution11"
top: "Convolution12"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU11"
type: "ReLU"
bottom: "Convolution12"
top: "Convolution12"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution13"
type: "Convolution"
bottom: "Convolution12"
top: "Convolution13"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU12"
type: "ReLU"
bottom: "Convolution13"
top: "Convolution13"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution14"
type: "Convolution"
bottom: "Convolution13"
top: "Convolution14"
convolution_param {
num_output: 128
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU13"
type: "ReLU"
bottom: "Convolution14"
top: "Convolution14"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling2"
type: "Pooling"
bottom: "Convolution14"
top: "Pooling2"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution15"
type: "Convolution"
bottom: "Pooling2"
top: "Convolution15"
convolution_param {
num_output: 16
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU14"
type: "ReLU"
bottom: "Convolution15"
top: "Convolution15"
}
layer {
name: "Convolution16"
type: "Convolution"
bottom: "Convolution15"
top: "Convolution16"
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid2"
type: "Sigmoid"
bottom: "Convolution16"
top: "Convolution16"
}
layer {
name: "Flatten2"
type: "Flatten"
bottom: "Convolution16"
top: "Flatten2"
}
layer {
name: "Scale2"
type: "Scale"
bottom: "Convolution14"
bottom: "Flatten2"
top: "Scale2"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Convolution17"
type: "Convolution"
bottom: "Scale2"
top: "Convolution17"
convolution_param {
num_output: 128
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU15"
type: "ReLU"
bottom: "Convolution17"
top: "Convolution17"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution18"
type: "Convolution"
bottom: "Convolution17"
top: "Convolution18"
convolution_param {
num_output: 256
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU16"
type: "ReLU"
bottom: "Convolution18"
top: "Convolution18"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution19"
type: "Convolution"
bottom: "Convolution18"
top: "Convolution19"
convolution_param {
num_output: 128
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU17"
type: "ReLU"
bottom: "Convolution19"
top: "Convolution19"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling3"
type: "Pooling"
bottom: "Convolution19"
top: "Pooling3"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution20"
type: "Convolution"
bottom: "Pooling3"
top: "Convolution20"
convolution_param {
num_output: 16
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU18"
type: "ReLU"
bottom: "Convolution20"
top: "Convolution20"
}
layer {
name: "Convolution21"
type: "Convolution"
bottom: "Convolution20"
top: "Convolution21"
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid3"
type: "Sigmoid"
bottom: "Convolution21"
top: "Convolution21"
}
layer {
name: "Flatten3"
type: "Flatten"
bottom: "Convolution21"
top: "Flatten3"
}
layer {
name: "Scale3"
type: "Scale"
bottom: "Convolution19"
bottom: "Flatten3"
top: "Scale3"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Deconvolution2"
type: "Deconvolution"
bottom: "Scale3"
top: "Deconvolution2"
convolution_param {
num_output: 128
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU19"
type: "ReLU"
bottom: "Deconvolution2"
top: "Deconvolution2"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Crop2"
type: "Crop"
bottom: "Scale2"
bottom: "Deconvolution2"
top: "Crop2"
crop_param {
axis: 2
offset: 4
}
}
layer {
name: "Eltwise2"
type: "Eltwise"
bottom: "Crop2"
bottom: "Deconvolution2"
top: "Eltwise2"
eltwise_param {
operation: SUM
}
}
layer {
name: "Convolution22"
type: "Convolution"
bottom: "Eltwise2"
top: "Convolution22"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU20"
type: "ReLU"
bottom: "Convolution22"
top: "Convolution22"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution23"
type: "Convolution"
bottom: "Convolution22"
top: "Convolution23"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU21"
type: "ReLU"
bottom: "Convolution23"
top: "Convolution23"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling4"
type: "Pooling"
bottom: "Convolution23"
top: "Pooling4"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution24"
type: "Convolution"
bottom: "Pooling4"
top: "Convolution24"
convolution_param {
num_output: 8
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU22"
type: "ReLU"
bottom: "Convolution24"
top: "Convolution24"
}
layer {
name: "Convolution25"
type: "Convolution"
bottom: "Convolution24"
top: "Convolution25"
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid4"
type: "Sigmoid"
bottom: "Convolution25"
top: "Convolution25"
}
layer {
name: "Flatten4"
type: "Flatten"
bottom: "Convolution25"
top: "Flatten4"
}
layer {
name: "Scale4"
type: "Scale"
bottom: "Convolution23"
bottom: "Flatten4"
top: "Scale4"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Deconvolution3"
type: "Deconvolution"
bottom: "Scale4"
top: "Deconvolution3"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU23"
type: "ReLU"
bottom: "Deconvolution3"
top: "Deconvolution3"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Crop3"
type: "Crop"
bottom: "Convolution11"
bottom: "Deconvolution3"
top: "Crop3"
crop_param {
axis: 2
offset: 16
}
}
layer {
name: "Eltwise3"
type: "Eltwise"
bottom: "Crop3"
bottom: "Deconvolution3"
top: "Eltwise3"
eltwise_param {
operation: SUM
}
}
layer {
name: "Convolution26"
type: "Convolution"
bottom: "Eltwise3"
top: "Convolution26"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU24"
type: "ReLU"
bottom: "Convolution26"
top: "Convolution26"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution27"
type: "Convolution"
bottom: "Convolution26"
top: "Convolution27"
convolution_param {
num_output: 3
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "Crop4"
type: "Crop"
bottom: "Convolution9"
bottom: "Convolution27"
top: "Crop4"
crop_param {
axis: 2
offset: 20
}
}
layer {
name: "Eltwise4"
type: "Eltwise"
bottom: "Crop4"
bottom: "Convolution27"
top: "Eltwise4"
eltwise_param {
operation: SUM
}
}

View file

@ -0,0 +1,110 @@
# Generate prototxt of waifu2x's cunet/upcunet arch. Training is not possible.
from __future__ import print_function
import sys
sys.path.insert(0, "../python") # pycaffe path
from caffe import layers as L, params as P, to_proto
from caffe.proto import caffe_pb2
import caffe
def seblock(bottom, o, r):
m = int(o / r)
gap = L.Pooling(bottom, pool=P.Pooling.AVE, global_pooling=True)
linear1 = L.Convolution(gap, kernel_size=1, pad=0, stride=1, num_output=m)
relu1 = L.ReLU(linear1, in_place=True)
linear2 = L.Convolution(relu1, kernel_size=1, pad=0, stride=1, num_output=o)
sigmoid1 = L.Sigmoid(linear2, in_place=True)
flatten1 = L.Flatten(sigmoid1)
return flatten1
def conv_relu(bottom, o, stride=1, pad=0):
conv = L.Convolution(bottom, kernel_size=3, stride=stride, num_output=o, pad=pad)
relu = L.ReLU(conv, in_place=True, negative_slope=0.1)
return relu
def unet_conv(bottom, m, o, se=True):
conv1 = L.Convolution(bottom, kernel_size=3, stride=1,
num_output=m, pad=0)
relu1 = L.ReLU(conv1, in_place=True, negative_slope=0.1)
conv2 = L.Convolution(relu1, kernel_size=3, stride=1,
num_output=o, pad=0)
relu2 = L.ReLU(conv2, in_place=True, negative_slope=0.1)
if se:
se1 = seblock(relu2, o, 8)
return L.Scale(relu2, se1, axis=0, bias_term=False)
else:
return relu2
def unet_branch(bottom, insert_f, i, o, depad):
pool = L.Convolution(bottom, kernel_size=2, stride=2, num_output=i, pad=0)
relu1 = L.ReLU(pool, in_place=True, negative_slope=0.1)
feat = insert_f(relu1)
unpool = L.Deconvolution(feat, convolution_param=dict(num_output=o, kernel_size=2, pad=0, stride=2))
relu2 = L.ReLU(unpool, in_place=True, negative_slope=0.1)
crop = L.Crop(bottom, relu2, crop_param=dict(axis=2, offset=depad))
cadd = L.Eltwise(crop, relu2, operation=P.Eltwise.SUM)
return cadd
def unet1(bottom, ch, deconv):
block1 = lambda bottom: unet_conv(bottom, 128, 64, True)
conv1 = unet_conv(bottom, 32, 64, se=False)
ub1 = unet_branch(conv1, block1, 64, 64, 4)
conv2 = conv_relu(ub1, 64)
if deconv:
return L.Deconvolution(conv2, convolution_param=dict(num_output=ch, kernel_size=4, pad=3, stride=2))
else:
return L.Convolution(conv2, kernel_size=3, stride=1, num_output=ch, pad=0)
def unet2(bottom, ch, deconv):
def block1(bottom):
return unet_conv(bottom, 256, 128, se=True)
def block2(bottom):
conv1 = unet_conv(bottom, 64, 128, se=True)
ub1 = unet_branch(conv1, block1, 128, 128, 4)
conv2 = unet_conv(ub1, 64, 64, se=True)
return conv2
conv1 = unet_conv(bottom, 32, 64, se=False)
ub1 = unet_branch(conv1, block2, 64, 64, 16)
conv2 = conv_relu(ub1, 64)
if deconv:
return L.Deconvolution(conv2, convolution_param=dict(num_output=ch, kernel_size=4, pad=3, stride=2))
else:
return L.Convolution(conv2, kernel_size=3, stride=1, num_output=ch, pad=0)
def make_upcunet():
netoffset = 36
ch = 3
input_size = (256 / 2) + netoffset * 2
assert(input_size % 4 == 0)
data = L.Input(name="input", shape=dict(dim=[1, ch, input_size, input_size]))
u1 = unet1(data, ch=ch, deconv=True)
u2 = unet2(u1, ch=ch, deconv=False)
crop = L.Crop(u1, u2, crop_param=dict(axis=2, offset=20))
cadd = L.Eltwise(crop, u2, operation=P.Eltwise.SUM)
return to_proto(cadd)
def make_cunet():
netoffset = 28
ch = 3
input_size = 256 + netoffset * 2
assert(input_size % 4 == 0)
data = L.Input(name="input", shape=dict(dim=[1, ch, input_size, input_size]))
u1 = unet1(data, ch=ch, deconv=False)
u2 = unet2(u1, ch=ch, deconv=False)
crop = L.Crop(u1, u2, crop_param=dict(axis=2, offset=20))
cadd = L.Eltwise(crop, u2, operation=P.Eltwise.SUM)
return to_proto(cadd)
def make_net():
with open('upcunet.prototxt', 'w') as f:
print(make_upcunet(), file=f)
with open('cunet.prototxt', 'w') as f:
print(make_cunet(), file=f)
if __name__ == '__main__':
make_net()
# test loading the net
caffe.Net('upcunet.prototxt', caffe.TEST)
caffe.Net('cunet.prototxt', caffe.TEST)

View file

@ -0,0 +1,794 @@
layer {
name: "input"
type: "Input"
top: "Input1"
input_param {
shape {
dim: 1
dim: 3
dim: 200
dim: 200
}
}
}
layer {
name: "Convolution1"
type: "Convolution"
bottom: "Input1"
top: "Convolution1"
convolution_param {
num_output: 32
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU1"
type: "ReLU"
bottom: "Convolution1"
top: "Convolution1"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution2"
type: "Convolution"
bottom: "Convolution1"
top: "Convolution2"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU2"
type: "ReLU"
bottom: "Convolution2"
top: "Convolution2"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution3"
type: "Convolution"
bottom: "Convolution2"
top: "Convolution3"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU3"
type: "ReLU"
bottom: "Convolution3"
top: "Convolution3"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution4"
type: "Convolution"
bottom: "Convolution3"
top: "Convolution4"
convolution_param {
num_output: 128
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU4"
type: "ReLU"
bottom: "Convolution4"
top: "Convolution4"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution5"
type: "Convolution"
bottom: "Convolution4"
top: "Convolution5"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU5"
type: "ReLU"
bottom: "Convolution5"
top: "Convolution5"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling1"
type: "Pooling"
bottom: "Convolution5"
top: "Pooling1"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution6"
type: "Convolution"
bottom: "Pooling1"
top: "Convolution6"
convolution_param {
num_output: 8
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU6"
type: "ReLU"
bottom: "Convolution6"
top: "Convolution6"
}
layer {
name: "Convolution7"
type: "Convolution"
bottom: "Convolution6"
top: "Convolution7"
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid1"
type: "Sigmoid"
bottom: "Convolution7"
top: "Convolution7"
}
layer {
name: "Flatten1"
type: "Flatten"
bottom: "Convolution7"
top: "Flatten1"
}
layer {
name: "Scale1"
type: "Scale"
bottom: "Convolution5"
bottom: "Flatten1"
top: "Scale1"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Deconvolution1"
type: "Deconvolution"
bottom: "Scale1"
top: "Deconvolution1"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU7"
type: "ReLU"
bottom: "Deconvolution1"
top: "Deconvolution1"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Crop1"
type: "Crop"
bottom: "Convolution2"
bottom: "Deconvolution1"
top: "Crop1"
crop_param {
axis: 2
offset: 4
}
}
layer {
name: "Eltwise1"
type: "Eltwise"
bottom: "Crop1"
bottom: "Deconvolution1"
top: "Eltwise1"
eltwise_param {
operation: SUM
}
}
layer {
name: "Convolution8"
type: "Convolution"
bottom: "Eltwise1"
top: "Convolution8"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU8"
type: "ReLU"
bottom: "Convolution8"
top: "Convolution8"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Deconvolution2"
type: "Deconvolution"
bottom: "Convolution8"
top: "Deconvolution2"
convolution_param {
num_output: 3
pad: 3
kernel_size: 4
stride: 2
}
}
layer {
name: "Convolution9"
type: "Convolution"
bottom: "Deconvolution2"
top: "Convolution9"
convolution_param {
num_output: 32
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU9"
type: "ReLU"
bottom: "Convolution9"
top: "Convolution9"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution10"
type: "Convolution"
bottom: "Convolution9"
top: "Convolution10"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU10"
type: "ReLU"
bottom: "Convolution10"
top: "Convolution10"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution11"
type: "Convolution"
bottom: "Convolution10"
top: "Convolution11"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU11"
type: "ReLU"
bottom: "Convolution11"
top: "Convolution11"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution12"
type: "Convolution"
bottom: "Convolution11"
top: "Convolution12"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU12"
type: "ReLU"
bottom: "Convolution12"
top: "Convolution12"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution13"
type: "Convolution"
bottom: "Convolution12"
top: "Convolution13"
convolution_param {
num_output: 128
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU13"
type: "ReLU"
bottom: "Convolution13"
top: "Convolution13"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling2"
type: "Pooling"
bottom: "Convolution13"
top: "Pooling2"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution14"
type: "Convolution"
bottom: "Pooling2"
top: "Convolution14"
convolution_param {
num_output: 16
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU14"
type: "ReLU"
bottom: "Convolution14"
top: "Convolution14"
}
layer {
name: "Convolution15"
type: "Convolution"
bottom: "Convolution14"
top: "Convolution15"
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid2"
type: "Sigmoid"
bottom: "Convolution15"
top: "Convolution15"
}
layer {
name: "Flatten2"
type: "Flatten"
bottom: "Convolution15"
top: "Flatten2"
}
layer {
name: "Scale2"
type: "Scale"
bottom: "Convolution13"
bottom: "Flatten2"
top: "Scale2"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Convolution16"
type: "Convolution"
bottom: "Scale2"
top: "Convolution16"
convolution_param {
num_output: 128
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU15"
type: "ReLU"
bottom: "Convolution16"
top: "Convolution16"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution17"
type: "Convolution"
bottom: "Convolution16"
top: "Convolution17"
convolution_param {
num_output: 256
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU16"
type: "ReLU"
bottom: "Convolution17"
top: "Convolution17"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution18"
type: "Convolution"
bottom: "Convolution17"
top: "Convolution18"
convolution_param {
num_output: 128
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU17"
type: "ReLU"
bottom: "Convolution18"
top: "Convolution18"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling3"
type: "Pooling"
bottom: "Convolution18"
top: "Pooling3"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution19"
type: "Convolution"
bottom: "Pooling3"
top: "Convolution19"
convolution_param {
num_output: 16
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU18"
type: "ReLU"
bottom: "Convolution19"
top: "Convolution19"
}
layer {
name: "Convolution20"
type: "Convolution"
bottom: "Convolution19"
top: "Convolution20"
convolution_param {
num_output: 128
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid3"
type: "Sigmoid"
bottom: "Convolution20"
top: "Convolution20"
}
layer {
name: "Flatten3"
type: "Flatten"
bottom: "Convolution20"
top: "Flatten3"
}
layer {
name: "Scale3"
type: "Scale"
bottom: "Convolution18"
bottom: "Flatten3"
top: "Scale3"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Deconvolution3"
type: "Deconvolution"
bottom: "Scale3"
top: "Deconvolution3"
convolution_param {
num_output: 128
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU19"
type: "ReLU"
bottom: "Deconvolution3"
top: "Deconvolution3"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Crop2"
type: "Crop"
bottom: "Scale2"
bottom: "Deconvolution3"
top: "Crop2"
crop_param {
axis: 2
offset: 4
}
}
layer {
name: "Eltwise2"
type: "Eltwise"
bottom: "Crop2"
bottom: "Deconvolution3"
top: "Eltwise2"
eltwise_param {
operation: SUM
}
}
layer {
name: "Convolution21"
type: "Convolution"
bottom: "Eltwise2"
top: "Convolution21"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU20"
type: "ReLU"
bottom: "Convolution21"
top: "Convolution21"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution22"
type: "Convolution"
bottom: "Convolution21"
top: "Convolution22"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU21"
type: "ReLU"
bottom: "Convolution22"
top: "Convolution22"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Pooling4"
type: "Pooling"
bottom: "Convolution22"
top: "Pooling4"
pooling_param {
pool: AVE
global_pooling: true
}
}
layer {
name: "Convolution23"
type: "Convolution"
bottom: "Pooling4"
top: "Convolution23"
convolution_param {
num_output: 8
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "ReLU22"
type: "ReLU"
bottom: "Convolution23"
top: "Convolution23"
}
layer {
name: "Convolution24"
type: "Convolution"
bottom: "Convolution23"
top: "Convolution24"
convolution_param {
num_output: 64
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "Sigmoid4"
type: "Sigmoid"
bottom: "Convolution24"
top: "Convolution24"
}
layer {
name: "Flatten4"
type: "Flatten"
bottom: "Convolution24"
top: "Flatten4"
}
layer {
name: "Scale4"
type: "Scale"
bottom: "Convolution22"
bottom: "Flatten4"
top: "Scale4"
scale_param {
axis: 0
bias_term: false
}
}
layer {
name: "Deconvolution4"
type: "Deconvolution"
bottom: "Scale4"
top: "Deconvolution4"
convolution_param {
num_output: 64
pad: 0
kernel_size: 2
stride: 2
}
}
layer {
name: "ReLU23"
type: "ReLU"
bottom: "Deconvolution4"
top: "Deconvolution4"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Crop3"
type: "Crop"
bottom: "Convolution10"
bottom: "Deconvolution4"
top: "Crop3"
crop_param {
axis: 2
offset: 16
}
}
layer {
name: "Eltwise3"
type: "Eltwise"
bottom: "Crop3"
bottom: "Deconvolution4"
top: "Eltwise3"
eltwise_param {
operation: SUM
}
}
layer {
name: "Convolution25"
type: "Convolution"
bottom: "Eltwise3"
top: "Convolution25"
convolution_param {
num_output: 64
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "ReLU24"
type: "ReLU"
bottom: "Convolution25"
top: "Convolution25"
relu_param {
negative_slope: 0.1
}
}
layer {
name: "Convolution26"
type: "Convolution"
bottom: "Convolution25"
top: "Convolution26"
convolution_param {
num_output: 3
pad: 0
kernel_size: 3
stride: 1
}
}
layer {
name: "Crop4"
type: "Crop"
bottom: "Deconvolution2"
bottom: "Convolution26"
top: "Crop4"
crop_param {
axis: 2
offset: 20
}
}
layer {
name: "Eltwise4"
type: "Eltwise"
bottom: "Crop4"
bottom: "Convolution26"
top: "Eltwise4"
eltwise_param {
operation: SUM
}
}