Skip to content

Commit efcaf5a

Browse files
committed
WIP: Restore local training ability
1 parent b694b61 commit efcaf5a

File tree

1 file changed

+192
-0
lines changed

1 file changed

+192
-0
lines changed

multic/segmentationschool/train.py

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
import os
2+
import argparse
3+
import sys
4+
5+
sys.path.append('..')
6+
7+
from segmentationschool.segmentation_school import run_it
8+
9+
10+
def str2bool(v):
11+
if isinstance(v, bool):
12+
return v
13+
if v.lower() in ('yes', 'true', 't', 'y', '1'):
14+
return True
15+
elif v.lower() in ('no', 'false', 'f', 'n', '0'):
16+
return False
17+
else:
18+
raise argparse.ArgumentTypeError('Boolean value expected.')
19+
20+
21+
if __name__ == '__main__':
22+
parser = argparse.ArgumentParser()
23+
24+
##### Main params (MANDITORY) ##############################################
25+
# School subject
26+
parser.add_argument('--girderApiUrl', dest='girderApiUrl', default=' ' ,type=str,
27+
help='girderApiUrl')
28+
parser.add_argument('--girderToken', dest='girderToken', default=' ' ,type=str,
29+
help='girderToken')
30+
parser.add_argument('--files', dest='files', default=' ' ,type=str,
31+
help='files')
32+
# option
33+
parser.add_argument('--option', dest='option', default=' ' ,type=str,
34+
help='option for [new, train, predict, validate]')
35+
parser.add_argument('--transfer', dest='transfer', default=' ' ,type=str,
36+
help='name of project for transfer learning [pulls the newest model]')
37+
parser.add_argument('--one_network', dest='one_network', default=True ,type=bool,
38+
help='use only high resolution network for training/prediction/validation')
39+
parser.add_argument('--target', dest='target', default=None,type=str,
40+
help='directory with xml transformation targets')
41+
parser.add_argument('--cortextarget', dest='cortextarget', default=None,type=str,
42+
help='directory with cortex annotations for splicing')
43+
parser.add_argument('--output', dest='output', default=None,type=str,
44+
help='directory to save output transformed XMLs')
45+
parser.add_argument('--wsis', dest='wsis', default=None,type=str,
46+
help='directory of WSIs for reference feature extraction')
47+
parser.add_argument('--groupBy', dest='groupBy', default=None,type=str,
48+
help='Name for histomicsUI converted annotation group')
49+
parser.add_argument('--patientData', dest='patientData', default=None,type=str,
50+
help='Location of excel file containing clinical data on patients')
51+
parser.add_argument('--labelColumns', dest='labelColumns', default=None,type=str,
52+
help='Column in excel file to use as label')
53+
parser.add_argument('--labelModality', dest='labelModality', default=None,type=str,
54+
help='Column in excel file to use as label')
55+
parser.add_argument('--IDColumn', dest='IDColumn', default='Label_slides',type=str,
56+
help='Excel column with file name links')
57+
parser.add_argument('--plotFill', dest='plotFill', default=True,type=str2bool,
58+
help='Excel column with file name links')
59+
parser.add_argument('--scatterFeatures', dest='scatterFeatures', default='5,6',type=str,
60+
help='Excel column with file name links')
61+
parser.add_argument('--anchor', dest='anchor', default='Age',type=str,
62+
help='Biometric link data for scatterplot')
63+
parser.add_argument('--exceloutfile', dest='exceloutfile', default=None,type=str,
64+
help='Name of output excel file for feature aggregation')
65+
66+
67+
# args.huelabel,args.rowlabel,args.binRows
68+
parser.add_argument('--SummaryOption', dest='SummaryOption', default=None,type=str,
69+
help='What type of feature summary to generate, options:\n'+
70+
'BLDensity,ULDensity,UDensity,BDensity,standardScatter,anchorScatter')
71+
72+
# automatically generated
73+
parser.add_argument('--base_dir', dest='base_dir', default=os.getcwd(),type=str,
74+
help='base directory of code folder')
75+
76+
parser.add_argument('--code_dir', dest='code_dir', default=os.getcwd(),type=str,
77+
help='base directory of code folder')
78+
79+
80+
##### Args for training / prediction ####################################################
81+
parser.add_argument('--gpu_num', dest='gpu_num', default=2 ,type=int,
82+
help='number of GPUs avalable')
83+
parser.add_argument('--gpu', dest='gpu', default=0 ,type=int,
84+
help='GPU to use for prediction')
85+
parser.add_argument('--iteration', dest='iteration', default='none' ,type=str,
86+
help='Which iteration to use for prediction')
87+
parser.add_argument('--prune_HR', dest='prune_HR', default=0.0 ,type=float,
88+
help='percent of high rez data to be randomly removed [0-1]-->[none-all]')
89+
parser.add_argument('--prune_LR', dest='prune_LR', default=0.0 ,type=float,
90+
help='percent of low rez data to be randomly removed [0-1]-->[none-all]')
91+
parser.add_argument('--classNum', dest='classNum', default=0 ,type=int,
92+
help='number of classes present in the training data plus one (one class is specified for background)')
93+
parser.add_argument('--classNum_HR', dest='classNum_HR', default=0 ,type=int,
94+
help='number of classes present in the High res training data [USE ONLY IF DIFFERENT FROM LOW RES]')
95+
parser.add_argument('--modelfile', dest='modelfile', default=None ,type=str,
96+
help='the desired model file to use for training or prediction')
97+
98+
### Params for cutting wsi ###
99+
#White level cutoff
100+
parser.add_argument('--white_percent', dest='white_percent', default=0.01 ,type=float,
101+
help='white level checkpoint for chopping')
102+
parser.add_argument('--chop_thumbnail_resolution', dest='chop_thumbnail_resolution', default=16,type=int,
103+
help='downsample mask to find usable regions')
104+
#Low resolution parameters
105+
parser.add_argument('--overlap_percentLR', dest='overlap_percentLR', default=0.5 ,type=float,
106+
help='overlap percentage of low resolution blocks [0-1]')
107+
parser.add_argument('--boxSizeLR', dest='boxSizeLR', default=450 ,type=int,
108+
help='size of low resolution blocks')
109+
parser.add_argument('--downsampleRateLR', dest='downsampleRateLR', default=16 ,type=int,
110+
help='reduce image resolution to 1/downsample rate')
111+
#High resolution parameters
112+
parser.add_argument('--overlap_percentHR', dest='overlap_percentHR', default=0 ,type=float,
113+
help='overlap percentage of high resolution blocks [0-1]')
114+
parser.add_argument('--boxSize', dest='boxSize', default=2048 ,type=int,
115+
help='size of high resolution blocks')
116+
parser.add_argument('--downsampleRateHR', dest='downsampleRateHR', default=1 ,type=int,
117+
help='reduce image resolution to 1/downsample rate')
118+
parser.add_argument('--training_max_size', dest='training_max_size', default=512 ,type=int,
119+
help='padded region for low resolution region extraction')
120+
parser.add_argument('--Mag20X', dest='Mag20X', default=False,type=str2bool,
121+
help='Perform prediction for 20X (true) slides rather than 40X (false)')
122+
123+
### Params for augmenting data ###
124+
#High resolution
125+
parser.add_argument('--aug_HR', dest='aug_HR', default=3 ,type=int,
126+
help='augment high resolution set this many magnitudes')
127+
#Low resolution
128+
parser.add_argument('--aug_LR', dest='aug_LR', default=15 ,type=int,
129+
help='augment low resolution set this many magnitudes')
130+
#Color space transforms
131+
parser.add_argument('--hbound', dest='hbound', default=0.01 ,type=float,
132+
help='Gaussian variance defining bounds on Hue shift for HSV color augmentation')
133+
parser.add_argument('--lbound', dest='lbound', default=0.025 ,type=float,
134+
help='Gaussian variance defining bounds on L* gamma shift for color augmentation [alters brightness/darkness of image]')
135+
136+
### Params for training networks ###
137+
#Low resolution hyperparameters
138+
parser.add_argument('--CNNbatch_sizeLR', dest='CNNbatch_sizeLR', default=2 ,type=int,
139+
help='Size of batches for training low resolution CNN')
140+
#High resolution hyperparameters
141+
parser.add_argument('--CNNbatch_sizeHR', dest='CNNbatch_sizeHR', default=2 ,type=int,
142+
help='Size of batches for training high resolution CNN')
143+
#Hyperparameters
144+
parser.add_argument('--epoch_LR', dest='epoch_LR', default=1 ,type=int,
145+
help='training epochs for low resolution network')
146+
parser.add_argument('--epoch_HR', dest='epoch_HR', default=1 ,type=int,
147+
help='training epochs for high resolution network')
148+
parser.add_argument('--saveIntervals', dest='saveIntervals', default=10 ,type=int,
149+
help='how many checkpoints get saved durring training')
150+
parser.add_argument('--learning_rate_HR', dest='learning_rate_HR', default=2.5e-4,
151+
type=float, help='High rez learning rate')
152+
parser.add_argument('--learning_rate_LR', dest='learning_rate_LR', default=2.5e-4,
153+
type=float, help='Low rez learning rate')
154+
parser.add_argument('--chop_data', dest='chop_data', default='false',
155+
type=str, help='chop and augment new data before training')
156+
parser.add_argument('--crop_detectron_trainset', dest='crop_detectron_trainset', default=False,type=str2bool,
157+
help='chop dot based images to this max size')
158+
parser.add_argument('--predict_data', dest='predict_data', default=True,type=str2bool,
159+
help='chop dot based images to this max size')
160+
parser.add_argument('--roi_thresh', dest='roi_thresh', default=0.01,type=float,
161+
help='chop dot based images to this max size')
162+
163+
### Params for saving results ###
164+
parser.add_argument('--outDir', dest='outDir', default='Predictions' ,type=str,
165+
help='output directory')
166+
parser.add_argument('--save_outputs', dest='save_outputs', default=False ,type=bool,
167+
help='save outputs from chopping etc. [final image masks]')
168+
parser.add_argument('--imBoxExt', dest='imBoxExt', default='.jpeg' ,type=str,
169+
help='ext of saved image blocks')
170+
parser.add_argument('--finalImgExt', dest='finalImgExt', default='.jpeg' ,type=str,
171+
help='ext of final saved images')
172+
parser.add_argument('--wsi_ext', dest='wsi_ext', default='.svs,.scn,.ndpi' ,type=str,
173+
help='file ext of wsi images')
174+
parser.add_argument('--bg_intensity', dest='bg_intensity', default=.5 ,type=float,
175+
help='if displaying output classifications [save_outputs = True] background color [0-1]')
176+
parser.add_argument('--approximation_downsample', dest='approx_downsample', default=1 ,type=float,
177+
help='Amount to downsample high resolution prediction boundaries for smoothing')
178+
179+
180+
### Params for optimizing wsi mask cleanup ###
181+
parser.add_argument('--min_size', dest='min_size', default=[30,30,30,30,30,30] ,type=int,
182+
help='min size region to be considered after prepass [in pixels]')
183+
parser.add_argument('--bordercrop', dest='bordercrop', default=300 ,type=int,
184+
help='min size region to be considered after prepass [in pixels]')
185+
parser.add_argument('--LR_region_pad', dest='LR_region_pad', default=50 ,type=int,
186+
help='padded region for low resolution region extraction')
187+
parser.add_argument('--show_interstitium', dest='show_interstitium', default=True ,type=str2bool,
188+
help='padded region for low resolution region extraction')
189+
190+
191+
args = parser.parse_args()
192+
run_it(args)

0 commit comments

Comments
 (0)