Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# TODO: how to test this code?
# n_tiles_prev = list(n_tiles) # make a copy
tile_sizes_approx = np.array(x.shape) / np.array(n_tiles)
t = [i for i in np.argsort(tile_sizes_approx) if i in x_tiling_axis][-1]
n_tiles[t] *= 2
# n_tiles = self._limit_tiling(x.shape,n_tiles,net_axes_in_div_by)
# if all(np.array(n_tiles) == np.array(n_tiles_prev)):
# raise MemoryError("Tile limit exceeded. Memory occupied by another process (notebook)?")
if c >= 8:
raise MemoryError("Giving up increasing number of tiles. Memory occupied by another process (notebook)?")
print('Out of memory, retrying with n_tiles = %s' % str(_permute_n_tiles(n_tiles,undo=True)))
progress.total = _total_n_tiles(n_tiles)
c += 1
n_channel_predicted = self.config.n_channel_out * (2 if self.config.probabilistic else 1)
x.shape[channel_out] == n_channel_predicted or _raise(ValueError())
x = resizer.after(x, net_axes_out)
mean, scale = self._mean_and_scale_from_prediction(x,axis=channel_out)
# mean and scale have net_axes_out semantics
if normalizer.do_after and self.config.n_channel_in==self.config.n_channel_out:
mean, scale = normalizer.after(mean, scale, net_axes_out)
mean, scale = _permute_axes(mean,undo=True), _permute_axes(scale,undo=True)
# mean and scale have img_axes_out semantics
return mean, scale
print("Changing n_tiles to %s" % str(n_tiles))
if n_tiles is None:
n_tiles = [1]*img.ndim
try:
n_tiles = tuple(n_tiles)
img.ndim == len(n_tiles) or _raise(TypeError())
except TypeError:
raise ValueError("n_tiles must be an iterable of length %d" % img.ndim)
all(np.isscalar(t) and 1<=t and int(t)==t for t in n_tiles) or _raise(
ValueError("all values of n_tiles must be integer values >= 1"))
n_tiles = tuple(map(int,n_tiles))
n_tiles = _permute_n_tiles(n_tiles)
(all(n_tiles[i] == 1 for i in range(x.ndim) if i not in x_tiling_axis) or
_raise(ValueError("entry of n_tiles > 1 only allowed for axes '%s'" % tiling_axes)))
# n_tiles_limited = self._limit_tiling(x.shape,n_tiles,net_axes_in_div_by)
# if any(np.array(n_tiles) != np.array(n_tiles_limited)):
# print("Limiting n_tiles to %s" % str(_permute_n_tiles(n_tiles_limited,undo=True)))
# n_tiles = n_tiles_limited
n_tiles = list(n_tiles)
# normalize & resize
x = normalizer.before(x, net_axes_in)
x = resizer.before(x, net_axes_in, net_axes_in_div_by)
done = False
progress = Progress(_total_n_tiles(n_tiles),1)
c = 0
while not done:
try:
def train(self, X,Y, validation_data, **kwargs):
proj_axis = self.proj_params.axis
proj_axis = 1+axes_dict(self.config.axes)[proj_axis]
Y.shape[proj_axis] == 1 or _raise(ValueError())
Y = np.take(Y,0,axis=proj_axis)
try:
X_val, Y_val = validation_data
# Y_val.shape[proj_axis] == 1 or _raise(ValueError())
validation_data = X_val, np.take(Y_val,0,axis=proj_axis)
except:
pass
return super(ProjectionCARE, self).train(X,Y, validation_data, **kwargs)
# hack: move tiling axis around in the same way as the image was permuted by creating an array
return _permute_axes_n_tiles(np.empty(n,np.bool),undo=undo).shape
# to support old api: set scalar n_tiles value for the largest tiling axis
if np.isscalar(n_tiles) and int(n_tiles)==n_tiles and 1<=n_tiles:
largest_tiling_axis = [i for i in np.argsort(x.shape) if i in x_tiling_axis][-1]
_n_tiles = [n_tiles if i==largest_tiling_axis else 1 for i in range(x.ndim)]
n_tiles = _permute_n_tiles(_n_tiles,undo=True)
warnings.warn("n_tiles should be a tuple with an entry for each image axis")
print("Changing n_tiles to %s" % str(n_tiles))
if n_tiles is None:
n_tiles = [1]*img.ndim
try:
n_tiles = tuple(n_tiles)
img.ndim == len(n_tiles) or _raise(TypeError())
except TypeError:
raise ValueError("n_tiles must be an iterable of length %d" % img.ndim)
all(np.isscalar(t) and 1<=t and int(t)==t for t in n_tiles) or _raise(
ValueError("all values of n_tiles must be integer values >= 1"))
n_tiles = tuple(map(int,n_tiles))
n_tiles = _permute_n_tiles(n_tiles)
(all(n_tiles[i] == 1 for i in range(x.ndim) if i not in x_tiling_axis) or
_raise(ValueError("entry of n_tiles > 1 only allowed for axes '%s'" % tiling_axes)))
# n_tiles_limited = self._limit_tiling(x.shape,n_tiles,net_axes_in_div_by)
# if any(np.array(n_tiles) != np.array(n_tiles_limited)):
# print("Limiting n_tiles to %s" % str(_permute_n_tiles(n_tiles_limited,undo=True)))
# n_tiles = n_tiles_limited
n_tiles = list(n_tiles)
try:
return self._proj_params
except AttributeError:
# TODO: no need to be so cautious here, since there's now a dedicated ProjectionConfig class
p = {}
p['axis'] = vars(self.config).get('proj_axis', 'Z')
p['n_depth'] = int(vars(self.config).get('proj_n_depth', 4))
p['n_filt'] = int(vars(self.config).get('proj_n_filt', 8))
p['n_conv_per_depth'] = int(vars(self.config).get('proj_n_conv_per_depth', 1))
p['axis'] = axes_check_and_normalize(p['axis'],length=1)
ax = axes_dict(self.config.axes)
len(self.config.axes) == 4 or _raise(ValueError("model must take 3D input, but axes are {self.config.axes}.".format(self=self)))
ax[p['axis']] is not None or _raise(ValueError("projection axis {axis} not part of model axes {self.config.axes}".format(self=self,axis=p['axis'])))
self.config.axes[-1] == 'C' or _raise(ValueError())
(p['n_depth'] > 0 and p['n_filt'] > 0 and p['n_conv_per_depth'] > 0) or _raise(ValueError())
p['kern'] = tuple(vars(self.config).get('proj_kern', (3 if d==ax[p['axis']] else 3 for d in range(3))))
p['pool'] = tuple(vars(self.config).get('proj_pool', (1 if d==ax[p['axis']] else 2 for d in range(3))))
3 == len(p['pool']) == len(p['kern']) or _raise(ValueError())
all(isinstance(v,int) and v > 0 for v in p['kern']) or _raise(ValueError())
all(isinstance(v,int) and v > 0 for v in p['pool']) or _raise(ValueError())
self._proj_params = namedtuple('ProjectionParameters',p.keys())(*p.values())
return self._proj_params
def _cpp_star_dist(a, n_rays=32):
(np.isscalar(n_rays) and 0 < int(n_rays)) or _raise(ValueError())
return c_star_dist(a.astype(np.uint16,copy=False), int(n_rays))
def matching_dataset(y_true, y_pred, thresh=0.5, criterion='iou', by_image=False, show_progress=True, parallel=False):
len(y_true) == len(y_pred) or _raise(ValueError("y_true and y_pred must have the same length."))
return matching_dataset_lazy (
tuple(zip(y_true,y_pred)), thresh=thresh, criterion=criterion, by_image=by_image, show_progress=show_progress, parallel=parallel,
)
def _check_label_array(y, name=None, check_sequential=False):
err = ValueError("{label} must be an array of {integers}.".format(
label = 'labels' if name is None else name,
integers = ('sequential ' if check_sequential else '') + 'non-negative integers',
))
is_array_of_integers(y) or _raise(err)
if check_sequential:
label_are_sequential(y) or _raise(err)
else:
y.min() >= 0 or _raise(err)
return True
kernel_size=(3,3,3),
n_conv_per_depth=2,
activation="relu",
batch_norm=False,
dropout=0.0,
pool_size=(2,2,2),
n_channel_out=1,
residual=False,
prob_out=False,
eps_scale=1e-3):
""" TODO """
if last_activation is None:
raise ValueError("last activation has to be given (e.g. 'sigmoid', 'relu')!")
all((s % 2 == 1 for s in kernel_size)) or _raise(ValueError('kernel size should be odd in all dimensions.'))
channel_axis = -1 if backend_channels_last() else 1
n_dim = len(kernel_size)
conv = Conv2D if n_dim==2 else Conv3D
input = Input(input_shape, name = "input")
unet = unet_block(n_depth, n_filter_base, kernel_size,
activation=activation, dropout=dropout, batch_norm=batch_norm,
n_conv_per_depth=n_conv_per_depth, pool=pool_size)(input)
final = conv(n_channel_out, (1,)*n_dim, activation='linear')(unet)
if residual:
if not (n_channel_out == input_shape[-1] if backend_channels_last() else n_channel_out == input_shape[0]):
raise ValueError("number of input and output channels must be the same for a residual net.")
final = Add()([final, input])
done = False
while not done:
try:
if n_tiles == 1:
x = predict_direct(self.keras_model,x,channel_in=channel,channel_out=channel)
else:
overlap = tile_overlap(self.config.unet_n_depth, self.config.unet_kern_size)
x = predict_tiled(self.keras_model,x,channel_in=channel,channel_out=channel,
n_tiles=n_tiles,block_size=div_n,tile_overlap=overlap)
done = True
except tf.errors.ResourceExhaustedError:
n_tiles = max(4, 2*n_tiles)
print('Out of memory, retrying with n_tiles = %d' % n_tiles)
n_channel_predicted = self.config.n_channel_out * (2 if self.config.probabilistic else 1)
x.shape[channel] == n_channel_predicted or _raise(ValueError())
x = resizer.after(x,exclude=channel)
mean, scale = self._mean_and_scale_from_prediction(x,axis=channel)
if normalizer.do_after and self.config.n_channel_in==self.config.n_channel_out:
mean, scale = normalizer.after(mean, scale)
mean, scale = _permute_axes(mean,undo=True), _permute_axes(scale,undo=True)
return mean, scale