File size: 2,817 Bytes
476daa5
286a978
476daa5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
286a978
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import numpy as np
import re

# Constants for augmentation layer
# .../T1/training/zoom_factors.csv contain the scale factors of all the training samples from isotropic to 128x128x128
#   The augmentation values will be scaled using the average+std
ZOOM_FACTORS = np.asarray([0.5032864535069749, 0.5363100665659675, 0.6292598243796296])
MAX_AUG_DISP_ISOT = 30
MAX_AUG_DEF_ISOT = 6
MAX_AUG_DISP = np.max(MAX_AUG_DISP_ISOT * ZOOM_FACTORS)  # Scaled displacements
MAX_AUG_DEF = np.max(MAX_AUG_DEF_ISOT * ZOOM_FACTORS)  # Scaled deformations
MAX_AUG_ANGLE = np.max([np.arctan(np.tan(10*np.pi/180) * ZOOM_FACTORS[1] / ZOOM_FACTORS[0]) * 180 / np.pi,
                        np.arctan(np.tan(10*np.pi/180) * ZOOM_FACTORS[2] / ZOOM_FACTORS[1]) * 180 / np.pi,
                        np.arctan(np.tan(10*np.pi/180) * ZOOM_FACTORS[2] / ZOOM_FACTORS[0]) * 180 / np.pi])  # Scaled angles
GAMMA_AUGMENTATION = False
BRIGHTNESS_AUGMENTATION = False
NUM_CONTROL_PTS_AUG = 10
NUM_AUGMENTATIONS = 5

IN_LAYERS = (0, 3)
OUT_LAYERS = (33, 39)

ENCONDER_LAYERS = (3, 17)
DECODER_LAYERS = (17, 33)

TOP_LAYERS_ENC = (3, 9)
TOP_LAYERS_DEC = (22, 29)
BOTTOM_LAYERS = (9, 22)

LAYER_RANGES = {'INPUT': (IN_LAYERS),
                'OUTPUT': (OUT_LAYERS),
                'ENCODER': (ENCONDER_LAYERS),
                'DECODER': (DECODER_LAYERS),
                'TOP': (TOP_LAYERS_ENC, TOP_LAYERS_DEC),
                'BOTTOM': (BOTTOM_LAYERS)}

# LAYER names:
IN_LAYER_REGEXP = '.*input'
FC_LAYER_REGEXP = '.*final.*'
OUT_LAYER_REGEXP = '(?:flow|transformer)'
ENC_LAYER_REGEXP = '.*enc_(?:conv|pooling)_(\d).*'
DEC_LAYER_REGEXP = '.*dec_(?:conv|upsample)_(\d).*'
LEVEL_NUMBER = lambda x: re.match('.*(?:enc|dec)_(?:conv|upsample|pooling)_(\d).*', x)
IS_TOP_LEVEL = lambda x: int(LEVEL_NUMBER(x)[1]) < 3 if LEVEL_NUMBER(x) is not None else False or bool(re.match(FC_LAYER_REGEXP, x))
IS_BOTTOM_LEVEL = lambda x: int(LEVEL_NUMBER(x)[1]) >= 3 if LEVEL_NUMBER(x) is not None else False

LAYER_SELECTION = {'INPUT': lambda x: bool(re.match(IN_LAYER_REGEXP, x)),
                   'FULLYCONNECTED': lambda x: bool(re.match(FC_LAYER_REGEXP, x)),
                   'ENCODER': lambda x: bool(re.match(ENC_LAYER_REGEXP, x)),
                   'DECODER': lambda x: bool(re.match(DEC_LAYER_REGEXP, x)),
                   'TOP': lambda x: IS_TOP_LEVEL(x),
                   'BOTTOM': lambda x: IS_BOTTOM_LEVEL(x)
                   }

# STUPID IDEA THAT COMPLICATES THINGS. The points was to allow combinations of the layer groups
# OR_GROUPS = ['ENCODER', 'DECODER', 'INPUT', 'OUTPUT', 'FULLYCONNECTED']     # These groups can be OR'ed with the AND_GROUPS and among them. E.g., Top layers of the encoder and decoder: ENCODER or DECODER and TOP
# AND_GROUPS = ['TOP', 'BOTTOM']      # These groups can be AND'ed with the OR_GROUPS and among them