项目作者: jaxony

项目描述 :
U-Net implementation for PyTorch based on https://arxiv.org/abs/1505.04597
高级语言: Python
项目地址: git://github.com/jaxony/unet-pytorch.git
创建时间: 2017-08-13T01:35:37Z
项目社区:https://github.com/jaxony/unet-pytorch

开源协议:MIT License

下载


U-Net implementation in PyTorch

The U-Net is an encoder-decoder neural network used for semantic segmentation. The implementation in this repository is a modified version of the U-Net proposed in this paper.

U-Net Architecture

Features

  1. You can alter the U-Net’s depth.
    The original U-Net uses a depth of 5, as depicted in the diagram above. The word “depth” specifically
    refers to the number of different spatially-sized convolutional outputs. With this U-Net implementation, you can easily vary the depth.

  2. You can merge decoder and encoder pathways in two ways.
    In the original U-Net, the decoder and encoder activations are merged by concatenating channels.
    I’ve implemented a ResNet-style merging of the decoder and encoder activations by adding
    these activations. This was easy to code up, but it may not make sense theoretically and has not been tested.

Pixel-wise loss for semantic segmentation

I had some trouble getting the pixel-wise loss working correctly for a semantic segmentation task.
Here’s how I got it working in the end.

  1. from model import UNet
  2. model = UNet()
  3. # set up dataloaders, etc.
  4. output = model(some_input_data)
  5. # permute is like np.transpose: (N, C, H, W) => (H, W, N, C)
  6. # contiguous is required because of this issue: https://github.com/pytorch/pytorch/issues/764
  7. # view: reshapes the output tensor so that we have (H * W * N, num_class)
  8. # NOTE: num_class == C (number of output channels)
  9. output = output.permute(2, 3, 0, 1).contiguous().view(-1, num_classes)