/Unsupervised-vessel-segmentation

A tensorflow implementation for Unsupervised vessel segmentation based on ADDA

Primary LanguagePythonMIT LicenseMIT

Unsupervised-vessel-segmentation

A tensorflow implementation for Unsupervised vessel segmentation based on ADDA

Project overview

It's time-consuming to maunually label vascular image to train neural network for vessel segmentation. This project implements a domain adaptive framework for unsupervised segmentation.

We have implemented and tested SE-Unet and Dense-Unet in this projects for feature extraction. Either the output of final layer or outputs of multiple layers in upsampling path of SourceNet and TargetNet are sent into discriminator for domain adaption. The adverserial training is performed on adverserial loss or Wasserstein loss with gradient penalty.

How to run

The first step is to train SourceNet with DRIVE dataset. The original images and corresponding labeled masks of DRIVE should be put in folders data\source and data\source_label.

The second step is adverserial training. The images of target datasets should be put in target_uns. If you have dataset for evaluation, put them in data\target and data\target_label.

Put the images you want to segment in folder infer_img

Run the training.py for Step 1 or 2 and run predict.py for image segmentation

Requirements

  • tensorflow 1.14
  • keras 2.3.0
  • nartsort 6.0.0
  • albumentations 0.3.3
  • opencv-python 4.1.1.26

Results

DRIVE(source) OCTA(target)
DenseNet without DA 0.951(Dice) 0.592
DenseNet+mutli_fusion NA 0.805

We tested the implementation on our own Optical Coherence Tomography Angiography(OCTA) dataset. The best combination is using DenseNet + multi-layer fusion + AD loss.

Reference