From 5bab446799e08f0e1499c62d03a12221a89be924 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 16 Apr 2021 23:59:20 +0100 Subject: [PATCH] add data augmentation script --- cars/README.md | 14 +++++ cars/confusions.ipynb | 85 ++++++++++++++++++-------- cifar100/README.md | 9 +++ data_aug.py | 138 ++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 1 + 5 files changed, 221 insertions(+), 26 deletions(-) create mode 100644 cars/README.md create mode 100644 cifar100/README.md create mode 100644 data_aug.py diff --git a/cars/README.md b/cars/README.md new file mode 100644 index 0000000..2974564 --- /dev/null +++ b/cars/README.md @@ -0,0 +1,14 @@ +# Stanford Cars + +The majority of the work was completed on the Stanford cars dataset. This folder contains the different investigations made using the data. + +* architecture-investigations + - How does altering the structure of AlexNet affect performance? +* lr-investigations + - How does affecting the learning rate, both the value itself and the schedule, affect performance? +* split-investigations + - How does the proportions of training/validation/test data affect performance? + +[Homepage](https://ai.stanford.edu/~jkrause/cars/car_dataset.html) + +*The Cars dataset contains 16,185 images of 196 classes of cars. The data is split into 8,144 training images and 8,041 testing images, where each class has been split roughly in a 50-50 split. Classes are typically at the level of Make, Model, Year, e.g. 2012 Tesla Model S or 2012 BMW M3 coupe.* \ No newline at end of file diff --git a/cars/confusions.ipynb b/cars/confusions.ipynb index 55b5bcf..1448b23 100644 --- a/cars/confusions.ipynb +++ b/cars/confusions.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": 1, - "id": "f027fe48", + "id": "34b0345b", "metadata": {}, "outputs": [], "source": [ @@ -16,7 +16,7 @@ }, { "cell_type": "markdown", - "id": "d3f5ae86", + "id": "75b9f701", "metadata": {}, "source": [ "# Render Confusion Matrices\n", @@ -27,7 +27,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "753e7bc3", + "id": "10521209", "metadata": {}, "outputs": [], "source": [ @@ -37,8 +37,49 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "6250e9b7", + "execution_count": 19, + "id": "02c2844f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50.0% 0.5\n", + "25.0% 0.25\n", + "30.0% 0.3\n", + "100.0% 1.0\n", + "71.43% 0.7142857142857143\n", + "44.44% 0.4444444444444444\n", + "62.5% 0.625\n", + "0.0% 0.0\n", + "50.0% 0.5\n", + "20.0% 0.2\n", + "\n", + "MAP = 49.3%\n" + ] + } + ], + "source": [ + "normalised_array = np.ndarray((196, 196))\n", + "for idx, row in enumerate(frame.to_numpy()):\n", + " normalised_array[idx, :] = row / np.sum(row)\n", + "\n", + "# check correct accuracy\n", + "for acc, (idx, row) in zip(accuracy_col, enumerate(normalised_array[:10])):\n", + " print(acc, row[idx])\n", + "\n", + "class_acc_counter = 0\n", + "for idx, row in enumerate(normalised_array):\n", + " class_acc_counter += row[idx]\n", + " \n", + "print(f\"\\nMAP = {class_acc_counter*100/196:.4}%\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "91132579", "metadata": {}, "outputs": [ { @@ -580,7 +621,7 @@ "[196 rows x 196 columns]" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -591,24 +632,15 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "af1f4956", + "execution_count": 14, + "id": "72eacc1e", "metadata": {}, "outputs": [ { "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkcAAAJSCAYAAADJWGHfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Z1A+gAAAACXBIWXMAAAsTAAALEwEAmpwYAAA00UlEQVR4nO3df5AcZ33n8c9Xu0hYRrItBJJXsizrJ0ic2cMyWimEKPZdbAxXRuUqfogjwIVT4CBXUZILPw5iHH7kuLqcCAkBBAGTBAE+cyLEuGywXa4cZ62RdLVRkIxkSUi2tJJsYfxTRvLsPvfHTPc8Ws3s9Mz09M/3q0qlZ3t7pr/T80zPs99vdz/mnBMAAACqpqQdAAAAQJYwOAIAAPAwOAIAAPAwOAIAAPAwOAIAAPAwOAIAAPAwOAIQKzO7wMz+0cyeMrP/1cXzvMPMfhhnbGkxs183s31pxwEgGuM+R0A5mdkGSX8g6RWSnpE0IunTzrkfd/m875T0e5LWOucq3caZdWbmJC11zh1IOxYA8SBzBJSQmf2BpM9J+oykOZIWSPprSTfG8PSXS9pfhoFRFGbWn3YMANrD4AgoGTO7SNKfSvqAc+5/O+eec8694Jz7R+fcf6mtM83MPmdmo7V/nzOzabXfrTOzo2b2h2b2mJkdN7P31H53i6Q/kfRWM3vWzH7HzD5hZn/vbX+hmblg0GBm7zazQ2b2jJn93Mze4S3/sfe4tWa2o1au22Fma73f3W9mnzSz/1t7nh+a2ewmrz+I/4+9+N9sZjeY2X4ze8LMPuqt/1oz225mT9bW/Sszm1r73T/VVvvn2ut9q/f8HzKzE5K+HiyrPWZxbRuvqf08YGaPm9m6bt5XAPFhcASUzxpJL5a0bZJ1/qukIUmDkl4t6bWSPub9fq6kiyTNk/Q7kr5gZpc4525WNRv1HefcS5xzfzNZIGZ2oaTPS3qDc26GpLWqlvcmrjdL0g9q675U0v+U9AMze6m32gZJ75H0cklTJf3RJJueq+o+mKfqYO4rkv69pKsk/bqkj5vZFbV1xyRtkjRb1X13raT/JEnOudfX1nl17fV+x3v+Wapm0Tb6G3bOHZT0IUl/b2bTJX1d0jecc/dPEi+ABDE4AsrnpZJOtSh7vUPSnzrnHnPOPS7pFknv9H7/Qu33Lzjn7pT0rKTlHcYzLulVZnaBc+64c25Pg3XeKOlh59zfOecqzrlvSfqZpH/nrfN159x+59zzkm5TdWDXzAuqnl/1gqRvqzrw+Qvn3DO17e9VdVAo59wu59xwbbuHJX1Z0m9EeE03O+fO1OI5h3PuK5IOSHpQ0qWqDkYBZASDI6B8fiFpdotzYQYkHfF+PlJbFj7HhMHVaUkvaTcQ59xzkt4q6X2SjpvZD8zsFRHiCWKa5/18oo14fuGcG6u1g8HLSe/3zwePN7NlZnaHmZ0ws6dVzYw1LNl5HnfO/arFOl+R9CpJf+mcO9NiXQAJYnAElM92SWckvXmSdUZVLQkFFtSWdeI5SdO9n+f6v3TO3e2c+7eqZlB+puqgoVU8QUzHOoypHV9UNa6lzrmZkj4qyVo8ZtLLgM3sJaqeEP83kj5RKxsCyAgGR0DJOOeeUvU8my/UTkSebmYvMrM3mNl/r632LUkfM7OX1U5s/hNJf9/sOVsYkfR6M1tQOxn8I8EvzGyOmd1YO/fojKrlufEGz3GnpGVmtsHM+s3srZJWSLqjw5jaMUPS05KerWW13j/h9yclLWrzOf9C0k7n3HtVPZfqS11HCSA2DI6AEnLO/bmq9zj6mKTHJT0q6YOSvldb5VOSdkraLelfJP2/2rJOtvUjSd+pPdcunTugmVKLY1TSE6qeyzNx8CHn3C8kvUnSH6paFvxjSW9yzp3qJKY2/ZGqJ3s/o2pW6zsTfv8JSd+oXc32llZPZmY3Srpe9df5B5JeE1ylByB93AQSAADAQ+YIAADAw+AIAADAw+AIAADAw+AIAADAw+AIAADAk4nBkZldb2b7zOyAmX047XiQLWZ22Mz+xcxGzGxnbdksM/uRmT1c+/+StONE8szsa7XJY3/qLWvYN6zq87XjzO5g4lcUX5N+8gkzO1Y7royY2Q3e7z5S6yf7zOy6dKJGmlIfHJlZn6QvSHqDqjd1e7uZrUg3KmTQbzrnBp1zq2o/f1jSvc65pZLurf2M8rlV1XsG+Zr1jTdIWlr7t1HVO1+jHG7V+f1EkjbXjiuDtTkCVfv+eZuklbXH/HXtewolkvrgSNXZvg845w45586qOgnkjSnHhOy7UdI3au1vaPKpMFBQzrl/UvXmkb5mfeNGSX/rqoYlXWxmlyYSKFLVpJ80c6Okb9cmDf65qhMEv7ZnwSGTsjA4mqfq3XkDR3XuZJKAk/RDM9tlZhtry+Y4547X2ickzUknNGRQs77BsQYTfbBWYv2aV5qnnyATgyOgldc5516jalnkA2b2ev+Xrnqbd271jvPQNzCJL0paLGlQ0nFJf55qNMiULAyOjkm6zPt5vpKZaRs54Zw7Vvv/MUnbVE1xnwxKIrX/H0svQmRMs77BsQYh59xJ59yYc25c1TnzgtIZ/QSZGBztkLTUzK4ws6mqngj3/ZRjQkaY2YVmNiNoS/otST9VtY+8q7bauyT9QzoRIoOa9Y3vS/rt2lVrQ5Ke8spvKJkJ55utV/W4IlX7ydvMbJqZXaHqCfw/STo+pKs/7QCccxUz+6CkuyX1Sfqac25PymEhO+ZI2mZmUrW/bnXO3WVmOyTdZma/I+mIpJazoaN4zOxbktZJmm1mRyXdLOm/qXHfuFPSDaqeYHta0nsSDxipaNJP1pnZoKpl18OSfleSnHN7zOw2SXslVSR9wDk3lkLYSJFVS/IAAACQslFWAwAAyAwGRwAAAB4GRwAAAB4GRwAAAB4GRwAAAJ5MDY68qSGApugniIq+gqjoK/D1bHBkZteb2T4zO2BmUWdMp3MiCvoJoqKvICr6CkI9GRyZWZ+kL6g6F9YKSW83sxW92BYAAECcenWH7NdKOuCcOyRJZvZtSTeqesfR8/S95ELXP2uW+i65RDNtFnelxKRerOm57yc29UVh2519IcVIiq0IfaVbldkXhu3+U8+lGEm20VfKwz/+Pn32sVPOuZdNXKdXg6N5kh71fj4qafU5wVXruxslqe+SSzTwh78vSVqyabhHIQHZ0T93ftiuPHo0xUhQdKduWhO2Z2/ZnmIkQDb4x9+7HvnckYbrJBbNBM65LZK2SNJMm+WCQdHp9fUx1Iz9T0qSxvbsC5f5v5++7cEEIs2+vpXLw7a/r5C+Zu8NAyIkpZ0BEccSlEGU42+vTsg+Juky7+f5tWUAAACZ1qvB0Q5JS83sCjObKultkr7fo20BAADEpidlNedcxcw+KOluSX2Svuac2xPlsTP/+WTYPvVrl0qSLvYeOfWpSoyRFkMR09+Va64K2/337Uotjv5FCyVJlUOHO3q8PX8mvmCAHivisQToRM/OOXLO3Snpzl49PwAAQC+kdkJ2M/5f6BfX2nePjoTLrhtINh6kI81ska/TjFFcjwcAJC9T04cAAACkjcERAACAJ3NltSmD9VlGxkeqN9S+bmAwXPai+y8N2y+sO55YXAAAlFmj7+eiInMEAADgYXAEAADgyVxZrVWqzi+lHbllbdi+/OYHehZTr/UtWxy2x/YfTDGS4gr2MfsXQDP+sdiX5+NGnN8vRS+l+cgcAQAAeBgcAQAAeMw5l3YMmmmz3Gq7tqvnOPrdlZKk+TdFmqUEAEqtb+VySe1PGRI8zse0I8ire9ztu5xzqyYuJ3MEAADgydwJ2Z1qlDF69i1DYfvin4yG7crhRxKJqRP9CxdIynaMQNEU+XMXvDbp3NfXabanKFmi8dcNSpKm/HgkXNZsXyH74n7vyBwBAAB4GBwBAAB4ClNWa+TEmnr7JbflI0VKKjclQ1fW28O704ujZE5trH9IZ2/ZnlocRf7cFfm1dcMvpwXYV/kV93tH5ggAAMDD4AgAAMBTmPsctVK55qqw3X/frp5uK02dvk72DwAgqqIcS7nPEQAAQAQMjgAAADylKav57h4dCdvXDQwmtl0AAJAdlNUAAAAiYHAEAADgyfVNIPuWLQ7bY/sPRn6cX0oLbkLXyxvQ+XEG/HjPXn912J56146exQEASFen31tIFpkjAAAATylPyG7k6pGxsL1jsK8n2+hftDBsVw4d7sk24pCXOAEA6AYnZAMAAETA4AgAAMCT6xOy47Tjff86bPdf9kTYrjx6NPJz9F82f9LHPf3qOWF7epNyVfAc7Ww3DufE7sWWVjwA0Esc23qr1fdh1pE5AgAA8DA4AgAA8BS6rNa/cEHYrhx+ZPKVh3fX1/UWH/7UmrC98GOT3wupVepw+rYHJ49BkvrSGa82iz2P6VAAaCmlY21eBN+fzb47W32/RvnuaLWNNNE7AAAAPAyOAAAAPNwEsg2n16+WJI2+3sJlSzYNpxUOUCp9K5eH7bE9+1KMBEBeBMeNZscMbgIJAAAQQaFPyI5bcEL173/ql+GyO4Z+o76Cd1I3gHiRLQLQrk6PG2SOAAAAPAyOAAAAPJTVOvDtW95Q/6F+qwe9hHOzgUiyfH+TQFv3SQMiol8la/x1g5KkKT8eaetxZI4AAAA8DI4AAAA83OeoZsrgirA9PrK3o+d4esNQ2J65tbMaWxBHpzHkUTuvOY73CQDyjONgfLjPEQAAQAQMjgAAADyU1Xrk2IfWhu15n31g0nUPbR0M24s2jPQoIgAA4KOsBgAAEAGDIwAAAE/pbwLpz/QdiGMOp1alNH+7rUppp9evDtsz9j8ZtuOca4oZzwHkBccr9BqZIwAAAE/pM0fBXx2NMkjdaPSXTbNttFp3+rYH67+PNUqguILPEJmF4uE9Ra+ROQIAAPAwOAIAAPBkr6w2dGW9Pbw7sc2OzZgW6/Od/LVZYXv2nto2/FSw/zobxZNw2pg0NYqGPg2gU2SOAAAAPAyOAAAAPNkrqyVYSvOdvbheVpuaxAa913lq45qwPXs4iY3nV9+yxWF7bP/BFCMBABQVmSMAAAAPgyMAAACPOefSjkEzbZZbbdemHUYmDAzPkCSNDj2TciQAALQnmO7Kv3lxlt3jbt/lnFs1cTmZIwAAAE/2TsjOmbhPEA4yRv5J2nPuf6zhNoJ1Zm/Z3vV2AQDoVpAxyvvFM2SOAAAAPAyOAAAAPJTVgmk8Ory/Uq/ShX6pbMyfaqTFtCPApFKangdAueSxlOYjcwQAAOBhcAQAAOChrJaB0sKUwRVhe3xk7/kreDE+vWEobE99Nvo9qvxtTLotFFsG+jsAZB2ZIwAAAA+DIwAAAA9ltQxop7w1c+tw2D6wuVpim3mo9RVIDbfBlUsosi6vRAVQXmSOAAAAPGSOcmz5V38pSTryp/W3cf5NbTwBf1Enqm/l8rA9tmdfipGUBP0bJcWxpntkjgAAADwMjgAAADyU1XIsSJf6pbTgJG1JWrJpeOJDmip7GjaJ19/O85b9/WiF/QM0x2eie2SOAAAAPAyOAAAAPOZc9CkoemWmzXKr7dq0w8ivZvcr6vQ+Rtz/CGXDPZGKi+MZpKb94B53+y7n3KqJq5M5AgAA8DA4AgAA8FBWK4mff2ZN2L7io9tTjCSa/nkDYbtybDTFSPKv6Puy6K8vb7L2fvjx+LIQW69k7T3IMspqAAAAETA4AgAA8FBWy6hjH1obtud99oGwXbnmqrDdf9+urp7bf14AAMqGshoAAEAEmZs+pG/Z4rA9tv9gipGka8G2k2F7zFveabao0XM/ceeScNlFNxzo+nkBACgCMkcAAAAeBkcAAACezJXVylxK83W6H/Z/tX5e2bL37pz0uS+6ob6sWTkzWM77AiAr8nz6RZ5jLxMyRwAAAB4GRwAAAJ7MldXQnWaltFb89O7doyNh+7rGd94HgNTkuRyV59jLhMwRAACAh8ERAACAp/Rltb6VyyVJY3v2pRxJPE5sqk87MndzZ9ODXDcwGLZPr18tSZq+7cGu4iqToE9JxelXRcF7AyAKMkcAAAAeJp5FJE+1OdWIfy+PQJonInK/JgDAREw8CwAAEAGDIwAAAE/pT8hGNH4pbWB4RtgeHXqm4fpZK19lLR4AQHeCC4ak+C8aInMEAADgYXAEAADgoayGtvmltGMfqt9Xad5nz7+vUuWaq8J2/327ehsY0KGgn/p9lL4LZFsv779H5ggAAMDD4AgAAMBDWQ1dmbPjTNj2S2yBRqU2IGsalc0opQHlReYIAADAw+AIAADAQ1kNXfFLDwuO1udTe37RLEnnzrEWx40Y436+XstbvElj/wDZEefnMe+fbTJHAAAAHnPOpR2DZtost9quTTsM9MBHDu4O23+2+MoUI0lf/6KFYbty6HBqcQAAqu5xt+9yzq2auJzMEQAAgIfBEQAAgIcTstFTfimt1VQjRUcpDSi+sh/n8sCfGkj33t5wHTJHAAAAHgZHAAAAHq5Wa6GdmbmZxTs6Us8AkC1l/A7jajUAAIAIGBwBAAB4KKslqH/hgrBdOfxIos/bq23HsY2T/7laYpvz+Xp5LYl4O5Xl2AAUH8eg+FBWAwAAiIDMUQeYBqI3Dm0dDNuLNoykFgeQdRyDJsf+wUTN+gSZIwAAgAgYHAEAAHiYPqQDpGnj1bdssaRzS2n7v1rPci57786kQwIyLcvHoODzLElj+w+mEkOW909ZROkHwTpJ9JN2+wSZIwAAAA+DIwAAAA9XqyHzHr61fkv7pe8uxy3tfVMGV4Tt8ZG9KUaCrOhVn6CvoWyaXa3W1TlHZnZY0jOSxiRVnHOrzGyWpO9IWijpsKS3OOd+2c12AAAAkhJHWe03nXOD3sjrw5Ludc4tlXRv7WcAAIBc6KqsVsscrXLOnfKW7ZO0zjl33MwulXS/c275ZM/jl9WKMitwUV5H1hz70NqwPe+zD0yyJgAkg+N9fvXqJpBO0g/NbJeZbawtm+OcO15rn5A0p8ttAAAAJKbb+xy9zjl3zMxeLulHZvYz/5fOOWdmDVNTtcHURkl6saZ3GQYAAEA8Yrtazcw+IelZSf9RXZTVkL4s3MQtirPXXy1JmnrXjpQjQRFl+XOQhdiyEENWsC8ml4X90yyG2MtqZnahmc0I2pJ+S9JPJX1f0rtqq71L0j90ug0AAICkdZw5MrNFkrbVfuyXtNU592kze6mk2yQtkHRE1Uv5n5jsucgcoRvvf/hA2P7i0iUpRoKJ+lbWk8Zje/alGAkAnC/2+xw55w5JenWD5b+QxEgHAADkEtOHAAAAeLq9Wg1InV9KO7VxTdievWV7GuG0rZ2ZqY/cUr3P06JvngyXZfkEUEppAPKIzBEAAICHwREAAIAntvscdaPTq9X65w2E7cqx0ThD6mgbScSD6M688eqwfeHIsfN+z3sEoNlx21a9Kmy7nT/t+fayIMux9Uqvpg8BAAAoFAZHAAAAnlxfrZZE2q+dbcQRz5TBFZKk8ZG9XT9X2V1w7LmwPf6yi89foSRpYwDnC461lSbH2jhLab4slKue3jAUtmduHQ7bWYgtK8gcAQAAeHKdOSqibjNG/YsWhu3KocPdBZNz/r4M9svPfm9uuGzJSMIBITb0c3QrOD7kvS8F8bcTu58tQmNkjgAAADwMjgAAADy5vs8Rsi/LKetDWwfD9qINI6nFAWSd/zkOZO3zjGRl+djeDu5zBAAAEAGDIwAAAA9Xq2VUlJRlo6sUspbqzEIMzfiltMo1V4Xt/vt2pRANkF3NjjHIviffuSZsX/x322N73lbH9qx9F7WLzBEAAICHwREAAICHq9WACQaGZ4Tt0aFnUowERXR6/eqwPX3bgylGAoCr1QAAACJgcAQAAODhajVgAr+UFpRAOi1/9K1cHrbH9uyL/Di/9DJj/5MdPQeyKcultE77KxBVXvoYmSMAAAAPJ2Qj9/qWLQ7bY/sP9mQb+79aP19v2Xt3ThpHr2IAyqydz3kSxwQUAydkAwAARMDgCAAAwENZDWjTgc1DYXvJpuEUIwGyrdsLGlAMWb63F2U1AACACBgcAQAAeCirAV04tbE+4/XsLd3NeB3nc6E4gn5BnwDiR1kNAAAgAgZHAAAAHspqyD3/dvS+OG9NH+WW9yc2rZUkzd38QGzbBbqVl+kagF4I+n+zvk9ZDQAAIIJcZ474iwiTSat/BBkkSZr3w1+kEgOA7vD9kr4k3gMyRwAAABEwOAIAAPDko6w2dGW9Pby79wEBMYllqhH6P5JCX0PJUFYDAACIgMERAACAJx9lNaAA7h4dCdvXDQymFgcAoIqyGgAAQAQMjgAAADz9aQcAxKl/4YKwXTn8SIqRnM8vpe3/8tVhe8WfnZTUXrxZfp3ojWbvOX0BiB+ZIwAAAA+DIwAAAA9lNRRKZe7F9R8yXGJY9vUzYfsXfz1VknTRDdEfT/mkfJq95/QFIH5kjgAAADxkjlAsCU958Mpd9Y/QQ1dVoj/QizPIGJ29vn6S9tS7dnQdGwCgM2SOAAAAPAyOAAAAPJTVSqJv5fKwPbZnX4qRFEurUlo7+71ZKe30+tVhe/q2B9uIrrjoz0hbHj+XweeGz0xrZI4AAAA8DI4AAAA8lNVKgjRqdP2LFobtXy18aXXZfbs6ei57/kzrlVrEMPWpNq6CK4kk+rP/HlQOHe759pJQxNeUlryU0nydHo/KiMwRAACAh8ERAACAx5xzacegmTbLrbZr0w4DBXBg81DYXrJpOMVIgHjRt4H43eNu3+WcWzVxOZkjAAAADydko1Dy8hf1iU1rw/bczQ+0/bh5P/xFuCzNk+25b0py8tK3gSIgcwQAAOBhcAQAAODhhGwgJlMGV0iSxkf2JrrdF91/adh+Yd3xRLfdK8G+lJLfnwDKgxOyAQAAImBwBAAA4MnF1WrMwI08aFT+SaLv+qW0draX5c8VpbR09KpPZLmvder0+tVhO49TiWByZI4AAAA8DI4AAAA8XK0G5FzfssVhe2z/wbC9/6vVCzCWvXdn4jEByIez118dtqfetSPFSHqr2XGSq9UAAAAiIHME9FCzv1aSdGrjmrA9e8v2VGKYKNgvae2TKLLw3iG7ypJxybI4PqNkjgAAACJgcAQAAODJxX2OEF3/vIGwXTk2mmIk+dKr/ZaFcszcHxwJ28+9sV4KmPaD9EoBWdgvrZxeOitsT8tBvEhWp6W0Vsca//e+vB3Pk/gu6uVxhMwRAACAh8ERAACAh7JaweQt9ZoVRd5v/mub5rWPfndl2J5/056wHUz1UJRpHjo1NpW/HRG/VseaohyL8v46+PQDAAB4GBwBAAB4KKuhbUWcYbuZIpeY/FIaM4yfr1f7gX2NqOI+1hb5eBY3MkcAAAAeBkcAAAAe5lYDcI5X7qpW2x+6qtLR45mTDMiPsn9emVsNAAAgAk7IBnCOxS9+XJL00NBv1BcO7478+DL+9QnkFZ/XxsgcAQAAeBgcAQAAeCirdaBM9/lB+dyx8pJaq15KGxieEbZHh55JOCIAceA+R9GROQIAAPAwOAIAAPBkoqxmF7xYU16xQpI0PrI35WhaIyWJsvFLaS+6/9Kw/cK642mEgzZMGVwRtvNwfEXv8N0VHZkjAAAAD4MjAAAATybKau75X5HuBTrUP28gbFeOjfZ8e499fWHYfvxLl0mSlr3vJy0fl3ScqOLYCrSPzBEAAIAnE5kjAJ1LOgtzyTe2e+3q/wc2D4XLlmwabvg4skVA56J8xhAfMkcAAAAeBkcAAAAeymoAuuan+d/xs6Nh+5uvmJ9GOCgI7tFURyktWWSOAAAAPAyOAAAAPJTVgJj0L1ooSaocOpxqHGnzS2mVa65quE7/fbuSCicR/utM+rUF/U6q971Gy/LIL6UV5TUhH8gcAQAAeBgcAQAAeMw5l3YMmmmz3Gq7Nu0wkFN9K5eH7aLPOh281qy8ztPrV0uSpm97sOW63MQOQNbc427f5ZxbNXE5mSMAAAAPgyMAAAAPZbUCKFNZKQlZ259ZiycOQYmN8hqAJDQ7jlJWAwAAiIDMUQtF/Ku9kbK8TmTL0e+uDNvzb9qTYiRAMXFsnxyZIwAAgAgYHAEAAHiYPqSFsqQhy/I60XtRpnkIptuYf1N9qo1DWwfD9qINIz2IDCgfju1V7U4/Q+YIAADAw+AIAADAQ1kNyLn+eQNhu3JsNMVIajFESFk3mrneL6VV7llQX/ffPBJHWLmXtfc5aWV//ehM0G+iHJd8ZI4AAAA8DI4AAAA8lNWAnCtiicEvpQ0Mz5AkjQ49k1Y4mVDE97kdSb/+0+tXh+3p2x5MdNuIT6f9hswRAACAh8wRkJBTG9eE7dlbtqcYSb4EGaOn7lwSLrvohgNphYOSIFtUbmSOAAAAPAyOAAAAPJTVUFp9yxaH7bH9B3u+PUpp3fFLaUduWRu2L7/5gYbrB+9vEu8tkFVnr786bF9w6AlJfCaiIHMEAADgYXAEAADgMedc2jFops1yq+3atMMAkENcxYbzDF1Zbw/vTi8OpKON9/8ed/su59yqicvJHAEAAHgYHAEAAHi4Wg3RkKZGRvmltAObh8L2kk3DaYSDLEjzGMWxMh0x7/eWmSMz+5qZPWZmP/WWzTKzH5nZw7X/L6ktNzP7vJkdMLPdZvaariMEAABIUJSy2q2Srp+w7MOS7nXOLZV0b+1nSXqDpKW1fxslfTGeMAEAAJIR6Wo1M1so6Q7n3KtqP++TtM45d9zMLpV0v3NuuZl9udb+1sT1Jnv+Xl2tlvRN/pIWzNXl31yw6K8ZmKhZn+cmkIiijMfMMr7mZuK+Wm2ON+A5IWlOrT1P0qPeekdry85jZhvNbKeZ7XxBZzoMAwAAIF5dn5DtnHNm1vbNkpxzWyRtkaqZo27jKKNG01GU/a8AXzt/HcX5lxR/lSWr2T4OlgcZVkmac/9jLR+HciljP4j7NRfxmNdp5uhkrZym2v/BEeeYpMu89ebXlgEAAORCp4Oj70t6V639Lkn/4C3/7dpVa0OSnmp1vhEAAECWtDwh28y+JWmdpNmSTkq6WdL3JN0maYGkI5Le4px7wsxM0l+penXbaUnvcc7tbBUE04cASMLA8IywPTr0TIqRIG2n16+WJE3f9mDKkSBNzU7IbnnOkXPu7U1+dd5oxlVHWh9oPzwAAIBsYPoQAAAAT6GnD+mfNxC2K8dGU4wEQLfa/Tz76weOf3CW9/sn2no+FMuFjz4nSepr0E8k+kTeNPq8S52/j2SOAAAAPAyOAAAAPIUuq5EW7b3+S+eG7crxE2F7yuAKSdL4yN5Etlc0ZXmd7Wj389xwfW9ZxVv89IYhSdLMrcOdhIaY9er44XM7q3OpV1qsl6Z2jgO9Wjcv4v6+J3MEAADgiTTxbK9d9OK5bu38d0qSKocOpxsMgEn1L1p43rKifG4PbR0M24s2jHT9fP6+Kso+Aook7olnAQAAConBEQAAgCcTJ2S7M2c7Sjkzk3p8yv76EV2Ry0N+Ke3ILWvD9uU3P9DR8zXaV3zWkCT6W2fIHAEAAHgYHAEAAHgycbXaTJvlVtt589jmAlejAMX3kYO7w/afLb4yxUgAxImr1QAAACJgcAQAAODJxNVqeUYpDWkbf91g2J7y45HU4igyv5Q2um1F2B5Y37vpLXqtf+ECSVLl8CMpRxK/4LVJxXx96D0yRwAAAB4GRwAAAB7KakDMkr6CkVJasvxSWjAXWxzzsCWtnXJToz4dpZ8H6yR9+gGlNHSLzBEAAICH+xwBQJf2f7V+m5Rl793ZcJ2z118tSZp6145EYkK5ME1IY8F+abZPuM8RAABABAyOAAAAPJTVEEneU7atUqsA4AvKoFL3pdC8HD/bidPfPxcceiLy47KGshoAAEAEDI4AAAA8lNWAFPRfOjdsV46fSDGS9vmxB/L2GuI2ZbA+pcj4SP0+SCe+98qwPffNDyUaE4DWKKsBAABEwOAIAADAw/QhQAryXIbyY++fN5BiJNkx5fEnw/a4t/ySr7wkbP/8M2skSVd8dHus27ZVrwrbbudPY31uoKzIHAEAAHg4IbtL/l/OlWOjKUYCIA+CDJIUfxYJyclLxq7Vd1Tc32HB8/Xy+zDObXBCNgAAQAQMjgAAADyU1QAgJXePjoTt6wYGU4sDKCvKagAAABEwOAIAAPBwn6MMyMuMzaji/UJc/FLa/q/WM/vL3rszhWiAyZ29/uqwPfWuHSlG0ntkjgAAADwMjgAAADyU1TKg29JM/8IFYbty+JFuw8mN4HUn/ZoppSEQZx/0S2mj21aE7YH1e7t+bqBT/veLCl5K85E5AgAA8DA4AgAA8FBWK4AyldJ8WXjdZ95Yv3pj2g86Szk3mtmeefryoVd90C+lHbntX0mSLn/Lv/RkW8BksnCcTQOZIwAAAA+ZIyCCpzcMhe2ZW4fDtp8tmjJYPYl2fKS9E2jJEmEyQcbo4VuvCpctffeutMIBSoHMEQAAgIfBEQAAgMecc2nHoJk2y622a9MOoyP9l80P25VHj6YYSYENXVlvD+8Om8G+Z78jLWn1waMfXRu253/mgUS3nTdpHqM5RmXfPe72Xc65VROXkzkCAADwMDgCAADwUFYD8iQoMXrlxVS1iscvifqyEn8BnNq4JmzP3rI9xUiA/KGsBgAAEAGDIwAAAA9ltQ40mu5B4mZ+iI/fx+hX6cjje8BUI9mUx75UFpTVAAAAImD6kA4w8kev0cfSl5f3IJi2RqpnjB79eP0+SBcdHA/b/tQ3ZeHvn3an9olLXvoS6sgcAQAAeBgcAQAAeCirAUCONSoVXfbJ+pQiBzYPhe2ZWxMJKVHB61uyqXHJMK1SGvKNzBEAAICHwREAAICHshpKq2/Z4rA9tv9gipEAveOXm47cUr+K7fKbHzhv3WafiUbLs/L5aVZOA3zt9lcyRwAAAB4GRwAAAB6mD0Ekp9evDtvTtz2YYiT5wn5DVrW6ygsoA6YPAQAAiIDMEQCU2FN3LgnbF91wIMVI0BNDV9bbw7uLv902kTkCAACIgMERAACAh/scAUCJ+aW0u0dHwvZ1A4PJB4P4pVXSynApLQoyRwAAAB4GRwAAAB7KakDMsjKtAtAuv5TWaqoRINDomHf2+qvDZVPv2pFKDN0gcwQAAOBhcAQAAODhJpAAYjVlcEXYHh/Zm2IkiMs7fnY0bH/zFfNTjASIFzeBBAAAiIDBEQAAgIer1VBafSuXh+2xPftyu42soZRWPH4p7cDmIUnSkk3DaYWDFnp13CnT8YzMEQAAgIfMEbKvR7M7j82YFttzNd1Gwf+6Kr2gb+ZxqoQOY1/yndPnPr6D50Bv9eq4U6bjGZkjAAAAD4MjAAAAD/c5AgB05eFbrwrbS9+9K8VIyiEL9xLrVQxJvzbucwQAABABgyMAAABP7spqZbrPAgDEKYnj59Hvrgzb82/a05NtoByS6K+U1QAAACJgcAQAAODJ3U0gKaXVVa6pXiHSfx9XhyQp2O8S+z7L+Hycr1fHT/8zMf8m9jfiOU6m+X1P5ggAAMCTuxOyAQC90bdscdge238wtud96s4lYfuiGw5EjiPOGLKoV/sb0XFCNgAAQAQMjgAAADy5OyEbANAbz6ycHband1jmaXRvGr+UdmLT2rA9d/MDkz6u6CilnS8r/YDMEQAAgIfBEQAAgIer1YAC4R5M2cd7VHdo62DYXrRhJLU4UF5crQYAABABgyMAAAAPV6shV7hp2uTKXqbJgyy/R736fJ29/uqwfcGhJ8K2X0rz15l6146exoPsysp7TuYIAADAw+AIAADAk7uyGld6lBupdfRCcFwp+zGlV5+vKWfHW24jKKVJ3nG+5O9H0TX63GXlGE/mCAAAwMN9jgBkAlnhZOUhW8Z9kNBr3OcIAAAgAgZHAAAAntydkA2kISszRRdZlss7vqL0hTzsb7+UdvS7K8P2/Jv2pBAN8qzdzy2ZIwAAAA+DIwAAAA9ltQRNGVwRtsdH9qYYCdqV5/IJGuv080hfSIdfSnv41vqVjUvfnf3yYNaU8buo3c8tmSMAAAAPgyMAAAAPN4EEgIzpX7Rw0t9XDh1OJI48CG4U6V/Z5u8/9hUmw00gAQAAIsjECdk2bZr6Fi6WlJ1J56LqW7Y4bOctdgDZRLYjuiBj9Mpd9a+zh646nE4wKAwyRwAAAB4GRwAAAJ5MlNXcmTO5LUnlNe5ujL9uMGxP+fFIanEARdW/cMF5yyqHH0khkvx46KpK2N7/5avD9rLf3ZFGOMiI4LPU7ueHzBEAAICHwREAAICH+xyhtPzSBSUL5Al9N7rRbfWpMhZsejZss9+qyt6XuM8RAABABAyOAAAAPJm4Wq2IKtfUZ43uv49Zo7OojClkFAN9N7qX/+UFYXv/Z6aG7UUb2IcSfakZMkcAAAAeBkcAAAAeymotTBmsX+kwPrI38uMopQFA+vxj8aL76ssfvrV66sPyzz0fLmvnGJ9HwfdZ0V9nHFpmjszsa2b2mJn91Fv2CTM7ZmYjtX83eL/7iJkdMLN9ZnZdrwIHAADohSiZo1sl/ZWkv52wfLNz7n/4C8xshaS3SVopaUDSPWa2zDk3FkOsqUh6hH32+upt76fexS3vgW70LVssqZxT/KC1qUemSZJ+NbeeI5jabOWCIGMUXcvMkXPunyQ9EfH5bpT0befcGefczyUdkPTaLuIDAABIVDcnZH/QzHbXym6X1JbNk/Sot87R2rLzmNlGM9tpZjtf0JkuwgAAAIhPpydkf1HSJyW52v9/Luk/tPMEzrktkrZI1elDOoyjcCinAfGgnIbJXH7zA+cte+rOJWH7ohsOxLatUxvXhO3ZW7bH9rzonY4yR865k865MefcuKSvqF46OybpMm/V+bVlAAAAudDR4MjMLvV+XC8puJLt+5LeZmbTzOwKSUsl/aS7EAEAAJLTsqxmZt+StE7SbDM7KulmSevMbFDVstphSb8rSc65PWZ2m6S9kiqSPpDnK9UAAOXhl9LetOeXYfuOlZc0Wj2y2buf6+rxSF7LwZFz7u0NFv/NJOt/WtKnuwkKAAAgLUwfAgAA4GH6ECDvhq6st4d3pxdHSXDlUTn4pbTgPT+nPNbOZ43PZe6QOQIAAPCQOQLyjr9KE5WFbFGnE2IXWS/3ydRnq7fie3rR9HDZzOFYN4EWku7zZI4AAAA8DI4AAAA85lz6M3fMtFlutV2bdhgdIb0NAOXzovvr90J+Yd3xFCPBZILv6Gbfz/e423c551ad97jehgUAAJAvDI4AAAA8XK3WJUppADC5vmWLw/bY/oMpRhIfv5S26cBDYXvzklemEQ6a6PQ7mswRAACAh8ERAACAh7IaADTCtCyxKUoprRm/lPamPb8M2/4UJMgXMkcAAAAeBkcAAAAeymoA0AiltGJIuDzql9KCEhvltfwhcwQAAOApdOaof9HCsF05dDi1OJB99JV0sN/RcylmAMOM0b3z6wuvPZpOMGgLmSMAAAAPgyMAAABPoctqcafp+1YulySN7dkX6/MifZR00tHOfg8+fxKfQeSMV0o7+t2VYXv+TXvSiCaSsn/fkTkCAADwMDgCAADwFLqsFreypheBLODzhyLwS2mv3FX/Cn7oqookqW/Z4nCZP+1Ks+W9UvbPG5kjAAAAD4MjAAAAD2W1Brgq5nzsk2LgfQSyIyilSfWr2JpdwZZEKQ11ZI4AAAA8ZI4aSPov6qc3DIXtmVuHJUlTBleEy8ZH9iYaTyNZyTJkbb/kTVbeRwDnCjJG/jHuyRUzw3bw3YBkkDkCAADwMDgCAADwUFbLgEbpUkpGjbFfAJTF+//k9rD9za3zU4ykfMgcAQAAeBgcAQAAeCirAeja6fWrw/b0bQ+mGAmQb/6pA998Rb2UNjA8I2yPDj2TaExlROYIAADAw+AIAADAQ1kNkTDtBCbTy1Ja0Pfod93jc5xffintwOb6jYOXbMrmzSHz3tfIHAEAAHgYHAEAAHjMOZd2DJpps9xquzbtMPJr6Mp6e3h3enEUUbBv2a8Aokj4eByU2LJaXsu6e9ztu5xzqyYuJ3MEAADgIXMEAEDO3T06EravGxhMLY68IXMEAAAQAYMjAAAAD/c5yrG+OS+XJI2dfCzlSKqCeKT2Yur0dXT7+juNF5Njv5YD73NrSR6j/VJanNP55OV99uP0NYr5nHVPNH4+MkcAAAAeBkcAAAAerlbLsf5L50qSKsdPnLds4vKoz9Xu44CkFKWPFuV1IB9OfO+VYXvumx9KMZJs4mo1AACACBgcAQAAeLharUtpzjzcKCXfaZqe9H5jzAifHUXpo27WRfUfCvKaOhXH8ZPP6ORmfmNm2GZfRUfmCAAAwJO5E7L7L5sfLq88evS8dVv9vkyCfRHHfmhnv/rr+ni/kFdxfpaArIvzPkhZ0el3DSdkAwAARMDgCAAAwJO5shqA5MV5YUGaFyn0ShFfEyBJBzYPhe0lm4Z7vr2sfZYoqwEAAETA4AgAAMBDWQ2R9C1bHLbH9h9MMRK0i/euM+w3dKJVv8lbvzpyy9qwffnND6QYSW9QVgMAAIiAwREAAICH6UMQSZT0r58u7vQ5kH15Kwt0qsivDb3Tqt/kpV+d2rhGkrTomyfDZWNpBZMCMkcAAAAeMkeITV7+IiobN31arM/H+4yymTK4QpI0PrI35UiSM3vLdknSlPsvDZeNrUspmBSQOQIAAPAwOAIAAPBQVgMKrkylgKSVsdxSRkm+v0GfSnq7zbyw7njYfvTj9XseXfbJ6Pc8enpDfYqSmVt7P0VJHMgcAQAAeBgcAQAAeEozfUj/ZfMbLq88ejTy41qtCwAcM/IheJ/ieI/K+J4f2FwvlS3ZlI9SWSNMHwIAABABgyMAAABPaa5W81Od/YsWdvQ4TM7fr5VDh9v+PVAEHDPyIXifmh2X2jlexVKaq20vL8fGV/zlibB96p1rwvbFf7c9jXBiR+YIAADAw+AIAADAU5qr1Xrl9PrVYXv6tgdTjARAHnDMQJEFV7Hl5Qo2rlYDAACIgMxRSrJwcnIWYmgmjpMkAbSHzxfikpf7IJE5AgAAiIDBEQAAgIeyGnKrf96AJKlybDSV7aax7ST4ry9QxNcJoD2dHvv2f+m1YXvFJ+v3hMrCcYWyGgAAQAQMjgAAADylmT4ExZNWSjYLqeBYDF3ZcHFleHfCgSAVwfvP+11u/nGgRV/o9Ni37H0/CdsnNtanGpm9JbvHUjJHAAAAHgZHAAAAHq5WK5i+lcvD9tiefSlGUl68B/kTTOnBdB5AcrIw1QhXqwEAAERA5gjIuf6FC8J25fAj5y33l2FyzfYlgN6Z8X9mh+1nfv1UotsmcwQAABABgyMAAAAP9zkCJjFlcIUkaXxkb9uPafdxnWpW/qEs1L6y77Ok+y4gnVtKe/Tja8P25f/4ZNhOuj+SOQIAAPAwOAIAAPBQVgMm0Ukql3IE8iCYYd2fEuL5eReG7Wkj3T3vxOdG/iXx3l7xtcNh++EPXF5fPtKTzTVF5ggAAMDD4AgAAMDDTSCBKNqYuRroVv9l88N25dGjbf8ePcJxoCeC6Xuk5lP4RFmnE9wEEgAAIAIGRwAAAB7KasAkGl3Rk1YMaccxmTzEiOyh3xRXs/c2jvd8/5deK0la9r6fdBhdHWU1AACACMgcAUgN01UA6NSL7r80bL+w7njDdVpNAUXmCAAAIAIGRwAAAB6mDymx/oULwnans5HH8RxFwz6JLiultOA94/0C4jH+usGwPeXHIz3Zhl9KO/ypNWF74ce21+Po8BhD5ggAAMDD4AgAAMBDWa3E4ighUIY4H/skf3jPgHhNqYwnur2FdzwXtp+6c0nYvuiGAx09H5kjAAAAD4MjAAAAD2W1NgQzYTMLNgCgDILvPanN777h3T2IJtr2LrqhvvhNe34pSbpj5SVtPR2ZIwAAAA+ZozaQMarqW7k8bI/t2ZdiJACAXsr7916QMXr/w/UTs7+4dEmz1UNkjgAAADwMjgAAADyU1dA2SmnF0z9vIGxXjo2mGEl3ivI6gCLJwufSL6Ut3vHisH3PqsbrkzkCAADwMDgCAADwmHMu7RhkZo9LOiJptqRTKYeD7KOfICr6CqKir5TT5c65l01cmInBUcDMdjrnmlQAgSr6CaKiryAq+gp8lNUAAAA8DI4AAAA8WRscbUk7AOQC/QRR0VcQFX0FoUydcwQAAJC2rGWOAAAAUsXgCAAAwMPgCAAAwMPgCAAAwMPgCAAAwPP/AQBbZrNBOCJRAAAAAElFTkSuQmCC\n", "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -618,25 +650,26 @@ } ], "source": [ - "plt.figure(figsize=(12, 10)\n", + "fig, ax = plt.subplots(figsize=(12, 10)\n", "# , dpi=400\n", " )\n", "\n", - "plt.matshow(frame)\n", + "ax.matshow(normalised_array)\n", "\n", - "plt.title('Confusion matrix')\n", + "ax.set_title('Confusion matrix')\n", + "# plt.colorbar(ax=ax)\n", "plt.show()" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "cde63a06", + "execution_count": 26, + "id": "831a9fab", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -651,7 +684,7 @@ "plt.figure(figsize=(12, 10)\n", "# , dpi=400\n", " )\n", - "sns.heatmap(frame, xticklabels=False, yticklabels=False)\n", + "sns.heatmap(normalised_array, xticklabels=False, yticklabels=False, cmap='inferno')\n", "\n", "plt.title('Confusion matrix')\n", "plt.show()" diff --git a/cifar100/README.md b/cifar100/README.md new file mode 100644 index 0000000..de780fd --- /dev/null +++ b/cifar100/README.md @@ -0,0 +1,9 @@ +# CIFAR-100 + +At the beginning of the investigations, the CIFAR-100 was considered for use in the coursework. This was deemed non-viable due to the size compared to the Stanford cars. Models took far too long to train and the work was not iterative and agile enough. + +[Homepage](https://www.cs.toronto.edu/~kriz/cifar.html) + +*The CIFAR-10 dataset consists of 60000 32x32 colour images in 10 classes, with 6000 images per class. There are 50000 training images and 10000 test images.* + +*The dataset is divided into five training batches and one test batch, each with 10000 images. The test batch contains exactly 1000 randomly-selected images from each class. The training batches contain the remaining images in random order, but some training batches may contain more images from one class than another. Between them, the training batches contain exactly 5000 images from each class.* \ No newline at end of file diff --git a/data_aug.py b/data_aug.py new file mode 100644 index 0000000..fb0f3f7 --- /dev/null +++ b/data_aug.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 +"""Generate extra training data using rotations and flips + +Read a DIGITS train.txt and use OpenCV to generate extra data for training. +FLIP an image and/or apply various rotations from ROTATE_DEGREES + +Optionally rotate both clockwise and counter-clockwise by given degrees and +apply rotations to flipped images +""" + +import os +import pathlib +import cv2 as cv +import numpy as np + +TRAIN_FILE = input('enter train file path: ') # path to train.txt +OUTPUT_PATH = input('enter o/p path: ') # output folder for altered images + +# TRAIN_FILE = 'cars/default-split/train.txt' # path to train.txt +# OUTPUT_PATH = '/scratch/Teaching/ap00824/cars/train' # output folder for altered images + +DRY_RUN = False # dont output files, just a new train.txt + +FLIP = True # just flip image left to right +ROTATE = False # enable rotating image by below options +ROTATE_BOTH = False # do clockwise and counter-clockwise +ROTATE_DEGREES = [15] # different rotations to apply +FLIP_ROTATED = False # do rotations on both flipped images + +INCLUDE_ORIG = True # include original train.txt entry in ouput +# if true the output extra_training.txt can be used as a whole train.txt +# otherwise must be merged with original + +################### +# EXP FACTOR +################### + +exp_factor = int(ROTATE) * len(ROTATE_DEGREES) +exp_factor *= int(ROTATE_BOTH) + 1 # either 1 or 2 scale factor +exp_factor *= int(FLIP_ROTATED) + 1 # either 1 or 2 scale factor +exp_factor += int(FLIP) + 1 # flip is one extra image, + 1 for original file + +print("Expansion Factor of {}".format(exp_factor)) + +train_file = pathlib.Path(TRAIN_FILE) +output_path = pathlib.Path(OUTPUT_PATH).resolve() + +# read input train.txt +with open(TRAIN_FILE, 'r') as tf: + train_txt_lines = tf.readlines() + +# parse to dict objects +train_split = list() +for line in train_txt_lines: + space_split = line.split(' ') + train_split.append({ + # "raw_path": space_split[0], + "image": pathlib.Path(space_split[0]), + "class": space_split[1].replace('\n', '') + }) + +print('New Training Set: {} images'.format(len(train_split) * exp_factor)) +print('Generating {} images...'.format(len(train_split) * (exp_factor - 1))) + +################## +# PROCESS +################## + +# rotate_bound from imutils +# https://www.pyimagesearch.com/2017/01/02/rotate-images-correctly-with-opencv-and-python/ +def rotate_bound(image, angle): + # grab the dimensions of the image and then determine the + # center + (h, w) = image.shape[:2] + (cX, cY) = (w // 2, h // 2) + # grab the rotation matrix (applying the negative of the + # angle to rotate clockwise), then grab the sine and cosine + # (i.e., the rotation components of the matrix) + M = cv.getRotationMatrix2D((cX, cY), -angle, 1.0) + cos = np.abs(M[0, 0]) + sin = np.abs(M[0, 1]) + # compute the new bounding dimensions of the image + nW = int((h * sin) + (w * cos)) + nH = int((h * cos) + (w * sin)) + # adjust the rotation matrix to take into account translation + M[0, 2] += (nW / 2) - cX + M[1, 2] += (nH / 2) - cY + # perform the actual rotation and return the image + return cv.warpAffine(image, M, (nW, nH)) + +# get a modified image name +def insert_path_part(obj, part): + return obj["image"].stem + '-' + part + obj["image"].suffix + +def get_train_entry(obj, path): + return "{} {}\n".format(str(path), obj['class']) + +new_lines = list() +for train in train_split: + if not DRY_RUN: + img = cv.imread(str(train["image"])) + + if INCLUDE_ORIG: + new_lines.append(get_train_entry(train, train["image"])) + + if FLIP: + op_path = output_path / insert_path_part(train, 'flip') + if not DRY_RUN: + cv.imwrite(str(op_path), cv.flip(img, 1)) + new_lines.append(get_train_entry(train, op_path)) + + if ROTATE: + for deg in ROTATE_DEGREES: + op_path = output_path / insert_path_part(train, 'rot-{}'.format(deg)) + if not DRY_RUN: + cv.imwrite(str(op_path), rotate_bound(img, deg)) + new_lines.append(get_train_entry(train, op_path)) + + if FLIP_ROTATED: + op_path = output_path / insert_path_part(train, 'flip-rot-{}'.format(deg)) + if not DRY_RUN: + cv.imwrite(str(op_path), cv.flip(rotate_bound(img, deg), 1)) + new_lines.append(get_train_entry(train, op_path)) + + if ROTATE_BOTH: + op_path = output_path / insert_path_part(train, 'rot-min-{}'.format(deg)) + if not DRY_RUN: + cv.imwrite(str(op_path), rotate_bound(img, -deg)) + new_lines.append(get_train_entry(train, op_path)) + + if FLIP_ROTATED: + op_path = output_path / insert_path_part(train, 'flip-rot-min-{}'.format(deg)) + if not DRY_RUN: + cv.imwrite(str(op_path), cv.flip(rotate_bound(img, -deg), 1)) + new_lines.append(get_train_entry(train, op_path)) + +with open('extra_training.txt', 'w') as op_file: + op_file.writelines(new_lines) diff --git a/pyproject.toml b/pyproject.toml index 0b23182..327f0c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ matplotlib = "^3.4.1" jupyterlab = "^3.0.12" pandas = "^1.2.3" seaborn = "^0.11.1" +opencv-python = "^4.5.1" [tool.poetry.dev-dependencies]