MATLAB: Modifying unetLayers-architecture for distance map regression

unet

Hello!
I want to modify the unetLayers-architecture (with encoderDepth = 4 and numClasses = 2) in order to be able to perform image-to-image regression where the input is a grayscale image and the output is a distance map (in grayscale) of the binary mask of the segmented grayscale image. I've removed the final two layers in the architecture by stating:
lgraph = removeLayers(lgraph, 'Softmax-Layer');
lgraph = removeLayers(lgraph,'Segmentation-Layer');
and added a regressionLayer for getting the regression output according to:
lgraph = lgraph.addLayers(regressionLayer('name','regressionLayer'));
lgraph = lgraph.connectLayers('Final-ConvolutionLayer', 'regressionLayer');
However, my knowledge of the thought behind the final layers of the UNet-architecture is limited. The final convolutional layer outputs a 128x128x2 output (since my input size is 128×128 and the number of classes is stated as 2). How can I optimally modify this structure (and especially the final convolutional layer) for a regression problem? Would adding a fully connected layer be helpful?

Best Answer

In addition to above replace the 'Final-ConvolutionLayer' with new convolution2dLayer having filter size 1 and number of filters 1 as follows:
imageSize = [128 128 1];
numClasses = 2;
encoderDepth = 4;
lgraph = unetLayers(imageSize,numClasses,'EncoderDepth',encoderDepth);
lgraph = replaceLayer(lgraph,'Final-ConvolutionLayer',convolution2dLayer(1,1,'Name','Final-ConvolutionLayer'));
lgraph = replaceLayer(lgraph,'Segmentation-Layer',regressionLayer('name','regressionLayer'));
lgraph = removeLayers(lgraph, 'Softmax-Layer');
lgraph = lgraph.connectLayers('Final-ConvolutionLayer', 'regressionLayer');
analyzeNetwork(lgraph)