• Stars
    star
    396
  • Rank 108,801 (Top 3 %)
  • Language
    Python
  • License
    Other
  • Created almost 6 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

This is the implementation of Noise2Void training.

example workflow N2V_video

Noise2Void - Learning Denoising from Single Noisy Images

Alexander Krull1,2, Tim-Oliver Buchholz2, Florian Jug
1[email protected], 2Authors contributed equally

The field of image denoising is currently dominated by discriminative deep learning methods that are trained on pairs of noisy input and clean target images. Recently it has been shown that such methods can also be trained without clean targets. Instead, independent pairs of noisy images can be used, in an approach known as NOISE2NOISE (N2N). Here, we introduce NOISE2VOID (N2V), a training scheme that takes this idea one step further. It does not require noisy image pairs, nor clean target images. Consequently, N2V allows us to train directly on the body of data to be denoised and can therefore be applied when other methods cannot. Especially interesting is the application to biomedical image data, where the acquisition of training targets, clean or noisy, is frequently not possible. We compare the performance of N2V to approaches that have either clean target images and/or noisy image pairs available. Intuitively, N2V cannot be expected to outperform methods that have more information available during training. Still, we observe that the denoising performance of NOISE2VOID drops in moderation and compares favorably to training-free denoising methods.

Paper: https://arxiv.org/abs/1811.10980

Our implementation is based on CSBDeep (github).

N2V2 - Fixing Noise2Void Checkerboard Artifacts with Modified Sampling Strategies and a Tweaked Network Architecture

Eva Hâck1,⚹, Tim-Oliver Buchholz2,⚹, Anselm Brachmann1,⚹, Florian Jug3,⁜, and Alexander Freytag1,⁜
1Carl Zeiss AG, Germany
2Facility for Advanced Imaging and Microscopy, Friedrich Miescher Institute for Biomedical Research, Basel, Switzerland
3Jug Group, Fondazione Human Technopole, Milano, Italy
⚹, ⁜Equal contribution

In recent years, neural network based image denoising approaches have revolutionized the analysis of biomedical microscopy data. Self-supervised methods, such as Noise2Void (N2V), are applicable to virtually all noisy datasets, even without dedicated training data being available. Arguably, this facilitated the fast and widespread adoption of N2V throughout the life sciences. Unfortunately, the blind-spot training underlying N2V can lead to rather visible checkerboard artifacts, thereby reducing the quality of final predictions considerably. In this work, we present two modifications to the vanilla N2V setup that both help to reduce the unwanted artifacts considerably. Firstly, we propose a modified network architecture, i.e. using BlurPool instead of MaxPool layers throughout the used UNet, rolling back the residual-UNet to a non-residual UNet, and eliminating the skip connections at the uppermost UNet level. Additionally, we propose new replacement strategies to determine the pixel intensity values that fill in the elected blind-spot pixels. We validate our modifications on a range of microscopy and natural image data. Based on added synthetic noise from multiple noise types and at varying amplitudes, we show that both proposed modifications push the current state-of-the-art for fully self-supervised image denoising.

OpenReview: https://openreview.net/forum?id=IZfQYb4lHVq

Installation

This implementation requires Tensorflow. We have tested Noise2Void using Python 3.9 and TensorFlow 2.7 and 2.10.

Note: If you want to use TensorFlow 1.15 you have to install N2V v0.2.1. N2V v0.3.* supports TensorFlow 2 only.

If you start from scratch...

We recommend using miniconda. If you do not yet have a strong opinion, just use it too!

After installing Miniconda, create a conda environment:

conda create -n 'n2v' python=3.9
conda activate n2v

Install TensorFlow

The best way to install TensorFLow is to follow the Tensorflow guidelines.

Note that, after installing TensorFlow, running the following commands in your environment will allow you to use the GPU without having to each time run an export command (refer to the Tensorflow step by step):

mkdir -p $CONDA_PREFIX/etc/conda/activate.d
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CONDA_PREFIX/lib/' > $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh

Option 1: PIP (current stable release)

$ pip install n2v

Option 2: Git-Clone and install from sources (current master-branch version)

This option is ideal if you want to edit the code. Clone the repository:

$ git clone https://github.com/juglab/n2v.git

Change into its directory and install it:

$ cd n2v
$ pip install -e .

You are now ready to run Noise2Void.

How to use it?

Jupyter notebooks

Have a look at our jupyter notebook:

In order to run the notebooks, install jupyter in your conda environment:

pip install jupyter

Coming soon:

  • N2V2 example notebooks.

Note: You can use the N2V2 functionality by providing the following three parameters to the N2V-Config object:

  • blurpool=True, by default set to False
  • skip_skipone=True, by default set to False
  • n2v_manipulator="median", by default set to "uniform_withCP"
  • unet_residual=False, by default set to False

Warning: Currently, N2V2 does only support 2D data.
Warning: We have not tested N2V2 together with struct-N2V.

napari

N2V, N2V2 and structN2V are available in napari!

How to cite:

@inproceedings{krull2019noise2void,
  title={Noise2void-learning denoising from single noisy images},
  author={Krull, Alexander and Buchholz, Tim-Oliver and Jug, Florian},
  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
  pages={2129--2137},
  year={2019}
}
N2V2 citation coming soon.

see here for more info on StructN2V.

Note on functional tests

The functional "tests" are meant to be run as regular programs. They are there to make sure that examples are still running after changes.

Note on GPU Memory Allocation

In some cases tensorflow is unable to allocate GPU memory and fails. One possible solution could be to set the following environment variable: export TF_FORCE_GPU_ALLOW_GROWTH=true

More Repositories

1

EmbedSeg

Code Implementation for EmbedSeg, an Instance Segmentation Method for Microscopy Images
Python
111
star
2

FourierImageTransformer

Fourier Image Transformer (FIT) can solve relevant image analysis tasks in Fourier space.
Python
94
star
3

pn2v

This is our implementation of Probabilistic Noise2Void
Python
71
star
4

DenoiSeg

Joint training of denoising and segmentation.
Jupyter Notebook
65
star
5

PPN2V

Code Implementation for the publication "Fully Unsupervised Probabilistic Noise2Void"
Python
54
star
6

DivNoising

DivNoising is an unsupervised denoising method to generate diverse denoised samples for any noisy input image. This repository contains the code to reproduce the results reported in the paper https://openreview.net/pdf?id=agHLCOBM5jP
Python
42
star
7

HDN

This repository hosts the code for HDN (associated with the paper https://arxiv.org/pdf/2104.01374.pdf) for pixel and structured noise removal for microscopy and natural image datasets
Python
35
star
8

labkit-ui

Advanced Tool for Labeling And Segmentation
Java
33
star
9

cryoCARE_pip

PIP package of cryoCARE
Python
26
star
10

cryoCARE_T2T

Singularity image for cryo-CARE
Jupyter Notebook
26
star
11

napari-n2v

A self-supervised denoising algorithm.
Python
24
star
12

N2V_fiji

Jupyter Notebook
21
star
13

VoidSeg

Notebooks for VoidSeg
Python
16
star
14

DecoNoising

Jupyter Notebook
10
star
15

EmbedSeg-napari

Extending EmbedSeg for use in napari
Python
8
star
16

uSplit

Python
6
star
17

napari-denoiseg

Python
6
star
18

labkit-pixel-classification

Java
6
star
19

LabelEditor

Java
4
star
20

PlatyMatch

Accepted at BioImage Computing Workshop in ECCV, 2020
Python
4
star
21

featureforest

A napari plugin for segmentation using vision transformers' features
Python
4
star
22

labkit-command-line

Labkit Command Line - Segment huge images on a cluster
Java
3
star
23

clusterify

Port your projects to be cluster-ready!
Python
2
star
24

DL_TensorFlow_PyTorch

Jupyter Notebook
2
star
25

DenoiSeg_fiji

Java
2
star
26

VoidSeg_cluster

Jupyter Notebook
2
star
27

tiny-uploader-tool_fiji

Tiny Uploader Tool (TUT) for Fiji
Java
2
star
28

MultiOmicsCellSim

Cell Simulator to map parametrical distributions into various modalities
Jupyter Notebook
1
star
29

imagej-logo

1
star
30

MicroSSIM

Range Invariant SSIM
Jupyter Notebook
1
star
31

fiji-howto

How to do things in Fiji from Java
Java
1
star
32

labkit-remote-drawing

JavaScript
1
star
33

PyTr2d

Python based Tracking in 2D
Python
1
star
34

napari-patchcreator

Python
1
star
35

Zebrafish_nuclear_volume_analysis

Hosts the code for the segmentation and quantitative results presented in Vignes et al. (2021, bioRxiv).
Python
1
star
36

denoiSplit

Jupyter Notebook
1
star
37

Noise2Noise-with-CSBDeep

Denoising of Scanning Electron Microscopy (SEM) Data with CSBDeep and Noise2Noise.
Jupyter Notebook
1
star
38

IMPRS-programming-course

Python
1
star
39

AI4LifeSubmissions

Jupyter Notebook
1
star