Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. """References:
  2.  
  3. Simonyan, Karen, and Andrew Zisserman. "Very deep convolutional networks for
  4. large-scale image recognition." arXiv preprint arXiv:1409.1556 (2014).
  5. """
  6. import mxnet as mx
  7.  
  8. def depthwise_conv(data, kernel, pad, num_filter, name, num_group):
  9. conv = mx.symbol.Convolution(data=data, kernel=kernel, pad=pad,
  10. num_filter=num_group, name=name+'_depthwise', num_group=num_group)
  11. # bn = mx.symbol.BatchNorm(data=conv)
  12. bn = conv # for benchmark
  13. relu = mx.symbol.Activation(data=bn, act_type='relu')
  14. conv2 = mx.symbol.Convolution(data=relu, kernel=(1, 1), num_filter=num_filter,
  15. name=name+'_pointwise')
  16. # bn2 = mx.symbol.BatchNorm(data=conv2)
  17. bn2 = conv2
  18. return bn2
  19.  
  20.  
  21. def get_symbol(num_classes, **kwargs):
  22. ## define alexnet
  23. data = mx.symbol.Variable(name="data")
  24. # group 1
  25. conv1_1 = depthwise_conv(data=data, kernel=(3, 3), pad=(1, 1), num_filter=64, name="conv1_1", num_group=3)
  26. relu1_1 = mx.symbol.Activation(data=conv1_1, act_type="relu", name="relu1_1")
  27. pool1 = mx.symbol.Pooling(
  28. data=relu1_1, pool_type="max", kernel=(2, 2), stride=(2,2), name="pool1")
  29. # group 2
  30. conv2_1 = depthwise_conv(
  31. data=pool1, kernel=(3, 3), pad=(1, 1), num_filter=128, name="conv2_1", num_group=64)
  32. relu2_1 = mx.symbol.Activation(data=conv2_1, act_type="relu", name="relu2_1")
  33. pool2 = mx.symbol.Pooling(
  34. data=relu2_1, pool_type="max", kernel=(2, 2), stride=(2,2), name="pool2")
  35. # group 3
  36. conv3_1 = depthwise_conv(
  37. data=pool2, kernel=(3, 3), pad=(1, 1), num_filter=256, name="conv3_1", num_group=128)
  38. relu3_1 = mx.symbol.Activation(data=conv3_1, act_type="relu", name="relu3_1")
  39. conv3_2 = depthwise_conv(
  40. data=relu3_1, kernel=(3, 3), pad=(1, 1), num_filter=256, name="conv3_2", num_group=256)
  41. relu3_2 = mx.symbol.Activation(data=conv3_2, act_type="relu", name="relu3_2")
  42. pool3 = mx.symbol.Pooling(
  43. data=relu3_2, pool_type="max", kernel=(2, 2), stride=(2,2), name="pool3")
  44. # group 4
  45. conv4_1 = depthwise_conv(
  46. data=pool3, kernel=(3, 3), pad=(1, 1), num_filter=512, name="conv4_1", num_group=256)
  47. relu4_1 = mx.symbol.Activation(data=conv4_1, act_type="relu", name="relu4_1")
  48. conv4_2 = depthwise_conv(
  49. data=relu4_1, kernel=(3, 3), pad=(1, 1), num_filter=512, name="conv4_2", num_group=512)
  50. relu4_2 = mx.symbol.Activation(data=conv4_2, act_type="relu", name="relu4_2")
  51. pool4 = mx.symbol.Pooling(
  52. data=relu4_2, pool_type="max", kernel=(2, 2), stride=(2,2), name="pool4")
  53. # group 5
  54. conv5_1 = depthwise_conv(
  55. data=pool4, kernel=(3, 3), pad=(1, 1), num_filter=512, name="conv5_1", num_group=512)
  56. relu5_1 = mx.symbol.Activation(data=conv5_1, act_type="relu", name="relu5_1")
  57. conv5_2 = depthwise_conv(
  58. data=relu5_1, kernel=(3, 3), pad=(1, 1), num_filter=512, name="conv5_2", num_group=512)
  59. relu5_2 = mx.symbol.Activation(data=conv5_2, act_type="relu", name="conv1_2")
  60. pool5 = mx.symbol.Pooling(
  61. data=relu5_2, pool_type="max", kernel=(2, 2), stride=(2,2), name="pool5")
  62. # group 6
  63. flatten = mx.symbol.Flatten(data=pool5, name="flatten")
  64. fc6 = mx.symbol.FullyConnected(data=flatten, num_hidden=4096, name="fc6")
  65. relu6 = mx.symbol.Activation(data=fc6, act_type="relu", name="relu6")
  66. drop6 = mx.symbol.Dropout(data=relu6, p=0.5, name="drop6")
  67. # group 7
  68. fc7 = mx.symbol.FullyConnected(data=drop6, num_hidden=4096, name="fc7")
  69. relu7 = mx.symbol.Activation(data=fc7, act_type="relu", name="relu7")
  70. drop7 = mx.symbol.Dropout(data=relu7, p=0.5, name="drop7")
  71. # output
  72. fc8 = mx.symbol.FullyConnected(data=drop7, num_hidden=num_classes, name="fc8")
  73. softmax = mx.symbol.SoftmaxOutput(data=fc8, name='softmax')
  74. return softmax
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement