diff --git a/datasets/__pycache__/__init__.cpython-39.pyc b/datasets/__pycache__/__init__.cpython-39.pyc index 8d59b0e..c2a020e 100644 Binary files a/datasets/__pycache__/__init__.cpython-39.pyc and b/datasets/__pycache__/__init__.cpython-39.pyc differ diff --git a/datasets/__pycache__/mvtec.cpython-39.pyc b/datasets/__pycache__/mvtec.cpython-39.pyc index b8705a9..858b902 100644 Binary files a/datasets/__pycache__/mvtec.cpython-39.pyc and b/datasets/__pycache__/mvtec.cpython-39.pyc differ diff --git a/datasets/mvtec.py b/datasets/mvtec.py index 21f6285..84bafda 100644 --- a/datasets/mvtec.py +++ b/datasets/mvtec.py @@ -228,12 +228,12 @@ def get_image_data(self): anomaly_files = sorted(os.listdir(anomaly_path)) imgpaths_per_class[self.classname][anomaly] = [os.path.join(anomaly_path, x) for x in anomaly_files] - if self.split == DatasetSplit.TEST and anomaly != "good": - anomaly_mask_path = os.path.join(maskpath, anomaly) - anomaly_mask_files = sorted(os.listdir(anomaly_mask_path)) - maskpaths_per_class[self.classname][anomaly] = [os.path.join(anomaly_mask_path, x) for x in anomaly_mask_files] - else: - maskpaths_per_class[self.classname]["good"] = None + # if self.split == DatasetSplit.TEST and anomaly != "good": + # anomaly_mask_path = os.path.join(maskpath, anomaly) + # anomaly_mask_files = sorted(os.listdir(anomaly_mask_path)) + # maskpaths_per_class[self.classname][anomaly] = [os.path.join(anomaly_mask_path, x) for x in anomaly_mask_files] + # else: + # maskpaths_per_class[self.classname]["good"] = None data_to_iterate = [] for classname in sorted(imgpaths_per_class.keys()): @@ -241,7 +241,8 @@ def get_image_data(self): for i, image_path in enumerate(imgpaths_per_class[classname][anomaly]): data_tuple = [classname, anomaly, image_path] if self.split == DatasetSplit.TEST and anomaly != "good": - data_tuple.append(maskpaths_per_class[classname][anomaly][i]) + # data_tuple.append(maskpaths_per_class[classname][anomaly][i]) + data_tuple.append(None) else: data_tuple.append(None) data_to_iterate.append(data_tuple) diff --git a/glass.py b/glass.py index b9c3a32..8e7d03d 100644 --- a/glass.py +++ b/glass.py @@ -66,6 +66,7 @@ def load( svd=0, step=20, limit=392, + es_epoch=10, **kwargs, ): @@ -73,6 +74,8 @@ def load( self.layers_to_extract_from = layers_to_extract_from self.input_shape = input_shape self.device = device + self.es_epoch = es_epoch + assert es_epoch is not None, f"Please set early stopping epochs" self.forward_modules = torch.nn.ModuleDict({}) feature_aggregator = common.NetworkFeatureAggregator( @@ -258,6 +261,10 @@ def update_state_dict(): pbar_str1 = "" best_record = None + best_score = -1 + epoch_counter = 0 + best_state = None + with mlflow.start_run(): mlflow.log_param("meta_epochs", self.meta_epochs) mlflow.log_param("eval_epochs", self.eval_epochs) @@ -293,31 +300,30 @@ def update_state_dict(): if (i_epoch + 1) % self.eval_epochs == 0: images, scores, segmentations, labels_gt, masks_gt = self.predict(val_data) - image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max = self._evaluate(images, scores, segmentations, + # image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max = self._evaluate(images, scores, segmentations, + # labels_gt, masks_gt, name) + image_auroc, image_ap, img_threshold, img_f1_max = self._evaluate(images, scores, segmentations, labels_gt, masks_gt, name) mlflow.log_metric("img_auroc", image_auroc, step=i_epoch) - mlflow.log_metric("pixel_auroc", pixel_auroc, step=i_epoch) + # mlflow.log_metric("pixel_auroc", pixel_auroc, step=i_epoch) mlflow.log_metric("img_threshold", img_threshold, step=i_epoch) mlflow.log_metric("img_f1_max", img_f1_max, step=i_epoch) - # self.logger.logger.add_scalar("i-auroc", image_auroc, i_epoch) - # self.logger.logger.add_scalar("i-ap", image_ap, i_epoch) - # self.logger.logger.add_scalar("p-auroc", pixel_auroc, i_epoch) - # self.logger.logger.add_scalar("p-ap", pixel_ap, i_epoch) - # self.logger.logger.add_scalar("p-pro", pixel_pro, i_epoch) - eval_path = './results/eval/' + name + '/' train_path = './results/training/' + name + '/' if best_record is None: - best_record = [image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_f1_max, i_epoch] + # best_record = [image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_f1_max, i_epoch] + best_record = [image_auroc, image_ap, img_f1_max, i_epoch] ckpt_path_best = os.path.join(self.ckpt_dir, "ckpt_best_{}.pth".format(i_epoch)) torch.save(state_dict, ckpt_path_best) shutil.rmtree(eval_path, ignore_errors=True) shutil.copytree(train_path, eval_path) - elif image_auroc + pixel_auroc > best_record[0] + best_record[2]: - best_record = [image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_f1_max, i_epoch] + # elif image_auroc + pixel_auroc > best_record[0] + best_record[2]: + elif image_auroc > best_record[0]: + # best_record = [image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_f1_max, i_epoch] + best_record = [image_auroc, image_ap, img_f1_max, i_epoch] os.remove(ckpt_path_best) ckpt_path_best = os.path.join(self.ckpt_dir, "ckpt_best_{}.pth".format(i_epoch)) torch.save(state_dict, ckpt_path_best) @@ -325,12 +331,25 @@ def update_state_dict(): shutil.copytree(train_path, eval_path) pbar_str1 = f" IAUC:{round(image_auroc * 100, 2)}({round(best_record[0] * 100, 2)})" \ - f" PAUC:{round(pixel_auroc * 100, 2)}({round(best_record[2] * 100, 2)})" \ - f" IF1-max:{round(img_f1_max * 100, 2)}({round(best_record[5] * 100, 2)})" \ + f" PAUC: Do not have PAUC)" \ + f" IF1-max:{round(img_f1_max * 100, 2)}({round(best_record[2] * 100, 2)})" \ f" E:{i_epoch}({best_record[-1]})" + # f" PAUC:{round(pixel_auroc * 100, 2)}({round(best_record[2] * 100, 2)})" \ + pbar_str += pbar_str1 pbar.set_description_str(pbar_str) + # current_score = image_auroc*1 + pixel_auroc*0 + current_score = image_auroc*1 + if current_score - best_score > 0.1: + best_score = current_score + epoch_counter = 0 + else: + epoch_counter += 1 + if epoch_counter > self.es_epoch: + LOGGER.info(f"Early stopping triggered at epoch {i_epoch}") + break + torch.save(state_dict, ckpt_path_save) return best_record @@ -503,14 +522,17 @@ def tester(self, test_data, name): self.load_state_dict(state_dict, strict=False) images, scores, segmentations, labels_gt, masks_gt = self.predict(test_data) - image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max = self._evaluate(images, scores, segmentations, + # image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max = self._evaluate(images, scores, segmentations, + # labels_gt, masks_gt, name, path='eval') + image_auroc, image_ap, img_threshold, img_f1_max = self._evaluate(images, scores, segmentations, labels_gt, masks_gt, name, path='eval') epoch = int(ckpt_path[0].split('_')[-1].split('.')[0]) else: image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max, epoch = 0., 0., 0., 0., 0., 0., 0., -1. LOGGER.info("No ckpt file found!") - return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max, epoch + # return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max, epoch + return image_auroc, image_ap, img_threshold, img_f1_max, epoch def _evaluate(self, images, scores, segmentations, labels_gt, masks_gt, name, path='training'): scores = np.squeeze(np.array(scores)) @@ -530,23 +552,23 @@ def _evaluate(self, images, scores, segmentations, labels_gt, masks_gt, name, pa max_scores = np.max(segmentations) norm_segmentations = (segmentations - min_scores) / (max_scores - min_scores + 1e-10) - pixel_scores = metrics.compute_pixelwise_retrieval_metrics(norm_segmentations, masks_gt, path) - pixel_auroc = pixel_scores["auroc"] - pixel_ap = pixel_scores["ap"] - if path == 'eval': - try: - pixel_pro = metrics.compute_pro(np.squeeze(np.array(masks_gt)), norm_segmentations) + # pixel_scores = metrics.compute_pixelwise_retrieval_metrics(norm_segmentations, masks_gt, path) + # pixel_auroc = pixel_scores["auroc"] + # pixel_ap = pixel_scores["ap"] + # if path == 'eval': + # try: + # pixel_pro = metrics.compute_pro(np.squeeze(np.array(masks_gt)), norm_segmentations) - except: - pixel_pro = 0. - else: - pixel_pro = 0. + # except: + # pixel_pro = 0. + # else: + # pixel_pro = 0. - else: - pixel_auroc = -1. - pixel_ap = -1. - pixel_pro = -1. - return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro,img_threshold, img_f1_max + # else: + # pixel_auroc = -1. + # pixel_ap = -1. + # pixel_pro = -1. + # return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro,img_threshold, img_f1_max defects = np.array(images) targets = np.array(masks_gt) @@ -565,7 +587,8 @@ def _evaluate(self, images, scores, segmentations, labels_gt, masks_gt, name, pa utils.del_remake_dir(full_path, del_flag=False) cv2.imwrite(full_path + str(i + 1).zfill(3) + '.png', img_up) - return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max + # return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max + return image_auroc, image_ap, img_threshold, img_f1_max def predict(self, test_dataloader): """This function provides anomaly scores/maps for full dataloaders.""" @@ -604,7 +627,6 @@ def _predict(self, img): self.discriminator.eval() with torch.no_grad(): - patch_features, patch_shapes = self._embed(img, provide_patch_shapes=True, evaluation=True) if self.pre_proj > 0: patch_features = self.pre_projection(patch_features) @@ -622,3 +644,143 @@ def _predict(self, img): image_scores = image_scores.cpu().numpy() return list(image_scores), list(masks) + + def tta_evaluate(self, images, scores, segmentations, labels_gt, masks_gt, name, path='training'): + scores = np.squeeze(np.array(scores)) + img_min_scores = min(scores) + img_max_scores = max(scores) + norm_scores = (scores - img_min_scores) / (img_max_scores - img_min_scores + 1e-10) + + image_scores = metrics.compute_imagewise_retrieval_metrics(norm_scores, labels_gt, path) + image_auroc = image_scores["auroc"] + image_ap = image_scores["ap"] + + img_threshold, img_f1_max = metrics.compute_best_pr_re(labels_gt, norm_scores) + + if len(masks_gt) > 0: + segmentations = np.array(segmentations) + + target_height, target_width = images[0].shape[:2] + + segmentations = segmentations.astype(np.float32) + min_scores = np.min(segmentations) + max_scores = np.max(segmentations) + norm_segmentations = (segmentations - min_scores) / (max_scores - min_scores + 1e-10) + + norm_segmentations = (norm_segmentations * 255).astype(np.uint8) + + pixel_scores = metrics.compute_pixelwise_retrieval_metrics(norm_segmentations, masks_gt, path) + pixel_auroc = pixel_scores["auroc"] + pixel_ap = pixel_scores["ap"] + if path == 'eval': + try: + pixel_pro = metrics.compute_pro(np.squeeze(np.array(masks_gt)), norm_segmentations) + + except: + pixel_pro = 0. + else: + pixel_pro = 0. + + else: + pixel_auroc = -1. + pixel_ap = -1. + pixel_pro = -1. + return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro,img_threshold, img_f1_max + + defects = np.array(images) + targets = np.array(masks_gt) + for i in range(len(defects)): + defect = utils.torch_format_2_numpy_img(defects[i]) + target = utils.torch_format_2_numpy_img(targets[i]) + + resized_mask = cv2.resize(norm_segmentations[i], (target_width, target_height), interpolation=cv2.INTER_LINEAR) + resized_mask = resized_mask.astype(np.uint8) + mask = cv2.cvtColor(resized_mask, cv2.COLOR_GRAY2BGR) + + mask = (mask * 255).astype('uint8') + mask = cv2.applyColorMap(mask, cv2.COLORMAP_JET) + + img_up = np.hstack([defect, target, mask]) + img_up = cv2.resize(img_up, (256 * 3, 256)) + full_path = './results/' + path + '/' + name + '/' + utils.del_remake_dir(full_path, del_flag=False) + cv2.imwrite(full_path + str(i + 1).zfill(3) + '.png', img_up) + + return image_auroc, image_ap, pixel_auroc, pixel_ap, pixel_pro, img_threshold, img_f1_max + + def tta_predict(self, test_dataloader): + """This function provides anomaly scores/maps for full dataloaders.""" + self.forward_modules.eval() + + img_paths = [] + images = [] + scores = [] + masks = [] + labels_gt = [] + masks_gt = [] + + with tqdm.tqdm(test_dataloader, desc="Inferring...", leave=False, unit='batch') as data_iterator: + for data in data_iterator: + if isinstance(data, dict): + labels_gt.extend(data["is_anomaly"].numpy().tolist()) + if data.get("mask_gt", None) is not None: + masks_gt.extend(data["mask_gt"].numpy().tolist()) + image = data["image"] + images.extend(image.numpy().tolist()) + img_paths.extend(data["image_path"]) + _scores, _masks = self.tta__predict(image) + for score, mask in zip(_scores, _masks): + scores.append(score) + masks.append(mask) + + return images, scores, masks, labels_gt, masks_gt + + def tta__predict(self, img): + """Infer score and mask for a batch of images with TTA (仅修改此函数).""" + self.forward_modules.eval() + if self.pre_proj > 0: + self.pre_projection.eval() + self.discriminator.eval() + + img = img.to(self.device) if not img.is_cuda else img + + tta_transforms = [ + {'name': 'original', 'transform': lambda x: x, 'reverse': lambda x: x}, + {'name': 'h_flip', 'transform': lambda x: x.flip(3), 'reverse': lambda x: x.flip(3)}, + {'name': 'v_flip', 'transform': lambda x: x.flip(2), 'reverse': lambda x: x.flip(2)} + ] + + all_scores = [] + all_masks = [] + + with torch.no_grad(): + for aug in tta_transforms: + transformed_img = aug['transform'](img) + + patch_features, patch_shapes = self._embed(transformed_img, provide_patch_shapes=True, evaluation=True) + + if self.pre_proj > 0: + patch_features = self.pre_projection(patch_features) + patch_features = patch_features[0] if len(patch_features)==2 else patch_features + + patch_scores = self.discriminator(patch_features) + + patch_scores_unpatched = self.patch_maker.unpatch_scores(patch_scores, batchsize=img.shape[0]) + scales = patch_shapes[0] + + score_tensor = patch_scores_unpatched.reshape(img.shape[0], scales[0], scales[1]) + + masks = self.anomaly_segmentor.convert_to_segmentation(score_tensor) + if isinstance(masks, list): + masks = torch.stack([torch.from_numpy(m).to(self.device) for m in masks]) + + reversed_masks = aug['reverse'](masks.unsqueeze(1)).squeeze(1) + + image_scores = self.patch_maker.score(patch_scores_unpatched) + all_scores.append(image_scores) + all_masks.append(reversed_masks) + + avg_scores = torch.mean(torch.stack(all_scores), dim=0) + avg_masks = torch.mean(torch.stack(all_masks), dim=0) + + return avg_scores.cpu().numpy().tolist(), avg_masks.cpu().numpy().tolist() \ No newline at end of file diff --git a/main.py b/main.py index 927a9af..df27f65 100644 --- a/main.py +++ b/main.py @@ -27,6 +27,7 @@ def main(**kwargs): @main.command("net") +@click.option("--es_epoch", type=int, default=10, help="Early stopping epochs") @click.option("--dsc_margin", type=float, default=0.5) @click.option("--train_backbone", is_flag=True) @click.option("--backbone_names", "-b", type=str, multiple=True, default=[]) @@ -68,6 +69,7 @@ def net( svd, step, limit, + es_epoch, ): backbone_names = list(backbone_names) if len(backbone_names) > 1: @@ -110,6 +112,7 @@ def get_glass(input_shape, device): svd=svd, step=step, limit=limit, + es_epoch=es_epoch, ) glasses.append(glass_inst.to(device)) return glasses @@ -304,15 +307,26 @@ def run( df = pd.concat([df, pd.DataFrame(row_dist, index=[0])]) if type(flag) != int: - i_auroc, i_ap, p_auroc, p_ap, p_pro, img_threshold, i_f1_max, epoch = GLASS.tester(dataloaders["testing"], dataset_name) + # i_auroc, i_ap, p_auroc, p_ap, p_pro, img_threshold, i_f1_max, epoch = GLASS.tester(dataloaders["testing"], dataset_name) + i_auroc, i_ap, img_threshold, i_f1_max, epoch = GLASS.tester(dataloaders["testing"], dataset_name) + # result_collect.append( + # { + # "dataset_name": dataset_name, + # "image_auroc": i_auroc, + # "image_ap": i_ap, + # "pixel_auroc": p_auroc, + # "pixel_ap": p_ap, + # "pixel_pro": p_pro, + # "image_f1_max": i_f1_max, + # "f1_max_threshold": img_threshold, + # "best_epoch": epoch, + # } + # ) result_collect.append( { "dataset_name": dataset_name, "image_auroc": i_auroc, "image_ap": i_ap, - "pixel_auroc": p_auroc, - "pixel_ap": p_ap, - "pixel_pro": p_pro, "image_f1_max": i_f1_max, "f1_max_threshold": img_threshold, "best_epoch": epoch, diff --git a/run_glass.ipynb b/run_glass.ipynb index f2e16d1..c6035c7 100644 --- a/run_glass.ipynb +++ b/run_glass.ipynb @@ -159,6 +159,4135 @@ "pip install -r requirements.txt" ] }, + { + "cell_type": "markdown", + "id": "db0bae8a", + "metadata": {}, + "source": [ + "### Standardizing datasets" + ] + }, + { + "cell_type": "markdown", + "id": "e444b1e8", + "metadata": {}, + "source": [ + "***Firstly, you should check if the dataset directory exists***" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9b8a5828", + "metadata": {}, + "outputs": [ + { + "ename": "AssertionError", + "evalue": "ground truth masks do not exist: data/mvtec_ad/bottle/ground_truth, please create masks", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 14\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mexists(dataset_path), \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdataset root directory does not exist: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdataset_path\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mexists(image_folder), \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtest set path does not exist: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mimage_folder\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m---> 14\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mexists(mask_folder), \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mground truth masks do not exist: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmask_folder\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, please create masks\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mexists(fg_mask_folder), \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mforeground masks do not exist: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfg_mask_folder\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, please create foreground masks\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "\u001b[0;31mAssertionError\u001b[0m: ground truth masks do not exist: data/mvtec_ad/bottle/ground_truth, please create masks" + ] + } + ], + "source": [ + "import os\n", + "import cv2\n", + "import numpy as np\n", + "from tqdm import tqdm\n", + "\n", + "# Set dataset path\n", + "dataset_path = \"data/mvtec_ad/bottle\" # The dataset root directory\n", + "image_folder = os.path.join(dataset_path, \"test\") # Path to the test set\n", + "mask_folder = os.path.join(dataset_path, \"ground_truth\") # Path to store ground truth masks\n", + "fg_mask_folder = os.path.join(dataset_path, \"fg_mask\")\n", + "\n", + "assert os.path.exists(dataset_path), f\"dataset root directory does not exist: {dataset_path}\"\n", + "assert os.path.exists(image_folder), f\"test set path does not exist: {image_folder}\"\n", + "assert os.path.exists(mask_folder), f\"ground truth masks do not exist: {mask_folder}, please create masks\"\n", + "assert os.path.exists(fg_mask_folder), f\"foreground masks do not exist: {fg_mask_folder}, please create foreground masks\"" + ] + }, + { + "cell_type": "markdown", + "id": "c26c30bc", + "metadata": {}, + "source": [ + "***if ground truth masks does not exist, please run the follow cell***" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5ebdadcf", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 40%|████ | 8/20 [00:00<00:00, 40.82it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/007.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/004.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/000.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/001.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/006.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/014.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/017.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/003.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/012.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/016.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 100%|██████████| 20/20 [00:00<00:00, 44.19it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/018.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/011.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/002.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/009.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/015.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/013.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/005.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/008.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/019.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_large/010.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 23%|██▎ | 5/22 [00:00<00:00, 46.92it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/007.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/004.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/021.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/000.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/001.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/006.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/014.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/017.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/003.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 68%|██████▊ | 15/22 [00:00<00:00, 42.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/012.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/016.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/018.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/011.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/002.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/009.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/015.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/020.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/013.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 100%|██████████| 22/22 [00:00<00:00, 41.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/005.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/008.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/019.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/broken_small/010.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 24%|██▍ | 5/21 [00:00<00:00, 44.17it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/007.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/004.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/000.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/001.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/006.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/014.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/017.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/003.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/012.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 48%|████▊ | 10/21 [00:00<00:00, 39.88it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/016.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/018.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/011.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/002.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 71%|███████▏ | 15/21 [00:00<00:00, 37.69it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/009.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/015.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/020.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/013.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing images: 100%|██████████| 21/21 [00:00<00:00, 37.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/005.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/008.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/019.png\n", + "Generated mask: data/mvtec_ad/bottle/ground_truth/contamination/010.png\n", + "All masks have been generated and saved\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "# function to generate the ground truth masks\n", + "def generate_mask(image_path):\n", + " img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)\n", + " \n", + " blurred = cv2.GaussianBlur(img, (5, 5), 0)\n", + " edges = cv2.Canny(blurred, threshold1=30, threshold2=150)\n", + " _, mask = cv2.threshold(edges, 10, 225, cv2.THRESH_BINARY)\n", + " return mask\n", + "\n", + "if not os.path.exists(mask_folder):\n", + " os.mkdir(mask_folder)\n", + " print(f\"Create ground truth directory: {mask_folder}\")\n", + "\n", + "# set the types of anomaly\n", + "anomaly_types = [\"broken_large\", \"broken_small\", \"contamination\"]\n", + "\n", + "for i in anomaly_types:\n", + " anomaly_folder = os.path.join(image_folder, i)\n", + " image_files = [f for f in os.listdir(anomaly_folder) if f.endswith(('.png', '.jpg', '.jpeg'))]\n", + " assert len(image_files) > 0, f\"No images found in the test folder: {anomaly_folder}\"\n", + "\n", + " for image_file in tqdm(image_files, desc=\"Processing images\"):\n", + " img_path = os.path.join(anomaly_folder, image_file)\n", + " mask_drectory = os.path.join(mask_folder, i)\n", + " mask_path = os.path.join(mask_drectory, image_file)\n", + "\n", + " if not os.path.exists(mask_drectory):\n", + " os.mkdir(mask_drectory)\n", + "\n", + " mask = generate_mask(img_path)\n", + " cv2.imwrite(mask_path, mask)\n", + " print(f\"Generated mask: {mask_path}\")\n", + "\n", + "print(\"All masks have been generated and saved\")\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "a5cd4219", + "metadata": {}, + "source": [ + "***if foreground masks does not exist, please run the follow cell***" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "b3b8bb5e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 3%|▎ | 6/209 [00:00<00:08, 24.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/007.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/204.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/116.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/130.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/004.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/136.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 4%|▍ | 9/209 [00:00<00:08, 23.78it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/031.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/096.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/097.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/101.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/150.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 7%|▋ | 15/209 [00:00<00:08, 22.31it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/021.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/065.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/026.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/087.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/115.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 9%|▊ | 18/209 [00:00<00:08, 22.18it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/188.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/048.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/106.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/145.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 11%|█▏ | 24/209 [00:01<00:08, 21.06it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/120.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/168.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/102.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/186.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/076.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 14%|█▍ | 30/209 [00:01<00:08, 20.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/070.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/033.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/083.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/139.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/196.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 16%|█▌ | 33/209 [00:01<00:08, 20.87it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/152.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/121.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/067.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/135.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/158.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 19%|█▊ | 39/209 [00:01<00:07, 21.69it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/193.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/000.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/047.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/066.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/154.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 22%|██▏ | 45/209 [00:02<00:07, 22.00it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/143.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/201.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/155.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/085.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/172.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 23%|██▎ | 48/209 [00:02<00:07, 21.51it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/114.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/023.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/043.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/157.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/163.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 26%|██▌ | 54/209 [00:02<00:07, 21.82it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/041.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/178.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/086.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/049.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/090.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 27%|██▋ | 57/209 [00:02<00:06, 21.89it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/170.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/133.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/050.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/103.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 30%|██▉ | 62/209 [00:02<00:07, 18.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/082.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/045.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/001.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/051.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 32%|███▏ | 66/209 [00:03<00:07, 17.90it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/039.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/113.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/153.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/078.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 34%|███▍ | 72/209 [00:03<00:06, 19.79it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/006.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/175.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/068.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/108.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/118.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 36%|███▋ | 76/209 [00:03<00:07, 18.48it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/053.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/129.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/088.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/042.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 38%|███▊ | 80/209 [00:03<00:07, 17.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/034.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/173.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/069.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/109.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 41%|████ | 85/209 [00:04<00:06, 18.91it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/127.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/110.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/061.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/105.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/072.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 43%|████▎ | 89/209 [00:04<00:06, 18.54it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/092.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/014.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/162.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/199.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 44%|████▍ | 93/209 [00:04<00:06, 18.68it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/054.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/124.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/181.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/060.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 47%|████▋ | 98/209 [00:04<00:05, 20.16it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/197.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/035.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/185.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/179.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/174.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 48%|████▊ | 101/209 [00:04<00:05, 20.70it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/111.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/081.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/123.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/017.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/080.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 51%|█████ | 107/209 [00:05<00:04, 20.82it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/003.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/029.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/112.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/057.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/012.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 54%|█████▍ | 113/209 [00:05<00:04, 21.19it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/030.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/016.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/176.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/024.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/028.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 56%|█████▌ | 116/209 [00:05<00:04, 19.33it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/077.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/018.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/167.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/142.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 58%|█████▊ | 121/209 [00:05<00:04, 19.92it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/038.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/104.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/073.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/099.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/119.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 61%|██████ | 127/209 [00:06<00:03, 20.92it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/071.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/079.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/093.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/149.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/125.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 62%|██████▏ | 130/209 [00:06<00:03, 20.77it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/011.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/208.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/107.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/147.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/025.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 65%|██████▌ | 136/209 [00:06<00:03, 20.78it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/205.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/137.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/140.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/032.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 67%|██████▋ | 139/209 [00:06<00:03, 20.94it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/084.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/056.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/002.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/132.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/200.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 69%|██████▉ | 145/209 [00:07<00:02, 23.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/100.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/131.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/009.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/195.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/040.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/151.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 72%|███████▏ | 151/209 [00:07<00:02, 22.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/184.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/015.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/122.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/044.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/134.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 75%|███████▌ | 157/209 [00:07<00:02, 22.09it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/190.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/020.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/138.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/180.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/063.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 77%|███████▋ | 160/209 [00:07<00:02, 21.49it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/146.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/198.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/194.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/203.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/202.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 79%|███████▉ | 166/209 [00:08<00:02, 20.98it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/206.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/058.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/177.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/171.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/182.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 82%|████████▏ | 172/209 [00:08<00:01, 20.68it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/095.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/013.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/046.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/165.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/027.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 84%|████████▎ | 175/209 [00:08<00:01, 20.92it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/161.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/207.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/062.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/098.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 86%|████████▌ | 180/209 [00:08<00:01, 18.94it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/117.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/005.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/159.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/055.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 88%|████████▊ | 184/209 [00:08<00:01, 18.86it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/091.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/022.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/008.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/183.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 89%|████████▉ | 187/209 [00:09<00:01, 19.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/160.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/148.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/052.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/128.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/144.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 92%|█████████▏| 193/209 [00:09<00:00, 21.47it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/059.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/191.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/064.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/019.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/037.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/169.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 95%|█████████▌| 199/209 [00:09<00:00, 21.99it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/166.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/074.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/010.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/189.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/126.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 98%|█████████▊| 205/209 [00:09<00:00, 22.45it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/156.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/094.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/192.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/141.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/089.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 100%|██████████| 209/209 [00:10<00:00, 20.70it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/187.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/164.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/075.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/036.png\n", + "All masks have been generated and saved,\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "if not os.path.exists(fg_mask_folder):\n", + " os.mkdir(fg_mask_folder)\n", + " print(f\"Created foreground mask folder: {fg_mask_folder}\")\n", + "\n", + "def generate_foreground_mask(image_path, output_path, filter_size=7):\n", + " image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)\n", + " if image is None:\n", + " raise ValueError(\"Can not read the image\")\n", + "\n", + " _, mask = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)\n", + "\n", + " h, w = mask.shape\n", + " center = mask[h//2, w//2]\n", + " mask = cv2.bitwise_not(mask) if center == 0 else mask\n", + " mask = cv2.medianBlur(mask, filter_size)\n", + "\n", + " cv2.imwrite(output_path, mask)\n", + " print(f\"Generated mask: {output_path}\")\n", + "\n", + "image_path = os.path.join(dataset_path, \"train/good\")\n", + "image_files = [f for f in os.listdir(image_path) if f.endswith(('.png', '.jpg', '.jpeg'))]\n", + "assert len(image_files) > 0, f\"No images found in: {image_path}\"\n", + "\n", + "masks = []\n", + "\n", + "for img in tqdm(image_files, desc=\"Processing Images\"):\n", + " mask_path = os.path.join(fg_mask_folder, img)\n", + " masks.append(mask_path)\n", + " img_path = os.path.join(image_path, img)\n", + " generate_foreground_mask(img_path, mask_path)\n", + "\n", + "print(\"All masks have been generated and saved,\")\n", + "\n", + "from IPython.display import Image, display\n", + "for i in range(3): # change this number to set how many figures you can see\n", + " display(Image(masks[i]))" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "id": "2e6c7602", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 3%|▎ | 6/209 [00:00<00:07, 25.89it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/007.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/204.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/116.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/130.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/004.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/136.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 6%|▌ | 12/209 [00:00<00:07, 25.94it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/031.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/096.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/097.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/101.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/150.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/021.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 9%|▊ | 18/209 [00:00<00:07, 26.24it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/065.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/026.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/087.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/115.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/188.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/048.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 10%|█ | 21/209 [00:00<00:07, 24.12it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/106.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/145.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/120.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/168.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/102.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 11%|█▏ | 24/209 [00:00<00:08, 22.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/186.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/076.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/070.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 14%|█▍ | 30/209 [00:01<00:09, 18.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/033.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/083.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/139.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/196.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 15%|█▌ | 32/209 [00:01<00:10, 16.34it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/152.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/121.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/067.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 17%|█▋ | 36/209 [00:01<00:10, 16.29it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/135.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/158.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/193.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/000.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 19%|█▉ | 40/209 [00:02<00:10, 16.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/047.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/066.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/154.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/143.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 21%|██ | 44/209 [00:02<00:09, 17.08it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/201.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/155.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/085.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/172.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 23%|██▎ | 48/209 [00:02<00:09, 17.38it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/114.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/023.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/043.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/157.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 25%|██▍ | 52/209 [00:02<00:09, 16.98it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/163.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/041.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/178.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/086.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 27%|██▋ | 56/209 [00:02<00:09, 16.91it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/049.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/090.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/170.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/133.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 29%|██▊ | 60/209 [00:03<00:08, 16.82it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/050.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/103.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/082.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/045.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 31%|███ | 64/209 [00:03<00:08, 16.38it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/001.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/051.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/039.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/113.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 33%|███▎ | 68/209 [00:03<00:08, 16.61it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/153.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/078.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/006.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/175.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 34%|███▍ | 72/209 [00:03<00:08, 16.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/068.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/108.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/118.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/053.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 37%|███▋ | 77/209 [00:04<00:07, 17.99it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/129.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/088.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/042.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/034.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 38%|███▊ | 79/209 [00:04<00:07, 16.50it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/173.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/069.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/109.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 40%|███▉ | 83/209 [00:04<00:08, 15.71it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/127.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/110.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/061.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/105.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 42%|████▏ | 87/209 [00:04<00:07, 16.89it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/072.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/092.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/014.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/162.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 44%|████▎ | 91/209 [00:05<00:06, 16.92it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/199.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/054.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/124.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/181.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 45%|████▌ | 95/209 [00:05<00:06, 17.32it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/060.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/197.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/035.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/185.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 47%|████▋ | 99/209 [00:05<00:06, 17.49it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/179.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/174.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/111.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/081.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 49%|████▉ | 103/209 [00:05<00:06, 16.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/123.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/017.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/080.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/003.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 51%|█████ | 107/209 [00:05<00:05, 17.21it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/029.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/112.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/057.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/012.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 54%|█████▎ | 112/209 [00:06<00:05, 17.80it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/030.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/016.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/176.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/024.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 56%|█████▌ | 116/209 [00:06<00:05, 17.84it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/028.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/077.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/018.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/167.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 57%|█████▋ | 120/209 [00:06<00:05, 17.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/142.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/038.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/104.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/073.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 59%|█████▉ | 124/209 [00:06<00:04, 17.39it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/099.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/119.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/071.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/079.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 60%|██████ | 126/209 [00:07<00:05, 16.27it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/093.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/149.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/125.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 62%|██████▏ | 130/209 [00:07<00:05, 15.48it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/011.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/208.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/107.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/147.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 65%|██████▍ | 135/209 [00:07<00:04, 16.65it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/025.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/205.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/137.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/140.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 67%|██████▋ | 139/209 [00:07<00:04, 17.45it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/032.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/084.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/056.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/002.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 68%|██████▊ | 143/209 [00:08<00:03, 16.96it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/132.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/200.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/100.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/131.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 70%|███████ | 147/209 [00:08<00:03, 16.93it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/009.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/195.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/040.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/151.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 72%|███████▏ | 151/209 [00:08<00:03, 16.61it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/184.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/015.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/122.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/044.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 74%|███████▍ | 155/209 [00:08<00:03, 16.17it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/134.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/190.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/020.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/138.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 77%|███████▋ | 160/209 [00:09<00:02, 18.35it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/180.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/063.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/146.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/198.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/194.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 78%|███████▊ | 164/209 [00:09<00:02, 17.55it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/203.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/202.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/206.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/058.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 80%|████████ | 168/209 [00:09<00:02, 17.75it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/177.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/171.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/182.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/095.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 82%|████████▏ | 172/209 [00:09<00:02, 17.52it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/013.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/046.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/165.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/027.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 83%|████████▎ | 174/209 [00:09<00:02, 15.76it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/161.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/207.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/062.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 85%|████████▌ | 178/209 [00:10<00:02, 14.56it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/098.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/117.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/005.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/159.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 87%|████████▋ | 182/209 [00:10<00:01, 15.18it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/055.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/091.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/022.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/008.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 89%|████████▉ | 186/209 [00:10<00:01, 15.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/183.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/160.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/148.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/052.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 91%|█████████ | 190/209 [00:10<00:01, 15.91it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/128.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/144.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/059.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/191.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 93%|█████████▎| 194/209 [00:11<00:00, 15.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/064.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/019.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/037.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 94%|█████████▍| 196/209 [00:11<00:00, 15.00it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/169.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/166.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/074.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 96%|█████████▌| 200/209 [00:11<00:00, 14.75it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/010.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/189.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/126.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 98%|█████████▊| 204/209 [00:11<00:00, 15.60it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/156.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/094.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/192.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/141.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 100%|█████████▉| 208/209 [00:12<00:00, 16.10it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/089.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/187.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/164.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/075.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 100%|██████████| 209/209 [00:12<00:00, 17.14it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/036.png\n", + "All masks have been generated and saved,\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "if not os.path.exists(fg_mask_folder):\n", + " os.mkdir(fg_mask_folder)\n", + " print(f\"Created foreground mask folder: {fg_mask_folder}\")\n", + "\n", + "def get_background_color(image):\n", + " hist = cv2.calcHist([image], [0], None, [256], [0, 256])\n", + " background_color = np.argmax(hist)\n", + " return background_color\n", + "\n", + "def get_background_threshold(image, scale_factor=0.5):\n", + " std_dev = np.std(image)\n", + " threshold = std_dev * scale_factor\n", + " return int(threshold)\n", + "\n", + "def generate_foreground_mask(image_path, output_path, filter_size=21):\n", + " image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)\n", + " if image is None:\n", + " raise ValueError(\"Can not read the image\")\n", + "\n", + " mask = np.ones_like(image, dtype=np.uint8) * 255\n", + " bg_color = get_background_color(image)\n", + " bg_threshold = get_background_threshold(image)\n", + "\n", + " diff = np.abs(image.astype(np.int16) - bg_color)\n", + " mask &= np.uint8(diff > bg_threshold) * 255\n", + "\n", + " mask = cv2.medianBlur(mask, filter_size)\n", + "\n", + " cv2.imwrite(output_path, mask)\n", + " print(f\"Generated mask: {output_path}\")\n", + "\n", + "image_path = os.path.join(dataset_path, \"train/good\")\n", + "image_files = [f for f in os.listdir(image_path) if f.endswith(('.png', '.jpg', '.jpeg'))]\n", + "assert len(image_files) > 0, f\"No images found in: {image_path}\"\n", + "\n", + "masks = []\n", + "\n", + "for img in tqdm(image_files, desc=\"Processing Images\"):\n", + " mask_path = os.path.join(fg_mask_folder, img)\n", + " masks.append(mask_path)\n", + " img_path = os.path.join(image_path, img)\n", + " generate_foreground_mask(img_path, mask_path)\n", + "\n", + "print(\"All masks have been generated and saved,\")\n", + "\n", + "from IPython.display import Image, display\n", + "for i in range(3): # change this number to set how many figures you can see\n", + " display(Image(masks[i]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c42f90f1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 0%| | 1/209 [00:00<00:50, 4.11it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/007.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 1%| | 2/209 [00:00<00:48, 4.29it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/204.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 1%|▏ | 3/209 [00:00<00:48, 4.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/116.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 2%|▏ | 4/209 [00:01<00:56, 3.60it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/130.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 3%|▎ | 6/209 [00:01<00:47, 4.26it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/004.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/136.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 4%|▍ | 8/209 [00:01<00:41, 4.89it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/031.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/096.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 4%|▍ | 9/209 [00:02<00:39, 5.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/097.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/101.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 6%|▌ | 12/209 [00:02<00:37, 5.20it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/150.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/021.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 7%|▋ | 14/209 [00:02<00:36, 5.33it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/065.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/026.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 8%|▊ | 16/209 [00:03<00:36, 5.33it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/087.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/115.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 9%|▊ | 18/209 [00:03<00:34, 5.60it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/188.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/048.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 10%|▉ | 20/209 [00:04<00:34, 5.40it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/106.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/145.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 10%|█ | 21/209 [00:04<00:35, 5.31it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/120.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 11%|█ | 22/209 [00:04<00:36, 5.06it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/168.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 11%|█▏ | 24/209 [00:04<00:35, 5.24it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/102.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/186.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 12%|█▏ | 26/209 [00:05<00:39, 4.69it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/076.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/070.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 13%|█▎ | 27/209 [00:05<00:38, 4.68it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/033.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 13%|█▎ | 28/209 [00:05<00:39, 4.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/083.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 14%|█▍ | 30/209 [00:06<00:38, 4.70it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/139.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/196.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 15%|█▍ | 31/209 [00:06<00:36, 4.84it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/152.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 15%|█▌ | 32/209 [00:06<00:37, 4.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/121.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 16%|█▌ | 33/209 [00:06<00:37, 4.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/067.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 17%|█▋ | 35/209 [00:07<00:36, 4.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/135.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/158.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 18%|█▊ | 37/209 [00:07<00:33, 5.15it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/193.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/000.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 18%|█▊ | 38/209 [00:07<00:32, 5.33it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/047.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 19%|█▉ | 40/209 [00:08<00:32, 5.17it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/066.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/154.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 20%|█▉ | 41/209 [00:08<00:36, 4.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/143.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 20%|██ | 42/209 [00:08<00:36, 4.52it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/201.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 21%|██ | 43/209 [00:08<00:36, 4.49it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/155.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 21%|██ | 44/209 [00:09<00:36, 4.47it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/085.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 22%|██▏ | 46/209 [00:09<00:35, 4.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/172.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/114.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 22%|██▏ | 47/209 [00:09<00:36, 4.46it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/023.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 23%|██▎ | 49/209 [00:10<00:34, 4.63it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/043.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/157.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 24%|██▍ | 50/209 [00:10<00:34, 4.61it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/163.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 25%|██▍ | 52/209 [00:10<00:32, 4.84it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/041.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/178.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 25%|██▌ | 53/209 [00:11<00:31, 4.90it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/086.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 26%|██▋ | 55/209 [00:11<00:30, 5.08it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/049.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/090.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 27%|██▋ | 56/209 [00:11<00:32, 4.76it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/170.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 27%|██▋ | 57/209 [00:11<00:32, 4.73it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/133.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 28%|██▊ | 58/209 [00:12<00:31, 4.74it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/050.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 28%|██▊ | 59/209 [00:12<00:32, 4.69it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/103.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 29%|██▉ | 61/209 [00:12<00:30, 4.89it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/082.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/045.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 30%|███ | 63/209 [00:13<00:29, 4.99it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/001.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/051.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 31%|███ | 64/209 [00:13<00:29, 4.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/039.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 31%|███ | 65/209 [00:13<00:30, 4.78it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/113.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 32%|███▏ | 67/209 [00:13<00:30, 4.71it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/153.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/078.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 33%|███▎ | 68/209 [00:14<00:29, 4.84it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/006.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 33%|███▎ | 70/209 [00:14<00:28, 4.86it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/175.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/068.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 34%|███▍ | 72/209 [00:15<00:28, 4.77it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/108.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/118.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 35%|███▌ | 74/209 [00:15<00:26, 5.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/053.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/129.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 36%|███▋ | 76/209 [00:15<00:25, 5.29it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/088.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/042.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 37%|███▋ | 78/209 [00:16<00:23, 5.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/034.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/173.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 38%|███▊ | 80/209 [00:16<00:23, 5.59it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/069.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/109.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 39%|███▉ | 81/209 [00:16<00:23, 5.55it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/127.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 39%|███▉ | 82/209 [00:16<00:23, 5.33it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/110.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 40%|███▉ | 83/209 [00:17<00:24, 5.20it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/061.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 41%|████ | 85/209 [00:17<00:23, 5.36it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/105.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/072.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 42%|████▏ | 87/209 [00:17<00:22, 5.44it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/092.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/014.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 42%|████▏ | 88/209 [00:18<00:23, 5.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/162.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 43%|████▎ | 90/209 [00:18<00:23, 5.17it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/199.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/054.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 44%|████▎ | 91/209 [00:18<00:23, 5.04it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/124.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 44%|████▍ | 93/209 [00:19<00:24, 4.73it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/181.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/060.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 45%|████▍ | 94/209 [00:19<00:24, 4.75it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/197.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/035.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 46%|████▋ | 97/209 [00:19<00:22, 5.08it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/185.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/179.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 47%|████▋ | 99/209 [00:20<00:21, 5.10it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/174.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/111.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 48%|████▊ | 101/209 [00:20<00:20, 5.23it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/081.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/123.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 49%|████▉ | 103/209 [00:21<00:20, 5.18it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/017.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/080.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 50%|█████ | 105/209 [00:21<00:19, 5.22it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/003.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/029.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 51%|█████ | 107/209 [00:21<00:19, 5.13it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/112.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/057.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 52%|█████▏ | 109/209 [00:22<00:18, 5.28it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/012.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/030.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 53%|█████▎ | 110/209 [00:22<00:19, 5.12it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/016.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 53%|█████▎ | 111/209 [00:22<00:19, 4.95it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/176.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 54%|█████▎ | 112/209 [00:22<00:19, 4.94it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/024.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 55%|█████▍ | 114/209 [00:23<00:20, 4.62it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/028.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/077.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 56%|█████▌ | 116/209 [00:23<00:19, 4.73it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/018.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/167.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 56%|█████▋ | 118/209 [00:24<00:18, 5.03it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/142.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/038.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 57%|█████▋ | 120/209 [00:24<00:17, 5.03it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/104.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/073.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 58%|█████▊ | 121/209 [00:24<00:17, 4.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/099.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 58%|█████▊ | 122/209 [00:24<00:17, 4.84it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/119.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 59%|█████▉ | 123/209 [00:25<00:17, 4.81it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/071.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 60%|█████▉ | 125/209 [00:25<00:16, 4.95it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/079.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/093.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 61%|██████ | 127/209 [00:25<00:16, 4.97it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/149.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/125.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 62%|██████▏ | 129/209 [00:26<00:15, 5.10it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/011.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/208.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 63%|██████▎ | 131/209 [00:26<00:15, 5.11it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/107.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/147.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 63%|██████▎ | 132/209 [00:26<00:15, 5.00it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/025.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 64%|██████▍ | 134/209 [00:27<00:14, 5.09it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/205.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/137.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 65%|██████▍ | 135/209 [00:27<00:14, 5.11it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/140.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 66%|██████▌ | 137/209 [00:27<00:13, 5.25it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/032.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/084.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 67%|██████▋ | 139/209 [00:28<00:12, 5.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/056.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/002.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 67%|██████▋ | 141/209 [00:28<00:12, 5.58it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/132.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/200.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 68%|██████▊ | 143/209 [00:28<00:11, 5.67it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/100.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/131.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 69%|██████▉ | 145/209 [00:29<00:11, 5.73it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/009.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/195.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 70%|███████ | 147/209 [00:29<00:11, 5.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/040.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/151.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 71%|███████▏ | 149/209 [00:30<00:11, 5.28it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/184.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/015.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 72%|███████▏ | 151/209 [00:30<00:10, 5.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/122.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/044.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 73%|███████▎ | 153/209 [00:30<00:10, 5.46it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/134.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/190.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 74%|███████▎ | 154/209 [00:31<00:10, 5.01it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/020.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 75%|███████▍ | 156/209 [00:31<00:10, 5.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/138.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/180.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 76%|███████▌ | 158/209 [00:31<00:09, 5.46it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/063.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/146.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 77%|███████▋ | 160/209 [00:32<00:09, 5.42it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/198.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/194.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 78%|███████▊ | 162/209 [00:32<00:08, 5.64it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/203.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/202.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 78%|███████▊ | 164/209 [00:32<00:07, 5.81it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/206.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/058.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 79%|███████▉ | 166/209 [00:33<00:07, 5.49it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/177.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/171.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 80%|████████ | 168/209 [00:33<00:07, 5.56it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/182.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/095.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 81%|████████▏ | 170/209 [00:33<00:07, 5.49it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/013.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/046.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 82%|████████▏ | 172/209 [00:34<00:06, 5.64it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/165.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/027.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 83%|████████▎ | 174/209 [00:34<00:06, 5.23it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/161.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/207.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 84%|████████▍ | 176/209 [00:35<00:06, 5.26it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/062.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/098.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 85%|████████▌ | 178/209 [00:35<00:05, 5.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/117.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/005.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 86%|████████▌ | 179/209 [00:35<00:05, 5.57it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/159.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 87%|████████▋ | 181/209 [00:35<00:05, 5.35it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/055.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/091.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 88%|████████▊ | 183/209 [00:36<00:04, 5.55it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/022.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/008.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 89%|████████▊ | 185/209 [00:36<00:04, 5.79it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/183.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/160.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 89%|████████▉ | 187/209 [00:37<00:03, 5.77it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/148.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/052.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 90%|█████████ | 189/209 [00:37<00:03, 5.64it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/128.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/144.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 91%|█████████ | 190/209 [00:37<00:03, 5.92it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/059.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 92%|█████████▏| 192/209 [00:37<00:03, 5.37it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/191.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/064.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 93%|█████████▎| 194/209 [00:38<00:02, 5.10it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/019.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/037.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 94%|█████████▍| 196/209 [00:38<00:02, 4.98it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/169.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/166.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 95%|█████████▍| 198/209 [00:39<00:02, 5.22it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/074.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/010.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 95%|█████████▌| 199/209 [00:39<00:01, 5.15it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/189.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 96%|█████████▌| 200/209 [00:39<00:01, 4.89it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/126.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 97%|█████████▋| 202/209 [00:39<00:01, 4.95it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/156.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/094.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 97%|█████████▋| 203/209 [00:40<00:01, 4.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/192.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 98%|█████████▊| 204/209 [00:40<00:01, 4.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/141.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 98%|█████████▊| 205/209 [00:40<00:00, 4.53it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/089.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 99%|█████████▉| 207/209 [00:41<00:00, 4.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/187.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/164.png\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Processing Images: 100%|██████████| 209/209 [00:41<00:00, 5.02it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated mask: data/mvtec_ad/bottle/fg_mask/075.png\n", + "Generated mask: data/mvtec_ad/bottle/fg_mask/036.png\n", + "All masks have been generated and saved,\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.cluster import MiniBatchKMeans\n", + "\n", + "def generate_foreground_mask(image_path, output_path, std_multiplier=0.5, filter_size=7, downsample_ratio=0.25):\n", + " image = cv2.imread(image_path)\n", + " lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)\n", + "\n", + " h, w = lab.shape[:2]\n", + " small_lab = cv2.resize(lab, (int(w*downsample_ratio), int(h*downsample_ratio)))\n", + "\n", + " pixels = small_lab.reshape(-1, 3).astype(np.float32)\n", + " kmeans = MiniBatchKMeans(n_clusters=2, random_state=0, n_init=3)\n", + " labels = kmeans.fit_predict(pixels)\n", + "\n", + " cluster_points = [pixels[labels==i] for i in range(2)]\n", + " spatial_vars = []\n", + " for i in range(2):\n", + " coords = np.argwhere(labels.reshape(small_lab.shape[:2]) // downsample_ratio)\n", + " spatial_vars.append(np.var(coords))\n", + " bg_cluster = np.argmax(spatial_vars) \n", + " \n", + " bg_pixels = cluster_points[bg_cluster]\n", + " mean = np.mean(bg_pixels, axis=0)\n", + " std = np.std(bg_pixels, axis=0)\n", + " \n", + " cov = np.cov(bg_pixels.T)\n", + " inv_cov = np.linalg.pinv(cov)\n", + " diff = lab.reshape(-1,3) - mean\n", + " distances = np.sqrt(np.sum(diff @ inv_cov * diff, axis=1))\n", + " \n", + " threshold = np.mean(distances) + std_multiplier * np.std(distances)\n", + " mask = (distances > threshold).reshape(h, w).astype(np.uint8) * 255\n", + " \n", + " mask = cv2.medianBlur(mask, filter_size)\n", + " mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, np.ones((3,3), np.uint8))\n", + " \n", + " cv2.imwrite(output_path, mask)\n", + " print(f\"Generated mask: {output_path}\")\n", + "\n", + "image_path = os.path.join(dataset_path, \"train/good\")\n", + "image_files = [f for f in os.listdir(image_path) if f.endswith(('.png', '.jpg', '.jpeg'))]\n", + "assert len(image_files) > 0, f\"No images found in: {image_path}\"\n", + "\n", + "masks = []\n", + "\n", + "for img in tqdm(image_files, desc=\"Processing Images\"):\n", + " mask_path = os.path.join(fg_mask_folder, img)\n", + " masks.append(mask_path)\n", + " img_path = os.path.join(image_path, img)\n", + " generate_foreground_mask(img_path, mask_path)\n", + "\n", + "print(\"All masks have been generated and saved,\")\n", + "\n", + "from IPython.display import Image, display\n", + "for i in range(3): # change this number to set how many figures you can see\n", + " display(Image(masks[i]))" + ] + }, { "cell_type": "markdown", "id": "4787b391", @@ -183,7 +4312,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 3, "id": "e3df3315", "metadata": {}, "outputs": [ @@ -191,9 +4320,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "/home/ting/GLASS/data/mvtec_ad\n", - "capsule fg_mask pill\tscrew\n", - "/home/ting/GLASS/data\n" + "/home/qjh/glass/GLASS-main/data/mvtec_ad\n", + "bottle\t carpet hazelnut metal_nut screw transistor\n", + "cable\t fg_mask leather pill\t tile wood\n", + "capsule grid\t license.txt readme.txt toothbrush zipper\n", + "/home/qjh/glass/GLASS-main\n" ] } ], @@ -205,7 +4336,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "d290bccc", "metadata": {}, "outputs": [ @@ -213,170 +4344,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "INFO:__main__:Command line arguments: main.py --results_path ./results --gpu 0 --seed 0 --test ckpt net -b wideresnet50 -le layer2 -le layer3 --pretrain_embed_dimension 1536 --target_embed_dimension 1536 --patchsize 3 --meta_epochs 5 --eval_epochs 1 --dsc_layers 2 --dsc_hidden 1024 --pre_proj 1 --mining 1 --noise 0.015 --radius 0.75 --p 0.5 --step 20 --limit 392 dataset --distribution 0 --mean 0.5 --std 0.1 --fg 1 --rand_aug 1 --batch_size 16 --resize 288 --imagesize 288 -d capsule -d pill -d screw mvtec ./data/mvtec_ad ./data/dtd/images\n", - "INFO:__main__:Dataset CAPSULE : train=219 test=132\n", - "INFO:__main__:Dataset PILL : train=267 test=167\n", - "INFO:__main__:Dataset SCREW : train=320 test=160\n", - "INFO:__main__:Selecting dataset [mvtec_capsule] (1/3) 2025-02-08 14:00:03\n", - "2025/02/08 14:00:03 INFO mlflow.tracking.fluent: Experiment with name 'GLASS_Training' does not exist. Creating a new experiment.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "epoch:0 discriminator loss:2.06e+00 pt:79.13 pf:17.47 rt:0.90 rg:1.04 rf:3.40 svd:0 sample:219: 0%| | 0/5 [00:23