def predictions_on_noise_levels( network, SNT_levels, nbr_images_to_evaluate=1000, particle_center_x_list=lambda: normal(0, 1, 1), particle_center_y_list=lambda: normal(0, 1, 1), particle_radius_list=lambda: uniform(1.5, 3, 1), particle_bessel_orders_list=lambda: [ [ randint(1, 3), ], ], particle_intensities_list=lambda: [ [ choice([-1, 1]) * uniform(.2, .6, 1), ], ], image_half_size=lambda: 25, image_background_level=lambda: uniform(.2, .8), signal_to_noise_ratio=lambda: uniform(10, 100), gradient_intensity=lambda: uniform(0, 1), gradient_direction=lambda: uniform(-pi, pi)): """ Function for making predictions on different noise levels Inputs: network to be evaluated, noise levels to evaluate on and parameters of the image generator(other than noise level) Number of images to evaluate on Outputs: predicted positions and target positions. """ image_shape = network.get_layer( index=0).get_config()['batch_input_shape'][1:] all_predictions = [] all_targets = [] for SNT_level in SNT_levels: ### Create an image generator image_parameters_function = lambda: deeptrack.get_image_parameters( particle_center_x_list=particle_center_x_list, particle_center_y_list=particle_center_y_list, particle_radius_list=particle_radius_list, particle_bessel_orders_list=particle_bessel_orders_list, particle_intensities_list=particle_intensities_list, image_half_size=image_half_size, image_background_level=image_background_level, signal_to_noise_ratio=lambda: SNT_level, gradient_intensity=gradient_intensity, gradient_direction=gradient_direction) image_generator = lambda: deeptrack.get_image_generator( image_parameters_function) ### Genereate images for evaluation images, targets = deeptrack.get_images_and_targets( image_generator, nbr_images_to_evaluate, image_shape=image_shape) all_targets.append(targets) predictions = network.predict(images) all_predictions.append(predictions) return all_predictions, all_targets
def generate_images_and_targets_from_noise_levels( network, SNT_levels, nbr_images_to_evaluate=1000, translation_distance=1, particle_radius_list=lambda: uniform(1.5, 3, 1), particle_bessel_orders_list=lambda: [ [ randint(1, 3), ], ], particle_intensities_list=lambda: [ [ choice([-1, 1]) * uniform(.2, .6, 1), ], ], image_half_size=lambda: 25, image_background_level=lambda: uniform(.2, .8), signal_to_noise_ratio=lambda: uniform(10, 100), gradient_intensity=lambda: uniform(0, 1), gradient_direction=lambda: uniform(-pi, pi)): """ Generates images of different noise levels and corresponding targets """ translation_distance = 1 particle_center_x_list = lambda: normal(0, translation_distance, translation_distance) particle_center_y_list = lambda: normal(0, translation_distance, translation_distance) image_shape = network.get_layer( index=0).get_config()['batch_input_shape'][1:] #all_predictions = [] all_targets = [] all_images = [] for SNT_level in SNT_levels: ### Create an image generator image_parameters_function = lambda: deeptrack.get_image_parameters( particle_center_x_list=particle_center_x_list, particle_center_y_list=particle_center_y_list, particle_radius_list=particle_radius_list, particle_bessel_orders_list=particle_bessel_orders_list, particle_intensities_list=particle_intensities_list, image_half_size=image_half_size, image_background_level=image_background_level, signal_to_noise_ratio=lambda: SNT_level, gradient_intensity=gradient_intensity, gradient_direction=gradient_direction) image_generator = lambda: deeptrack.get_image_generator( image_parameters_function) ### Genereate images for evaluation images, targets = deeptrack.get_images_and_targets( image_generator, nbr_images_to_evaluate, image_shape=image_shape) all_targets.append(targets) all_images.append(images) return all_targets, all_images
def evaluate_noise_levels( network, SNT_levels, nbr_images_to_evaluate=1000, particle_center_x_list = lambda : normal(0, 1, 1), particle_center_y_list=lambda : normal(0, 1, 1), particle_radius_list=lambda : uniform(1.5, 3, 1), particle_bessel_orders_list=lambda : [[randint(1, 3),], ], particle_intensities_list=lambda : [[choice([-1, 1]) * uniform(.2, .6, 1), ], ], image_half_size=lambda : 25, image_background_level=lambda : uniform(.2, .8), signal_to_noise_ratio=lambda : uniform(10, 100), gradient_intensity=lambda : uniform(0, 1), gradient_direction=lambda : uniform(-pi, pi)): """ Function for evaluating performance of network for different noise levels Inputs: network to be evaluated, noise levels to evaluate on and parameters of the image generator(other than noise level) Number of images to evaluate on Outputs: Loss,mae and mse for the various noise levels """ image_shape = network.get_layer(index=0).get_config()['batch_input_shape'][1:] losses = [] MSEs = [] MAEs = [] for SNT_level in SNT_levels: ### Create an image generator image_parameters_function = lambda : deeptrack.get_image_parameters( particle_center_x_list=particle_center_x_list, particle_center_y_list=particle_center_y_list, particle_radius_list=particle_radius_list, particle_bessel_orders_list=particle_bessel_orders_list, particle_intensities_list=particle_intensities_list, image_half_size=image_half_size, image_background_level=image_background_level, signal_to_noise_ratio= lambda: SNT_level, gradient_intensity=gradient_intensity, gradient_direction= gradient_direction) image_generator = lambda : deeptrack.get_image_generator(image_parameters_function) ### Genereate images for evaluation images, targets = deeptrack.get_images_and_targets(image_generator,nbr_images_to_evaluate,image_shape=image_shape) loss,mse,mae = network.evaluate(images,targets) ### Fix units and append to final results mse *= image_half_size()**2 #what happens if it is not a function? Silly error? mae *= image_half_size() losses.append(loss) MSEs.append(mse) MAEs.append(mae) return losses,MSEs,MAEs