├── .gitignore ├── AD_1_autoencoder_l2_loss.ipynb ├── AD_2_Resnet_feature_KNN.ipynb ├── AD_3_using_resnet_backbone_multilevel.ipynb ├── AD_4_Patch_core.ipynb ├── anomaly_detection [Autosaved].pptx ├── augmented_autoencoder_l2_loss.pth ├── autoencoder_with_resnet_deep_features.pth ├── autoencoder_with_resnet_features.pth ├── fault_predictions ├── readme.md ├── requirements.txt ├── simple_autoencoder_l2_loss.pth └── variational_autoencoder_l2_loss.pth /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .vs 3 | carpet 4 | carpet.tar.xz 5 | ppt -------------------------------------------------------------------------------- /AD_2_Resnet_feature_KNN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from pathlib import Path\n", 10 | "import numpy as np\n", 11 | "import os, shutil\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "import seaborn as sns\n", 14 | "\n", 15 | "from PIL import Image\n", 16 | "\n", 17 | "from tqdm.auto import tqdm\n", 18 | "\n", 19 | "import torch\n", 20 | "import torchvision\n", 21 | "from torch.utils.data import DataLoader\n", 22 | "from torchvision.datasets import ImageFolder\n", 23 | "from torchvision.transforms import transforms\n", 24 | "import torch.optim as optim\n", 25 | "\n", 26 | "from torchvision.models import resnet50, ResNet50_Weights" 27 | ] 28 | }, 29 | { 30 | "cell_type": "markdown", 31 | "metadata": {}, 32 | "source": [ 33 | "# Load a pretrained Resnet Model" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 2, 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "resnet_model = resnet50(weights=ResNet50_Weights.DEFAULT)\n", 43 | "\n", 44 | "model = torch.nn.Sequential(*list(resnet_model.children())[:-1]).cuda()\n", 45 | "model.eval()\n", 46 | "\n", 47 | "for param in model.parameters():\n", 48 | " param.requires_grad = False\n", 49 | "\n", 50 | "del resnet_model" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "# Prepare data transformations" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 3, 63 | "metadata": {}, 64 | "outputs": [], 65 | "source": [ 66 | "transform = ResNet50_Weights.DEFAULT.transforms()" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "# Visualize embeddings" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 4, 79 | "metadata": {}, 80 | "outputs": [ 81 | { 82 | "data": { 83 | "application/vnd.jupyter.widget-view+json": { 84 | "model_id": "83da9d88448645d89e0a11830505f343", 85 | "version_major": 2, 86 | "version_minor": 0 87 | }, 88 | "text/plain": [ 89 | "0it [00:00, ?it/s]" 90 | ] 91 | }, 92 | "metadata": {}, 93 | "output_type": "display_data" 94 | }, 95 | { 96 | "data": { 97 | "application/vnd.jupyter.widget-view+json": { 98 | "model_id": "7ae09b8c93924ad5be17fc78ecf286a9", 99 | "version_major": 2, 100 | "version_minor": 0 101 | }, 102 | "text/plain": [ 103 | "0it [00:00, ?it/s]" 104 | ] 105 | }, 106 | "metadata": {}, 107 | "output_type": "display_data" 108 | }, 109 | { 110 | "data": { 111 | "application/vnd.jupyter.widget-view+json": { 112 | "model_id": "1d68316e676542ada5edbaa495fd82bf", 113 | "version_major": 2, 114 | "version_minor": 0 115 | }, 116 | "text/plain": [ 117 | "0it [00:00, ?it/s]" 118 | ] 119 | }, 120 | "metadata": {}, 121 | "output_type": "display_data" 122 | }, 123 | { 124 | "data": { 125 | "application/vnd.jupyter.widget-view+json": { 126 | "model_id": "5f2c60ac539b4521a9cd1b5bc9bd67d9", 127 | "version_major": 2, 128 | "version_minor": 0 129 | }, 130 | "text/plain": [ 131 | "0it [00:00, ?it/s]" 132 | ] 133 | }, 134 | "metadata": {}, 135 | "output_type": "display_data" 136 | }, 137 | { 138 | "data": { 139 | "application/vnd.jupyter.widget-view+json": { 140 | "model_id": "0eb95b3391ba47f0af01a96716c77ad9", 141 | "version_major": 2, 142 | "version_minor": 0 143 | }, 144 | "text/plain": [ 145 | "0it [00:00, ?it/s]" 146 | ] 147 | }, 148 | "metadata": {}, 149 | "output_type": "display_data" 150 | }, 151 | { 152 | "data": { 153 | "application/vnd.jupyter.widget-view+json": { 154 | "model_id": "987f07791ac546558e9082b9ab7aac21", 155 | "version_major": 2, 156 | "version_minor": 0 157 | }, 158 | "text/plain": [ 159 | "0it [00:00, ?it/s]" 160 | ] 161 | }, 162 | "metadata": {}, 163 | "output_type": "display_data" 164 | } 165 | ], 166 | "source": [ 167 | "class_labels = []\n", 168 | "y_true = []\n", 169 | "resnet_features = []\n", 170 | "\n", 171 | "for classes in ['color','good','cut','hole','metal_contamination','thread']:\n", 172 | " folder_path = Path(r'carpet\\test\\{}'.format(classes))\n", 173 | "\n", 174 | " for pth in tqdm(folder_path.iterdir(),leave=False):\n", 175 | "\n", 176 | " class_label = pth.parts[-2]\n", 177 | " with torch.no_grad():\n", 178 | " test_image = transform(Image.open(pth)).cuda().unsqueeze(0)\n", 179 | " features = model(test_image)\n", 180 | " resnet_features.append(features.squeeze().cpu().detach().numpy())\n", 181 | "\n", 182 | " class_labels.append(class_label)\n", 183 | " y_true.append(0 if class_label == 'good' else 1)\n", 184 | "\n", 185 | "resnet_features = np.array(resnet_features)" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 5, 191 | "metadata": {}, 192 | "outputs": [ 193 | { 194 | "data": { 195 | "image/png": "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m6d7771XV155pSRp9OjROuyww3Teeedp0aJFWrp0qc4++2y5XK6EvCdkFpocAACAdOYbIP3kIenixdLZC9r/9ycPtR9PoLvuukt77bWXjjrqKB100EGaOXOmxo4dK6ez/Z6xuXPnaurUqTrqqKO01157KRaL6eWXX5bN1j4iufvuu+uJJ57Q448/rgkTJuj666/XjTfeqNNPP73jHF8vZrDvvvvqxz/+sc4991wVFRUl9H0hM5hisVjM6BDxBAIB+Xw++f1+eb3MKQUAAJmltbVVGzZs0NChQzuag3TV1NSkAQMG6M4779RZZ51ldBykqZ6+J3rTG7DwAAAAAHrt448/1ueff6499thDfr9fN954oyR1TEcDjESTAwAAgJ1yxx13aM2aNbLb7Zo6dar+85//qKCgwOhYAE0OAAAAem+33XbrtPIZkEpYeAAAAABARqHJAQAAAJBRaHIAAAAAZBSaHAAAAAAZhSYHAAAAQEahyQEAAACQUWhyAAAAAGQUmhwAAAAk1cMPP6ycnByjYyCDsRkoAABAmvMH/aptrVVDW4Oy7dnKc+bJ5/AZHQswDCM5AAAAaayiqUJXv3O1jnnuGJ3y8ik65rljdM0716iiqSKh541Go7rttts0YsQIORwODRo0SDfffLPeeustmUwm1dfXdzx2+fLlMplM2rhxo9566y2dccYZ8vv9MplMMplMmjNnTkKzov+hyQEAAEhT/qBfN7x/g97f9n6n4+9te09z3p8jf9CfsHNfe+21uuWWWzR79mytWrVKjz32mIqLi7/zeTNmzNDdd98tr9er7du3a/v27bryyisTlhP9E9PVAAAA0lRta22XBudr7217T7WttQmZttbQ0KB77rlH9957r2bNmiVJGj58uPbee2+99dZbPT7XbrfL5/PJZDKppKSkz7MBEiM5AAAAaauhrWGX6jtr9erVCgaDOvDAAxPy+sCuSmiTE4lENHv2bA0dOlQul0vDhw/XTTfdpFgslsjTAgAA9AvZ9uxdqu8sl8sVt2Y2t/95+b9/74VCoYTkAOJJaJNz66236s9//rPuvfderV69Wrfeeqtuu+02/fGPf0zkaQEAAPqFPGeeZpbN7LY2s2ym8px5CTnvyJEj5XK5tGDBgi61wsJCSdL27ds7ji1fvrzTY+x2uyKRSEKyAVKCm5z3339fxx57rI488kgN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Y+yyIUOG6O67707KuWbMmKHt27fL5/P16euaTCY999xznY5deeWVWrBgQZ+eJ5GsRgcAAADArmltCqmloU1tLWHZXVa5su1yemxGx0KC2e12lZSUJOVcWVlZysrKSsq5+gIjOQAAAGmssbZVrz+4Uo/NWaSnbl2qx+Ys0usPrlRjbWvCzrnffvvpkksu0eWXX67c3FwVFxfrgQceUFNTk8444wxlZ2drxIgReuWVVzqe89lnn+nwww9XVlaWiouLddppp6mmpkZS+5Szt99+W/fcc49MJpNMJpM2btyoSCSis846S0OHDpXL5dLo0aN1zz337HTuaDSq2267TSNGjJDD4dCgQYN08803d9Q//fRTHXDAAXK5XMrPz9e5556rxsbGjvrXU+PuuOMOlZaWKj8/XxdddJFCoVDH1+Wrr77Sz3/+8473IUk7duzQySefrAEDBsjtdmvixIn65z//uctf029PV3v44YeVk5Oj1157TWPHjlVWVpYOO+wwbd++veM5ixcv1sEHH6yCggL5fD7tu+++WrZsWUd9yJAhkqQf/ehHMplMHZ9/e7paNBrVjTfeqIEDB8rhcGjKlCl69dVXO+obN26UyWTSM888o/33319ut1uTJ0/WBx98sBP/z/UeTQ4AAECaam0K6c2/f67Nq2s7Hd+8ulZv/v1ztTaFEnbuefPmqaCgQB999JEuueQSXXDBBTrhhBM0Y8YMLVu2TIcccohOO+00NTc3q76+XgcccIB22203LVmyRK+++qoqKyt14oknSpLuuece7bXXXjrnnHO0fft2bd++XeXl5YpGoxo4cKCefPJJrVq1Stdff73+3//7f3riiSd2KvO1116rW265RbNnz9aqVav02GOPqbi4WJLU1NSkQw89VLm5uVq8eLGefPJJvfHGG7r44os7vcbChQu1bt06LVy4UPPmzdPDDz+shx9+WJL0zDPPaODAgbrxxhs73ocktba2aurUqXrppZf02Wef6dxzz9Vpp52mjz76aKe/pvE0Nzfrjjvu0N///ne988472rRpk6688sqOekNDg2bNmqV3331XH374oUaOHKkjjjhCDQ0NktqbIEmaO3eutm/f3vH5t91zzz268847dccdd+iTTz7RoYceqmOOOUZffPFFp8f96le/0pVXXqnly5dr1KhROvnkkxUOh7/r/6pdF0thfr8/Jinm9/uNjgIAANDnWlpaYqtWrYq1tLTs1PNrtzfG7j1vQdyP2u2NfZy43b777hvbe++9Oz4Ph8Mxj8cTO+200zqObd++PSYp9sEHH8Ruuumm2CGHHNLpNTZv3hyTFFuzZk3Ha1522WXfee6LLroodvzxx3d8PmvWrNixxx77nc8LBAIxh8MRe+CBB7qt33///bHc3NxYY+M3X7OXXnopZjabYxUVFR3nGjx4cCwcDnc85oQTToiddNJJHZ8PHjw49vvf//478xx55JGxX/ziFx2f9/ZrGovFYgsXLoxJitXV1cVisVhs7ty5MUmxL7/8suM59913X6y4uDhujkgkEsvOzo69+OKLHcckxZ599tlOj7vhhhtikydP7vi8rKwsdvPNN3d6zPTp02MXXnhhLBaLxTZs2BCTFHvwwQc76itXroxJiq1evTpunp6+J3rTGzCSAwAAkKbaWnq+Iv5d9V0xadKkjv+2WCzKz8/XxIkTO459PUJSVVWlFStWaOHChR33dWRlZWnMmDGSpHXr1vV4nvvuu09Tp05VYWGhsrKydP/992vTpk29zrt69WoFg0EdeOCBceuTJ0+Wx+PpODZz5kxFo1GtWbOm49j48eNlsVg6Pi8tLVVVVVWP545EIrrppps0ceJE5eXlKSsrS6+99lqX99Gbr2k8brdbw4cPj5uvsrJS55xzjkaOHCmfzyev16vGxsZefU0DgYC2bdummTNndjo+c+ZMrV69Ou57Ki0t/c78fYWFBwAAANKU3dXzn3LfVd8VNlvnhQ1MJlOnY1/fjxKNRtXY2Kijjz5at956a5fX+foP3+48/vjjuvLKK3XnnXdqr732UnZ2tm6//XYtWrSo13ldLlevn9Od7t53NBrt8Tm333677rnnHt19992aOHGiPB6PLr/8crW1tX3na8f7mvYmX/vgTLtZs2Zpx44duueeezR48GA5HA7ttddeXbL0ld7m7yuM5AAAAKQpV7Zd5WPzuq2Vj82TK9ue5ETd23333bVy5UoNGTJEI0aM6PTx9ciJ3W5XJBLp9Lz33ntPM2bM0IUXXqjddttNI0aM+M6Rn3hGjhwpl8sVdxnksWPHasWKFWpqaup0frPZrNGjR3/v88R7H8cee6xOPfVUTZ48WcOGDdPatWt36n3sqvfee0+XXnqpjjjiCI0fP14Oh6NjAYiv2Wy2Lu/hf3m9XpWVlem9997r8trjxo1LSO7eoskBAABIU06PTQecNqZLo1M+Nk8H/GxMyiwjfdFFF6m2tlYnn3yyFi9erHXr1um1117TGWec0fHH9JAhQ7Ro0SJt3LhRNTU1ikajGjlypJYsWaLXXntNa9eu1ezZs+PeCP9dnE6nrrnmGl199dV65JFHtG7dOn344Yd66KGHJEmnnHKKnE6nZs2apc8++0wLFy7UJZdcotNOO61jmtj3MWTIEL3zzjvaunVrR/MwcuRIzZ8/X++//75Wr16t8847T5WVlTv1PnbVyJEj9fe//12rV6/WokWLdMopp3QZ5RoyZIgWLFigiooK1dXVdfs6V111lW699Vb961//0po1a/TLX/5Sy5cv12WXXZaMt/GdmK4GAEAGaA1F1BgMy2E1K9uZGn/YIjmy8pw65OzxKb1PztdX/a+55hodcsghCgaDGjx4sA477DCZze3X3K+88krNmjVL48aNU0tLizZs2KDzzjtPH3/8sU466SSZTCadfPLJuvDCCzsto9wbs2fPltVq1fXXX69t27aptLRU559/vqT2e1lee+01XXbZZZo+fbrcbreOP/543XXXXb06x4033qjzzjtPw4cPVzAYVCwW03XXXaf169fr0EMPldvt1rnnnqvjjjtOfr9/p97HrnjooYd07rnnavfdd1d5ebl++9vfdlp9TZLuvPNOXXHFFXrggQc0YMAAbdy4scvrXHrppfL7/frFL36hqqoqjRs3Ti+88IJGjhyZpHfSM1PsfyfppZhAICCfzye/3y+v12t0HAAAUk5bOKKvdjTr/nfWa9mmOpX6nLpwvxEaV+ZVjjs1piohvtbWVm3YsEFDhw6V0+k0Og5guJ6+J3rTGzCSAwBAGvtki18nP/ChQpH2a5brqpv07pc7dOUho3T6zKHKcvCrHkD/wz05AACkqeqGoK55+pOOBud/3TV/rXY0Bg1IBRhj06ZNnZao/vbHziw7jfTF5R0AANKUv6VN66qbuq1FY9LKbQENzvd0WwcyTVlZmZYvX95jHf0HTQ4AAGnKJFOPdYu55zqQSaxWq0aMGGF0DKQImhwAyDD1rfWqC9apJdwir92rAleBnFZuaM5EPrdNY0qy9XlFQ5ea1WzS2JJsA1IBgPFocgAgg2xp2KJfvfsrLataJkmymW06deypmjV+lvJd+QanQ18r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", 196 | "text/plain": [ 197 | "
" 198 | ] 199 | }, 200 | "metadata": {}, 201 | "output_type": "display_data" 202 | } 203 | ], 204 | "source": [ 205 | "from sklearn.manifold import TSNE\n", 206 | "# Perform t-SNE to reduce dimensions to 2\n", 207 | "tsne = TSNE(n_components=2, random_state=42)\n", 208 | "resnet_features_2d = tsne.fit_transform(resnet_features)\n", 209 | "\n", 210 | "plt.figure(figsize=(10,10))\n", 211 | "sns.scatterplot(x=resnet_features_2d[:,0],y=resnet_features_2d[:,1],hue=class_labels)\n", 212 | "plt.show()" 213 | ] 214 | }, 215 | { 216 | "cell_type": "markdown", 217 | "metadata": {}, 218 | "source": [ 219 | "# Create a memory bank" 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": 21, 225 | "metadata": {}, 226 | "outputs": [], 227 | "source": [ 228 | "memory_bank =[]\n", 229 | "\n", 230 | "folder_path = Path(r'carpet\\train\\good')\n", 231 | "\n", 232 | "for pth in tqdm(folder_path.iterdir(),leave=False):\n", 233 | "\n", 234 | " with torch.no_grad():\n", 235 | " data = transform(Image.open(pth)).cuda().unsqueeze(0)\n", 236 | " features = model(data)\n", 237 | " memory_bank.append(features.squeeze().cpu().detach())\n", 238 | "\n", 239 | "memory_bank = torch.stack(memory_bank).cuda()\n" 240 | ] 241 | }, 242 | { 243 | "cell_type": "markdown", 244 | "metadata": {}, 245 | "source": [ 246 | "# Plot the std of columns in the memory bank" 247 | ] 248 | }, 249 | { 250 | "cell_type": "code", 251 | "execution_count": 22, 252 | "metadata": {}, 253 | "outputs": [ 254 | { 255 | "data": { 256 | "image/png": "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KL/DzdKlS/Xwww+rffv23mUdOnTQ9OnTtXTpUr8LWLBggfLy8jRt2jStWbNGGRkZys3NVWlp6TG3X7Jkia6++motXrxYK1asUFpamkaOHKlvv/3W7/cOpsNXgtNyAwBAgPkdblwulyoqKposr6yslNPp9LuARx99VBMmTND48ePVt29fzZ07V1FRUXr22WePuf0//vEP3XzzzcrMzNQZZ5yhv/3tb/J4PCooKPD7vYMprLHlhjE3AAAElN/h5ic/+Ymuv/56rVy5UoZhyDAMffzxx7rxxht12WWX+XWs2tparV69Wjk5OUcKstuVk5OjFStWNOsY1dXVqqur82lJOlpNTY3Ky8t9HlawN465IdwAABBQfoebxx9/XKeddpqys7MVERGhiIgIDRs2TD179tRjjz3m17H27Nkjt9ut5ORkn+XJyckqLi5u1jF+97vfqXPnzj4B6Wj5+fmKi4vzPtLS0vyq0SyR4Q1XkpUdrLPk/QEAaCv8vloqPj5eb775prZu3eq9FLxPnz7q2bOn6cX9kOnTp2v+/PlasmSJIiIijrnNlClTlJeX531dXl5uScA5PbmdFm/erW2llUF/bwAA2pKTvhNfz549TznQJCYmyuFwqKSkxGd5SUmJUlJSTrjvI488ounTp+u///2vBgwYcNztXC6XXC7XKdVphihnw1dd6/ZYXAkAAKHN724pMzmdTg0aNMhnMHDj4ODs7Ozj7vfwww/rwQcf1MKFCzV48OBglHrKwhonziTcAAAQUJbPoZCXl6dx48Zp8ODBGjJkiGbPnq2qqiqNHz9ekjR27FilpqYqPz9fkjRjxgxNnTpVL730ktLT071jc2JiYhQTE2PZ5/gh4d5ww4BiAAACyfJwM2bMGO3evVtTp05VcXGxMjMztXDhQu8g48LCQtntRxqYnn76adXW1uqnP/2pz3GmTZum++67L5il+6XxUvA6rpYCACCgLA83kjRp0iRNmjTpmOuWLFni83rHjh2BLygAwumWAgAgKJoVbtavX9/sA55ocG9bFnZ4cqk6uqUAAAioZoWbzMxM2Ww2GYYhm812wm3dbrcphYWaMPvhlhsPLTcAAARSs66W2r59u77++mtt375dr776qrp3766nnnpKa9eu1dq1a/XUU0/ptNNO06uvvhroelut8MMtNwwoBgAgsJrVctOtWzfv85/97Gd6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bNkyXXrppercubNsNluTOeIMw9DUqVPVqVMnRUZGKicnR1u2bPHZZt++fbrmmmsUGxur+Ph4/eY3v1FlZaXPNuvXr9e5556riIgIpaWl6eGHHw70RwtpP3Terr322iZ//y666CKfbThvwZefn6+zzz5b7dq1U1JSkkaPHq3Nmzf7bGPWv41LlizRWWedJZfLpZ49e2revHmB/ng+CDcmWLBggfLy8jRt2jStWbNGGRkZys3NVWlpqdWltWn9+vVTUVGR9/Hhhx96191xxx3697//rVdeeUVLly7Vd999pyuvvNK73u12a9SoUaqtrdVHH32k559/XvPmzdPUqVOt+Cghq6qqShkZGZozZ84x1z/88MN6/PHHNXfuXK1cuVLR0dHKzc3VoUOHvNtcc8012rhxoxYtWqS3335by5Yt0/XXX+9dX15erpEjR6pbt25avXq1Zs6cqfvuu497Y52CHzpvknTRRRf5/P17+eWXfdZz3oJv6dKlmjhxoj7++GMtWrRIdXV1GjlypKqqqrzbmPFv4/bt2zVq1ChdcMEFWrdunW6//XZdd911eu+994L3YQ2csiFDhhgTJ070vna73Ubnzp2N/Px8C6tq26ZNm2ZkZGQcc11ZWZkRHh5uvPLKK95lX375pSHJWLFihWEYhvGf//zHsNvtRnFxsXebp59+2oiNjTVqamoCWntbJcl4/fXXva89Ho+RkpJizJw507usrKzMcLlcxssvv2wYhmF88cUXhiTjk08+8W7z7rvvGjabzfj2228NwzCMp556ykhISPA5b7/73e+M3r17B/gTtQ3fP2+GYRjjxo0zLr/88uPuw3lrGUpLSw1JxtKlSw3DMO/fxt/+9rdGv379fN5rzJgxRm5ubqA/khctN6eotrZWq1evVk5OjneZ3W5XTk6OVqxYYWFl2LJlizp37qwePXrommuuUWFhoSRp9erVqqur8zlnZ5xxhrp27eo9ZytWrFD//v19ZqDPzc1VeXm5Nm7cGNwP0kZt375dxcXFPucpLi5OWVlZPucpPj5egwcP9m6Tk5Mju92ulStXercZPny4nE6nd5vc3Fxt3rxZ+/fvD9KnaXuWLFmipKQk9e7dWzfddJP27t3rXcd5axkOHDggSWrfvr0k8/5tXLFihc8xGrcJ5m8i4eYU7dmzR2632+dES1JycrKKi4stqgpZWVmaN2+eFi5cqKefflrbt2/Xueeeq4qKChUXF8vpdDaZQPXoc1ZcXHzMc9q4DoHX+D2f6O9WcXGxkpKSfNaHhYWpffv2nEsLXXTRRXrhhRdUUFCgGTNmaOnSpbr44ovldrslcd5aAo/Ho9tvv13Dhg3z3uHfrH8bj7dNeXm5Dh48GIiP04Tl0y8AgXDxxRd7nw8YMEBZWVnq1q2b/vnPfyoyMtLCyoDQ94tf/ML7vH///howYIBOO+00LVmyRCNGjLCwMjSaOHGiPv/8c5+xiKGElptTlJiYKIfD0WQ0eUlJiVJSUiyqCt8XHx+v008/XVu3blVKSopqa2tVVlbms83R5ywlJeWY57RxHQKv8Xs+0d+tlJSUJgP36+vrtW/fPs5lC9KjRw8lJiZq69atkjhvVps0aZLefvttLV68WF26dPEuN+vfxuNtExsbG7T/uSTcnCKn06lBgwapoKDAu8zj8aigoEDZ2dkWVoajVVZWatu2berUqZMGDRqk8PBwn3O2efNmFRYWes9Zdna2NmzY4PMP8KJFixQbG6u+ffsGvf62qHv37kpJSfE5T+Xl5Vq5cqXPeSorK9Pq1au923zwwQfyeDzKysrybrNs2TLV1dV5t1m0aJF69+6thISEIH2atu2bb77R3r171alTJ0mcN6sYhqFJkybp9ddf1wcffKDu3bv7rDfr38bs7GyfYzRuE9TfxKANXQ5h8+fPN1wulzFv3jzjiy++MK6//nojPj7eZzQ5guvOO+80lixZYmzfvt1Yvny5kZOTYyQmJhqlpaWGYRjGjTfeaHTt2tX44IMPjE8//dTIzs42srOzvfvX19cbZ555pjFy5Ehj3bp1xsKFC42OHTsaU6ZMseojhaSKigpj7dq1xtq1aw1JxqOPPmqsXbvW2Llzp2EYhjF9+nQjPj7eePPNN43169cbl19+udG9e3fj4MGD3mNcdNFFxsCBA42VK1caH374odGrVy/j6quv9q4vKyszkpOTjV/96lfG559/bsyfP9+Iiooy/vKXvwT984aKE523iooKY/LkycaKFSuM7du3G//973+Ns846y+jVq5dx6NAh7zE4b8F30003GXFxccaSJUuMoqIi76O6utq7jRn/Nn799ddGVFSUcddddxlffvmlMWfOHMPhcBgLFy4M2mcl3JjkiSeeMLp27Wo4nU5jyJAhxscff2x1SW3amDFjjE6dOhlOp9NITU01xowZY2zdutW7/uDBg8bNN99sJCQkGFFRUcYVV1xhFBUV+Rxjx44dxsUXX2xERkYaiYmJxp133mnU1dUF+6OEtMWLFxuSmjzGjRtnGEbD5eD33nuvkZycbLhcLmPEiBHG5s2bfY6xd+9e4+qrrzZiYmKM2NhYY/z48UZFRYXPNp999pnxox/9yHC5XEZqaqoxffr0YH3EkHSi81ZdXW2MHDnS6NixoxEeHm5069bNmDBhQpP/2eO8Bd+xzpkk47nnnvNuY9a/jYsXLzYyMzMNp9Np9OjRw+c9gsFmGIYRvHYiAACAwGLMDQAACCmEGwAAEFIINwAAIKQQbgAAQEgh3AAAgJBCuAEAACGFcAMAAEIK4QaAKXbs2CGbzaZ169ZZXYrXpk2bdM455ygiIkKZmZnH3MYwDF1//fVq3759i6sfwMkh3AAh4tprr5XNZtP06dN9lr/xxhuy2WwWVWWtadOmKTo6Wps3b24y102jhQsXat68eXr77bdVVFSkM88805T3vvbaazV69GhTjgXAP4QbIIRERERoxowZ2r9/v9WlmKa2tvak9922bZt+9KMfqVu3burQocNxt+nUqZOGDh2qlJQUhYWFnfT7BYLb7ZbH47G6DKBVIdwAISQnJ0cpKSnKz88/7jb33Xdfky6a2bNnKz093fu6sdXhoYceUnJysuLj4/XAAw+ovr5ed911l9q3b68uXbroueeea3L8TZs2aejQoYqIiNCZZ56ppUuX+qz//PPPdfHFFysmJkbJycn61a9+pT179njXn3/++Zo0aZJuv/12JSYmKjc395ifw+Px6IEHHlCXLl3kcrmUmZmphQsXetfbbDatXr1aDzzwgGw2m+67774mx7j22mt1yy23qLCwUDabzfsdeDwe5efnq3v37oqMjFRGRob+9a9/efdzu936zW9+413fu3dvPfbYYz7f8fPPP68333xTNptNNptNS5Ys0ZIlS2Sz2VRWVubddt26dbLZbNqxY4ckad68eYqPj9dbb72lvn37yuVyqbCwUDU1NZo8ebJSU1MVHR2trKwsLVmyxHucnTt36tJLL1VCQoKio6PVr18//ec//znmdweEOsINEEIcDoceeughPfHEE/rmm29O6VgffPCBvvvuOy1btkyPPvqopk2bpp/85CdKSEjQypUrdeONN+qGG25o8j533XWX7rzzTq1du1bZ2dm69NJLtXfvXklSWVmZLrzwQg0cOFCffvqpFi5cqJKSEv385z/3Ocbzzz8vp9Op5cuXa+7cuces77HHHtOsWbP0yCOPaP369crNzdVll12mLVu2SJKKiorUr18/3XnnnSoqKtLkyZOPeYzGgFRUVKRPPvlEkpSfn68XXnhBc+fO1caNG3XHHXfol7/8pTeoeTwedenSRa+88oq++OILTZ06Vb///e/1z3/+U5I0efJk/fznP9dFF12koqIiFRUVaejQoc3+7qurqzVjxgz97W9/08aNG5WUlKRJkyZpxYoVmj9/vtavX6+f/exnuuiii7yfd+LEiaqpqdGyZcu0YcMGzZgxQzExMc1+TyCkBHWaTgABM27cOOPyyy83DMMwzjnnHOPXv/61YRiG8frrrxtH/1WfNm2akZGR4bPvn//8Z6Nbt24+x+rWrZvhdru9y3r37m2ce+653tf19fVGdHS08fLLLxuGYRjbt283JPnM3FxXV2d06dLFmDFjhmEYhvHggw8aI0eO9HnvXbt2GZK8s32fd955xsCBA3/w83bu3Nn405/+5LPs7LPPNm6++Wbv64yMDGPatGknPM73P/uhQ4eMqKgo46OPPvLZ7je/+Y1x9dVXH/c4EydONK666irv66PPR6PG2bT379/vXbZ27VpDkrF9+3bDMAzjueeeMyQZ69at826zc+dOw+FwGN9++63P8UaMGGFMmTLFMAzD6N+/v3Hfffed8LMCbUXL6lwGYIoZM2bowgsvPGZrRXP169dPdvuRxt3k5GSfwbYOh0MdOnRQaWmpz37Z2dne52FhYRo8eLC+/PJLSdJnn32mxYsXH7NFYdu2bTr99NMlSYMGDTphbeXl5fruu+80bNgwn+XDhg3TZ5991sxPeGxbt25VdXW1fvzjH/ssr62t1cCBA72v58yZo2effVaFhYU6ePCgamtrj3tFlr+cTqcGDBjgfb1hwwa53W7v99OopqbGO5bo1ltv1U033aT3339fOTk5uuqqq3yOAbQlhBsgBA0fPly5ubmaMmWKrr32Wp91drtdhmH4LKurq2tyjPDwcJ/XNpvtmMv8GexaWVmpSy+9VDNmzGiyrlOnTt7n0dHRzT6m2SorKyVJ77zzjlJTU33WuVwuSdL8+fM1efJkzZo1S9nZ2WrXrp1mzpyplStXnvDYjWHx6O//WN99ZGSkzxVulZWVcjgcWr16tRwOh8+2jUHxuuuuU25urt555x29//77ys/P16xZs3TLLbc096MDIYNwA4So6dOnKzMzU7179/ZZ3rFjRxUXF8swDO8PqJn3dvn44481fPhwSVJ9fb1Wr16tSZMmSZLOOussvfrqq0pPTz+lq5JiY2PVuXNnLV++XOedd553+fLlyzVkyJBTqv/oQbxHH/toy5cv19ChQ3XzzTd7l23bts1nG6fTKbfb7bOsY8eOkhrGAyUkJEhq3nc/cOBAud1ulZaW6txzzz3udmlpabrxxht14403asqUKXrmmWcIN2iTGFAMhKj+/fvrmmuu0eOPP+6z/Pzzz9fu3bv18MMPa9u2bZozZ47effdd0953zpw5ev3117Vp0yZNnDhR+/fv169//WtJDYNe9+3bp6uvvlqffPKJtm3bpvfee0/jx49vEgR+yF133aUZM2ZowYIF2rx5s+6++26tW7dOt9122ynV365dO02ePFl33HGHnn/+eW3btk1r1qzRE088oeeff16S1KtXL3366ad677339NVXX+nee+/1DkZulJ6ervXr12vz5s3as2eP6urq1LNnT6Wlpem+++7Tli1b9M4772jWrFk/WNPpp5+ua665RmPHjtVrr72m7du3a9WqVcrPz9c777wjSbr99tv13nvvafv27VqzZo0WL16sPn36nNJ3AbRWhBsghD3wwANNuo369Omjp556SnPmzFFGRoZWrVp1SmNzvm/69OmaPn26MjIy9OGHH+qtt95SYmKiJHlbW9xut0aOHKn+/fvr9ttvV3x8vM/4nua49dZblZeXpzvvvFP9+/fXwoUL9dZbb6lXr16n/BkefPBB3XvvvcrPz1efPn100UUX6Z133lH37t0lSTfccIOuvPJKjRkzRllZWdq7d69PK44kTZgwQb1799bgwYPVsWNHLV++XOHh4Xr55Ze1adMmDRgwQDNmzNAf//jHZtX03HPPaezYsbrzzjvVu3dvjR49Wp988om6du0qqeHy9IkTJ3rrPf300/XUU0+d8ncBtEY24/ud7wAAAK0YLTcAACCkEG4AAEBIIdwAAICQQrgBAAAhhXADAABCCuEGAACEFMINAAAIKYQbAAAQUgg3AAAgpBBuAABASCHcAACAkEK4AQAAIeX/Awc4iI9wYWulAAAAAElFTkSuQmCC", 257 | "text/plain": [ 258 | "
" 259 | ] 260 | }, 261 | "metadata": {}, 262 | "output_type": "display_data" 263 | } 264 | ], 265 | "source": [ 266 | "values,indices = torch.sort(memory_bank.std(dim=0))\n", 267 | "\n", 268 | "plt.plot(values.cpu().numpy()[::-1])\n", 269 | "plt.vlines(x=500,ymin=0,ymax=0.5,colors='red')\n", 270 | "plt.ylim([0,0.5])\n", 271 | "plt.ylabel(\"std of the features\")\n", 272 | "plt.xlabel(\"Number of features\")\n", 273 | "plt.show()" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 23, 279 | "metadata": {}, 280 | "outputs": [], 281 | "source": [ 282 | "values,indices = torch.sort(memory_bank.std(dim=0))\n", 283 | "selected_indices = indices[-500:]\n", 284 | "memory_bank = memory_bank[:,selected_indices]" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 24, 290 | "metadata": {}, 291 | "outputs": [ 292 | { 293 | "data": { 294 | "text/plain": [ 295 | "torch.Size([280, 500])" 296 | ] 297 | }, 298 | "execution_count": 24, 299 | "metadata": {}, 300 | "output_type": "execute_result" 301 | } 302 | ], 303 | "source": [ 304 | "memory_bank.shape" 305 | ] 306 | }, 307 | { 308 | "cell_type": "markdown", 309 | "metadata": {}, 310 | "source": [ 311 | "# For OK images [K nearsest neighbours]" 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": 26, 317 | "metadata": {}, 318 | "outputs": [ 319 | { 320 | "data": { 321 | "application/vnd.jupyter.widget-view+json": { 322 | "model_id": "006600568340485f9f4161bbd0cf2dde", 323 | "version_major": 2, 324 | "version_minor": 0 325 | }, 326 | "text/plain": [ 327 | "0it [00:00, ?it/s]" 328 | ] 329 | }, 330 | "metadata": {}, 331 | "output_type": "display_data" 332 | } 333 | ], 334 | "source": [ 335 | "y_score=[]\n", 336 | "\n", 337 | "k=50\n", 338 | "\n", 339 | "folder_path = Path(r'carpet\\train\\good')\n", 340 | "\n", 341 | "for pth in tqdm(folder_path.iterdir(),leave=False):\n", 342 | " data = transform(Image.open(pth)).cuda().unsqueeze(0)\n", 343 | " with torch.no_grad():\n", 344 | " features = model(data).squeeze()\n", 345 | " dist,_=torch.sort(torch.norm(memory_bank - features[selected_indices], dim=1))# Calculating the pair-wise distance between the sample and memory bank\n", 346 | " dist = dist[:k].mean()# K nearsest neighbours\n", 347 | " y_score.append(dist.cpu().numpy())" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 27, 353 | "metadata": {}, 354 | "outputs": [ 355 | { 356 | "data": { 357 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiYAAAGdCAYAAAAmK7htAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAcKklEQVR4nO3df3DU9Z348VcQE6wksVEhZAhKtcWf2DtUjPaUKhUp40ilc9XrtNg67dUJjsjceeSmrcf0ZsL1OtV2jqIzvcLdzVFaO4VOtcUiShgVrEYZwfYYYfyBlcSOrQnELytDPt8/PPeM/NxkN3ln83jMfGayu+/97Hs/fpY8/WR3PxVZlmUBAJCAUUM9AQCA9wgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkjF6qCfwQb29vfH6669HdXV1VFRUDPV0AIDjkGVZ7N27NxoaGmLUqP4f90guTF5//fVobGwc6mkAAP2we/fumDhxYr/vn1yYVFdXR8S7T6ympmaIZwMAHI/u7u5obGzM/x7vr+TC5L0/39TU1AgTABhmBvo2DG9+BQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZBQUJsuXL4+pU6fmvy6+qakpfv3rX+dv379/fzQ3N8epp54aY8eOjXnz5kVnZ2fRJw0AlKeCwmTixImxdOnSaG9vj2eeeSauvvrquOGGG+KFF16IiIg777wzfvnLX8YDDzwQbW1t8frrr8eNN95YkokDAOWnIsuybCArqKuri3/913+Nz372s3H66afHqlWr4rOf/WxERPzP//xPnHvuubF58+a47LLLjmt93d3dUVtbG11dXU7iBwDDRLF+f/f7PSYHDx6M1atXR09PTzQ1NUV7e3scOHAgZs6cmR9zzjnnxKRJk2Lz5s1HXE8ul4vu7u4+CwAwMhUcJtu2bYuxY8dGVVVVfO1rX4s1a9bEeeedFx0dHVFZWRmnnHJKn/Hjx4+Pjo6OI66vtbU1amtr80tjY2PBTwIYZD09ERUV7y49PUM9G6CMFBwmU6ZMia1bt8ZTTz0Vt912W8yfPz9+97vf9XsCLS0t0dXVlV92797d73UBAMPb6ELvUFlZGWeffXZEREybNi2efvrp+N73vhef+9zn4p133om33nqrz1GTzs7OqK+vP+L6qqqqoqqqqvCZAwBlZ8DfY9Lb2xu5XC6mTZsWJ554YmzYsCF/244dO+LVV1+NpqamgT4MADACFHTEpKWlJWbPnh2TJk2KvXv3xqpVq2Ljxo3x8MMPR21tbdx6662xaNGiqKuri5qamrj99tujqanpuD+RAwCMbAWFyRtvvBFf/OIXY8+ePVFbWxtTp06Nhx9+OD71qU9FRMQ999wTo0aNinnz5kUul4tZs2bFD37wg5JMHAAoPwP+HpNi8z0mMAz09ESMHfvuz/v2RZx88tDOBxhyQ/49JgAAxSZMAIBkCBMAIBnCBABIhjABAJJR8De/kqYzFz90zDEvL50zCDMBgP5zxAQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAklFQmLS2tsYll1wS1dXVMW7cuJg7d27s2LGjz5gZM2ZERUVFn+VrX/taUScNAJSngsKkra0tmpubY8uWLbF+/fo4cOBAXHvttdHT09Nn3Fe+8pXYs2dPfvn2t79d1EkDAOVpdCGD161b1+fyypUrY9y4cdHe3h5XXnll/voPfehDUV9fX5wZAgAjxoDeY9LV1RUREXV1dX2u/+///u847bTT4oILLoiWlpZ4++23j7iOXC4X3d3dfRYAYGQq6IjJ+/X29sbChQvjiiuuiAsuuCB//d/8zd/EGWecEQ0NDfH888/HP/zDP8SOHTvi5z//+WHX09raGkuWLOnvNJJ25uKHjjnm5aVzBmEmADA89DtMmpubY/v27fH444/3uf6rX/1q/ucLL7wwJkyYENdcc03s2rUrzjrrrEPW09LSEosWLcpf7u7ujsbGxv5OCwAYxvoVJgsWLIgHH3wwNm3aFBMnTjzq2OnTp0dExM6dOw8bJlVVVVFVVdWfaQAAZaagMMmyLG6//fZYs2ZNbNy4MSZPnnzM+2zdujUiIiZMmNCvCQIAI0dBYdLc3ByrVq2KX/ziF1FdXR0dHR0REVFbWxsnnXRS7Nq1K1atWhWf/vSn49RTT43nn38+7rzzzrjyyitj6tSpJXkCAED5KChMli9fHhHvfona+61YsSJuueWWqKysjEceeSTuvffe6OnpicbGxpg3b158/etfL9qEAYDyVfCfco6msbEx2traBjQhAGDkcq4cACAZwgQASIYwAQCSIUwAgGQIEwAgGf3+SnqKw/l0AOD/OGICACRDmAAAyRAmAEAyhAkAkAxhAgAkQ5gAAMkQJgBAMoQJAJAMYQIAJEOYAADJECYAQDKECQCQDGECACRDmAAAyRAmAEAyhAkAkAxhAgAkQ5gAAMkQJgBAMoQJAJAMYQIAJEOYAADJECYAQDKECQCQDGECACRDmAAAyRAmAEAyhAkAkAxhAgAkQ5gAAMkQJgBAMoQJAJAMYQIAJEOYAADJECYAQDKECQCQDGECACRDmAAAyRAmAEAyhAkAkAxhAgAko6AwaW1tjUsuuSSqq6tj3LhxMXfu3NixY0efMfv374/m5uY49dRTY+zYsTFv3rzo7Ows6qQBgPJUUJi0tbVFc3NzbNmyJdavXx8HDhyIa6+9Nnp6evJj7rzzzvjlL38ZDzzwQLS1tcXrr78eN954Y9EnDgCUn9GFDF63bl2fyytXroxx48ZFe3t7XHnlldHV1RX//u//HqtWrYqrr746IiJWrFgR5557bmzZsiUuu+yy4s0cACg7A3qPSVdXV0RE1NXVRUREe3t7HDhwIGbOnJkfc84558SkSZNi8+bNA3koAGAEKOiIyfv19vbGwoUL44orrogLLrggIiI6OjqisrIyTjnllD5jx48fHx0dHYddTy6Xi1wul7/c3d3d3ykBAMNcv4+YNDc3x/bt22P16tUDmkBra2vU1tbml8bGxgGtDwAYvvoVJgsWLIgHH3wwHnvssZg4cWL++vr6+njnnXfirbfe6jO+s7Mz6uvrD7uulpaW6Orqyi+7d+/uz5QAgDJQUJhkWRYLFiyINWvWxKOPPhqTJ0/uc/u0adPixBNPjA0bNuSv27FjR7z66qvR1NR02HVWVVVFTU1NnwUAGJkKeo9Jc3NzrFq1Kn7xi19EdXV1/n0jtbW1cdJJJ0VtbW3ceuutsWjRoqirq4uampq4/fbbo6mpySdyAIBjKihMli9fHhERM2bM6HP9ihUr4pZbbomIiHvuuSdGjRoV8+bNi1wuF7NmzYof/OAHRZksAFDeCgqTLMuOOWbMmDGxbNmyWLZsWb8nBQCMTM6VAwAkQ5gAAMkQJgBAMoQJAJAMYQIAJKPf58qhPJ25+KFjjnl56ZxBmAkAI5EjJgBAMoQJAJAMYQIAJEOYAADJECYAQDKECQCQDGECACRDmAAAyRAmAEAyhAkAkAxhAgAkw7lyKNhgnk/HuXsARhZHTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhnPlMOw5nw5A+XDEBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSUXCYbNq0Ka6//vpoaGiIioqKWLt2bZ/bb7nllqioqOizXHfddcWaLwBQxgoOk56enrjoooti2bJlRxxz3XXXxZ49e/LLj3/84wFNEgAYGUYXeofZs2fH7Nmzjzqmqqoq6uvr+z0pAGBkKsl7TDZu3Bjjxo2LKVOmxG233RZvvvnmEcfmcrno7u7uswAAI1PBR0yO5brrrosbb7wxJk+eHLt27Yp//Md/jNmzZ8fmzZvjhBNOOGR8a2trLFmypNjTKCtnLn5oqKcAAIOi6GFy00035X++8MILY+rUqXHWWWfFxo0b45prrjlkfEtLSyxatCh/ubu7OxobG4s9LQBgGCj5x4U/8pGPxGmnnRY7d+487O1VVVVRU1PTZwEARqaSh8lrr70Wb775ZkyYMKHUDwUADHMF/yln3759fY5+vPTSS7F169aoq6uLurq6WLJkScybNy/q6+tj165dcdddd8XZZ58ds2bNKurEAYDyU3CYPPPMM/HJT34yf/m994fMnz8/li9fHs8//3z8x3/8R7z11lvR0NAQ1157bXzrW9+Kqqqq4s0aAChLBYfJjBkzIsuyI97+8MMPD2hCAMDI5Vw5AEAyhAkAkAxhAgAkQ5gAAMkQJgBAMor+lfRwvJwDCIAPcsQEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQ4V84IMpLPTXM8z/3lpXMGYSYAHI0jJgBAMoQJAJAMYQIAJEOYAADJECYAQDKECQCQDGECACRDmAAAyRAmAEAyhAkAkAxfSU9JjOSvvweg/xwxAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBkFh8mmTZvi+uuvj4aGhqioqIi1a9f2uT3LsvjmN78ZEyZMiJNOOilmzpwZL774YrHmCwCUsYLDpKenJy666KJYtmzZYW//9re/Hd///vfjvvvui6eeeipOPvnkmDVrVuzfv3/AkwUAytvoQu8we/bsmD179mFvy7Is7r333vj6178eN9xwQ0RE/Od//meMHz8+1q5dGzfddNPAZgsAlLWivsfkpZdeio6Ojpg5c2b+utra2pg+fXps3rz5sPfJ5XLR3d3dZwEARqaCj5gcTUdHR0REjB8/vs/148ePz9/2Qa2trbFkyZJiTmNQnLn4oaGeAkV2PP9NX146ZxBmAjByDfmnclpaWqKrqyu/7N69e6inBAAMkaKGSX19fUREdHZ29rm+s7Mzf9sHVVVVRU1NTZ8FABiZihomkydPjvr6+tiwYUP+uu7u7njqqaeiqampmA8FAJShgt9jsm/fvti5c2f+8ksvvRRbt26Nurq6mDRpUixcuDD++Z//OT760Y/G5MmT4xvf+EY0NDTE3LlzizlvAKAMFRwmzzzzTHzyk5/MX160aFFERMyfPz9WrlwZd911V/T09MRXv/rVeOutt+ITn/hErFu3LsaMGVO8WQMAZakiy7JsqCfxft3d3VFbWxtdXV1Jv9/Ep3JGJp/K+V89PRFjx7778759ESefPLTzAYZcsX5/D/mncgAA3iNMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIxuihngAMJ2cufuiYY15eOmfQ1gNQbhwxAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBkFD1M/umf/ikqKir6LOecc06xHwYAKEMl+R6T888/Px555JH/e5DRvi4FADi2khTD6NGjo76+vhSrBgDKWEneY/Liiy9GQ0NDfOQjH4nPf/7z8eqrr5biYQCAMlP0IybTp0+PlStXxpQpU2LPnj2xZMmS+Ku/+qvYvn17VFdXHzI+l8tFLpfLX+7u7i72lACAYaLoYTJ79uz8z1OnTo3p06fHGWecET/96U/j1ltvPWR8a2trLFmypNjTGJDjOY8JAFB8Jf+48CmnnBIf+9jHYufOnYe9vaWlJbq6uvLL7t27Sz0lACBRJQ+Tffv2xa5du2LChAmHvb2qqipqamr6LADAyFT0MPm7v/u7aGtri5dffjmefPLJ+MxnPhMnnHBC3HzzzcV+KACgzBT9PSavvfZa3HzzzfHmm2/G6aefHp/4xCdiy5Ytcfrppxf7oQCAMlP0MFm9enWxVwkAjBDOlQMAJEOYAADJECYAQDKECQCQDGECACSjJGcXhpHMKQ0A+s8REwAgGcIEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCS4Vw5kKhinXPn5aVzirKe98/npHf2x+//9+dzv7Eu/l/lmKI+FjByOWICACRDmAAAyRAmAEAyhAkAkAxhAgAkQ5gAAMkQJgBAMoQJAJAMYQIAJEOYAADJECYAQDKcKwfK3PGcc8c5bgbOdobicMQEAEiGMAEAkiFMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGSMuHPlHM/5LGCkKdbrYjBfX4N53pnh+u+G8/ccXblun+H+vBwxAQCSIUwAgGQIEwAgGcIEAEiGMAEAkiFMAIBklCxMli1bFmeeeWaMGTMmpk+fHr/97W9L9VAAQJkoSZj85Cc/iUWLFsXdd98dzz77bFx00UUxa9aseOONN0rxcABAmShJmHz3u9+Nr3zlK/GlL30pzjvvvLjvvvviQx/6UPzoRz8qxcMBAGWi6N/8+s4770R7e3u0tLTkrxs1alTMnDkzNm/efMj4XC4XuVwuf7mrqysiIrq7u4s9tYiI6M29XZL1wkhy8J398d4r9GDu7ejNegd9DqX6N+JwivXvxmDOOeL45j3Yc0pJuW6foXpe760zy7KBrSgrsj/84Q9ZRGRPPvlkn+v//u//Prv00ksPGX/33XdnEWGxWCwWi6UMlt27dw+oI4b8XDktLS2xaNGi/OXe3t7405/+FKeeempUVFQc93q6u7ujsbExdu/eHTU1NaWYKkdh+w8t23/o2PZDy/YfWu/f/tXV1bF3795oaGgY0DqLHiannXZanHDCCdHZ2dnn+s7Ozqivrz9kfFVVVVRVVfW57pRTTun349fU1Ng5h5DtP7Rs/6Fj2w8t239ovbf9a2trB7yuor/5tbKyMqZNmxYbNmzIX9fb2xsbNmyIpqamYj8cAFBGSvKnnEWLFsX8+fPj4osvjksvvTTuvffe6OnpiS996UuleDgAoEyUJEw+97nPxR//+Mf45je/GR0dHfHxj3881q1bF+PHjy/Fw0XEu38Suvvuuw/5sxCDw/YfWrb/0LHth5btP7RKsf0rsmygn+sBACgO58oBAJIhTACAZAgTACAZwgQASMawCZNNmzbF9ddfHw0NDVFRURFr16496viNGzdGRUXFIUtHR8fgTLiMtLa2xiWXXBLV1dUxbty4mDt3buzYseOY93vggQfinHPOiTFjxsSFF14Yv/rVrwZhtuWnP9t/5cqVh+z7Y8aMGaQZl4/ly5fH1KlT818e1dTUFL/+9a+Peh/7ffEUuv3t96W1dOnSqKioiIULFx513EBfA8MmTHp6euKiiy6KZcuWFXS/HTt2xJ49e/LLuHHjSjTD8tXW1hbNzc2xZcuWWL9+fRw4cCCuvfba6OnpOeJ9nnzyybj55pvj1ltvjeeeey7mzp0bc+fOje3btw/izMtDf7Z/xLvfxPj+ff+VV14ZpBmXj4kTJ8bSpUujvb09nnnmmbj66qvjhhtuiBdeeOGw4+33xVXo9o+w35fK008/Hffff39MnTr1qOOK8hoY0Jl2hkhEZGvWrDnqmMceeyyLiOzPf/7zoMxpJHnjjTeyiMja2tqOOOav//qvszlz5vS5bvr06dnf/u3flnp6Ze94tv+KFSuy2trawZvUCPLhD384++EPf3jY2+z3pXe07W+/L429e/dmH/3oR7P169dnV111VXbHHXcccWwxXgPD5ohJf3384x+PCRMmxKc+9al44oknhno6ZaGrqysiIurq6o44ZvPmzTFz5sw+182aNSs2b95c0rmNBMez/SMi9u3bF2eccUY0NjYe8/8yObaDBw/G6tWro6en54in17Dfl87xbP8I+30pNDc3x5w5cw7Ztw+nGK+BIT+7cKlMmDAh7rvvvrj44osjl8vFD3/4w5gxY0Y89dRT8Zd/+ZdDPb1hq7e3NxYuXBhXXHFFXHDBBUcc19HRccg3/Y4fP957fAboeLf/lClT4kc/+lFMnTo1urq64jvf+U5cfvnl8cILL8TEiRMHccbD37Zt26KpqSn2798fY8eOjTVr1sR555132LH2++IrZPvb74tv9erV8eyzz8bTTz99XOOL8Roo2zCZMmVKTJkyJX/58ssvj127dsU999wT//Vf/zWEMxvempubY/v27fH4448P9VRGpOPd/k1NTX3+r/Lyyy+Pc889N+6///741re+VepplpUpU6bE1q1bo6urK372s5/F/Pnzo62t7Yi/HCmuQra//b64du/eHXfccUesX79+UN9EXLZhcjiXXnqpX6gDsGDBgnjwwQdj06ZNx/y/j/r6+ujs7OxzXWdnZ9TX15dyimWtkO3/QSeeeGL8xV/8RezcubNEsytflZWVcfbZZ0dExLRp0+Lpp5+O733ve3H//fcfMtZ+X3yFbP8Pst8PTHt7e7zxxht9/spw8ODB2LRpU/zbv/1b5HK5OOGEE/rcpxivgbJ/j8n7bd26NSZMmDDU0xh2siyLBQsWxJo1a+LRRx+NyZMnH/M+TU1NsWHDhj7XrV+//qh/G+bw+rP9P+jgwYOxbds2+38R9Pb2Ri6XO+xt9vvSO9r2/yD7/cBcc801sW3btti6dWt+ufjii+Pzn/98bN269ZAoiSjSa6B/79EdfHv37s2ee+657LnnnssiIvvud7+bPffcc9krr7ySZVmWLV68OPvCF76QH3/PPfdka9euzV588cVs27Zt2R133JGNGjUqe+SRR4bqKQxbt912W1ZbW5tt3Lgx27NnT355++2382O+8IUvZIsXL85ffuKJJ7LRo0dn3/nOd7Lf//732d13352deOKJ2bZt24biKQxr/dn+S5YsyR5++OFs165dWXt7e3bTTTdlY8aMyV544YWheArD1uLFi7O2trbspZdeyp5//vls8eLFWUVFRfab3/wmyzL7fakVuv3t96X3wU/llOI1MGzC5L2P/35wmT9/fpZlWTZ//vzsqquuyo//l3/5l+yss87KxowZk9XV1WUzZszIHn300aGZ/DB3uO0eEdmKFSvyY6666qr8f4v3/PSnP80+9rGPZZWVldn555+fPfTQQ4M78TLRn+2/cOHCbNKkSVllZWU2fvz47NOf/nT27LPPDv7kh7kvf/nL2RlnnJFVVlZmp59+enbNNdfkfylmmf2+1Ard/vb70vtgmJTiNVCRZVlW2MEdAIDSGFHvMQEA0iZMAIBkCBMAIBnCBABIhjABAJIhTACAZAgTACAZwgQASIYwAQCSIUwAgGQIEwAgGcIEAEjG/wdu6+iYe7MnkwAAAABJRU5ErkJggg==", 358 | "text/plain": [ 359 | "
" 360 | ] 361 | }, 362 | "metadata": {}, 363 | "output_type": "display_data" 364 | } 365 | ], 366 | "source": [ 367 | "best_threshold = np.mean(y_score) + 2 * np.std(y_score)\n", 368 | "\n", 369 | "plt.hist(y_score,bins=50)\n", 370 | "plt.vlines(x=best_threshold,ymin=0,ymax=30,color='r')\n", 371 | "plt.show()" 372 | ] 373 | }, 374 | { 375 | "cell_type": "markdown", 376 | "metadata": {}, 377 | "source": [ 378 | "# For NOK Images" 379 | ] 380 | }, 381 | { 382 | "cell_type": "code", 383 | "execution_count": 28, 384 | "metadata": {}, 385 | "outputs": [ 386 | { 387 | "data": { 388 | "application/vnd.jupyter.widget-view+json": { 389 | "model_id": "b9dbcaf63df04116a2faa7cc0291afc2", 390 | "version_major": 2, 391 | "version_minor": 0 392 | }, 393 | "text/plain": [ 394 | "0it [00:00, ?it/s]" 395 | ] 396 | }, 397 | "metadata": {}, 398 | "output_type": "display_data" 399 | }, 400 | { 401 | "data": { 402 | "application/vnd.jupyter.widget-view+json": { 403 | "model_id": "9203e552a4794c61ad9caad852db268f", 404 | "version_major": 2, 405 | "version_minor": 0 406 | }, 407 | "text/plain": [ 408 | "0it [00:00, ?it/s]" 409 | ] 410 | }, 411 | "metadata": {}, 412 | "output_type": "display_data" 413 | }, 414 | { 415 | "data": { 416 | "application/vnd.jupyter.widget-view+json": { 417 | "model_id": "1cc5baacaefe4238964222f5ef002af9", 418 | "version_major": 2, 419 | "version_minor": 0 420 | }, 421 | "text/plain": [ 422 | "0it [00:00, ?it/s]" 423 | ] 424 | }, 425 | "metadata": {}, 426 | "output_type": "display_data" 427 | }, 428 | { 429 | "data": { 430 | "application/vnd.jupyter.widget-view+json": { 431 | "model_id": "97037b0f0b634717bf9d4446c54260ba", 432 | "version_major": 2, 433 | "version_minor": 0 434 | }, 435 | "text/plain": [ 436 | "0it [00:00, ?it/s]" 437 | ] 438 | }, 439 | "metadata": {}, 440 | "output_type": "display_data" 441 | }, 442 | { 443 | "data": { 444 | "application/vnd.jupyter.widget-view+json": { 445 | "model_id": "8d5e13e9892449868467ffdf7eb63b00", 446 | "version_major": 2, 447 | "version_minor": 0 448 | }, 449 | "text/plain": [ 450 | "0it [00:00, ?it/s]" 451 | ] 452 | }, 453 | "metadata": {}, 454 | "output_type": "display_data" 455 | }, 456 | { 457 | "data": { 458 | "application/vnd.jupyter.widget-view+json": { 459 | "model_id": "7654ccb891ca4e4e94f1895d47f5faed", 460 | "version_major": 2, 461 | "version_minor": 0 462 | }, 463 | "text/plain": [ 464 | "0it [00:00, ?it/s]" 465 | ] 466 | }, 467 | "metadata": {}, 468 | "output_type": "display_data" 469 | } 470 | ], 471 | "source": [ 472 | "folder_path = Path(r'carpet\\test\\color')\n", 473 | "\n", 474 | "class_labels = []\n", 475 | "y_true = []\n", 476 | "resnet_features = []\n", 477 | "y_score = []\n", 478 | "\n", 479 | "for classes in ['color','good','cut','hole','metal_contamination','thread']:\n", 480 | " folder_path = Path(r'carpet\\test\\{}'.format(classes))\n", 481 | "\n", 482 | " for pth in tqdm(folder_path.iterdir(),leave=False):\n", 483 | "\n", 484 | " class_label = pth.parts[-2]\n", 485 | " with torch.no_grad():\n", 486 | " test_image = transform(Image.open(pth)).cuda().unsqueeze(0)\n", 487 | " features = model(test_image).squeeze() \n", 488 | " dist,_=torch.sort(torch.norm(memory_bank - features[selected_indices], dim=1))#[-10:].mean()\n", 489 | " dist = dist[:k].mean()\n", 490 | " y_score.append(dist.cpu().numpy())\n", 491 | "\n", 492 | " class_labels.append(class_label)\n", 493 | " y_true.append(0 if class_label == 'good' else 1)" 494 | ] 495 | }, 496 | { 497 | "cell_type": "code", 498 | "execution_count": 29, 499 | "metadata": {}, 500 | "outputs": [ 501 | { 502 | "data": { 503 | "image/png": "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UVdXl/Mk6e3fvz/uvvvu6OzsPOo+xr6lpSXmz58fs2fPznuU5LZu3RqNjY0xceLEWLRoUWzfvj3vkZL593//9zj11FPjk5/8ZNTX18cf/dEfxT/90z/lPVZu9u3bF9/73vfi0ksvPeibcvZnp59+eqxduzZ++ctfRkTEM888E0888UTMmzcv58nSePPNN2P//v0xdOjQHuuHDRsWTzzxRE5T9ULe9VMp+/fvz+bPn5/NnDkz71GS2rRpUzZ8+PCsqqoqKxaL2Q9/+MO8R0rqrrvuyqZOnZr99re/zbIsO6pe+fiP//iP7Pvf/372zDPPZA899FDW3NycjRs3LiuVSnmPlkR1dXVWXV2dtba2Zj/5yU+y73znO9nQoUOz22+/Pe/RcnHPPfdkVVVV2Ysvvpj3KEns378/u/baa7NCoZANHjw4KxQK2de+9rW8x0qqubk5++hHP5q9+OKL2Ztvvpl997vfzQYNGpR96EMfynu09zRg4uPyyy/Pxo8fn+3YsSPvUZIql8vZ1q1bs/Xr12fXXXdddtxxx2U///nP8x4rie3bt2f19fXZM888073uaIqP3/fqq69mtbW1R82v3Y455pisubm5x7qrrroqO+2003KaKF9z5szJ/uzP/izvMZK56667srFjx2Z33XVXtmnTpuzOO+/M6urqjqr43LZtW3bmmWdmEZFVVVVl06dPzxYtWpRNnjw579He04CIj5aWlmzs2LHZr371q7xHyd2sWbOyz372s3mPkcTq1au7/9H9bomIrFAoZFVVVdmbb76Z94jJnXrqqdl1112X9xhJjBs3Lrvssst6rLv11luzxsbGnCbKzwsvvJANGjQou/fee/MeJZmxY8dm//iP/9hj3Y033phNmjQpp4nys3fv3mznzp1ZlmXZpz71qezjH/94zhO9t359zUeWZXHllVfG6tWr49FHH40JEybkPVLuurq6olwu5z1GErNmzYqf/exnsXHjxu7l1FNPjUWLFsXGjRujqqoq7xGT2rt3bzz33HMxZsyYvEdJYubMmW97a/0vf/nLGD9+fE4T5WflypVRX18f8+fPz3uUZF577bUYNKjnj7Cqqqro6urKaaL8DB8+PMaMGROvvvpqrFmzJs4777y8R3pP/fp9eS0tLbFq1aq47777oqamJtrb2yMiolgsxrBhw3Keru+1trbGvHnzYty4cbFnz55YtWpVPPbYY7FmzZq8R0uipqYmpk6d2mPd8OHDY+TIkW9bPxB97nOfi3PPPTfGjx8fO3fujGXLlkVVVVVcdNFFeY+WxDXXXBOnn356fO1rX4tPfepT8eMf/zhuu+22uO222/IeLamurq5YuXJlLF68+Kh6q/W5554bX/3qV2PcuHExZcqU+OlPfxrf/OY349JLL817tGTWrFkTWZbFpEmTYtu2bfH5z38+Jk+eHJdcckneo723vF96ORwRccBl5cqVeY+WxKWXXpqNHz8+GzJkSDZq1Khs1qxZ2X/+53/mPVaujqZrPi688MJszJgx2ZAhQ7IPfOAD2YUXXpht27Yt77GSuv/++7OpU6dm1dXV2eTJk7Pbbrst75GSW7NmTRYR2ZYtW/IeJalSqZRdffXV2bhx47KhQ4dmEydOzL74xS9m5XI579GSueeee7KJEydmQ4YMyRoaGrKWlpZs9+7deY91UApZdhR9HBwAkLt+fc0HAND/iA8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICk/i/B3CzpQ2EslgAAAABJRU5ErkJggg==", 504 | "text/plain": [ 505 | "
" 506 | ] 507 | }, 508 | "metadata": {}, 509 | "output_type": "display_data" 510 | } 511 | ], 512 | "source": [ 513 | "y_score_nok = [score for score,true in zip(y_score,y_true) if true==1]\n", 514 | "plt.hist(y_score_nok,bins=50)\n", 515 | "plt.vlines(x=best_threshold,ymin=0,ymax=30,color='r')\n", 516 | "plt.show()" 517 | ] 518 | }, 519 | { 520 | "cell_type": "markdown", 521 | "metadata": {}, 522 | "source": [ 523 | "# Evaluation matrix" 524 | ] 525 | }, 526 | { 527 | "cell_type": "code", 528 | "execution_count": 32, 529 | "metadata": {}, 530 | "outputs": [ 531 | { 532 | "name": "stdout", 533 | "output_type": "stream", 534 | "text": [ 535 | "AUC-ROC Score: 0.7403691813804174\n" 536 | ] 537 | }, 538 | { 539 | "data": { 540 | "image/png": "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", 541 | "text/plain": [ 542 | "
" 543 | ] 544 | }, 545 | "metadata": {}, 546 | "output_type": "display_data" 547 | }, 548 | { 549 | "data": { 550 | "image/png": "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/fc1ePBgJSQk6JtvvpEk/fWvf9W2bdu8GhwAAD6tlj4+2e3k4I033lBKSoqCg4P10UcfqaSkRJJUWFioGTNmeD1AAABQtdxODqZNm6YFCxZo4cKFqlv3fw8Iuummm/Tvf//bq8EBAODLausrm91ec5Cbm6vu3btfNB4eHq5Tp055IyYAAGqGWvqERLcrB5GRkdq/f/9F49u2bVPz5s29EhQAADUCaw7Ou++++zR69Gjt3LlTNptNR48e1bJly/TII4/ogQceqIwYAQBAFXK7rTB+/Hg5HA7dcsst+v7779W9e3cFBgbqkUce0YMPPlgZMQIA4JNq60OQ3E4ObDabnnzyST366KPav3+/zpw5o3bt2ik0NLQy4gMAwHfV0uccWH4IUkBAgNq1a+fNWAAAgA9wOzlITEyUzXbp1ZWbN2/2KCAAAGoMT29H9LByMHPmTE2YMEGjR4/W888/L0kqLi7Www8/rBUrVqikpEQpKSmaN2+eIiIiXD6v28lBx44dTZ/Lysq0d+9effrpp0pLS3P3dAAA1FzV2FbYtWuXXn75ZbVv3940PnbsWP3jH//Q6tWrFR4erlGjRqlfv3764IMPXD6328nBnDlzKhx/+umndebMGXdPBwDAZa+oqMj0OTAwUIGBgZc8/syZM0pNTdXChQs1bdo053hhYaEWLVqk5cuXq2fPnpKkxYsXKy4uTjt27NCNN97oUjxeeyvj4MGD9Ze//MVbpwMAwPd56TkH0dHRCg8Pd27p6ek/e9mRI0fqjjvuUFJSkml8z549KisrM423bdtWzZo1U3Z2tstfy2tvZczOzlZQUJC3TgcAgM/z1q2MeXl5stvtzvGfqxqsWLFC//73v7Vr166L9uXn5ysgIED16tUzjUdERCg/P9/luNxODvr162f6bBiGjh07pt27d2vixInung4AgMue3W43JQeXkpeXp9GjR2vTpk2V+ge528lBeHi46bOfn5/atGmjqVOn6tZbb/VaYAAAwGzPnj369ttvdd111znHysvL9d577+mll17Sxo0bVVpaqlOnTpmqBwUFBYqMjHT5Om4lB+Xl5br33nsVHx+v+vXruzMVAIDap4rvVrjlllv0ySefmMbuvfdetW3bVo8//riio6NVt25dZWVlqX///pLOvzDx8OHDSkhIcPk6biUH/v7+uvXWW5WTk0NyAAC47FX1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SJJGjx6tmTNnKjMzU1988YVGjBjxs88ouOqqq5SWlqahQ4cqMzPTec5Vq1ZJkmJiYmSz2fTWW2/pu+++05kzZxQWFqZHHnlEY8eO1WuvvaYDBw7o3//+t1588UXnIr8//vGP2rdvnx599FHl5uZq+fLlWrJkiVvft1WrVjp8+LBWrFihAwcOaO7cuRUurgwKClJaWpo+/vhjvf/++3rooYc0cOBARUZGSpKmTJmi9PR0zZ07V19++aU++eQTLV68WH/+85/digeA+0gOgEp2xRVX6L333lOzZs3Ur18/xcXFadiwYSouLnZWEh5++GH97ne/U1pamhISEhQWFqa77rrrZ887f/58/eY3v9GIESPUtm1b3XfffTp79qwk6corr9SUKVM0fvx4RUREaNSoUZKkZ555RhMnTlR6erri4uJ022236R//+IdiY2MlnV8H8MYbbygzM1MdOnTQggULNGPGDLe+75133qmxY8dq1KhR6tixo7Zv366JEydedFzLli3Vr18/3X777br11lvVvn17062Kw4cP16uvvqrFixcrPj5eN998s5YsWeKMFUDlsRmXWvEEAAAuS1QOAACACckBAAAwITkAAAAmJAcAAMCE5AAAAJiQHAAAABOSAwAAYEJyAAAATEgOAACACckBAAAwITkAAAAm/x980+jAuvoGKQAAAABJRU5ErkJggg==", 551 | "text/plain": [ 552 | "
" 553 | ] 554 | }, 555 | "metadata": {}, 556 | "output_type": "display_data" 557 | } 558 | ], 559 | "source": [ 560 | "from sklearn.metrics import roc_auc_score, roc_curve, confusion_matrix, ConfusionMatrixDisplay, f1_score\n", 561 | "\n", 562 | "\n", 563 | "# Calculate AUC-ROC score\n", 564 | "auc_roc_score = roc_auc_score(y_true, y_score)\n", 565 | "print(\"AUC-ROC Score:\", auc_roc_score)\n", 566 | "\n", 567 | "# Plot ROC curve\n", 568 | "fpr, tpr, thresholds = roc_curve(y_true, y_score)\n", 569 | "plt.figure()\n", 570 | "plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % auc_roc_score)\n", 571 | "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n", 572 | "plt.xlabel('False Positive Rate')\n", 573 | "plt.ylabel('True Positive Rate')\n", 574 | "plt.title('Receiver Operating Characteristic (ROC) Curve')\n", 575 | "plt.legend(loc=\"lower right\")\n", 576 | "plt.show()\n", 577 | "\n", 578 | "\n", 579 | "\n", 580 | "# Generate confusion matrix\n", 581 | "cm = confusion_matrix(y_true, (y_score >= best_threshold).astype(int))\n", 582 | "disp = ConfusionMatrixDisplay(confusion_matrix=cm,display_labels=['OK','NOK'])\n", 583 | "disp.plot()\n", 584 | "plt.show()" 585 | ] 586 | }, 587 | { 588 | "cell_type": "code", 589 | "execution_count": null, 590 | "metadata": {}, 591 | "outputs": [], 592 | "source": [] 593 | } 594 | ], 595 | "metadata": { 596 | "kernelspec": { 597 | "display_name": "buawei_battery_env", 598 | "language": "python", 599 | "name": "python3" 600 | }, 601 | "language_info": { 602 | "codemirror_mode": { 603 | "name": "ipython", 604 | "version": 3 605 | }, 606 | "file_extension": ".py", 607 | "mimetype": "text/x-python", 608 | "name": "python", 609 | "nbconvert_exporter": "python", 610 | "pygments_lexer": "ipython3", 611 | "version": "3.9.19" 612 | } 613 | }, 614 | "nbformat": 4, 615 | "nbformat_minor": 2 616 | } 617 | -------------------------------------------------------------------------------- /anomaly_detection [Autosaved].pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohan696matlab/mvtec_anomalydetection/eee633e6acbbf00922a7a0d3f69a1d5ff1b4ec6f/anomaly_detection [Autosaved].pptx -------------------------------------------------------------------------------- /augmented_autoencoder_l2_loss.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohan696matlab/mvtec_anomalydetection/eee633e6acbbf00922a7a0d3f69a1d5ff1b4ec6f/augmented_autoencoder_l2_loss.pth -------------------------------------------------------------------------------- /autoencoder_with_resnet_deep_features.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohan696matlab/mvtec_anomalydetection/eee633e6acbbf00922a7a0d3f69a1d5ff1b4ec6f/autoencoder_with_resnet_deep_features.pth -------------------------------------------------------------------------------- /autoencoder_with_resnet_features.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohan696matlab/mvtec_anomalydetection/eee633e6acbbf00922a7a0d3f69a1d5ff1b4ec6f/autoencoder_with_resnet_features.pth -------------------------------------------------------------------------------- /fault_predictions: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohan696matlab/mvtec_anomalydetection/eee633e6acbbf00922a7a0d3f69a1d5ff1b4ec6f/fault_predictions -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | link to the Mvtech indivitual data= https://github.com/LuigiFederico/PatchCore-for-Industrial-Anomaly-Detection/blob/main/lib/data.py 2 | 3 | link to entire mvtec data= https://www.mvtec.com/company/research/datasets/mvtec-ad 4 | 5 | pytorch tutorial resources = https://pytorch.org/tutorials/beginner/basics/intro.html -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | accelerate==0.29.2 2 | asttokens @ file:///opt/conda/conda-bld/asttokens_1646925590279/work 3 | backcall @ file:///home/ktietz/src/ci/backcall_1611930011877/work 4 | Brotli @ file:///C:/Windows/Temp/abs_63l7912z0e/croots/recipe/brotli-split_1659616056886/work 5 | certifi @ file:///C:/b/abs_35d7n66oz9/croot/certifi_1707229248467/work/certifi 6 | cffi @ file:///C:/b/abs_924gv1kxzj/croot/cffi_1700254355075/work 7 | charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work 8 | click==8.1.7 9 | clip==0.2.0 10 | colorama @ file:///C:/b/abs_a9ozq0l032/croot/colorama_1672387194846/work 11 | comm @ file:///C:/b/abs_67a8058udb/croot/comm_1709322909844/work 12 | conda==4.12.0 13 | conda-package-handling @ file:///C:/b/abs_b9wp3lr1gn/croot/conda-package-handling_1691008700066/work 14 | conda_package_streaming @ file:///C:/b/abs_6c28n38aaj/croot/conda-package-streaming_1690988019210/work 15 | contourpy==1.2.0 16 | cryptography @ file:///C:/b/abs_f5n93r0tun/croot/cryptography_1710350404202/work 17 | cycler==0.12.1 18 | debugpy @ file:///C:/b/abs_c0y1fjipt2/croot/debugpy_1690906864587/work 19 | decorator @ file:///opt/conda/conda-bld/decorator_1643638310831/work 20 | diffusers==0.27.2 21 | exceptiongroup @ file:///C:/b/abs_c5h1o1_b5b/croot/exceptiongroup_1706031441653/work 22 | executing @ file:///opt/conda/conda-bld/executing_1646925071911/work 23 | faiss-cpu==1.8.0 24 | filelock==3.13.1 25 | fonttools==4.50.0 26 | fsspec==2024.3.1 27 | huggingface-hub==0.21.4 28 | idna @ file:///C:/b/abs_bdhbebrioa/croot/idna_1666125572046/work 29 | imageio==2.34.0 30 | importlib-metadata @ file:///C:/b/abs_c1egths604/croot/importlib_metadata-suite_1704813568388/work 31 | importlib_resources==6.4.0 32 | ipykernel @ file:///C:/b/abs_b4f07tbsyd/croot/ipykernel_1672767104060/work 33 | ipython @ file:///C:/b/abs_e5729i179y/croot/ipython_1694181400005/work 34 | ipywidgets==8.1.2 35 | jedi @ file:///C:/ci/jedi_1644315428289/work 36 | Jinja2==3.1.3 37 | joblib==1.3.2 38 | jupyter_client @ file:///C:/b/abs_a6h3c8hfdq/croot/jupyter_client_1699455939372/work 39 | jupyter_core @ file:///C:/b/abs_c769pbqg9b/croot/jupyter_core_1698937367513/work 40 | jupyterlab_widgets==3.0.10 41 | kiwisolver==1.4.5 42 | lazy_loader==0.3 43 | MarkupSafe==2.1.5 44 | matplotlib==3.8.3 45 | matplotlib-inline @ file:///C:/ci/matplotlib-inline_1661915841596/work 46 | menuinst @ file:///C:/ci/menuinst_1631733438520/work 47 | mpmath==1.3.0 48 | munch==4.0.0 49 | nest-asyncio @ file:///C:/b/abs_65d6lblmoi/croot/nest-asyncio_1708532721305/work 50 | networkx==3.2.1 51 | numpy==1.26.4 52 | opencv-python==4.9.0.80 53 | packaging @ file:///C:/b/abs_cc1h2xfosn/croot/packaging_1710807447479/work 54 | pandas==2.2.2 55 | parso @ file:///opt/conda/conda-bld/parso_1641458642106/work 56 | pickleshare @ file:///tmp/build/80754af9/pickleshare_1606932040724/work 57 | pillow==10.2.0 58 | platformdirs @ file:///C:/b/abs_b6z_yqw_ii/croot/platformdirs_1692205479426/work 59 | pretrainedmodels==0.7.4 60 | prompt-toolkit @ file:///C:/b/abs_68uwr58ed1/croot/prompt-toolkit_1704404394082/work 61 | psutil @ file:///C:/Windows/Temp/abs_b2c2fd7f-9fd5-4756-95ea-8aed74d0039flsd9qufz/croots/recipe/psutil_1656431277748/work 62 | pure-eval @ file:///opt/conda/conda-bld/pure_eval_1646925070566/work 63 | pycosat @ file:///C:/b/abs_31zywn1be3/croot/pycosat_1696537126223/work 64 | pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work 65 | Pygments @ file:///C:/b/abs_fay9dpq4n_/croot/pygments_1684279990574/work 66 | pyOpenSSL @ file:///C:/b/abs_baj0aupznq/croot/pyopenssl_1708380486701/work 67 | pyparsing==3.1.2 68 | PySocks @ file:///C:/ci/pysocks_1605307512533/work 69 | python-dateutil @ file:///tmp/build/80754af9/python-dateutil_1626374649649/work 70 | pytz==2024.1 71 | pywin32==305.1 72 | PyYAML==6.0.1 73 | pyzmq @ file:///C:/b/abs_89aq69t0up/croot/pyzmq_1705605705281/work 74 | regex==2023.12.25 75 | requests @ file:///C:/b/abs_474vaa3x9e/croot/requests_1707355619957/work 76 | ruamel-yaml-conda @ file:///C:/ci/ruamel_yaml_1616016898638/work 77 | safetensors==0.4.2 78 | scikit-image==0.22.0 79 | scikit-learn==1.4.1.post1 80 | scipy==1.12.0 81 | seaborn==0.13.2 82 | six @ file:///tmp/build/80754af9/six_1644875935023/work 83 | stack-data @ file:///opt/conda/conda-bld/stack_data_1646927590127/work 84 | sympy==1.12 85 | threadpoolctl==3.4.0 86 | tifffile==2024.2.12 87 | timm==0.9.16 88 | tokenizers==0.15.2 89 | torch==2.2.1+cu118 90 | torch-summary==1.4.5 91 | torchaudio==2.2.1+cu118 92 | torchinfo==1.8.0 93 | torchvision==0.17.1 94 | tornado @ file:///C:/b/abs_0cbrstidzg/croot/tornado_1696937003724/work 95 | tqdm==4.66.2 96 | traitlets @ file:///C:/b/abs_e5m_xjjl94/croot/traitlets_1671143896266/work 97 | transformers @ git+https://github.com/huggingface/transformers@b109257f4fb8b1166e7c53cc5418632014ed53a5 98 | typing_extensions==4.10.0 99 | tzdata==2024.1 100 | urllib3 @ file:///C:/b/abs_4etpfrkumr/croot/urllib3_1707770616184/work 101 | wcwidth @ file:///Users/ktietz/demo/mc3/conda-bld/wcwidth_1629357192024/work 102 | wget==3.2 103 | widgetsnbextension==4.0.10 104 | win-inet-pton @ file:///C:/ci/win_inet_pton_1605306162074/work 105 | zipp @ file:///C:/b/abs_b0beoc27oa/croot/zipp_1704206963359/work 106 | zstandard==0.19.0 107 | -------------------------------------------------------------------------------- /simple_autoencoder_l2_loss.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohan696matlab/mvtec_anomalydetection/eee633e6acbbf00922a7a0d3f69a1d5ff1b4ec6f/simple_autoencoder_l2_loss.pth -------------------------------------------------------------------------------- /variational_autoencoder_l2_loss.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohan696matlab/mvtec_anomalydetection/eee633e6acbbf00922a7a0d3f69a1d5ff1b4ec6f/variational_autoencoder_l2_loss.pth --------------------------------------------------------------------------------