Guest User

Untitled

a guest
Apr 24th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. encoder = NetEncoder[{"Image", "ImageSize" -> {168, 168}, "ColorSpace" -> "Grayscale"}];
  2.  
  3. decoder = NetDecoder[{"Image", "ColorSpace" -> Automatic}];
  4.  
  5. Options[convolutionModule] = {"batchNorm" -> True, "downpool" -> False,
  6. "uppool" -> False, "activationType" -> Ramp, "convolution" -> True};
  7.  
  8. convolutionModule[net_, kernelsize_, padsize_, stride_: {1, 1}, OptionsPattern[]] :=
  9. With[{upPool = OptionValue["uppool"], activationType = OptionValue["activationType"],
  10. convolution = OptionValue["convolution"], batchNorm = OptionValue["batchNorm"],
  11. downpool = OptionValue@"downpool"},
  12.  
  13. Block[{nnet = net},
  14. If[upPool,
  15. nnet = NetAppend[nnet, DeconvolutionLayer[1, {2, 2}, "PaddingSize" -> {0, 0},
  16. "Stride" -> {2, 2}]];
  17. nnet = NetAppend[nnet, BatchNormalizationLayer[]];
  18. If[activationType === Ramp,
  19. nnet = NetAppend[nnet, ElementwiseLayer[activationType]]
  20. ];
  21. ];
  22. If[convolution,
  23. nnet = NetAppend[nnet, ConvolutionLayer[1, kernelsize, "Stride" -> stride,
  24. "PaddingSize" -> padsize]]
  25. ];
  26. If[batchNorm,
  27. nnet = NetAppend[nnet, BatchNormalizationLayer[]]
  28. ];
  29. If[activationType === Ramp,
  30. nnet = NetAppend[nnet, ElementwiseLayer[activationType]]
  31. ];
  32. If[downpool,
  33. nnet = NetAppend[nnet, PoolingLayer[{2, 2}, "Function" -> Max, "Stride" -> {2, 2}]]
  34. ];
  35. nnet]
  36. ]
  37.  
  38. CropLayer[netlayer_] := With[{p = NetExtract[netlayer, "Output"]},
  39. PartLayer[{First@p, 1 ;; p[[2]], 1 ;; Last@p}] ];
  40.  
  41. UNET[] :=
  42. Block[{nm, pool1, pool2, pool3, pool4, pool5, kernelsize = {3, 3},
  43. padsize = {1, 1}, stride = {1, 1}},
  44. nm = NetChain@
  45. Join[{ConvolutionLayer[1, {3, 3},
  46. "Input" -> encoder]}, {BatchNormalizationLayer[],
  47. ElementwiseLayer[Ramp],
  48. PoolingLayer[{2, 2}, "Function" -> Max, "Stride" -> {2, 2}]}];
  49. pool1 = nm[[-1]];
  50. nm = convolutionModule[nm, kernelsize, padsize, stride,"downpool" -> True];
  51. pool2 = nm[[-1]];
  52. nm = convolutionModule[nm, kernelsize, padsize, stride,"downpool" -> True];
  53. pool3 = nm[[-1]];
  54. nm = convolutionModule[nm, kernelsize, padsize, stride,"downpool" -> True];
  55. pool4 = nm[[-1]];
  56. nm = NetAppend[nm, DropoutLayer[]];
  57. nm = convolutionModule[nm, kernelsize, padsize, stride, "downpool" -> True];
  58. pool5 = nm[[-1]];
  59. nm = convolutionModule[nm, kernelsize, padsize, stride, "uppool" -> True];
  60. nm = convolutionModule[nm, kernelsize, padsize + 1, stride, "uppool" -> True];
  61. nm = NetAppend[nm, CropLayer@pool3];
Add Comment
Please, Sign In to add comment