A tensorflow implementation for Unsupervised vessel segmentation based on ADDA
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.
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
- tensorflow 1.14
- keras 2.3.0
- nartsort 6.0.0
- albumentations 0.3.3
- opencv-python 4.1.1.26
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.