add notebooks with plots
Build Typst document / build_typst_documents (push) Successful in 12s

This commit is contained in:
lukas committed 2025-01-07 17:40:35 +01:00
1 parent a7b9fdb998
commit 9f133fead5
11 files changed
+1529 -4

No files matched your search

@@ -0,0 +1,485 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1400x1000 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Define data\n",
"bottle_data = {\n",
" \"ResNet50\": {\n",
" \"1,3,5 shots normal\": [0.5892857142857143, 0.7321428571428571, 0.75],\n",
" \"inbalanced - more good shots\": [0.75, 0.732, 0.696, 0.696],\n",
" \"2 ways only detect if faulty or not\": [0.8395, 0.8315, 0.8031],\n",
" \"inbalance 2 way\": [0.8031, 0.81893, 0.8336, 0.8031],\n",
" \"only faulty class detect\": [0.7638, 0.7428, 0.787]\n",
" },\n",
" \"P>M>F\": {\n",
" \"1,3,5 shots normal\": [0.67910401, 0.71710526, 0.78860294],\n",
" \"inbalanced - more good shots\": [0.78768382, 0.78860294, 0.75827206, 0.74356618],\n",
" \"2 ways only detect if faulty or not\": [0.86422306, 0.93201754, 0.93933824],\n",
" \"inbalance 2 way\": [0.92371324, 0.87867647, 0.86397059, 0.87775735],\n",
" \"only faulty class detect\": [0.57380952, 0.76705653, 0.84191176]\n",
" },\n",
" \"CAML\": {\n",
" \"1,3,5 shots normal\": [0.40740741, 0.39726027, 0.30769231],\n",
" \"2 ways only detect if faulty or not\": [0.79012346, 0.84415584, 0.87671233],\n",
" \"only faulty class detect\": [0.58064516, 0.51785714, 0.52]\n",
" }\n",
"}\n",
"\n",
"cable_data = {\n",
" \"ResNet50\": {\n",
" \"1,3,5 shots normal\": [0.21808, 0.43815, 0.4321478],\n",
" \"inbalanced - more good shots\": [0.4321478, 0.432986, 0.42340, 0.4464635],\n",
" \"2 ways only detect if faulty or not\": [0.8592, 0.8772, 0.8495],\n",
" \"inbalance 2 way\": [0.8495, 0.8180, 0.7460, 0.6846],\n",
" \"only faulty class detect\": [0.240, 0.4740, 0.4805]\n",
" },\n",
" \"P>M>F\": {\n",
" \"1,3,5 shots normal\": [0.25199021, 0.44388328, 0.46975059],\n",
" \"inbalanced - more good shots\": [0.50425859, 0.48023277, 0.43118282, 0.41842534],\n",
" \"2 ways only detect if faulty or not\": [0.79263485, 0.8707712, 0.86756514],\n",
" \"inbalance 2 way\": [0.86966158, 0.80142425, 0.80961366, 0.66028834],\n",
" \"only faulty class detect\": [0.24383256, 0.43800505, 0.51304563]\n",
" },\n",
" \"CAML\": {\n",
" \"1,3,5 shots normal\": [0.24031008, 0.19834711, 0.15929204],\n",
" \"2 ways only detect if faulty or not\": [0.57364341, 0.54545455, 0.59292035],\n",
" \"only faulty class detect\": [0.12962963, 0.36363636, 0.58823529]\n",
" }\n",
"}\n",
"# Prepare the data\n",
"measurement_types = [\n",
" \"1,3,5 shots normal\",\n",
" \"inbalanced - more good shots\",\n",
" \"2 ways only detect if faulty or not\",\n",
" \"inbalance 2 way\",\n",
" \"only faulty class detect\"\n",
"]\n",
"\n",
"models = [\"ResNet50\", \"P>M>F\", \"CAML\"]\n",
"\n",
"# Create subplots\n",
"fig, axes = plt.subplots(3, 2, figsize=(14, 10))\n",
"axes = axes.flatten()\n",
"\n",
"# Loop through each measurement type\n",
"for i, measurement in enumerate(measurement_types):\n",
" ax = axes[i]\n",
" for model in models:\n",
" # Get the bottle and cable data for the current measurement and model\n",
" bottle_accuracy = bottle_data[model].get(measurement, [])\n",
" cable_accuracy = cable_data[model].get(measurement, [])\n",
" \n",
" # Plot both bottle and cable data\n",
" ax.plot(bottle_accuracy, marker='o', label=f'{model} - Bottle', linestyle='-')\n",
" \n",
" ax.set_title(measurement)\n",
" ax.set_xlabel(\"Shots / Samples\")\n",
" ax.set_ylabel(\"Accuracy\")\n",
" ax.legend()\n",
" ax.grid(True)\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([5,10,15, 30], data[model].get(\"inbalanced - more good shots\", []), marker='o', label=f'Inbalanced (more good shots) - 9 way', linestyle='-')\n",
"ax.plot([5,10,15, 30], data[model].get(\"inbalance 2 way\", []), marker='o', label=f'faulty or not - 2 way', linestyle='-')\n",
"\n",
"ax.set_title(f'{model} - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(4.5, 30.5), xticks=[5,10,15, 30])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"{model}-{imgclass}-inbalanced.png\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = bottle_data\n",
"imgclass = \"bottle\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([1,3,5], data[model].get(\"1,3,5 shots normal\", []), marker='o', label=f'Normal all classes - 4 way', linestyle='-')\n",
"ax.plot([1,3,5], data[model].get(\"2 ways only detect if faulty or not\", []), marker='o', label=f'faulty or not - 2 way', linestyle='-')\n",
"ax.plot([1,3,5], data[model].get(\"only faulty class detect\", []), marker='o', label=f'faulty classes - 3 way', linestyle='-')\n",
"\n",
"ax.set_title(f'{model} - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(0.75, 5.25), xticks=[1,3,5])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"{model}-{imgclass}.png\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "x and y must have same first dimension, but have shapes (3,) and (4,)",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[2], line 10\u001b[0m\n\u001b[1;32m 7\u001b[0m imgclass \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbottle\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;66;03m# Plot both bottle and cable data\u001b[39;00m\n\u001b[0;32m---> 10\u001b[0m \u001b[43max\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mResNet50\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43minbalanced - more good shots\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmarker\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mo\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlabel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mResNet50\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlinestyle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m-\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m ax\u001b[38;5;241m.\u001b[39mplot([\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m3\u001b[39m,\u001b[38;5;241m5\u001b[39m], data[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mP>M>F\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minbalanced - more good shots\u001b[39m\u001b[38;5;124m\"\u001b[39m, []), marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mo\u001b[39m\u001b[38;5;124m'\u001b[39m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mP>M>F\u001b[39m\u001b[38;5;124m'\u001b[39m, linestyle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 12\u001b[0m ax\u001b[38;5;241m.\u001b[39mplot([\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m3\u001b[39m,\u001b[38;5;241m5\u001b[39m], data[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCAML\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minbalanced - more good shots\u001b[39m\u001b[38;5;124m\"\u001b[39m, []), marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mo\u001b[39m\u001b[38;5;124m'\u001b[39m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCAML\u001b[39m\u001b[38;5;124m'\u001b[39m, linestyle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
"File \u001b[0;32m/usr/lib/python3.13/site-packages/matplotlib/axes/_axes.py:1777\u001b[0m, in \u001b[0;36mAxes.plot\u001b[0;34m(self, scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1534\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1535\u001b[0m \u001b[38;5;124;03mPlot y versus x as lines and/or markers.\u001b[39;00m\n\u001b[1;32m 1536\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1774\u001b[0m \u001b[38;5;124;03m(``'green'``) or hex strings (``'#008000'``).\u001b[39;00m\n\u001b[1;32m 1775\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1776\u001b[0m kwargs \u001b[38;5;241m=\u001b[39m cbook\u001b[38;5;241m.\u001b[39mnormalize_kwargs(kwargs, mlines\u001b[38;5;241m.\u001b[39mLine2D)\n\u001b[0;32m-> 1777\u001b[0m lines \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_lines(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, data\u001b[38;5;241m=\u001b[39mdata, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)]\n\u001b[1;32m 1778\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[1;32m 1779\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madd_line(line)\n",
"File \u001b[0;32m/usr/lib/python3.13/site-packages/matplotlib/axes/_base.py:297\u001b[0m, in \u001b[0;36m_process_plot_var_args.__call__\u001b[0;34m(self, axes, data, return_kwargs, *args, **kwargs)\u001b[0m\n\u001b[1;32m 295\u001b[0m this \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 296\u001b[0m args \u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m1\u001b[39m:]\n\u001b[0;32m--> 297\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_plot_args\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 298\u001b[0m \u001b[43m \u001b[49m\u001b[43maxes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mthis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mambiguous_fmt_datakey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mambiguous_fmt_datakey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 299\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreturn_kwargs\u001b[49m\n\u001b[1;32m 300\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/usr/lib/python3.13/site-packages/matplotlib/axes/_base.py:494\u001b[0m, in \u001b[0;36m_process_plot_var_args._plot_args\u001b[0;34m(self, axes, tup, kwargs, return_kwargs, ambiguous_fmt_datakey)\u001b[0m\n\u001b[1;32m 491\u001b[0m axes\u001b[38;5;241m.\u001b[39myaxis\u001b[38;5;241m.\u001b[39mupdate_units(y)\n\u001b[1;32m 493\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m!=\u001b[39m y\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]:\n\u001b[0;32m--> 494\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx and y must have same first dimension, but \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave shapes \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00my\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m y\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m2\u001b[39m:\n\u001b[1;32m 497\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx and y can be no greater than 2D, but have \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 498\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mshapes \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00my\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[0;31mValueError\u001b[0m: x and y must have same first dimension, but have shapes (3,) and (4,)"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = bottle_data\n",
"imgclass = \"bottle\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([1,3,5], data[\"ResNet50\"].get(\"1,3,5 shots normal\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"ax.plot([1,3,5], data[\"P>M>F\"].get(\"1,3,5 shots normal\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([1,3,5], data[\"CAML\"].get(\"1,3,5 shots normal\", []), marker='o', label=f'CAML', linestyle='-')\n",
"\n",
"ax.set_title(f'{model} - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(0.75, 5.25), xticks=[1,3,5])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"{model}-{imgclass}.png\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABW0AAAPdCAYAAADxjUr8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gUVd/H4c/uplcICUloSegl9Bp670h5UZoCAoIiIAJSFIQAgoBUJYhKEUFFRVTKAwQhdAQEFAi9l9AhBRKy2Z33jyEry24aqSS/22su2bMzZ86cbDaz3z1zRqMoioIQQgghhBBCCCGEEEKIHEGb3Q0QQgghhBBCCCGEEEII8R8JbYUQQgghhBBCCCGEECIHkdBWCCGEEEIIIYQQQgghchAJbYUQQgghhBBCCCGEECIHkdBWCCGEEEIIIYQQQgghchAJbYUQQgghhBBCCCGEECIHkdBWCCGEEEIIIYQQQgghchAJbYUQQgghhBBCCCGEECIHkdBWCCGEEEIIIYQQQgghchAJbYUQL4Xo6GhGjx5Ny5Yt8fLyQqPRMGnSpFRvf/ToUdq1a0exYsVwdHTEw8ODoKAgVq5cmartw8LC0Gg0Vpf9+/e/4FGZ8/f3p3379hlSF8CNGzeYNGkSR48ezbA6c6vGjRvTuHHj7G6GEEIIIZ6zfPlyNBoNly5dSvO2iedvv/zyS4a1J7HOsLCwDKszu0yaNAmNRpPdzRApyMjXXOPGjQkMDEx/o556/PgxkyZNyhW/D0LkRDbZ3QAhhEiNe/fu8dVXX1G5cmU6derEN998k6btHz58SNGiRenRoweFCxfm0aNHrFq1ijfeeINLly4xfvz4VNUzbdo0mjRpYlaWkSc+GenGjRsEBwfj7+9PlSpVsrs5QgghhBBp1q5dO/bt24evr292N0UI8ZzHjx8THBwMIAMghMgEEtoKIV4Kfn5+PHjwAI1Gw927d9Mc2lobSdm+fXsuXrzIV199lerQtlSpUtSpUydN+xZpoygKcXFxODo6ZndThBBCCJHNvLy88PLyyu5miJeAnEMKIXIbmR5BCPFSSJyKIKN5enpiY5P5319duHCB7t27U6hQIezt7fH29qZZs2ZWpy7YtGkT1apVw9HRkbJly7J06VKLdY4fP07Hjh3Jnz8/Dg4OVKlShW+//db0fFhYGDVr1gTgzTffNPVf4pQSaWnPs/r27YuLiwvnzp2jbdu2uLi4ULRoUUaOHMmTJ0/M1r1//z6DBw+mcOHC2NnZUbx4cT766COL9TQaDUOGDOHLL7+kXLly2Nvb8+2335ouh9y2bRtvvfUWBQoUwM3Njd69e/Po0SNu3rzJa6+9Rr58+fD19WXUqFHo9XqzuoODg6lduzYeHh64ublRrVo1lixZgqIoyR6nEEIIIXIGa9MjJF7iffDgQRo0aICTkxPFixfn008/xWg0WtQRFxfHiBEj8PHxwdHRkUaNGnHkyBGzdQ4dOkT37t3x9/fH0dERf39/evToweXLl1NsY2q3TTyW7du388477+Dp6UmBAgXo0qULN27csKj3+++/JygoCBcXF1xcXKhSpQpLliwxW2fr1q00a9YMNzc3nJycqFevHn/++adFXRs2bKBKlSrY29sTEBDAZ599luJxvYiMOH9L7zkkwNmzZ+nZsycFCxbE3t6ecuXKsXDhwlQdw8OHD+nfvz8eHh64uLjQrl07Lly4YHV6tt27d9OsWTNcXV1xcnKibt26bNiwwaLOlM7dE506dYrWrVvj5OSEp6cnb7/9NtHR0alq9507dxg4cCBFixbF3t4eLy8v6tWrx9atWy3WTc3vzpUrV3j99dfN+nD27Nmm9S5dumT6QiU4ONj0eaNv375pbo8QwjoZaSuEyFOMRiNGo5EHDx7w888/s3nzZr744otUb//uu+/SvXt3nJycCAoKYsKECdSvXz/F7dq2bYvBYGDmzJkUK1aMu3fvsnfvXh4+fGi23j///MPIkSMZO3Ys3t7efPPNN/Tv35+SJUvSsGFDAE6fPk3dunUpWLAgCxYsoECBAqxcuZK+ffty69YtRo8eTbVq1Vi2bBlvvvkm48ePp127dgAUKVIkTe2xRq/X88orr9C/f39GjhzJzp07mTJlCu7u7nz88ceA+uGoSZMmnD9/nuDgYCpVqsSuXbuYPn06R48etTiZ/e2339i1axcff/wxPj4+FCxYkIMHDwIwYMAAunTpwo8//siRI0f48MMPSUhI4PTp03Tp0oWBAweydetWZsyYQaFChRgxYoSp3kuXLjFo0CCKFSsGwP79+xk6dCjXr183tVUIIYQQL5+bN2/Sq1cvRo4cycSJE1m7di3jxo2jUKFC9O7d22zdDz/8kGrVqvHNN98QGRnJpEmTaNy4MUeOHKF48eKAes5QpkwZunfvjoeHBxERESxatIiaNWsSHh6Op6dnkm1J67YDBgygXbt2fP/991y9epUPPviA119/nW3btpnW+fjjj5kyZQpdunRh5MiRuLu7c/z4cbMgeOXKlfTu3ZuOHTvy7bffYmtry+LFi2nVqhWbN2+mWbNmAPz555907NiRoKAgfvzxR9M54K1bt9L9c0jKi56/ZcQ5ZHh4OHXr1qVYsWLMnj0bHx8fNm/ezLBhw7h79y4TJ05Mst1Go5EOHTpw6NAhJk2aRLVq1di3bx+tW7e2WHfHjh20aNGCSpUqsWTJEuzt7QkJCaFDhw788MMPdOvWDUjduTvArVu3aNSoEba2toSEhODt7c2qVasYMmRIqvr8jTfe4PDhw3zyySeULl2ahw8fcvjwYe7du2e2Xmp+d+7cuUPdunWJj49nypQp+Pv7s379ekaNGsX58+cJCQnB19eXTZs20bp1a/r378+AAQMATEFuatsjhEiGIoQQL5k7d+4ogDJx4sQ0bzto0CAFUADFzs5OCQkJSdV2hw8fVt577z1l7dq1ys6dO5WlS5cq5cqVU3Q6nbJp06Zkt717964CKPPmzUt2PT8/P8XBwUG5fPmyqSw2Nlbx8PBQBg0aZCrr3r27Ym9vr1y5csVs+zZt2ihOTk7Kw4cPFUVRlIMHDyqAsmzZshdqjzV9+vRRAOWnn34yK2/btq1SpkwZ0+Mvv/zS6nozZsxQAGXLli2mMkBxd3dX7t+/b7busmXLFEAZOnSoWXmnTp0UQJkzZ45ZeZUqVZRq1aol2XaDwaDo9Xpl8uTJSoECBRSj0Wh6rlGjRkqjRo2SP3ghhBBCZLnE84GLFy+ayho1aqQAyl9//WW2bvny5ZVWrVqZHm/fvl0BlGrVqpn93b906ZJia2urDBgwIMn9JiQkKDExMYqzs7Myf/58izq3b9+e5m0Tj2Xw4MFm68+cOVMBlIiICEVRFOXChQuKTqdTevXqleQ+Hj16pHh4eCgdOnQwKzcYDErlypWVWrVqmcpq166tFCpUSImNjTWVRUVFKR4eHkpGRwLpPX/LiHPIVq1aKUWKFFEiIyPNyocMGaI4ODhYrP+sDRs2KICyaNEis/Lp06dbfP6oU6eOUrBgQSU6OtpUlpCQoAQGBipFihQxveZSe+4+ZswYRaPRKEePHjVbr0WLFim+5hRFUVxcXJThw4cnu05qf3fGjh1rdb133nlH0Wg0yunTpxVFSf5zWWraI4RInkyPIITIUz788EMOHjzIhg0b6NevH0OGDEnV5WFVq1Zl3rx5dOrUiQYNGvDmm2+yd+9efH19Td+OJ8XDw4MSJUowa9Ys5syZw5EjR6xeugdQpUoV06hQAAcHB0qXLm02qmLbtm00a9aMokWLmm3bt29fHj9+zL59+zKsPdZoNBo6dOhgVlapUiWLNjo7O9O1a1eLNgIWl+01bdqU/PnzW91f+/btzR6XK1cOwDR6+Nny5y9D3LZtG82bN8fd3R2dToetrS0ff/wx9+7d4/bt2ykcqRBCCCFyKh8fH2rVqmVW9vz5SKKePXuaTbPl5+dH3bp12b59u6ksJiaGMWPGULJkSWxsbLCxscHFxYVHjx5x8uTJZNuS1m1feeUVi3YDpraHhoZiMBh49913k9zn3r17uX//Pn369CEhIcG0GI1GWrduzcGDB3n06BGPHj3i4MGDdOnSBQcHB9P2rq6uFudz1iiKYlZ/QkJCitvAi5+/pfccMi4ujj///JPOnTvj5ORk1u62bdsSFxfH/v37k2z3jh07AHjttdfMynv06GH2+NGjR/z111907doVFxcXU7lOp+ONN97g2rVrnD592nRMqTl33759OxUqVKBy5cpm6/Xs2TPJ9j6rVq1aLF++nKlTp7J//36LaScSpeZ3Z9u2bZQvX95ivb59+6Ioitmo8PS2RwiRNAlthRB5SrFixahRowZt27Zl0aJFDBw4kHHjxnHnzp0015UvXz7at2/Pv//+S2xsbJLraTQa/vzzT1q1asXMmTOpVq0aXl5eDBs2zGKOqgIFClhsb29vb1b/vXv3rN5BuVChQqbnk5OW9ljj5ORkdtKf2Ma4uDizNvr4+FjMQ1ywYEFsbGws2pjcHaE9PDzMHtvZ2SVZ/mwbDhw4QMuWLQH4+uuv2bNnDwcPHuSjjz4CSPZnJoQQQoicLTXnTIl8fHyslj17PtKzZ0+++OILBgwYwObNmzlw4AAHDx7Ey8srxXOGtG77fNvt7e2B/85NEs9LE6e1siZxaoOuXbtia2trtsyYMQNFUbh//z4PHjzAaDQm2QcpSZx24dklNV70/C2955D37t0jISGBzz//3KLdbdu2BeDu3btJtvvevXvY2NhYtNPb29vs8YMHD1AUJVXn5Kk9d0889uel5ucEsHr1avr06cM333xDUFAQHh4e9O7dm5s3b5qtlxWfN9LSHiFE0mROWyFEnlarVi2+/PJLLly48EJ3Jlae3tAqpZuk+fn5mW4ccebMGX766ScmTZpEfHw8X375ZZr2WaBAASIiIizKE29gkdyca5nRnqTa+Ndff6Eoilnf3L5Line truncated
"text/plain": [
"<Figure size 1400x1000 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, axes = plt.subplots(3, 2, figsize=(14, 10))\n",
"axes = axes.flatten()\n",
"\n",
"# Loop through each measurement type\n",
"for i, measurement in enumerate(measurement_types):\n",
" ax = axes[i]\n",
" for model in models:\n",
" # Get the bottle and cable data for the current measurement and model\n",
" bottle_accuracy = bottle_data[model].get(measurement, [])\n",
" cable_accuracy = cable_data[model].get(measurement, [])\n",
" \n",
" # Plot both bottle and cable data\n",
" ax.plot(cable_accuracy, marker='o', label=f'{model} - Cable', linestyle='-')\n",
" \n",
" ax.set_title(measurement)\n",
" ax.set_xlabel(\"Shots / Samples\")\n",
" ax.set_ylabel(\"Accuracy\")\n",
" ax.legend()\n",
" ax.grid(True)\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAABzXUlEQVR4nO3deVxU5eIG8OfMwrAPAsqwiaiksrhvaJpW4lJuLVqZmUtlm3lp05s3t7pq91YuN/m1qKRWWplmXTKxcruaprlj5pbKLigM6zDL+f0xMDDOgDM4MDA+3z7zwTnnPee8ox14eN/zvq8giqIIIiIiImr2JM6uABERERE5BoMdERERkYtgsCMiIiJyEQx2RERERC6CwY6IiIjIRTDYEREREbkIBjsiIiIiF8FgR0REROQiGOyIiIiIXASDHRE1muTkZAiCYHrJZDKEhYVh8uTJyMjIuOXz79y503Tu5ORkq2XuvvtuCIKANm3a3PL1AKBNmzZmn6nmq7i42CHXcLR58+ZBEATk5eXdtOygQYMwaNCghq8UETmEzNkVIKLbz5o1a9CxY0eUlZVh9+7dWLRoEXbt2oUTJ07Ay8vrls/v4+ODVatW4cknnzTbfvHiRezcuRO+vr63fI2a+vfvj3//+98W2z09PR16HSKim2GwI6JGFxsbi549ewIABg8eDL1ej4ULF2LLli2YMGECysrKkJeXh/Dw8Hqdf/z48fjkk09w9uxZREVFmbavXr0aoaGhiIuLQ1pamtkxZ8+eRfv27SEIgt3X8/PzQ9++fetVVyIiR2JXLBE5XVUounTpEgAgJycHERERGDhwIJKSkmzqMqxpyJAhCA8Px+rVq03bDAYDPv30U0yaNAkSieW3vqeeegoRERF47bXXcOTIkVv4NA3n888/R3x8PLy9veHt7Y2uXbti1apVpv2pqakYPXo0wsLC4O7ujvbt2+OZZ56p9e/vypUreOCBB+Dr6wulUonHH38cV69evWk9Kioq8NZbb6Fjx45QKBRo2bIlJk+ebNOxRNSwGOyIyOnOnTsHAGjZsiUAIDw8HJs3b0ZoaCheffVVBAcHY8SIEVi3bh2Kiopuej6JRIInn3wSa9euhV6vBwBs374d6enpmDx5stVjVq5ciccffxybNm1C9+7d0alTJyxYsABnz5696fVEUYROpzN7GQwGWz++Td58801MmDABISEhSE5OxubNmzFp0iRTGAaA8+fPIz4+HklJSdi+fTvefPNNHDhwAHfeeSe0Wq3FOceOHYv27dvj66+/xrx587BlyxYMHTrUatkqBoMBo0ePxuLFi/HYY4/hv//9LxYvXozU1FQMGjQIZWVlDv3cRGQnkYiokaxZs0YEIP7666+iVqsVi4qKxO+//15s2bKl6OPjI2ZnZ1scU1JSIm7cuFEcO3as6O7uLnp4eIgPP/yw+M0334jl5eVmZX/55RcRgPjVV1+JFy5cEAVBEL///ntRFEXx4YcfFgcNGiSKoijed999YkRERK31PHjwoJiYmCiGhYWJAMQePXqI7777rpienm5RNiIiQgRg8XrjjTdu4W/K3IULF0SpVCpOmDDB5mMMBoOo1WrFS5cuiQDEb7/91rRv7ty5IgDxb3/7m9kxn332mQhAXL9+vWnbXXfdJd51112m91988YUIQNy0aZPZsb/99psIQFy5cqWdn46IHIktdkTU6Pr27Qu5XA4fHx/cf//9UKlU+OGHHxAUFGRR1tPTE+PGjcM333yDnJwcfPjhhygpKcG4ceMQFBSE//3vf1avERkZiUGDBmH16tXIz8/Ht99+iylTpthUv169euHdd9/F5cuXsXv3bvTt2xdLlixB69at8fLLL1uUv/POO/Hbb7+ZvZ577rk6r6HX621u4UtNTYVer8fzzz9f5zlzc3Mxffp0hIeHQyaTQS6XIyIiAgBw+vRpi/ITJkwwez9u3DjIZDL88ssvtV7j+++/h5+fH0aOHGlW/65du0KlUmHnzp111pGIGhYHTxBRo1u7di06deoEmUyGoKAgBAcH23RcSUkJCgoKUFhYCL1eDx8fH7i5udVafurUqZg8eTLee+89eHh44KGHHrKrnlqtFoWFhSgoKEBZWRnc3Nzg4+NjUU6pVJoGg9iqXbt2Zt2oc+fOxbx586yWrXp2LSwsrNbzGQwGJCQkIDMzE//4xz8QFxcHLy8vGAwG9O3b12oXqUqlMnsvk8kQEBCA/Pz8Wq+Tk5ODgoKCWv/e7X0ekogci8GOiBpdp06dbA5CeXl52LRpEzZs2IDdu3ejRYsWePDBB/H2229j4MCBdY5ifeCBB/D8889j8eLFeOqpp+Dh4XHT6+l0Ovz000/YuHEjNm/ejKKiItx9991YtmwZHnzwQYdNlfLdd99Bo9GY3oeEhNRaturZw/T09FpHCp88eRLHjh1DcnIyJk2aZNpe9fyiNdnZ2QgNDTW91+l0yM/PR0BAQK3HBAYGIiAgANu2bbO631rwJaLGw2BHRE1ORUUF1q9fj40bN+Lnn3+GQqHAqFGj8O2332Lo0KGQy+U2ncfDwwNvvvkmdu/ejWeffbbOsvv378enn36KTZs2IS8vD3379sX8+fMxfvx4q13EtyouLs7msgkJCZBKpUhKSkJ8fLzVMlUBV6FQmG3/8MMPaz3vZ599hh49epjef/nll9DpdHVOSHz//fdjw4YN0Ov16NOnj82fgYgaB4MdETU5mZmZmD59OoYOHYq1a9di9OjR9Z7sNzExEYmJiTctN3v2bOTl5WHmzJl47LHHEBkZWa/rNYQ2bdrg73//OxYuXIiysjI8+uijUCqVSEtLQ15eHubPn4+OHTuiXbt2mDVrFkRRhL+/P7777jukpqbWet5vvvkGMpkMQ4YMwalTp/CPf/wDXbp0wbhx42o95pFHHsFnn32GESNG4KWXXkLv3r0hl8uRnp6OX375BaNHj8bYsWMb4q+BiGzAYEdETU5wcDCys7Ph7+/faNf84osvbH7WzxkWLFiAqKgorFixAhMmTIBMJkNUVBRmzJgBAJDL5fjuu+/w0ksv4ZlnnoFMJsO9996LHTt2oHXr1lbP+c0332DevHlISkqCIAgYOXIkli5dWudzi1KpFFu3bsWyZcuwbt06LFq0yLQ03F133WVXSyQROZ4giqLo7EoQERER0a3jdCdERERELoLBjoiIiMhFMNgRERERuQgGOyIiIiIXwWBHRERE5CIY7IiIiIhcBOexs8JgMCAzMxM+Pj51LldERERE1NBEUURRURFCQkIgkdTdJsdgZ0VmZmat6zESEREROcOVK1cQFhZWZxkGOyuqFrG+cuWKwxb8tpVWq8X27duRkJBg83qYRNQ08X4mch3OvJ/VajXCw8NN+aQuDHZWVHW/+vr6OiXYeXp6wtfXlz8IiJo53s9ErqMp3M+2PB7GwRNERERELoLBjoiIiMhFMNgRERERuQgGOyIiIiIXwWBHRERE5CIY7IiIiIhcBIMdERERkYtgsCMiIiJyEQx2RERERC6CwY6IiIjIRTDYERE1AL1Bj0M5h3Cs4hgO5RyC3qB3dpWI6DbAtWKJiBxsx6UdWHxwMXJKcwAAX/30FYI8gzCr9yzcG3Gvk2tHRK6MLXZERA6049IOJO5MNIW6KrmluUjcmYgdl3Y4qWZEdDtgsCMichC9QY/FBxdDhGixr2rbkoNL2C1LRA2GXbFERDehM+hQqClEgaYA18uvG79qrqOg3PxrelG6RUtdTSJEZJdmY87/5qBnUE8Eewcj2Mv4cpe5N+InIiJXxWBHRLcVg2hAUUVRdUCrI6hV7VdXqB1ah+8vfI/vL3xvts3f3R8hXiGmsBfiHQKVlwohXiEI8Q6Br5svBEFwaD2IyPUw2BFRsyWKIoq1xRZBrObXG/9coCmAQTTYfS0BApQKJfwUfsaXux9aKFpUf1X4Ia8sD8uPLL/puQaHD4bOoENWSRYyizNRqivFtfJruFZ+DSfzT1o9xlPmaWzd8w62CIDBXsFo6dESUonU7s9FRK6FwY6ImgRRFFGmK6u99cxKeCsoL4BO1NXrej5yH7Nw5qe4Iajd8NXXzfemwUlv0GPjmY3ILc21+pydAAFBnkF4f9D7pnOJogh1hdoU8rJKspBVnIXMkkxkFWchqyQL+eX5KNWV4nzheZwvPG/12jJBhiCvIIvWvqogqPJSsbuX6DbAYEdEDUKj1+B6+XUUagptDmoavaZe1/KQeVgPZQo/tHC3/Kp0U0IulTv4EwNSiRSzes9C4s6/QRBFiDW6TgVRBATg9d6vmwVEQTC2BCoVSnT072j1vOW6cmSXZCOzJNP4tTIAVn3NKcmBTtQhozgDGcUZQC2P+Vnr7q16xo/dvUSugcGOiG5Ka9AaA9qNz6XV8Xxama6sXtdyk7ihhXuL6iB2Q2Cr6gqt2u+n8GtSLVH3lpTivZw8LA7wQ46s+ltskF6P1/MLcG9Jqd3ndJe5o42yDdoo21jdrzfocbXsqin01Wzts7e711prX1UQZHcvUdPHYEd0m9Eb9FBXqG/ailZzW5G2qF7Xkgmy6m7OWoLajS1sHjKP5ttqZNAD217HvaWlGFxait/dFbgqlaKlXo/u5RpIAeD7mYDcA5ApAEEKSGSVL4nxq2mb1PgyK3PjNuNXqUQKlZcKKi8VurbqalGtm3X3ZpZk4lr5NZTqSnGu4BzOFZyz+vFu7O6tau2rGQAVUkVD/g0TOYdBD+HSXoRe2w/hki/QdqDx/muCGOyImrGqEZ62tKJVDRwo1BRaff7rZiSCBEo35U27OWuGN2+5d/MNafVxaR+gzgQASAH0KrfStVyaD3z2kIMvLNQZ/gSJDEpBAqVEho5WyyhQLglFtgTIhAFZggFZgh5Z0CNTrEAWtMgRtbZ190oUCJF5I1jmjRC5D4LdfBEsVyLETYlghR98ZZ4QpPIaIVZqCqjV9ZFUf54bt90YfG0Jw7fT/4PkeGlbgW2Line truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([1,3,5], data[\"CAML\"].get(\"2 ways only detect if faulty or not\", []), marker='o', label=f'CAML', linestyle='-')\n",
"ax.plot([1,3,5], data[\"P>M>F\"].get(\"2 ways only detect if faulty or not\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([1,3,5], data[\"ResNet50\"].get(\"2 ways only detect if faulty or not\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"\n",
"\n",
"ax.set_title(f'{model} - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(0.75, 5.25), xticks=[1,3,5])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"comparison-2way-{imgclass}.png\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([5, 10, 15, 30], data[\"P>M>F\"].get(\"inbalanced - more good shots\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([5, 10, 15, 30], data[\"ResNet50\"].get(\"inbalanced - more good shots\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"\n",
"\n",
"ax.set_title(f'Inbalanced - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(4.75, 30.25), xticks=[5,10,15,30])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"inbalanced-{imgclass}.png\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([5, 10, 15, 30], data[\"P>M>F\"].get(\"inbalance 2 way\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([5, 10, 15, 30], data[\"ResNet50\"].get(\"inbalance 2 way\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"\n",
"\n",
"ax.set_title(f'Inbalanced 2-Way - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(4.75, 30.25), xticks=[5,10,15,30])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"inbalanced-2way-{imgclass}.png\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"#only faulty class detect\n",
"#1,3,5 shots normal\n",
"ax.plot([1,3,5], data[\"CAML\"].get(\"only faulty class detect\", []), marker='o', label=f'CAML', linestyle='-')\n",
"ax.plot([1,3,5], data[\"P>M>F\"].get(\"only faulty class detect\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([1,3,5], data[\"ResNet50\"].get(\"only faulty class detect\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"\n",
"\n",
"ax.set_title(f'8-Way - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(0.75, 5.25), xticks=[1,3,5])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"faultclasses-{imgclass}.png\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@@ -0,0 +1,895 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import numpy as np\n",
"import time\n",
"import random\n",
"import torch\n",
"import torchvision.transforms as transforms\n",
"#import gradio as gr\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from models import get_model\n",
"from dotmap import DotMap\n",
"from PIL import Image"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pretrained weights found at dino_vitbase16_pretrain/dino_vitbase16_pretrain.pth\n"
]
}
],
"source": [
"args = DotMap()\n",
"args.deploy = 'finetune'\n",
"args.arch = 'dino_base_patch16'\n",
"args.no_pretrain = True\n",
"small = \"https://huggingface.co/hushell/pmf_metadataset_dino/resolve/main/md_full_128x128_dinosmall_fp16_lr5e-5/best.pth?download=true\"\n",
"full = 'https://huggingface.co/hushell/pmf_metadataset_dino/resolve/main/md_full_128x128_dinobase_fp16_lr5e-5/best.pth?download=true'\n",
"args.resume = full\n",
"args.api_key = 'AIzaSyAFkOGnXhy-2ZB0imDvNNqf2rHb98vR_qY'\n",
"args.cx = '06d75168141bc47f1'\n",
"\n",
"args.ada_steps = 100\n",
"#args.ada_lr= 0.0001\n",
"#args.aug_prob = .95\n",
"args.ada_lr= 0.0001\n",
"args.aug_prob = .9\n",
"args.aug_types = [\"color\", \"translation\"]\n",
"\n",
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
"model = get_model(args)\n",
"model.to(device)\n",
"checkpoint = torch.hub.load_state_dict_from_url(args.resume, map_location='cpu')\n",
"model.load_state_dict(checkpoint['model'], strict=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"# image transforms\n",
"def test_transform():\n",
" def _convert_image_to_rgb(im):\n",
" return im.convert('RGB')\n",
"\n",
" return transforms.Compose([\n",
" transforms.Resize(224),\n",
" #transforms.CenterCrop(224),\n",
" _convert_image_to_rgb,\n",
" transforms.ToTensor(),\n",
" transforms.Normalize(mean=[0.485, 0.456, 0.406],\n",
" std=[0.229, 0.224, 0.225]),\n",
" ])\n",
"\n",
"preprocess = test_transform()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
"def build_sup_set(shotnr, type_name, binary, good_sample_nr):\n",
" classes = next(os.walk(f'data_custom/{type_name}/test'))[1]\n",
" classes.remove(\"good\")\n",
"\n",
" supp_x = []\n",
" supp_y = []\n",
" mapping = {\n",
" \"good\" : 0\n",
" }\n",
"\n",
" # add good manually\n",
" x_good = [Image.open(f\"data_custom/{type_name}/train/good/{x:03d}.png\") for x in range(0, good_sample_nr)]\n",
" supp_x.extend([preprocess(x) for x in x_good]) # (3, H, W))\n",
" supp_y.extend([0] * good_sample_nr)\n",
" \n",
" for i,c in enumerate(classes):\n",
" #i-=1\n",
" x_im = [Image.open(f\"data_custom/{type_name}/test/{c}/{x:03d}.png\") for x in range(0, shotnr)]\n",
" supp_x.extend([preprocess(x) for x in x_im]) # (3, H, W))\n",
" if binary:\n",
" supp_y.extend([1] * shotnr)\n",
" mapping[\"anomaly\"] = 1\n",
" else:\n",
" supp_y.extend([i+1] * shotnr)\n",
" mapping[c] = i+1\n",
" \n",
" supp_x = torch.stack(supp_x, dim=0).unsqueeze(0).to(device) # (1, n_supp*n_labels, 3, H, W)\n",
" supp_y = torch.tensor(supp_y).long().unsqueeze(0).to(device) # (1, n_supp*n_labels)\n",
" return supp_x, supp_y, mapping\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"def build_test_set(shotnr, keyy, type):\n",
" _, _, files = next(os.walk(f\"data_custom/cable/test/{type}/\"))\n",
" file_count = len(files)\n",
" print(file_count)\n",
"\n",
" queries = [preprocess(Image.open(f\"data_custom/cable/test/{type}/{i:03d}.png\")).unsqueeze(0).unsqueeze(0).to(device) for i in range(shotnr,file_count)]\n",
" labels = [keyy for x in range(shotnr,file_count)]\n",
" return queries, labels\n",
"\n",
"def test(type, keyy, shotnr, folder):\n",
" predictions = []\n",
" _, _, files = next(os.walk(f\"data_custom/{folder}/test/{type}/\"))\n",
" file_count = len(files)\n",
" print(file_count)\n",
"\n",
" queries = [preprocess(Image.open(f\"data_custom/{folder}/test/{type}/{i:03d}.png\")).unsqueeze(0).unsqueeze(0).to(device) for i in range(shotnr,file_count)]\n",
" queries = torch.cat(queries)\n",
" with torch.cuda.amp.autocast(True):\n",
" output = model(supp_x, supp_y, queries) # (1, 1, n_labels)\n",
"\n",
" probs = output.softmax(dim=-1).detach().cpu().numpy()\n",
" predictions = np.argmax(probs, axis=2)\n",
" print()\n",
" return np.mean([x == keyy for x in predictions])\n",
" pass\n",
" \n",
"#def test2(folder):\n",
"# accs = []\n",
"# queries = []\n",
"# labels = []\n",
"# for t in next(os.walk(f'data_custom/cable/test'))[1]:\n",
"# q, l = build_test_set(shots, types.get(t, 1), t)\n",
"# queries+=q\n",
"# labels+=l\n",
"#\n",
"# queries = torch.cat(queries)\n",
"# labels = np.array(labels)\n",
"#\n",
"# with torch.cuda.amp.autocast(True):\n",
"# output = model(supp_x, supp_y, queries) # (1, 1, n_labels)\n",
"#\n",
"# probs = output.softmax(dim=-1).detach().cpu().numpy()\n",
"# predictions = np.argmax(probs, axis=2)\n",
"# print()\n",
"# return np.mean([predictions == labels])\n",
"# pass\n",
"\n",
"#print(f\"overall accuracy: {test(\"cable\")}\")\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry9: loss = 0.1475423127412796: 100%|██| 100/100 [00:29<00:00, 3.40it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_inner_insulation = 1.0\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry5: loss = 0.20609889924526215: 100%|█| 100/100 [00:29<00:00, 3.37it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for poke_insulation = 1.0\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry7: loss = 0.12025140225887299: 100%|█| 100/100 [00:29<00:00, 3.34it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cable_swap = 0.8571428571428571\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry5: loss = 0.2130972295999527: 100%|██| 100/100 [00:30<00:00, 3.30it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_outer_insulation = 1.0\n",
"58\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry53: loss = 0.13926956057548523: 100%|█| 100/100 [00:30<00:00, 3.30it/s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for good = 0.16981132075471697\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry7: loss = 0.16337624192237854: 100%|█| 100/100 [00:30<00:00, 3.28it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_cable = 1.0\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry6: loss = 0.16593313217163086: 100%|█| 100/100 [00:30<00:00, 3.27it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for combined = 1.0\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry8: loss = 0.16560573875904083: 100%|█| 100/100 [00:30<00:00, 3.27it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for bent_wire = 1.0\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp45, nQry5: loss = 0.18611018359661102: 100%|█| 100/100 [00:30<00:00, 3.28it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_wire = 0.8\n",
"overall accuracy: 0.8696615753219527\n",
"14\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry9: loss = 0.3357824385166168: 100%|██| 100/100 [00:33<00:00, 2.96it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_inner_insulation = 0.7777777777777778\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry5: loss = 0.3290153741836548: 100%|██| 100/100 [00:33<00:00, 2.96it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for poke_insulation = 0.6\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry7: loss = 0.22177687287330627: 100%|█| 100/100 [00:33<00:00, 2.96it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cable_swap = 0.8571428571428571\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry5: loss = 0.299775630235672: 100%|███| 100/100 [00:33<00:00, 2.96it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_outer_insulation = 1.0\n",
"58\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry53: loss = 0.31954386830329895: 100%|█| 100/100 [00:33<00:00, 2.98it/s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for good = 0.32075471698113206\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry7: loss = 0.336273193359375: 100%|███| 100/100 [00:33<00:00, 2.98it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_cable = 0.8571428571428571\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry6: loss = 0.3643767237663269: 100%|██| 100/100 [00:33<00:00, 2.98it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for combined = 1.0\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry8: loss = 0.3085792660713196: 100%|██| 100/100 [00:33<00:00, 2.98it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for bent_wire = 1.0\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp50, nQry5: loss = 0.34715649485588074: 100%|█| 100/100 [00:33<00:00, 2.98it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_wire = 0.8\n",
"overall accuracy: 0.8014242454494026\n",
"14\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry9: loss = 0.375447154045105: 100%|███| 100/100 [00:36<00:00, 2.76it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_inner_insulation = 0.6666666666666666\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry5: loss = 0.42370423674583435: 100%|█| 100/100 [00:36<00:00, 2.75it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for poke_insulation = 1.0\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry7: loss = 0.3982161581516266: 100%|██| 100/100 [00:36<00:00, 2.74it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cable_swap = 0.8571428571428571\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry5: loss = 0.3903641104698181: 100%|██| 100/100 [00:36<00:00, 2.75it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_outer_insulation = 1.0\n",
"58\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry53: loss = 0.4019339382648468: 100%|█| 100/100 [00:36<00:00, 2.75it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for good = 0.41509433962264153\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry7: loss = 0.4283098876476288: 100%|██| 100/100 [00:36<00:00, 2.75it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_cable = 0.7142857142857143\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry6: loss = 0.3741377890110016: 100%|██| 100/100 [00:36<00:00, 2.74it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for combined = 0.8333333333333334\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry8: loss = 0.3858358860015869: 100%|██| 100/100 [00:36<00:00, 2.75it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for bent_wire = 1.0\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp55, nQry5: loss = 0.3570959270000458: 100%|██| 100/100 [00:36<00:00, 2.74it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_wire = 0.8\n",
"overall accuracy: 0.8096136567834681\n",
"14\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry9: loss = 0.5021733045578003: 100%|██| 100/100 [00:45<00:00, 2.21it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_inner_insulation = 0.5555555555555556\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry5: loss = 0.5203520059585571: 100%|██| 100/100 [00:45<00:00, 2.20it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for poke_insulation = 0.4\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry7: loss = 0.524366021156311: 100%|███| 100/100 [00:45<00:00, 2.21it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cable_swap = 0.42857142857142855\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry5: loss = 0.5256413221359253: 100%|██| 100/100 [00:45<00:00, 2.21it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for cut_outer_insulation = 1.0\n",
"58\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry53: loss = 0.5186663866043091: 100%|█| 100/100 [00:45<00:00, 2.21it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for good = 0.7358490566037735\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry7: loss = 0.5123675465583801: 100%|██| 100/100 [00:45<00:00, 2.21it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_cable = 0.7142857142857143\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry6: loss = 0.5076506733894348: 100%|██| 100/100 [00:45<00:00, 2.21it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for combined = 0.8333333333333334\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry8: loss = 0.490247517824173: 100%|███| 100/100 [00:45<00:00, 2.21it/s]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for bent_wire = 0.875\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"lr0.0001, nSupp70, nQry5: loss = 0.3723257780075073: 100%|██| 100/100 [00:45<00:00, 2.21it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"accuracy for missing_wire = 0.4\n",
"overall accuracy: 0.6602883431499785\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"#bottle_accs = []\n",
"cable_accs = []\n",
"\n",
"for nr in [5, 10, 15, 30]:\n",
" folder = \"cable\"\n",
" shot = 5\n",
" supp_x, supp_y, types = build_sup_set(shot, folder, True, nr)\n",
" accs = []\n",
" for t in next(os.walk(f'data_custom/{folder}/test'))[1]:\n",
" #if t == \"good\":\n",
" # continue\n",
" accuracy = test(t, types.get(t, 1), shot, folder)\n",
" print(f\"accuracy for {t} = {accuracy}\")\n",
" accs.append(accuracy)\n",
" print(f\"overall accuracy: {np.mean(accs)}\")\n",
" cable_accs.append(np.mean(accs))\n"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.57380952 0.76705653 0.84191176]\n"
]
}
],
"source": [
"print(np.array(bottle_accs))"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.86966158 0.80142425 0.80961366 0.66028834]\n"
]
}
],
"source": [
"print(np.array(cable_accs))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"P>M>F:\n",
"Resulsts:\n",
"\n",
"bottle:\n",
"jeweils 1,3,5 shots normal\n",
"[0.67910401 0.71710526 0.78860294]\n",
"\n",
"inbalanced - mehr good shots 5,10,15,30 -> alle anderen nur 5\n",
"[0.78768382 0.78860294 0.75827206 0.74356618]\n",
"\n",
"2 ways nur detektieren ob fehlerhaft oder nicht 1,3,5 shots\n",
"[0.86422306 0.93201754 0.93933824]\n",
"\n",
"inbalance 2 way 5,10,15,30 -> rest 5\n",
"[0.92371324 0.87867647 0.86397059 0.87775735]\n",
"\n",
"nur fehlerklasse erkennen 1,3,5\n",
"[0.57380952 0.76705653 0.84191176]\n",
"\n",
"\n",
"cable:\n",
"jeweils 1,3,5 shots normal\n",
"[0.25199021 0.44388328 0.46975059]\n",
"\n",
"inbalanced - mehr good shots 5,10,15,30 -> alle anderen nur 5\n",
"[0.50425859 0.48023277 0.43118282 0.41842534]\n",
"\n",
"2 ways nur detektieren ob fehlerhaft oder nicht 1,3,5 shots\n",
"[0.79263485 0.8707712 0.86756514]\n",
"\n",
"inbalance 2 way 5,10,15,30 -> rest 5\n",
"[0.86966158 0.80142425 0.80961366 0.66028834]\n",
"\n",
"nur fehlerklasse erkennen 1,3,5\n",
"[0.24383256 0.43800505 0.51304563]\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

+149 -4
View File
@@ -2,12 +2,12 @@
"cells": [ "cells": [
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 1, "execution_count": 3,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 1400x1000 with 6 Axes>" "<Figure size 1400x1000 with 6 Axes>"
] ]
@@ -187,12 +187,26 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 4, "execution_count": 2,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{
"ename": "ValueError",
"evalue": "x and y must have same first dimension, but have shapes (3,) and (4,)",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[2], line 10\u001b[0m\n\u001b[1;32m 7\u001b[0m imgclass \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbottle\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;66;03m# Plot both bottle and cable data\u001b[39;00m\n\u001b[0;32m---> 10\u001b[0m \u001b[43max\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mResNet50\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43minbalanced - more good shots\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmarker\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mo\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlabel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mResNet50\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlinestyle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m-\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m ax\u001b[38;5;241m.\u001b[39mplot([\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m3\u001b[39m,\u001b[38;5;241m5\u001b[39m], data[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mP>M>F\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minbalanced - more good shots\u001b[39m\u001b[38;5;124m\"\u001b[39m, []), marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mo\u001b[39m\u001b[38;5;124m'\u001b[39m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mP>M>F\u001b[39m\u001b[38;5;124m'\u001b[39m, linestyle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 12\u001b[0m ax\u001b[38;5;241m.\u001b[39mplot([\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m3\u001b[39m,\u001b[38;5;241m5\u001b[39m], data[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCAML\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124minbalanced - more good shots\u001b[39m\u001b[38;5;124m\"\u001b[39m, []), marker\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mo\u001b[39m\u001b[38;5;124m'\u001b[39m, label\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCAML\u001b[39m\u001b[38;5;124m'\u001b[39m, linestyle\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m'\u001b[39m)\n",
"File \u001b[0;32m/usr/lib/python3.13/site-packages/matplotlib/axes/_axes.py:1777\u001b[0m, in \u001b[0;36mAxes.plot\u001b[0;34m(self, scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1534\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1535\u001b[0m \u001b[38;5;124;03mPlot y versus x as lines and/or markers.\u001b[39;00m\n\u001b[1;32m 1536\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1774\u001b[0m \u001b[38;5;124;03m(``'green'``) or hex strings (``'#008000'``).\u001b[39;00m\n\u001b[1;32m 1775\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 1776\u001b[0m kwargs \u001b[38;5;241m=\u001b[39m cbook\u001b[38;5;241m.\u001b[39mnormalize_kwargs(kwargs, mlines\u001b[38;5;241m.\u001b[39mLine2D)\n\u001b[0;32m-> 1777\u001b[0m lines \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_lines(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, data\u001b[38;5;241m=\u001b[39mdata, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)]\n\u001b[1;32m 1778\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[1;32m 1779\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madd_line(line)\n",
"File \u001b[0;32m/usr/lib/python3.13/site-packages/matplotlib/axes/_base.py:297\u001b[0m, in \u001b[0;36m_process_plot_var_args.__call__\u001b[0;34m(self, axes, data, return_kwargs, *args, **kwargs)\u001b[0m\n\u001b[1;32m 295\u001b[0m this \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 296\u001b[0m args \u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m1\u001b[39m:]\n\u001b[0;32m--> 297\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_plot_args\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 298\u001b[0m \u001b[43m \u001b[49m\u001b[43maxes\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mthis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mambiguous_fmt_datakey\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mambiguous_fmt_datakey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 299\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreturn_kwargs\u001b[49m\n\u001b[1;32m 300\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[0;32m/usr/lib/python3.13/site-packages/matplotlib/axes/_base.py:494\u001b[0m, in \u001b[0;36m_process_plot_var_args._plot_args\u001b[0;34m(self, axes, tup, kwargs, return_kwargs, ambiguous_fmt_datakey)\u001b[0m\n\u001b[1;32m 491\u001b[0m axes\u001b[38;5;241m.\u001b[39myaxis\u001b[38;5;241m.\u001b[39mupdate_units(y)\n\u001b[1;32m 493\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m!=\u001b[39m y\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]:\n\u001b[0;32m--> 494\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx and y must have same first dimension, but \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave shapes \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00my\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m y\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m2\u001b[39m:\n\u001b[1;32m 497\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx and y can be no greater than 2D, but have \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 498\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mshapes \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00my\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[0;31mValueError\u001b[0m: x and y must have same first dimension, but have shapes (3,) and (4,)"
]
},
{ {
"data": { "data": {
"image/png": "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 truncated "image/png": "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 truncated
"text/plain": [ "text/plain": [
"<Figure size 640x480 with 1 Axes>" "<Figure size 640x480 with 1 Axes>"
] ]
@@ -314,6 +328,137 @@
"plt.tight_layout()\n", "plt.tight_layout()\n",
"plt.savefig(f\"comparison-2way-{imgclass}.png\")" "plt.savefig(f\"comparison-2way-{imgclass}.png\")"
] ]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([5, 10, 15, 30], data[\"P>M>F\"].get(\"inbalanced - more good shots\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([5, 10, 15, 30], data[\"ResNet50\"].get(\"inbalanced - more good shots\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"\n",
"\n",
"ax.set_title(f'Inbalanced - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(4.75, 30.25), xticks=[5,10,15,30])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"inbalanced-{imgclass}.png\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"model = \"P>M>F\"\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"ax.plot([5, 10, 15, 30], data[\"P>M>F\"].get(\"inbalance 2 way\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([5, 10, 15, 30], data[\"ResNet50\"].get(\"inbalance 2 way\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"\n",
"\n",
"ax.set_title(f'Inbalanced 2-Way - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(4.75, 30.25), xticks=[5,10,15,30])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"inbalanced-2way-{imgclass}.png\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Create subplots\n",
"fig, ax = plt.subplots()\n",
"\n",
"# Loop through each measurement type\n",
"data = cable_data\n",
"imgclass = \"cable\"\n",
"\n",
"# Plot both bottle and cable data\n",
"#only faulty class detect\n",
"#1,3,5 shots normal\n",
"ax.plot([1,3,5], data[\"CAML\"].get(\"only faulty class detect\", []), marker='o', label=f'CAML', linestyle='-')\n",
"ax.plot([1,3,5], data[\"P>M>F\"].get(\"only faulty class detect\", []), marker='o', label=f'P>M>F', linestyle='-')\n",
"ax.plot([1,3,5], data[\"ResNet50\"].get(\"only faulty class detect\", []), marker='o', label=f'ResNet50', linestyle='-')\n",
"\n",
"\n",
"ax.set_title(f'8-Way - {imgclass}')\n",
"ax.set_xlabel(\"Shots per class\")\n",
"ax.set_ylabel(\"Accuracy\")\n",
"ax.legend()\n",
"ax.grid(True)\n",
"\n",
"ax.set(xlim=(0.75, 5.25), xticks=[1,3,5])\n",
"\n",
"# Adjust layout\n",
"plt.tight_layout()\n",
"plt.savefig(f\"faultclasses-{imgclass}.png\")"
]
} }
], ],
"metadata": { "metadata": {