-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmisc.py
97 lines (82 loc) · 4.27 KB
/
misc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from __future__ import unicode_literals
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import SimpleITK as sitk
import os
import numpy as np
import pandas as pd
import scipy.ndimage
import time
import os
import cv2
import tensorflow as tf
# TensorFlow Device Configuration
def setup_device(gpuid=None):
devices = []
if gpuid is not None and not isinstance(gpuid, str): gpuid = str(gpuid)
if gpuid is not None: nb_devices = len(gpuid.split(','))
else: nb_devices = 1
if gpuid is not None and (gpuid!='-1'):
# Define GPU Devices for Mirrored Strategy
if (nb_devices>1):
for i in range(nb_devices): devices.append('/gpu:'+str(i))
else: devices = '/gpu:0'
# Set Number of Visible GPUs
os.environ['CUDA_VISIBLE_DEVICES'] = gpuid
# GPU Memory Configuration Differs Between TF 1 and 2
if hasattr(tf, 'ConfigProto'):
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
config.allow_soft_placement = True
config.log_device_placement = True
tf.keras.backend.set_session(tf.Session(config=config))
else:
tf.config.set_soft_device_placement(True)
for pd in tf.config.experimental.list_physical_devices('GPU'):
tf.config.experimental.set_memory_growth(pd, True)
else:
devices = '/cpu:0'
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
return devices, nb_devices
# Print Overview Of Run using CL Arguments
def print_overview(args):
# Training Objective
if (args.TRAIN_OBJ=='zonal'): print("Training Objective: Anatomical (WG,TZ,PZ) Segmentation")
elif (args.TRAIN_OBJ=='lesion'): print("Training Objective: Diagnostic (csPCa) Segmentation")
# Probabilistic Outputs
if args.UNET_PROBABILISTIC: print("Probabilistic Outputs: Enabled")
else: print("Probabilistic Outputs: Disabled")
# Deep Supervision
if args.UNET_DEEP_SUPERVISION: print("Deep Supervision: Enabled")
else: print("Deep Supervision: Disabled")
# Number of Classes at Train-Time
if (args.TRAIN_OBJ=='zonal'): print("Number of Classes at Train-Time: 3")
elif (args.TRAIN_OBJ=='lesion'): print("Number of Classes at Train-Time: 2")
# Training Hyperparameters
print("Batch Size:", args.BATCH_SIZE)
print("Initial Learning Rate:", args.BASE_LR)
# Optimizer
if (args.OPTIMIZER=='adam'): print("Optimizer: Adam w/ AMSGrad")
elif (args.OPTIMIZER=='momentum'): print("Optimizer: Stochastic Gradient Descent w/ Nesterov Momentum")
# Loss Function
if (args.LOSS_MODE=='distribution_focal'): print("Loss Function: Distribution/Focal Loss (alpha="+str(args.FOCAL_LOSS_ALPHA)+"; gamma="+str(args.FOCAL_LOSS_GAMMA)+")")
elif (args.LOSS_MODE=='region_boundary'): print("Loss Function: Soft Dice + Boundary/Surface Loss")
# Train-Time Augmentations
if (args.AUGM_PARAMS[0]>0):
print("Train-Time Augmentations: \
(Master Probability: "+ str(args.AUGM_PARAMS[0])+\
"; Transformation Probability: "+str(args.AUGM_PARAMS[1])+\
"; X-Y Translation: "+ str(args.AUGM_PARAMS[2])+\
"; Rotation Degree: ±"+ str(args.AUGM_PARAMS[3])+\
"; Horizontal Flip: "+ str(args.AUGM_PARAMS[4])+\
"; Zoom Factor: "+ str(args.AUGM_PARAMS[5])+\
"; Gaussian Noise: stddev<="+ str(args.AUGM_PARAMS[6])+\
"; Channel Shift: "+ str(args.AUGM_PARAMS[7])+\
"; Simulate Poor Scan Quality: "+str(args.AUGM_PARAMS[8])+\
"; Gamma Shifts: "+ str(args.AUGM_PARAMS[9])+")")
else: print("Train-Time Augmentations: Disabled")
# Dropout Mode
if (args.UNET_DROPOUT_MODE=='standard'): print("Dropout: Standard (rate={:.2f})".format(args.UNET_DROPOUT_RATE))
elif (args.UNET_DROPOUT_MODE=='monte-carlo'): print("Dropout: Monte Carlo (rate={:.2f})".format(args.UNET_DROPOUT_RATE))
elif (args.UNET_DROPOUT_RATE==0): print("Dropout: Disabled")