def test_sprites_color(self): (x, _), (_, _), _, _ = load_cifar10(raw=True) n = 500 x = x[:n] sprite = create_sprite(x) f_name = "test_cifar.jpg" path = os.path.join(ART_DATA_PATH, f_name) save_image(sprite, path) self.assertTrue(os.path.isfile(path)) os.remove(path) # Remove data added
def test_sprites_gray(self): # Get MNIST (x, _), (_, _), _, _ = load_mnist(raw=True) n = 100 x = x[:n] sprite = create_sprite(x) f_name = "test_sprite_mnist.png" path = os.path.join(ART_DATA_PATH, f_name) save_image(sprite, path) self.assertTrue(os.path.isfile(path)) os.remove(path) # Remove data added
def test_save_image(self): (x, _), (_, _), _, _ = load_mnist(raw=True) f_name = "image1.png" save_image(x[0], f_name) path = os.path.join(ART_DATA_PATH, f_name) self.assertTrue(os.path.isfile(path)) os.remove(path) f_name = "image2.jpg" save_image(x[1], f_name) path = os.path.join(ART_DATA_PATH, f_name) self.assertTrue(os.path.isfile(path)) os.remove(path) folder = "images123456" f_name_with_dir = os.path.join(folder, "image3.png") save_image(x[3], f_name_with_dir) path = os.path.join(ART_DATA_PATH, f_name_with_dir) self.assertTrue(os.path.isfile(path)) os.remove(path) os.rmdir(os.path.split(path)[0]) # Remove also test folder folder = os.path.join("images123456", "inner") f_name_with_dir = os.path.join(folder, "image4.png") save_image(x[3], f_name_with_dir) path_nested = os.path.join(ART_DATA_PATH, f_name_with_dir) self.assertTrue(os.path.isfile(path_nested)) os.remove(path_nested) os.rmdir(os.path.split(path_nested)[0]) # Remove inner test folder os.rmdir(os.path.split(path)[0]) # Remove also test folder
def visualize_clusters(self, x_raw: np.ndarray, save: bool = True, folder: str = ".", **kwargs) -> List[List[np.ndarray]]: """ This function creates the sprite/mosaic visualization for clusters. When save=True, it also stores a sprite (mosaic) per cluster in art.config.ART_DATA_PATH. :param x_raw: Images used to train the classifier (before pre-processing). :param save: Boolean specifying if image should be saved. :param folder: Directory where the sprites will be saved inside art.config.ART_DATA_PATH folder. :param kwargs: a dictionary of cluster-analysis-specific parameters. :return: Array with sprite images sprites_by_class, where sprites_by_class[i][j] contains the sprite of class i cluster j. """ self.set_params(**kwargs) if not self.clusters_by_class: self.cluster_activations() x_raw_by_class = self._segment_by_class(x_raw, self.y_train) x_raw_by_cluster: List[List[np.ndarray]] = [ # type: ignore [[] for _ in range(self.nb_clusters)] for _ in range(self.classifier.nb_classes) # type: ignore ] # Get all data in x_raw in the right cluster for n_class, cluster in enumerate(self.clusters_by_class): for j, assigned_cluster in enumerate(cluster): x_raw_by_cluster[n_class][assigned_cluster].append( x_raw_by_class[n_class][j]) # Now create sprites: sprites_by_class: List[List[np.ndarray]] = [ # type: ignore [[] for _ in range(self.nb_clusters)] for _ in range(self.classifier.nb_classes) # type: ignore ] for i, class_i in enumerate(x_raw_by_cluster): for j, images_cluster in enumerate(class_i): title = "Class_" + str(i) + "_cluster_" + str( j) + "_clusterSize_" + str(len(images_cluster)) f_name = title + ".png" f_name = os.path.join(folder, f_name) sprite = create_sprite(np.array(images_cluster)) if save: save_image(sprite, f_name) sprites_by_class[i][j] = sprite return sprites_by_class
def visualize_clusters(self, x_raw, save=True, folder='.', **kwargs): """ This function creates the sprite/mosaic visualization for clusters. When save=True, it also stores a sprite (mosaic) per cluster in DATA_PATH. :param x_raw: Images used to train the classifier (before pre-processing) :type x_raw: `np.darray` :param save: Boolean specifying if image should be saved :type save: `bool` :param folder: Directory where the sprites will be saved inside DATA_PATH folder :type folder: `str` :param kwargs: a dictionary of cluster-analysis-specific parameters :type kwargs: `dict` :return: sprites_by_class: Array with sprite images sprites_by_class, where sprites_by_class[i][j] contains the sprite of class i cluster j. :rtype: sprites_by_class: `np.ndarray` """ self.set_params(**kwargs) if not self.clusters_by_class: self.cluster_activations() x_raw_by_class = self._segment_by_class(x_raw, self.y_train) x_raw_by_cluster = [[[] for x in range(self.nb_clusters)] for y in range(self.classifier.nb_classes)] # Get all data in x_raw in the right cluster for n_class, cluster in enumerate(self.clusters_by_class): for j, assigned_cluster in enumerate(cluster): x_raw_by_cluster[n_class][assigned_cluster].append( x_raw_by_class[n_class][j]) # Now create sprites: sprites_by_class = [[[] for x in range(self.nb_clusters)] for y in range(self.classifier.nb_classes)] for i, class_i in enumerate(x_raw_by_cluster): for j, images_cluster in enumerate(class_i): title = 'Class_' + str(i) + '_cluster_' + str( j) + '_clusterSize_' + str(len(images_cluster)) f_name = title + '.png' f_name = os.path.join(folder, f_name) sprite = create_sprite(images_cluster) if save: save_image(sprite, f_name) sprites_by_class[i][j] = sprite return sprites_by_class