Last active
July 17, 2017 13:50
-
-
Save libfun/cb93a61c18a1b8fdff54793f49fe32df to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import lasagne | |
from lasagne.layers import InputLayer | |
from lasagne.layers.dnn import Conv3DDNNLayer | |
from lasagne.layers.dnn import Pool3DDNNLayer | |
from lasagne.layers import BatchNormLayer | |
from lasagne.layers import NonlinearityLayer | |
from lasagne.layers import ElemwiseSumLayer | |
from lasagne.layers import DenseLayer | |
from lasagne.nonlinearities import identity, softmax | |
def build_net(): | |
"""Method for VoxResNet Building. | |
Returns | |
------- | |
dictionary | |
Network dictionary. | |
""" | |
net = {} | |
net['input'] = InputLayer((None, 1, 110, 110, 110)) | |
net['conv1a'] = Conv3DDNNLayer(net['input'], 32, 3, pad='same', | |
nonlinearity=identity) | |
net['bn1a'] = BatchNormLayer(net['conv1a']) | |
net['relu1a'] = NonlinearityLayer(net['bn1a']) | |
net['conv1b'] = Conv3DDNNLayer(net['relu1a'], 32, 3, pad='same', | |
nonlinearity=identity) | |
net['bn1b'] = BatchNormLayer(net['conv1b']) | |
net['relu1b'] = NonlinearityLayer(net['bn1b']) | |
net['conv1c'] = Conv3DDNNLayer(net['relu1b'], 64, 3, stride=(2, 2, 2), | |
pad='same', nonlinearity=identity) | |
# VoxRes block 2 | |
net['voxres2_bn1'] = BatchNormLayer(net['conv1c']) | |
net['voxres2_relu1'] = NonlinearityLayer(net['voxres2_bn1']) | |
net['voxres2_conv1'] = Conv3DDNNLayer(net['voxres2_relu1'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres2_bn2'] = BatchNormLayer(net['voxres2_conv1']) | |
net['voxres2_relu2'] = NonlinearityLayer(net['voxres2_bn2']) | |
net['voxres2_conv2'] = Conv3DDNNLayer(net['voxres2_relu2'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres2_out'] = ElemwiseSumLayer([net['conv1c'], | |
net['voxres2_conv2']]) | |
# VoxRes block 3 | |
net['voxres3_bn1'] = BatchNormLayer(net['voxres2_out']) | |
net['voxres3_relu1'] = NonlinearityLayer(net['voxres3_bn1']) | |
net['voxres3_conv1'] = Conv3DDNNLayer(net['voxres3_relu1'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres3_bn2'] = BatchNormLayer(net['voxres3_conv1']) | |
net['voxres3_relu2'] = NonlinearityLayer(net['voxres3_bn2']) | |
net['voxres3_conv2'] = Conv3DDNNLayer(net['voxres3_relu2'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres3_out'] = ElemwiseSumLayer([net['voxres2_out'], | |
net['voxres3_conv2']]) | |
net['bn4'] = BatchNormLayer(net['voxres3_out']) | |
net['relu4'] = NonlinearityLayer(net['bn4']) | |
net['conv4'] = Conv3DDNNLayer(net['relu4'], 64, 3, stride=(2, 2, 2), | |
pad='same', nonlinearity=identity) | |
# VoxRes block 5 | |
net['voxres5_bn1'] = BatchNormLayer(net['conv4']) | |
net['voxres5_relu1'] = NonlinearityLayer(net['voxres5_bn1']) | |
net['voxres5_conv1'] = Conv3DDNNLayer(net['voxres5_relu1'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres5_bn2'] = BatchNormLayer(net['voxres5_conv1']) | |
net['voxres5_relu2'] = NonlinearityLayer(net['voxres5_bn2']) | |
net['voxres5_conv2'] = Conv3DDNNLayer(net['voxres5_relu2'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres5_out'] = ElemwiseSumLayer([net['conv4'], net['voxres5_conv2']]) | |
# VoxRes block 6 | |
net['voxres6_bn1'] = BatchNormLayer(net['voxres5_out']) | |
net['voxres6_relu1'] = NonlinearityLayer(net['voxres6_bn1']) | |
net['voxres6_conv1'] = Conv3DDNNLayer(net['voxres6_relu1'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres6_bn2'] = BatchNormLayer(net['voxres6_conv1']) | |
net['voxres6_relu2'] = NonlinearityLayer(net['voxres6_bn2']) | |
net['voxres6_conv2'] = Conv3DDNNLayer(net['voxres6_relu2'], 64, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres6_out'] = ElemwiseSumLayer([net['voxres5_out'], | |
net['voxres6_conv2']]) | |
net['bn7'] = BatchNormLayer(net['voxres6_out']) | |
net['relu7'] = NonlinearityLayer(net['bn7']) | |
net['conv7'] = Conv3DDNNLayer(net['relu7'], 128, 3, stride=(2, 2, 2), | |
pad='same', nonlinearity=identity) | |
# VoxRes block 8 | |
net['voxres8_bn1'] = BatchNormLayer(net['conv7']) | |
net['voxres8_relu1'] = NonlinearityLayer(net['voxres8_bn1']) | |
net['voxres8_conv1'] = Conv3DDNNLayer(net['voxres8_relu1'], 128, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres8_bn2'] = BatchNormLayer(net['voxres8_conv1']) | |
net['voxres8_relu2'] = NonlinearityLayer(net['voxres8_bn2']) | |
net['voxres8_conv2'] = Conv3DDNNLayer(net['voxres8_relu2'], 128, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres8_out'] = ElemwiseSumLayer([net['conv7'], net['voxres8_conv2']]) | |
# VoxRes block 9 | |
net['voxres9_bn1'] = BatchNormLayer(net['voxres8_out']) | |
net['voxres9_relu1'] = NonlinearityLayer(net['voxres9_bn1']) | |
net['voxres9_conv1'] = Conv3DDNNLayer(net['voxres9_relu1'], 128, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres9_bn2'] = BatchNormLayer(net['voxres9_conv1']) | |
net['voxres9_relu2'] = NonlinearityLayer(net['voxres9_bn2']) | |
net['voxres9_conv2'] = Conv3DDNNLayer(net['voxres9_relu2'], 128, 3, | |
pad='same', nonlinearity=identity) | |
net['voxres9_out'] = ElemwiseSumLayer([net['voxres8_out'], | |
net['voxres9_conv2']]) | |
net['pool10'] = Pool3DDNNLayer(net['voxres9_out'], 7) | |
net['fc11'] = DenseLayer(net['pool10'], 128) | |
net['prob'] = DenseLayer(net['fc11'], 2, nonlinearity=softmax) | |
return net |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment