-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathplugin.json
More file actions
370 lines (368 loc) · 12.3 KB
/
plugin.json
File metadata and controls
370 lines (368 loc) · 12.3 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
{
"name": "WIPP UNet CNN Training Plugin",
"version": "1.0.0",
"title": "UNet CNN Training",
"author": "Michael Majurski",
"institution": "National Institute of Standards and Technology",
"repository": "https://github.com/usnistgov/WIPP-unet-train-plugin",
"citation": "Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. \"U-net: Convolutional networks for biomedical image segmentation.\" International Conference on Medical image computing and computer-assisted intervention. Springer, Cham, 2015.",
"description": "Train a UNet CNN model",
"containerId": "wipp/wipp-unet-cnn-train-plugin:1.0.0",
"inputs": [
{
"name": "imageDir",
"type": "collection",
"options": {
"format": "tiledtiff"
},
"description": "Input images for the plugin.",
"required": true
},
{
"name": "maskDir",
"type": "collection",
"options": {
"format": "tiledtiff"
},
"description": "Input masks for the plugin.",
"required": true
},
{
"name": "useTiling",
"type": "enum",
"options": {
"values": [
"NO","YES"
]
},
"description": "Controls whether or not to tile the input images for training in order to fit them into GPU memory.",
"required": true,
"default": "NO"
},
{
"name": "tileSize",
"type": "number",
"description": "Tile size for tiling input images in order to fit them into GPU memory.",
"required": false,
"default": 256
},
{
"name": "trainFraction",
"type": "number",
"description": "What fraction of the annotated images to use for training (default 0.8).",
"required": true,
"default": 0.8
},
{
"name": "batchSize",
"type": "number",
"description": "How many images/tiles to use per mini-batch. The number of images used to estimate the gradient per training step.",
"required": true,
"default": 8
},
{
"name": "numberClasses",
"type": "number",
"description": "How many classes exists in the training data? Each pixel will be classified into one of N classes in the segmentation mask, what is N?",
"required": true,
"default": 2
},
{
"name": "learningRate",
"type": "number",
"description": "What is the learning rate for the network?",
"required": true,
"default": 1e-4
},
{
"name": "testEveryNSteps",
"type": "number",
"description": "How many gradient update (training) steps to take between test split evaluations. This controls how big the effective epoch is. It enables controlling the test frequency between experiments with different true epoch sizes.",
"required": true,
"default": 1000
},
{
"name": "balanceClasses",
"type": "enum",
"options": {
"values": [
"YES",
"NO"
]
},
"description": "Whether or not to sample data during training in a class balanced manner. If turned off, the data the network sees will be randomly sampled from the full training dataset.",
"required": true,
"default": "YES"
},
{
"name": "earlyStoppingEpochCount",
"type": "number",
"description": "The number of epochs past the optimal model to continue to train, hoping to find an improvement.",
"required": true,
"default": 20
},
{
"name": "convergenceTolerance",
"type": "number",
"description": "The epsilon buffer used to determine equivalence with early stopping metrics values. If two values differ by less than convergenceTolerance, they are considered equal. This value prevents machine precision improvements in loss from allowing the model to continue training.",
"required": true,
"default": 1e-4
},
{
"name": "useIntensityScaling",
"type": "enum",
"options": {
"values": [
"YES","NO"
]
},
"description": "Controls whether or not to intensity-scale the input images for training in order to accommodate unevenly distributed intensity-defining classes across multiple images.",
"required": true,
"default": "YES"
},
{
"name": "useAugmentation",
"type": "enum",
"options": {
"values": [
"YES",
"NO"
]
},
"description": "Whether or not to use data augmentation during training.",
"required": true,
"default": "YES"
},
{
"name": "augmentationReflection",
"type": "enum",
"options": {
"values": [
"YES",
"NO"
]
},
"description": "Whether or not to use the data augmentation technique image reflection during training.",
"required": false,
"default": "YES"
},
{
"name": "augmentationRotation",
"type": "enum",
"options": {
"values": [
"YES",
"NO"
]
},
"description": "Whether or not to use the data augmentation technique image rotation during training.",
"required": false,
"default": "YES"
},
{
"name": "augmentationJitter",
"type": "number",
"description": "The severity of jitter data augmentation [0 = None, 1 = 100% of image size]. Jitter shifts the image left-right and up-down by a percentage of the image size.",
"required": false,
"default": 0.1
},
{
"name": "augmentationScale",
"type": "number",
"description": "The severity of scale data augmentation [0 = None, 1 = 100% of image size]. Scale alters the image size by zooming in or out by a percentage of the image size.",
"required": false,
"default": 0.1
},
{
"name": "augmentationNoise",
"type": "number",
"description": "The severity of noise data augmentation [0 = None, 1 = 100% of the image dynamic range]. Noise augmentation adds gaussian noise to the image as a percentage of the images dynamic range.",
"required": false,
"default": 0.02
},
{
"name": "augmentationBlurMaxSigma",
"type": "number",
"description": "The max size of a gaussian blur kernel used to blur the images [0 = None]. Blur augmentation performs a gaussian smoothing of the image to blur out details. This controls how large the blur kernel is, and therefore the strength of the blurring effect.",
"required": false,
"default": 2
},
{
"name": "augmentationIntensity",
"type": "number",
"description": "The severity of intensity data augmentation [0 = None, 1 = 100% of dynamic range]. Intensity augmentation shifts the intensity values by a percentage of the dynamic range.",
"required": false,
"default": 0.0
}
],
"outputs": [
{
"name": "outputDir",
"type": "tensorflowModel",
"description": "Output directory data for the plugin"
},
{
"name": "tensorboardDir",
"type": "tensorboardLogs",
"description": "tensorboard directory for Logs data from the plugin"
}
],
"ui": [
{
"key": "inputs.imageDir",
"title": "Image Collection: ",
"description": "Pick a collection..."
},
{
"key": "inputs.maskDir",
"title": "Mask Collection: ",
"description": "Pick a collection..."
},
{
"key": "inputs.numberClasses",
"title": "Number of Classes: ",
"description": "How many classes exists in the training data?"
},
{
"key": "inputs.learningRate",
"title": "Learning Rate: "
},
{
"key": "inputs.batchSize",
"title": "Batch Size: ",
"description": "How many images/tiles to use per mini-batch?"
},
{
"key": "inputs.useTiling",
"title": "Tile Input Images: ",
"description": "Whether to tile images to fit them in GPU memory"
},
{
"key": "inputs.tileSize",
"title": "Tile Size: ",
"description": "What size to make the image tiles?",
"condition": "model.inputs.useTiling=='YES'"
},
{
"key": "inputs.trainFraction",
"title": "Train Fraction: ",
"description": "What fraction of the image collection to use for training?"
},
{
"key": "inputs.testEveryNSteps",
"title": "Test Every N Steps: ",
"description": "How many gradient update steps to take between test evaluations."
},
{
"key": "inputs.balanceClasses",
"title": "Balance Classes: ",
"description": "Whether or not to balance classes when sampling training data."
},
{
"key": "inputs.earlyStoppingEpochCount",
"title": "Early Stopping Epoch Count: ",
"description": "The number of epochs past the optimal model to continue to train, hoping to find an improvement."
},
{
"key": "inputs.convergenceTolerance",
"title": "Counvergence Tolerance: ",
"description": "The epsilon buffer used to determine equivalence with early stopping metrics values."
},
{
"key": "inputs.useIntensityScaling",
"title": "Scale intensities: ",
"description": "Whether or not to intensity-scale classes when sampling training data."
},
{
"key": "inputs.useAugmentation",
"title": "Use Data Augmentation: ",
"description": "Whether or not to use data augmentation during training."
},
{
"key": "inputs.augmentationRotation",
"title": "Use Rotation Augmentation: ",
"condition": "model.inputs.useAugmentation=='YES'"
},
{
"key": "inputs.augmentationReflection",
"title": "Use Reflection Augmentation: ",
"condition": "model.inputs.useAugmentation=='YES'"
},
{
"key": "inputs.augmentationJitter",
"title": "Jitter Augmentation Severity: ",
"description": "The severity of jitter data augmentation [0 = None, 1 = 100% of image size].",
"condition": "model.inputs.useAugmentation=='YES'"
},
{
"key": "inputs.augmentationScale",
"title": "Scale Augmentation Severity: ",
"description": "The severity of scale data augmentation [0 = None, 1 = 100% of image size].",
"condition": "model.inputs.useAugmentation=='YES'"
},
{
"key": "inputs.augmentationNoise",
"title": "Noise Augmentation Severity: ",
"description": "The severity of noise data augmentation [0 = None, 1 = 100% of the image dynamic range].",
"condition": "model.inputs.useAugmentation=='YES'"
},
{
"key": "inputs.augmentationBlurMaxSigma",
"title": "Blur Augmentation Max Sigma: ",
"description": "The max size of a gaussian blur kernel used to blur the images [0 = None]. ",
"condition": "model.inputs.useAugmentation=='YES'"
},
{
"key": "inputs.augmentationIntensity",
"title": "Intensity Augmentation Severity: ",
"description": "The severity of intensity data augmentation [0 = None, 1 = 100% of the image dynamic range].",
"condition": "model.inputs.useAugmentation=='YES'"
},
{
"key" : "fieldsets",
"fieldsets": [
{
"title": "-- Input images --",
"fields": [
"imageDir",
"maskDir"
]
},
{
"title": "-- Data Configuration --",
"fields": [
"useTiling",
"tileSize",
"numberClasses"
]
},
{
"title": "-- Training Configuration --",
"fields": [
"trainFraction",
"batchSize",
"learningRate",
"testEveryNSteps",
"balanceClasses",
"earlyStoppingEpochCount",
"convergenceTolerance",
"useIntensityScaling"
]
},
{
"title": "-- Augmentation Configuration --",
"fields": [
"useAugmentation",
"augmentationRotation",
"augmentationReflection",
"augmentationJitter",
"augmentationScale",
"augmentationNoise",
"augmentationBlurMaxSigma",
"augmentationIntensity"
]
}
]
}
]
}