FluoGen / cellpose /cli.py
rayquaza384mega's picture
Upload example images and assets using LFS
9060565
"""
Copyright © 2023 Howard Hughes Medical Institute, Authored by Carsen Stringer and Marius Pachitariu and Michael Rariden.
"""
import argparse
def get_arg_parser():
""" Parses command line arguments for cellpose main function
Note: this function has to be in a separate file to allow autodoc to work for CLI.
The autodoc_mock_imports in conf.py does not work for sphinx-argparse sometimes,
see https://github.com/ashb/sphinx-argparse/issues/9#issue-1097057823
"""
parser = argparse.ArgumentParser(description="Cellpose Command Line Parameters")
# misc settings
parser.add_argument("--version", action="store_true",
help="show cellpose version info")
parser.add_argument(
"--verbose", action="store_true",
help="show information about running and settings and save to log")
parser.add_argument("--Zstack", action="store_true", help="run GUI in 3D mode")
# settings for CPU vs GPU
hardware_args = parser.add_argument_group("Hardware Arguments")
hardware_args.add_argument("--use_gpu", action="store_true",
help="use gpu if torch with cuda installed")
hardware_args.add_argument(
"--gpu_device", required=False, default="0", type=str,
help="which gpu device to use, use an integer for torch, or mps for M1")
hardware_args.add_argument("--check_mkl", action="store_true",
help="check if mkl working")
# settings for locating and formatting images
input_img_args = parser.add_argument_group("Input Image Arguments")
input_img_args.add_argument("--dir", default=[], type=str,
help="folder containing data to run or train on.")
input_img_args.add_argument(
"--image_path", default=[], type=str, help=
"if given and --dir not given, run on single image instead of folder (cannot train with this option)"
)
input_img_args.add_argument(
"--look_one_level_down", action="store_true",
help="run processing on all subdirectories of current folder")
input_img_args.add_argument("--img_filter", default=[], type=str,
help="end string for images to run on")
input_img_args.add_argument(
"--channel_axis", default=None, type=int,
help="axis of image which corresponds to image channels")
input_img_args.add_argument("--z_axis", default=None, type=int,
help="axis of image which corresponds to Z dimension")
input_img_args.add_argument(
"--chan", default=0, type=int, help=
"channel to segment; 0: GRAY, 1: RED, 2: GREEN, 3: BLUE. Default: %(default)s")
input_img_args.add_argument(
"--chan2", default=0, type=int, help=
"nuclear channel (if cyto, optional); 0: NONE, 1: RED, 2: GREEN, 3: BLUE. Default: %(default)s"
)
input_img_args.add_argument("--invert", action="store_true",
help="invert grayscale channel")
input_img_args.add_argument(
"--all_channels", action="store_true", help=
"use all channels in image if using own model and images with special channels")
# model settings
model_args = parser.add_argument_group("Model Arguments")
model_args.add_argument("--pretrained_model", required=False, default="cyto3",
type=str,
help="model to use for running or starting training")
model_args.add_argument("--restore_type", required=False, default=None, type=str,
help="model to use for image restoration")
model_args.add_argument("--chan2_restore", action="store_true",
help="use nuclei restore model for second channel")
model_args.add_argument(
"--add_model", required=False, default=None, type=str,
help="model path to copy model to hidden .cellpose folder for using in GUI/CLI")
model_args.add_argument(
"--transformer", action="store_true", help=
"use transformer backbone (pretrained_model from Cellpose3 is transformer_cp3)")
model_args.add_argument("--pretrained_model_ortho", required=False, default=None,
type=str,
help="model to use for running 3D ortho views (ZY and ZX)")
# algorithm settings
algorithm_args = parser.add_argument_group("Algorithm Arguments")
algorithm_args.add_argument(
"--no_resample", action="store_true", help=
"disable dynamics on full image (makes algorithm faster for images with large diameters)"
)
algorithm_args.add_argument(
"--no_interp", action="store_true",
help="do not interpolate when running dynamics (was default)")
algorithm_args.add_argument("--no_norm", action="store_true",
help="do not normalize images (normalize=False)")
parser.add_argument(
'--norm_percentile',
nargs=2, # Require exactly two values
metavar=('VALUE1', 'VALUE2'),
help="Provide two float values to set norm_percentile (e.g., --norm_percentile 1 99)"
)
algorithm_args.add_argument(
"--do_3D", action="store_true",
help="process images as 3D stacks of images (nplanes x nchan x Ly x Lx")
algorithm_args.add_argument(
"--diameter", required=False, default=30., type=float, help=
"cell diameter, if 0 will use the diameter of the training labels used in the model, or with built-in model will estimate diameter for each image"
)
algorithm_args.add_argument(
"--stitch_threshold", required=False, default=0.0, type=float,
help="compute masks in 2D then stitch together masks with IoU>0.9 across planes"
)
algorithm_args.add_argument(
"--min_size", required=False, default=15, type=int,
help="minimum number of pixels per mask, can turn off with -1")
algorithm_args.add_argument(
"--flow3D_smooth", required=False, default=0, type=float,
help="stddev of gaussian for smoothing of dP for dynamics in 3D, default of 0 means no smoothing")
algorithm_args.add_argument(
"--flow_threshold", default=0.4, type=float, help=
"flow error threshold, 0 turns off this optional QC step. Default: %(default)s")
algorithm_args.add_argument(
"--cellprob_threshold", default=0, type=float,
help="cellprob threshold, default is 0, decrease to find more and larger masks")
algorithm_args.add_argument(
"--niter", default=0, type=int, help=
"niter, number of iterations for dynamics for mask creation, default of 0 means it is proportional to diameter, set to a larger number like 2000 for very long ROIs"
)
algorithm_args.add_argument("--anisotropy", required=False, default=1.0, type=float,
help="anisotropy of volume in 3D")
algorithm_args.add_argument("--exclude_on_edges", action="store_true",
help="discard masks which touch edges of image")
algorithm_args.add_argument(
"--augment", action="store_true",
help="tiles image with overlapping tiles and flips overlapped regions to augment"
)
# output settings
output_args = parser.add_argument_group("Output Arguments")
output_args.add_argument(
"--save_png", action="store_true",
help="save masks as png")
output_args.add_argument(
"--save_tif", action="store_true",
help="save masks as tif")
output_args.add_argument(
"--output_name", default=None, type=str,
help="suffix for saved masks, default is _cp_masks, can be empty if `savedir` used and different of `dir`")
output_args.add_argument("--no_npy", action="store_true",
help="suppress saving of npy")
output_args.add_argument(
"--savedir", default=None, type=str, help=
"folder to which segmentation results will be saved (defaults to input image directory)"
)
output_args.add_argument(
"--dir_above", action="store_true", help=
"save output folders adjacent to image folder instead of inside it (off by default)"
)
output_args.add_argument("--in_folders", action="store_true",
help="flag to save output in folders (off by default)")
output_args.add_argument(
"--save_flows", action="store_true", help=
"whether or not to save RGB images of flows when masks are saved (disabled by default)"
)
output_args.add_argument(
"--save_outlines", action="store_true", help=
"whether or not to save RGB outline images when masks are saved (disabled by default)"
)
output_args.add_argument(
"--save_rois", action="store_true",
help="whether or not to save ImageJ compatible ROI archive (disabled by default)"
)
output_args.add_argument(
"--save_txt", action="store_true",
help="flag to enable txt outlines for ImageJ (disabled by default)")
output_args.add_argument(
"--save_mpl", action="store_true",
help="save a figure of image/mask/flows using matplotlib (disabled by default). "
"This is slow, especially with large images.")
# training settings
training_args = parser.add_argument_group("Training Arguments")
training_args.add_argument("--train", action="store_true",
help="train network using images in dir")
training_args.add_argument("--train_size", action="store_true",
help="train size network at end of training")
training_args.add_argument("--test_dir", default=[], type=str,
help="folder containing test data (optional)")
training_args.add_argument(
"--file_list", default=[], type=str, help=
"path to list of files for training and testing and probabilities for each image (optional)"
)
training_args.add_argument(
"--mask_filter", default="_masks", type=str, help=
"end string for masks to run on. use '_seg.npy' for manual annotations from the GUI. Default: %(default)s"
)
training_args.add_argument(
"--diam_mean", default=30., type=float, help=
"mean diameter to resize cells to during training -- if starting from pretrained models it cannot be changed from 30.0"
)
training_args.add_argument("--learning_rate", default=0.2, type=float,
help="learning rate. Default: %(default)s")
training_args.add_argument("--weight_decay", default=0.00001, type=float,
help="weight decay. Default: %(default)s")
training_args.add_argument("--n_epochs", default=500, type=int,
help="number of epochs. Default: %(default)s")
training_args.add_argument("--batch_size", default=8, type=int,
help="batch size. Default: %(default)s")
training_args.add_argument(
"--nimg_per_epoch", default=None, type=int,
help="number of train images per epoch. Default is to use all train images.")
training_args.add_argument(
"--nimg_test_per_epoch", default=None, type=int,
help="number of test images per epoch. Default is to use all test images.")
training_args.add_argument(
"--min_train_masks", default=5, type=int, help=
"minimum number of masks a training image must have to be used. Default: %(default)s"
)
training_args.add_argument("--SGD", default=1, type=int, help="use SGD")
training_args.add_argument(
"--save_every", default=100, type=int,
help="number of epochs to skip between saves. Default: %(default)s")
training_args.add_argument(
"--model_name_out", default=None, type=str,
help="Name of model to save as, defaults to name describing model architecture. "
"Model is saved in the folder specified by --dir in models subfolder.")
return parser