diff --git a/code/autocropper/rotator.ipynb b/code/autocropper/rotator.ipynb deleted file mode 100644 index 31e3592..0000000 --- a/code/autocropper/rotator.ipynb +++ /dev/null @@ -1,604 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.10/dist-packages/torchvision/datapoints/__init__.py:12: UserWarning: The torchvision.datapoints and torchvision.transforms.v2 namespaces are still Beta. While we do not expect major breaking changes, some APIs may still change according to user feedback. Please submit any feedback you may have in this issue: https://github.com/pytorch/vision/issues/6753, and you can also check out https://github.com/pytorch/vision/issues/7319 to learn more about the APIs that we suspect might involve future changes. You can silence this warning by calling torchvision.disable_beta_transforms_warning().\n", - " warnings.warn(_BETA_TRANSFORMS_WARNING)\n", - "/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/__init__.py:54: UserWarning: The torchvision.datapoints and torchvision.transforms.v2 namespaces are still Beta. While we do not expect major breaking changes, some APIs may still change according to user feedback. Please submit any feedback you may have in this issue: https://github.com/pytorch/vision/issues/6753, and you can also check out https://github.com/pytorch/vision/issues/7319 to learn more about the APIs that we suspect might involve future changes. You can silence this warning by calling torchvision.disable_beta_transforms_warning().\n", - " warnings.warn(_BETA_TRANSFORMS_WARNING)\n" - ] - } - ], - "source": [ - "import torch\n", - "import torch.nn as nn\n", - "import torch.nn.functional as fn\n", - "import torch.optim as optim\n", - "import torchvision.transforms.functional as tvf\n", - "from torchvision.transforms import v2\n", - "from torch.utils.data import DataLoader\n", - "\n", - "from PIL import Image\n", - "\n", - "from datasets import load_dataset\n", - "from tqdm.autonotebook import tqdm\n", - "\n", - "import random\n", - "\n", - "import matplotlib.pyplot as plt\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "original_dataset = load_dataset(\"aharley/rvl_cdip\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Parameter Declaration\n", - "minRotation=-180\n", - "maxRotation=180\n", - "minTranslation=0\n", - "maxTranslation=150\n", - "minScale = 0.4\n", - "maxScale = 1\n", - "minShear = 0\n", - "maxShear = 0\n", - "\n", - "minFill=0\n", - "maxFill=255\n", - "\n", - "params = {\"minRotation\":minRotation,\"maxRotation\":maxRotation,\"minTranslation\":minTranslation,\"maxTranslation\":maxTranslation,\"minScale\":minScale,\"maxScale\":maxScale,\"minShear\":minShear,\"maxShear\":maxShear,\"minFill\":minFill,\"maxFill\":maxFill}" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "def transform_picture(image_label, parameters):\n", - " image = image_label['image']\n", - "\n", - " appliedRotation = random.uniform(parameters['minRotation'], parameters['maxRotation'])\n", - " appliedXTranslation = random.uniform(parameters['minTranslation'], parameters['maxTranslation'])\n", - " appliedYTranslation = random.uniform(parameters['minTranslation'], parameters['maxTranslation'])\n", - " appliedScale = random.uniform(parameters['minScale'], parameters['maxScale'])\n", - " appliedFill = random.uniform(parameters['minFill'], parameters['maxFill'])\n", - " appliedXShear = random.uniform(parameters['minShear'], parameters['maxShear'])\n", - " appliedYShear = random.uniform(parameters['minShear'], parameters['maxShear'])\n", - " \n", - " appliers = [v2.RandomApply(transforms=[v2.RandomPosterize(bits=1)], p=0.25),\n", - " v2.RandomApply(transforms=[v2.ElasticTransform(alpha=25.0, fill=appliedFill)], p=0.25), # maybe add fill=appliedFill\n", - " v2.RandomApply(transforms=[v2.GaussianBlur(kernel_size=(5,9), sigma=(0.1,2.))],p=0.25),\n", - " v2.RandomApply(transforms=[v2.RandomEqualize()],p=0.25)]\n", - " \n", - " adjustedimage = tvf.affine(image, appliedRotation, [appliedXTranslation,appliedYTranslation], appliedScale, [appliedXShear, appliedYShear], fill=appliedFill)\n", - "\n", - " for applier in appliers:\n", - " adjustedimage = applier(adjustedimage)\n", - "\n", - " \n", - " adjustedimage = tvf.resize(adjustedimage, size=[1100,1100])\n", - " \n", - " return {'image':adjustedimage,'label':appliedRotation}" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# # Create own dataset from the images of the original dataset but make the labels the float value for the rotation. do the random rotation on all of the training ones but the labels for the validation and test should/can be 0\n", - "# og_training_dataset = original_dataset['train']\n", - "# og_testing_dataset = original_dataset['test']\n", - "# og_validation_dataset = original_dataset['validation']\n", - "\n", - "# type(og_testing_dataset[0]['label'])\n", - "\n", - "# # type(transform_picture(og_testing_dataset[0], params))\n", - "# new_testing_dataset = og_testing_dataset.map(transform_picture, fn_kwargs={'parameters':params})" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "class WorkaroundDataset(torch.utils.data.Dataset):\n", - " def __init__(self, dataset):\n", - " self._dataset = dataset\n", - "\n", - " def __len__(self):\n", - " return len(self._dataset)\n", - "\n", - " def __getitem__(self, idx):\n", - " return v2.Compose([v2.ToImageTensor(), v2.ConvertImageDtype()])(self._dataset[idx]['image'])" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# # type(image_dataset['train'][0]['image'])\n", - "# # print(image_dataset['train'][0]['image'])\n", - "# img = image_dataset['train'][2]['image']\n", - "# # img\n", - "# # print(img.size)\n", - "# crop = tvf.resize(img, size=[500])\n", - "# # crop\n", - "# # print(crop.size)\n", - "# newimg = tvf.affine(crop, 180, [0,0], 0.7, 0)\n", - "# newimg" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "# appliedRotation = random.uniform(minRotation, maxRotation)\n", - "# appliedXTranslation = random.uniform(minTranslation, maxTranslation)\n", - "# appliedYTranslation = random.uniform(minTranslation, maxTranslation)\n", - "# appliedScale = random.uniform(minScale, maxScale)\n", - "# appliedFill = random.uniform(minFill, maxFill)\n", - "\n", - "\n", - "\n", - "# newimg = tvf.affine(crop, appliedRotation, [appliedXTranslation,appliedYTranslation], appliedScale, shear, fill=appliedFill)\n", - "# newimg\n", - "\n", - "# appliers = [v2.RandomApply(transforms=[v2.RandomPosterize(bits=1)], p=0.25),\n", - "# v2.RandomApply(transforms=[v2.ElasticTransform(alpha=25.0, fill=appliedFill)], p=0.25),\n", - "# v2.RandomApply(transforms=[v2.GaussianBlur(kernel_size=(5,9), sigma=(0.1,2.))],p=0.25),\n", - "# v2.RandomApply(transforms=[v2.RandomEqualize()],p=0.25)]\n", - "\n", - "# for applier in appliers:\n", - "# newimg = applier(newimg)\n", - " \n", - "# # newimg\n", - "# newimg= tvf.resize(newimg, size=[1000,1000])\n", - "# newimg\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class SquarePad:\n", - "\tdef __call__(self, image):\n", - "\t\tw, h = image.size\n", - "\t\tmax_wh = np.max([w, h])\n", - "\t\thp = int((max_wh - w) / 2)\n", - "\t\tvp = int((max_wh - h) / 2)\n", - "\t\tpadding = (hp, vp, hp, vp)\n", - "\t\treturn tvf.pad(image, padding, 0, 'constant')" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "class RotationDeterminer(nn.Module):\n", - " def __init__(self):\n", - " super().__init__()\n", - " \n", - " self.device = device = torch.device(\"cpu\")\n", - " if torch.cuda.is_available:\n", - " self.device = device = torch.device(\"cuda:0\")\n", - " \n", - " \n", - " self.appliers = [v2.RandomApply(transforms=[v2.RandomPosterize(bits=1)], p=0.25),\n", - " v2.RandomApply(transforms=[v2.ElasticTransform(alpha=25.0)], p=0.25), # maybe add fill=appliedFill\n", - " v2.RandomApply(transforms=[v2.GaussianBlur(kernel_size=(5,9), sigma=(0.1,2.))],p=0.25),\n", - " v2.RandomApply(transforms=[v2.RandomEqualize()],p=0.25)]\n", - " \n", - " \n", - " self.proceed = nn.Sequential(nn.Conv2d(3, 10, kernel_size=(5,5),stride=3), # 1100 x 1100 => 201 x 201\n", - " nn.ReLU(),\n", - " nn.Conv2d(10, 40, kernel_size=(4,4),stride=2),\n", - " nn.ReLU(),\n", - " nn.Conv2d(40, 70, kernel_size=(3,3),stride=1),\n", - " nn.ReLU(),\n", - " nn.Conv2d(70, 120, kernel_size=(4,4),stride=2),\n", - " nn.ReLU(),\n", - " nn.Conv2d(120, 200, kernel_size=(5,5),stride=2),\n", - " nn.ReLU(),\n", - " nn.Conv2d(200, 280, kernel_size=(3,3),stride=2),\n", - " nn.ReLU(),\n", - " nn.Conv2d(280, 350, kernel_size=(4,4),stride=1),\n", - " nn.ReLU(),\n", - " nn.Conv2d(350, 470, kernel_size=(4,4),stride=2),\n", - " nn.ReLU(),\n", - " nn.Conv2d(470, 600, kernel_size=(4,4),stride=2),\n", - " nn.ReLU(),\n", - " nn.Conv2d(600, 1200, kernel_size=(3,3),stride=1), # => 1\n", - " nn.ReLU(),\n", - " nn.Flatten(start_dim=0),\n", - " nn.Linear(1200, 500),\n", - " nn.ReLU(),\n", - " nn.Linear(500,100),\n", - " nn.ReLU(),\n", - " nn.Linear(100,20),\n", - " nn.ReLU(),\n", - " nn.Linear(20,1))\n", - " self.lossfunc = nn.MSELoss()\n", - " \n", - " # self.activation = nn.ReLU()\n", - " # self.l1 = nn.Conv2d(3, 10, kernel_size=(5,5),stride=3) # 1100 x 1100 => 201 x 201\n", - " # self.l2 = nn.Conv2d(10, 40, kernel_size=(4,4),stride=2)\n", - " # self.l3 = nn.Conv2d(40, 70, kernel_size=(3,3),stride=1)\n", - " # self.l4 = nn.Conv2d(70, 120, kernel_size=(4,4),stride=2)\n", - " # self.l5 = nn.Conv2d(120, 200, kernel_size=(5,5),stride=2)\n", - " # self.l6 = nn.Conv2d(200, 280, kernel_size=(3,3),stride=2)\n", - " # self.l7 = nn.Conv2d(280, 350, kernel_size=(4,4),stride=1)\n", - " # self.l8 = nn.Conv2d(350, 470, kernel_size=(4,4),stride=2)\n", - " # self.l9 = nn.Conv2d(470, 600, kernel_size=(4,4),stride=2)\n", - " # self.l10 = nn.Conv2d(600, 1200, kernel_size=(3,3),stride=1) # => 1\n", - " # self.l11 = nn.Linear(1200, 500)\n", - " # self.l12 = nn.Linear(500,100)\n", - " # self.l13 = nn.Linear(100,20)\n", - " # self.l14 = nn.Linear(20,1)\n", - " \n", - " def transformImage(self, image, parameters):\n", - " \n", - " # print(\"hi\")\n", - " \n", - " if self.training:\n", - " appliedRotation = random.uniform(parameters['minRotation'], parameters['maxRotation'])\n", - " appliedXTranslation = random.uniform(parameters['minTranslation'], parameters['maxTranslation'])\n", - " appliedYTranslation = random.uniform(parameters['minTranslation'], parameters['maxTranslation'])\n", - " appliedScale = random.uniform(parameters['minScale'], parameters['maxScale'])\n", - " appliedFill = random.uniform(parameters['minFill'], parameters['maxFill'])\n", - " appliedXShear = random.uniform(parameters['minShear'], parameters['maxShear'])\n", - " appliedYShear = random.uniform(parameters['minShear'], parameters['maxShear'])\n", - " \n", - " adjustedimage = tvf.affine(image, appliedRotation, [appliedXTranslation,appliedYTranslation], appliedScale, [appliedXShear, appliedYShear], fill=appliedFill)\n", - "\n", - " for applier in self.appliers:\n", - " adjustedimage = applier(adjustedimage)\n", - " else:\n", - " appliedRotation = 0\n", - " adjustedimage = image\n", - " \n", - " adjustedimage = tvf.resize(adjustedimage, size=[1100,1100])\n", - " # print(adjustedimage)\n", - " # print(type(adjustedimage))\n", - " adjustedimage = v2.Compose([v2.Grayscale(num_output_channels=3),v2.ToImageTensor(), v2.ConvertImageDtype()])(adjustedimage)\n", - " # print(newimg.size())\n", - " # adjustedimage = adjustedimage.unsqueeze(0)\n", - " adjustedimage = adjustedimage.to(self.device)\n", - " \n", - " # print(adjustedimage.size())\n", - " # print(\"hi1\")\n", - " # print(adjustedimage.device)\n", - " \n", - " return adjustedimage, appliedRotation\n", - "\n", - " \n", - " def forward(self, image, parameters):\n", - " \n", - " \n", - " print(image.size())\n", - " return 0\n", - " \n", - " \n", - " \n", - " \n", - " # adjustedimage = tvf.resize(adjustedimage, size=[1100,1100]) # ----- resize image on the forward pass\n", - " \n", - " # if self.training:\n", - " # if image.size() != torch.Size([1,1100,1100]):\n", - " # return \"ERROR\"\n", - " # else:\n", - " # if image.size() != torch.Size([1,1100,1100]):\n", - " # image = tvf.resize(image, size=[])\n", - " \n", - " \n", - " \n", - " # transformedimage, trueRotation = self.transformImage(image, parameters)\n", - " \n", - " # trueRotation = torch.tensor([trueRotation])\n", - " \n", - " # trueRotation = trueRotation.to(self.device)\n", - " \n", - " # print(type(transformedimage))\n", - " # resulting = self.l1(transformedimage)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l2(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l3(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l4(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l5(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l6(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l7(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l8(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l9(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l10(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # print(resulting.size())\n", - " # resulting = resulting.squeeze()\n", - " # print(resulting.size())\n", - " # print(resulting)\n", - " # resulting = self.l11(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l12(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # resulting = self.l13(resulting)\n", - " # resulting = self.activation(resulting)\n", - " # guessRotation = self.l14(resulting)\n", - " # print(guessRotation.size())\n", - " # guessRotation = guessRotation.squeeze()\n", - " # print(guessRotation.size())\n", - " \n", - " # guessRotation = 0\n", - " guessRotation = self.proceed(transformedimage)\n", - " \n", - " # print(trueRotation.size())\n", - " \n", - "\n", - " return guessRotation\n", - " \n", - " def loss(self, guess, trueAnswer):\n", - " return self.lossfunc(guess, trueAnswer)\n", - " \n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "def batchmaker(entries, batchsize):\n", - " random.shuffle(entries)\n", - " listing = []\n", - " for i in range(0,len(entries), batchsize):\n", - " listing.append(entries[i:i+batchsize])\n", - " return listing" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "print(type(v2.Compose([v2.ToImageTensor(), v2.ConvertImageDtype()])(image_dataset['train'][0]['image'])))" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "def train(model, batchsize, num_epochs, stepsize):\n", - " device = torch.device(\"cpu\")\n", - " if torch.cuda.is_available:\n", - " device = torch.device(\"cuda:0\")\n", - " model = model.cuda()\n", - " optimizer = optim.Adam(model.parameters(), lr=stepsize)\n", - " \n", - " model = model.train()\n", - " \n", - " for e in range(num_epochs):\n", - " \n", - " training_dataset = image_dataset['train']\n", - " \n", - " # train_dataloader = DataLoader(training_dataset, batch_size=batchsize, shuffle=True)\n", - " \n", - " indices = list(range(len(training_dataset)))\n", - " batch_indices = batchmaker(indices, batchsize)\n", - " \n", - " pbar = tqdm(batch_indices)\n", - " \n", - " for i, indices in enumerate(pbar):\n", - " for idx in indices:\n", - " \n", - " training_image = training_dataset[idx]['image']\n", - " \n", - " optimizer.zero_grad()\n", - " \n", - " guessRotation, trueRotation = model(training_image, params)\n", - " \n", - " loss = model.loss(guessRotation, trueRotation)\n", - " \n", - " loss.backward()\n", - " \n", - " optimizer.step()\n", - " # print(\"HI@\")\n", - " # break\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "testimage = image_dataset['train'][2]['image']\n", - "\n", - "# testimage = v2.Compose([v2.Grayscale(num_output_channels=3),v2.ToTensor(),])(testimage)\n", - "# testimage.size()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "# print(type(image_dataset['train']))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "model = RotationDeterminer()\n", - "device = torch.device(\"cpu\")\n", - "if torch.cuda.is_available:\n", - " device = torch.device(\"cuda:0\")\n", - " model = model.cuda()\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(tensor([0.1313], device='cuda:0', grad_fn=), tensor([-6.9195], device='cuda:0'))\n" - ] - } - ], - "source": [ - "output = model(testimage, params)\n", - "print(output)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8c34b60603e04aa48b7080e9ea5e8d92", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/3200 [00:001\u001b[0m model \u001b[39m=\u001b[39m model\u001b[39m.\u001b[39meval()\n\u001b[1;32m 2\u001b[0m output1 \u001b[39m=\u001b[39m model(testimage, params)\n\u001b[0;32m----> 5\u001b[0m train(model, \u001b[39m100\u001b[39;49m, \u001b[39m1\u001b[39;49m, \u001b[39m1e-2\u001b[39;49m)\n\u001b[1;32m 7\u001b[0m model \u001b[39m=\u001b[39m model\u001b[39m.\u001b[39meval()\n\u001b[1;32m 9\u001b[0m output2 \u001b[39m=\u001b[39m model(testimage, params)\n", - "\u001b[1;32m/mnt/code/autocropper/rotator.ipynb Cell 15\u001b[0m line \u001b[0;36m2\n\u001b[1;32m 24\u001b[0m training_image \u001b[39m=\u001b[39m training_dataset[idx][\u001b[39m'\u001b[39m\u001b[39mimage\u001b[39m\u001b[39m'\u001b[39m]\n\u001b[1;32m 26\u001b[0m optimizer\u001b[39m.\u001b[39mzero_grad()\n\u001b[0;32m---> 28\u001b[0m guessRotation, trueRotation \u001b[39m=\u001b[39m model(training_image, params)\n\u001b[1;32m 30\u001b[0m loss \u001b[39m=\u001b[39m model\u001b[39m.\u001b[39mloss(guessRotation, trueRotation)\n\u001b[1;32m 32\u001b[0m loss\u001b[39m.\u001b[39mbackward()\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py:1501\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1496\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1497\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1498\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1499\u001b[0m \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1500\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1501\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 1502\u001b[0m \u001b[39m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1503\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[39m=\u001b[39m [], []\n", - "\u001b[1;32m/mnt/code/autocropper/rotator.ipynb Cell 15\u001b[0m line \u001b[0;36m1\n\u001b[1;32m 98\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mforward\u001b[39m(\u001b[39mself\u001b[39m, image, parameters):\n\u001b[0;32m--> 100\u001b[0m transformedimage, trueRotation \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mtransformImage(image, parameters)\n\u001b[1;32m 102\u001b[0m trueRotation \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39mtensor([trueRotation])\n\u001b[1;32m 104\u001b[0m trueRotation \u001b[39m=\u001b[39m trueRotation\u001b[39m.\u001b[39mto(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdevice)\n", - "\u001b[1;32m/mnt/code/autocropper/rotator.ipynb Cell 15\u001b[0m line \u001b[0;36m7\n\u001b[1;32m 72\u001b[0m appliedXShear \u001b[39m=\u001b[39m random\u001b[39m.\u001b[39muniform(parameters[\u001b[39m'\u001b[39m\u001b[39mminShear\u001b[39m\u001b[39m'\u001b[39m], parameters[\u001b[39m'\u001b[39m\u001b[39mmaxShear\u001b[39m\u001b[39m'\u001b[39m])\n\u001b[1;32m 73\u001b[0m appliedYShear \u001b[39m=\u001b[39m random\u001b[39m.\u001b[39muniform(parameters[\u001b[39m'\u001b[39m\u001b[39mminShear\u001b[39m\u001b[39m'\u001b[39m], parameters[\u001b[39m'\u001b[39m\u001b[39mmaxShear\u001b[39m\u001b[39m'\u001b[39m])\n\u001b[0;32m---> 75\u001b[0m adjustedimage \u001b[39m=\u001b[39m tvf\u001b[39m.\u001b[39;49maffine(image, appliedRotation, [appliedXTranslation,appliedYTranslation], appliedScale, [appliedXShear, appliedYShear], fill\u001b[39m=\u001b[39;49mappliedFill)\n\u001b[1;32m 77\u001b[0m \u001b[39mfor\u001b[39;00m applier \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mappliers:\n\u001b[1;32m 78\u001b[0m adjustedimage \u001b[39m=\u001b[39m applier(adjustedimage)\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/functional.py:1236\u001b[0m, in \u001b[0;36maffine\u001b[0;34m(img, angle, translate, scale, shear, interpolation, fill, center)\u001b[0m\n\u001b[1;32m 1234\u001b[0m matrix \u001b[39m=\u001b[39m _get_inverse_affine_matrix(center, angle, translate, scale, shear)\n\u001b[1;32m 1235\u001b[0m pil_interpolation \u001b[39m=\u001b[39m pil_modes_mapping[interpolation]\n\u001b[0;32m-> 1236\u001b[0m \u001b[39mreturn\u001b[39;00m F_pil\u001b[39m.\u001b[39;49maffine(img, matrix\u001b[39m=\u001b[39;49mmatrix, interpolation\u001b[39m=\u001b[39;49mpil_interpolation, fill\u001b[39m=\u001b[39;49mfill)\n\u001b[1;32m 1238\u001b[0m center_f \u001b[39m=\u001b[39m [\u001b[39m0.0\u001b[39m, \u001b[39m0.0\u001b[39m]\n\u001b[1;32m 1239\u001b[0m \u001b[39mif\u001b[39;00m center \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/_functional_pil.py:295\u001b[0m, in \u001b[0;36maffine\u001b[0;34m(img, matrix, interpolation, fill)\u001b[0m\n\u001b[1;32m 293\u001b[0m output_size \u001b[39m=\u001b[39m img\u001b[39m.\u001b[39msize\n\u001b[1;32m 294\u001b[0m opts \u001b[39m=\u001b[39m _parse_fill(fill, img)\n\u001b[0;32m--> 295\u001b[0m \u001b[39mreturn\u001b[39;00m img\u001b[39m.\u001b[39;49mtransform(output_size, Image\u001b[39m.\u001b[39;49mAFFINE, matrix, interpolation, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mopts)\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/PIL/Image.py:2631\u001b[0m, in \u001b[0;36mImage.transform\u001b[0;34m(self, size, method, data, resample, fill, fillcolor)\u001b[0m\n\u001b[1;32m 2627\u001b[0m im\u001b[39m.\u001b[39m__transformer(\n\u001b[1;32m 2628\u001b[0m box, \u001b[39mself\u001b[39m, Transform\u001b[39m.\u001b[39mQUAD, quad, resample, fillcolor \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 2629\u001b[0m )\n\u001b[1;32m 2630\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m-> 2631\u001b[0m im\u001b[39m.\u001b[39;49m__transformer(\n\u001b[1;32m 2632\u001b[0m (\u001b[39m0\u001b[39;49m, \u001b[39m0\u001b[39;49m) \u001b[39m+\u001b[39;49m size, \u001b[39mself\u001b[39;49m, method, data, resample, fillcolor \u001b[39mis\u001b[39;49;00m \u001b[39mNone\u001b[39;49;00m\n\u001b[1;32m 2633\u001b[0m )\n\u001b[1;32m 2635\u001b[0m \u001b[39mreturn\u001b[39;00m im\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/PIL/Image.py:2681\u001b[0m, in \u001b[0;36mImage.__transformer\u001b[0;34m(self, box, image, method, data, resample, fill)\u001b[0m\n\u001b[1;32m 2678\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 2679\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39munknown transformation method\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m-> 2681\u001b[0m \u001b[39mif\u001b[39;00m resample \u001b[39mnot\u001b[39;00m \u001b[39min\u001b[39;00m (\n\u001b[1;32m 2682\u001b[0m Resampling\u001b[39m.\u001b[39mNEAREST,\n\u001b[1;32m 2683\u001b[0m Resampling\u001b[39m.\u001b[39mBILINEAR,\n\u001b[1;32m 2684\u001b[0m Resampling\u001b[39m.\u001b[39mBICUBIC,\n\u001b[1;32m 2685\u001b[0m ):\n\u001b[1;32m 2686\u001b[0m \u001b[39mif\u001b[39;00m resample \u001b[39min\u001b[39;00m (Resampling\u001b[39m.\u001b[39mBOX, Resampling\u001b[39m.\u001b[39mHAMMING, Resampling\u001b[39m.\u001b[39mLANCZOS):\n\u001b[1;32m 2687\u001b[0m message \u001b[39m=\u001b[39m {\n\u001b[1;32m 2688\u001b[0m Resampling\u001b[39m.\u001b[39mBOX: \u001b[39m\"\u001b[39m\u001b[39mImage.Resampling.BOX\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 2689\u001b[0m Resampling\u001b[39m.\u001b[39mHAMMING: \u001b[39m\"\u001b[39m\u001b[39mImage.Resampling.HAMMING\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 2690\u001b[0m Resampling\u001b[39m.\u001b[39mLANCZOS: \u001b[39m\"\u001b[39m\u001b[39mImage.Resampling.LANCZOS\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 2691\u001b[0m }[resample] \u001b[39m+\u001b[39m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m (\u001b[39m\u001b[39m{\u001b[39;00mresample\u001b[39m}\u001b[39;00m\u001b[39m) cannot be used.\u001b[39m\u001b[39m\"\u001b[39m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "model = model.eval()\n", - "output1 = model(testimage, params)\n", - "\n", - "\n", - "train(model, 100, 1, 1e-2)\n", - "\n", - "model = model.eval()\n", - "\n", - "output2 = model(testimage, params)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "tensor([0.1679], device='cuda:0', grad_fn=)\n", - "tensor([-133520.6406], device='cuda:0', grad_fn=)\n" - ] - } - ], - "source": [ - "print(output1)\n", - "print(output2)" - ] - } - ], - "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.10.12" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/code/autocropper/rotator_dataset_augmentor.ipynb b/code/autocropper/rotator_dataset_augmentor.ipynb deleted file mode 100644 index c7e92e1..0000000 --- a/code/autocropper/rotator_dataset_augmentor.ipynb +++ /dev/null @@ -1,365 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python3.10/dist-packages/torchvision/datapoints/__init__.py:12: UserWarning: The torchvision.datapoints and torchvision.transforms.v2 namespaces are still Beta. While we do not expect major breaking changes, some APIs may still change according to user feedback. Please submit any feedback you may have in this issue: https://github.com/pytorch/vision/issues/6753, and you can also check out https://github.com/pytorch/vision/issues/7319 to learn more about the APIs that we suspect might involve future changes. You can silence this warning by calling torchvision.disable_beta_transforms_warning().\n", - " warnings.warn(_BETA_TRANSFORMS_WARNING)\n", - "/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/__init__.py:54: UserWarning: The torchvision.datapoints and torchvision.transforms.v2 namespaces are still Beta. While we do not expect major breaking changes, some APIs may still change according to user feedback. Please submit any feedback you may have in this issue: https://github.com/pytorch/vision/issues/6753, and you can also check out https://github.com/pytorch/vision/issues/7319 to learn more about the APIs that we suspect might involve future changes. You can silence this warning by calling torchvision.disable_beta_transforms_warning().\n", - " warnings.warn(_BETA_TRANSFORMS_WARNING)\n" - ] - } - ], - "source": [ - "from datasets import load_dataset\n", - "import torchvision.transforms.functional as tvf\n", - "from torchvision.transforms import v2\n", - "import random\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9cf6fa0186674dd0bab210d69155d3a1", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Downloading builder script: 0%| | 0.00/4.94k [00:00 1676\u001b[0m \u001b[39mfor\u001b[39;00m key, record \u001b[39min\u001b[39;00m generator:\n\u001b[1;32m 1677\u001b[0m \u001b[39mif\u001b[39;00m max_shard_size \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mand\u001b[39;00m writer\u001b[39m.\u001b[39m_num_bytes \u001b[39m>\u001b[39m max_shard_size:\n", - "File \u001b[0;32m~/.cache/huggingface/modules/datasets_modules/datasets/aharley--rvl_cdip/ea410993ed3f5b9744d8616ffbaad5f70a75a21a4233626dd07b3de31d381e53/rvl_cdip.py:148\u001b[0m, in \u001b[0;36mRvlCdip._generate_examples\u001b[0;34m(self, archive_iterator, labels_filepath)\u001b[0m\n\u001b[1;32m 147\u001b[0m label \u001b[39m=\u001b[39m _CLASSES[class_id]\n\u001b[0;32m--> 148\u001b[0m \u001b[39myield\u001b[39;00m file_path, {\u001b[39m\"\u001b[39m\u001b[39mimage\u001b[39m\u001b[39m\"\u001b[39m: {\u001b[39m\"\u001b[39m\u001b[39mpath\u001b[39m\u001b[39m\"\u001b[39m: file_path, \u001b[39m\"\u001b[39m\u001b[39mbytes\u001b[39m\u001b[39m\"\u001b[39m: file_obj\u001b[39m.\u001b[39;49mread()}, \u001b[39m\"\u001b[39m\u001b[39mlabel\u001b[39m\u001b[39m\"\u001b[39m: label}\n", - "File \u001b[0;32m/usr/lib/python3.10/tarfile.py:691\u001b[0m, in \u001b[0;36m_FileInFile.read\u001b[0;34m(self, size)\u001b[0m\n\u001b[1;32m 690\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mlen\u001b[39m(b) \u001b[39m!=\u001b[39m length:\n\u001b[0;32m--> 691\u001b[0m \u001b[39mraise\u001b[39;00m ReadError(\u001b[39m\"\u001b[39m\u001b[39munexpected end of data\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 692\u001b[0m buf \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m b\n", - "\u001b[0;31mReadError\u001b[0m: unexpected end of data", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mDatasetGenerationError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/mnt/code/autocropper/rotator_dataset_augmentor.ipynb Cell 2\u001b[0m line \u001b[0;36m1\n\u001b[0;32m----> 1\u001b[0m original_dataset \u001b[39m=\u001b[39m load_dataset(\u001b[39m\"\u001b[39;49m\u001b[39maharley/rvl_cdip\u001b[39;49m\u001b[39m\"\u001b[39;49m, download_mode\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mforce_redownload\u001b[39;49m\u001b[39m\"\u001b[39;49m)\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/load.py:2153\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(path, name, data_dir, data_files, split, cache_dir, features, download_config, download_mode, verification_mode, ignore_verifications, keep_in_memory, save_infos, revision, token, use_auth_token, task, streaming, num_proc, storage_options, **config_kwargs)\u001b[0m\n\u001b[1;32m 2150\u001b[0m try_from_hf_gcs \u001b[39m=\u001b[39m path \u001b[39mnot\u001b[39;00m \u001b[39min\u001b[39;00m _PACKAGED_DATASETS_MODULES\n\u001b[1;32m 2152\u001b[0m \u001b[39m# Download and prepare data\u001b[39;00m\n\u001b[0;32m-> 2153\u001b[0m builder_instance\u001b[39m.\u001b[39;49mdownload_and_prepare(\n\u001b[1;32m 2154\u001b[0m download_config\u001b[39m=\u001b[39;49mdownload_config,\n\u001b[1;32m 2155\u001b[0m download_mode\u001b[39m=\u001b[39;49mdownload_mode,\n\u001b[1;32m 2156\u001b[0m verification_mode\u001b[39m=\u001b[39;49mverification_mode,\n\u001b[1;32m 2157\u001b[0m try_from_hf_gcs\u001b[39m=\u001b[39;49mtry_from_hf_gcs,\n\u001b[1;32m 2158\u001b[0m num_proc\u001b[39m=\u001b[39;49mnum_proc,\n\u001b[1;32m 2159\u001b[0m storage_options\u001b[39m=\u001b[39;49mstorage_options,\n\u001b[1;32m 2160\u001b[0m )\n\u001b[1;32m 2162\u001b[0m \u001b[39m# Build dataset for splits\u001b[39;00m\n\u001b[1;32m 2163\u001b[0m keep_in_memory \u001b[39m=\u001b[39m (\n\u001b[1;32m 2164\u001b[0m keep_in_memory \u001b[39mif\u001b[39;00m keep_in_memory \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39melse\u001b[39;00m is_small_dataset(builder_instance\u001b[39m.\u001b[39minfo\u001b[39m.\u001b[39mdataset_size)\n\u001b[1;32m 2165\u001b[0m )\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/builder.py:954\u001b[0m, in \u001b[0;36mDatasetBuilder.download_and_prepare\u001b[0;34m(self, output_dir, download_config, download_mode, verification_mode, ignore_verifications, try_from_hf_gcs, dl_manager, base_path, use_auth_token, file_format, max_shard_size, num_proc, storage_options, **download_and_prepare_kwargs)\u001b[0m\n\u001b[1;32m 952\u001b[0m \u001b[39mif\u001b[39;00m num_proc \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 953\u001b[0m prepare_split_kwargs[\u001b[39m\"\u001b[39m\u001b[39mnum_proc\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m num_proc\n\u001b[0;32m--> 954\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_download_and_prepare(\n\u001b[1;32m 955\u001b[0m dl_manager\u001b[39m=\u001b[39;49mdl_manager,\n\u001b[1;32m 956\u001b[0m verification_mode\u001b[39m=\u001b[39;49mverification_mode,\n\u001b[1;32m 957\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mprepare_split_kwargs,\n\u001b[1;32m 958\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mdownload_and_prepare_kwargs,\n\u001b[1;32m 959\u001b[0m )\n\u001b[1;32m 960\u001b[0m \u001b[39m# Sync info\u001b[39;00m\n\u001b[1;32m 961\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39minfo\u001b[39m.\u001b[39mdataset_size \u001b[39m=\u001b[39m \u001b[39msum\u001b[39m(split\u001b[39m.\u001b[39mnum_bytes \u001b[39mfor\u001b[39;00m split \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39minfo\u001b[39m.\u001b[39msplits\u001b[39m.\u001b[39mvalues())\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/builder.py:1717\u001b[0m, in \u001b[0;36mGeneratorBasedBuilder._download_and_prepare\u001b[0;34m(self, dl_manager, verification_mode, **prepare_splits_kwargs)\u001b[0m\n\u001b[1;32m 1716\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_download_and_prepare\u001b[39m(\u001b[39mself\u001b[39m, dl_manager, verification_mode, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mprepare_splits_kwargs):\n\u001b[0;32m-> 1717\u001b[0m \u001b[39msuper\u001b[39;49m()\u001b[39m.\u001b[39;49m_download_and_prepare(\n\u001b[1;32m 1718\u001b[0m dl_manager,\n\u001b[1;32m 1719\u001b[0m verification_mode,\n\u001b[1;32m 1720\u001b[0m check_duplicate_keys\u001b[39m=\u001b[39;49mverification_mode \u001b[39m==\u001b[39;49m VerificationMode\u001b[39m.\u001b[39;49mBASIC_CHECKS\n\u001b[1;32m 1721\u001b[0m \u001b[39mor\u001b[39;49;00m verification_mode \u001b[39m==\u001b[39;49m VerificationMode\u001b[39m.\u001b[39;49mALL_CHECKS,\n\u001b[1;32m 1722\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mprepare_splits_kwargs,\n\u001b[1;32m 1723\u001b[0m )\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/builder.py:1049\u001b[0m, in \u001b[0;36mDatasetBuilder._download_and_prepare\u001b[0;34m(self, dl_manager, verification_mode, **prepare_split_kwargs)\u001b[0m\n\u001b[1;32m 1045\u001b[0m split_dict\u001b[39m.\u001b[39madd(split_generator\u001b[39m.\u001b[39msplit_info)\n\u001b[1;32m 1047\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 1048\u001b[0m \u001b[39m# Prepare split will record examples associated to the split\u001b[39;00m\n\u001b[0;32m-> 1049\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_prepare_split(split_generator, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mprepare_split_kwargs)\n\u001b[1;32m 1050\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mOSError\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n\u001b[1;32m 1051\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mOSError\u001b[39;00m(\n\u001b[1;32m 1052\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mCannot find data file. \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 1053\u001b[0m \u001b[39m+\u001b[39m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mmanual_download_instructions \u001b[39mor\u001b[39;00m \u001b[39m\"\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 1054\u001b[0m \u001b[39m+\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39mOriginal error:\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 1055\u001b[0m \u001b[39m+\u001b[39m \u001b[39mstr\u001b[39m(e)\n\u001b[1;32m 1056\u001b[0m ) \u001b[39mfrom\u001b[39;00m \u001b[39mNone\u001b[39;00m\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/builder.py:1555\u001b[0m, in \u001b[0;36mGeneratorBasedBuilder._prepare_split\u001b[0;34m(self, split_generator, check_duplicate_keys, file_format, num_proc, max_shard_size)\u001b[0m\n\u001b[1;32m 1553\u001b[0m job_id \u001b[39m=\u001b[39m \u001b[39m0\u001b[39m\n\u001b[1;32m 1554\u001b[0m \u001b[39mwith\u001b[39;00m pbar:\n\u001b[0;32m-> 1555\u001b[0m \u001b[39mfor\u001b[39;00m job_id, done, content \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_prepare_split_single(\n\u001b[1;32m 1556\u001b[0m gen_kwargs\u001b[39m=\u001b[39mgen_kwargs, job_id\u001b[39m=\u001b[39mjob_id, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39m_prepare_split_args\n\u001b[1;32m 1557\u001b[0m ):\n\u001b[1;32m 1558\u001b[0m \u001b[39mif\u001b[39;00m done:\n\u001b[1;32m 1559\u001b[0m result \u001b[39m=\u001b[39m content\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/builder.py:1712\u001b[0m, in \u001b[0;36mGeneratorBasedBuilder._prepare_split_single\u001b[0;34m(self, gen_kwargs, fpath, file_format, max_shard_size, split_info, check_duplicate_keys, job_id)\u001b[0m\n\u001b[1;32m 1710\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(e, SchemaInferenceError) \u001b[39mand\u001b[39;00m e\u001b[39m.\u001b[39m__context__ \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 1711\u001b[0m e \u001b[39m=\u001b[39m e\u001b[39m.\u001b[39m__context__\n\u001b[0;32m-> 1712\u001b[0m \u001b[39mraise\u001b[39;00m DatasetGenerationError(\u001b[39m\"\u001b[39m\u001b[39mAn error occurred while generating the dataset\u001b[39m\u001b[39m\"\u001b[39m) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 1714\u001b[0m \u001b[39myield\u001b[39;00m job_id, \u001b[39mTrue\u001b[39;00m, (total_num_examples, total_num_bytes, writer\u001b[39m.\u001b[39m_features, num_shards, shard_lengths)\n", - "\u001b[0;31mDatasetGenerationError\u001b[0m: An error occurred while generating the dataset" - ] - } - ], - "source": [ - "original_dataset = load_dataset(\"aharley/rvl_cdip\", download_mode=\"force_redownload\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# Parameter Declaration\n", - "minRotation=-180\n", - "maxRotation=180\n", - "minTranslation=0\n", - "maxTranslation=150\n", - "minScale = 0.4\n", - "maxScale = 1\n", - "minShear = 0\n", - "maxShear = 0\n", - "\n", - "minFill=0\n", - "maxFill=255\n", - "\n", - "params = {\"minRotation\":minRotation,\"maxRotation\":maxRotation,\"minTranslation\":minTranslation,\"maxTranslation\":maxTranslation,\"minScale\":minScale,\"maxScale\":maxScale,\"minShear\":minShear,\"maxShear\":maxShear,\"minFill\":minFill,\"maxFill\":maxFill}" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "class SquarePad:\n", - " def __init__(self, fill):\n", - " self.fill = fill\n", - " \n", - " def __call__(self, image):\n", - " w, h = image.size\n", - " max_wh = np.max([w, h])\n", - " hp = int((max_wh - w) / 2)\n", - " vp = int((max_wh - h) / 2)\n", - " padding = (hp, vp, hp, vp)\n", - " return tvf.pad(image, padding,fill=self.fill, padding_mode='constant')\n", - "\n", - "\n", - " \n", - "\n", - "\n", - "\n", - "def transform_picture(image_label, parameters):\n", - " image = image_label['image']\n", - "\n", - " appliedRotation = random.uniform(parameters['minRotation'], parameters['maxRotation'])\n", - " appliedXTranslation = random.uniform(parameters['minTranslation'], parameters['maxTranslation'])\n", - " appliedYTranslation = random.uniform(parameters['minTranslation'], parameters['maxTranslation'])\n", - " appliedScale = random.uniform(parameters['minScale'], parameters['maxScale'])\n", - " appliedFill = random.uniform(parameters['minFill'], parameters['maxFill'])\n", - " appliedXShear = random.uniform(parameters['minShear'], parameters['maxShear'])\n", - " appliedYShear = random.uniform(parameters['minShear'], parameters['maxShear'])\n", - " \n", - " appliers = v2.Compose([v2.RandomApply(transforms=[v2.RandomPosterize(bits=1)], p=0.25),\n", - " v2.RandomApply(transforms=[v2.ElasticTransform(alpha=25.0, fill=appliedFill)], p=0.25), # maybe add fill=appliedFill\n", - " v2.RandomApply(transforms=[v2.GaussianBlur(kernel_size=(5,9), sigma=(0.1,2.))],p=0.25),\n", - " v2.RandomApply(transforms=[v2.RandomEqualize()],p=0.25),\n", - " SquarePad(fill=appliedFill),v2.Resize(1100)])\n", - " \n", - " adjustedimage = tvf.affine(image, appliedRotation, [appliedXTranslation,appliedYTranslation], appliedScale, [appliedXShear, appliedYShear], fill=appliedFill)\n", - "\n", - " adjustedimage = appliers(adjustedimage)\n", - "\n", - " \n", - " return {'image':adjustedimage,'label':appliedRotation}" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "# Create own dataset from the images of the original dataset but make the labels the float value for the rotation. do the random rotation on all of the training ones but the labels for the validation and test should/can be 0\n", - "og_training_dataset = original_dataset['train']\n", - "og_testing_dataset = original_dataset['test']\n", - "og_validation_dataset = original_dataset['validation']\n", - "\n", - "# type(og_testing_dataset)\n", - "\n", - "# print(type(transform_picture(og_testing_dataset[0], params)))\n", - "# out = transform_picture(og_testing_dataset[0], params)\n", - "# print(out['image'])\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "04f34b2242ad41cb9f94d9c771706295", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Map: 0%| | 0/40000 [00:00 1\u001b[0m new_testing_dataset \u001b[39m=\u001b[39m og_testing_dataset\u001b[39m.\u001b[39;49mmap(transform_picture, fn_kwargs\u001b[39m=\u001b[39;49m{\u001b[39m'\u001b[39;49m\u001b[39mparameters\u001b[39;49m\u001b[39m'\u001b[39;49m:params})\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/arrow_dataset.py:592\u001b[0m, in \u001b[0;36mtransmit_tasks..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 590\u001b[0m \u001b[39mself\u001b[39m: \u001b[39m\"\u001b[39m\u001b[39mDataset\u001b[39m\u001b[39m\"\u001b[39m \u001b[39m=\u001b[39m kwargs\u001b[39m.\u001b[39mpop(\u001b[39m\"\u001b[39m\u001b[39mself\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 591\u001b[0m \u001b[39m# apply actual function\u001b[39;00m\n\u001b[0;32m--> 592\u001b[0m out: Union[\u001b[39m\"\u001b[39m\u001b[39mDataset\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mDatasetDict\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 593\u001b[0m datasets: List[\u001b[39m\"\u001b[39m\u001b[39mDataset\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mlist\u001b[39m(out\u001b[39m.\u001b[39mvalues()) \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(out, \u001b[39mdict\u001b[39m) \u001b[39melse\u001b[39;00m [out]\n\u001b[1;32m 594\u001b[0m \u001b[39mfor\u001b[39;00m dataset \u001b[39min\u001b[39;00m datasets:\n\u001b[1;32m 595\u001b[0m \u001b[39m# Remove task templates if a column mapping of the template is no longer valid\u001b[39;00m\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/arrow_dataset.py:557\u001b[0m, in \u001b[0;36mtransmit_format..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 550\u001b[0m self_format \u001b[39m=\u001b[39m {\n\u001b[1;32m 551\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mtype\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_format_type,\n\u001b[1;32m 552\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mformat_kwargs\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_format_kwargs,\n\u001b[1;32m 553\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mcolumns\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_format_columns,\n\u001b[1;32m 554\u001b[0m \u001b[39m\"\u001b[39m\u001b[39moutput_all_columns\u001b[39m\u001b[39m\"\u001b[39m: \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_output_all_columns,\n\u001b[1;32m 555\u001b[0m }\n\u001b[1;32m 556\u001b[0m \u001b[39m# apply actual function\u001b[39;00m\n\u001b[0;32m--> 557\u001b[0m out: Union[\u001b[39m\"\u001b[39m\u001b[39mDataset\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mDatasetDict\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m func(\u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 558\u001b[0m datasets: List[\u001b[39m\"\u001b[39m\u001b[39mDataset\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m \u001b[39mlist\u001b[39m(out\u001b[39m.\u001b[39mvalues()) \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(out, \u001b[39mdict\u001b[39m) \u001b[39melse\u001b[39;00m [out]\n\u001b[1;32m 559\u001b[0m \u001b[39m# re-apply format to the output\u001b[39;00m\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/arrow_dataset.py:3097\u001b[0m, in \u001b[0;36mDataset.map\u001b[0;34m(self, function, with_indices, with_rank, input_columns, batched, batch_size, drop_last_batch, remove_columns, keep_in_memory, load_from_cache_file, cache_file_name, writer_batch_size, features, disable_nullable, fn_kwargs, num_proc, suffix_template, new_fingerprint, desc)\u001b[0m\n\u001b[1;32m 3090\u001b[0m \u001b[39mif\u001b[39;00m transformed_dataset \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 3091\u001b[0m \u001b[39mwith\u001b[39;00m logging\u001b[39m.\u001b[39mtqdm(\n\u001b[1;32m 3092\u001b[0m disable\u001b[39m=\u001b[39m\u001b[39mnot\u001b[39;00m logging\u001b[39m.\u001b[39mis_progress_bar_enabled(),\n\u001b[1;32m 3093\u001b[0m unit\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m examples\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 3094\u001b[0m total\u001b[39m=\u001b[39mpbar_total,\n\u001b[1;32m 3095\u001b[0m desc\u001b[39m=\u001b[39mdesc \u001b[39mor\u001b[39;00m \u001b[39m\"\u001b[39m\u001b[39mMap\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 3096\u001b[0m ) \u001b[39mas\u001b[39;00m pbar:\n\u001b[0;32m-> 3097\u001b[0m \u001b[39mfor\u001b[39;00m rank, done, content \u001b[39min\u001b[39;00m Dataset\u001b[39m.\u001b[39m_map_single(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mdataset_kwargs):\n\u001b[1;32m 3098\u001b[0m \u001b[39mif\u001b[39;00m done:\n\u001b[1;32m 3099\u001b[0m shards_done \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/arrow_dataset.py:3450\u001b[0m, in \u001b[0;36mDataset._map_single\u001b[0;34m(shard, function, with_indices, with_rank, input_columns, batched, batch_size, drop_last_batch, remove_columns, keep_in_memory, cache_file_name, writer_batch_size, features, disable_nullable, fn_kwargs, new_fingerprint, rank, offset)\u001b[0m\n\u001b[1;32m 3448\u001b[0m _time \u001b[39m=\u001b[39m time\u001b[39m.\u001b[39mtime()\n\u001b[1;32m 3449\u001b[0m \u001b[39mfor\u001b[39;00m i, example \u001b[39min\u001b[39;00m shard_iterable:\n\u001b[0;32m-> 3450\u001b[0m example \u001b[39m=\u001b[39m apply_function_on_filtered_inputs(example, i, offset\u001b[39m=\u001b[39;49moffset)\n\u001b[1;32m 3451\u001b[0m \u001b[39mif\u001b[39;00m update_data:\n\u001b[1;32m 3452\u001b[0m \u001b[39mif\u001b[39;00m i \u001b[39m==\u001b[39m \u001b[39m0\u001b[39m:\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/datasets/arrow_dataset.py:3353\u001b[0m, in \u001b[0;36mDataset._map_single..apply_function_on_filtered_inputs\u001b[0;34m(pa_inputs, indices, check_same_num_examples, offset)\u001b[0m\n\u001b[1;32m 3351\u001b[0m \u001b[39mif\u001b[39;00m with_rank:\n\u001b[1;32m 3352\u001b[0m additional_args \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m (rank,)\n\u001b[0;32m-> 3353\u001b[0m processed_inputs \u001b[39m=\u001b[39m function(\u001b[39m*\u001b[39;49mfn_args, \u001b[39m*\u001b[39;49madditional_args, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mfn_kwargs)\n\u001b[1;32m 3354\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(processed_inputs, LazyDict):\n\u001b[1;32m 3355\u001b[0m processed_inputs \u001b[39m=\u001b[39m {\n\u001b[1;32m 3356\u001b[0m k: v \u001b[39mfor\u001b[39;00m k, v \u001b[39min\u001b[39;00m processed_inputs\u001b[39m.\u001b[39mdata\u001b[39m.\u001b[39mitems() \u001b[39mif\u001b[39;00m k \u001b[39mnot\u001b[39;00m \u001b[39min\u001b[39;00m processed_inputs\u001b[39m.\u001b[39mkeys_to_format\n\u001b[1;32m 3357\u001b[0m }\n", - "\u001b[1;32m/mnt/code/autocropper/rotator_dataset_augmentor.ipynb Cell 6\u001b[0m line \u001b[0;36m3\n\u001b[1;32m 29\u001b[0m appliers \u001b[39m=\u001b[39m v2\u001b[39m.\u001b[39mCompose([v2\u001b[39m.\u001b[39mRandomApply(transforms\u001b[39m=\u001b[39m[v2\u001b[39m.\u001b[39mRandomPosterize(bits\u001b[39m=\u001b[39m\u001b[39m1\u001b[39m)], p\u001b[39m=\u001b[39m\u001b[39m0.25\u001b[39m),\n\u001b[1;32m 30\u001b[0m v2\u001b[39m.\u001b[39mRandomApply(transforms\u001b[39m=\u001b[39m[v2\u001b[39m.\u001b[39mElasticTransform(alpha\u001b[39m=\u001b[39m\u001b[39m25.0\u001b[39m, fill\u001b[39m=\u001b[39mappliedFill)], p\u001b[39m=\u001b[39m\u001b[39m0.25\u001b[39m), \u001b[39m# maybe add fill=appliedFill\u001b[39;00m\n\u001b[1;32m 31\u001b[0m v2\u001b[39m.\u001b[39mRandomApply(transforms\u001b[39m=\u001b[39m[v2\u001b[39m.\u001b[39mGaussianBlur(kernel_size\u001b[39m=\u001b[39m(\u001b[39m5\u001b[39m,\u001b[39m9\u001b[39m), sigma\u001b[39m=\u001b[39m(\u001b[39m0.1\u001b[39m,\u001b[39m2.\u001b[39m))],p\u001b[39m=\u001b[39m\u001b[39m0.25\u001b[39m),\n\u001b[1;32m 32\u001b[0m v2\u001b[39m.\u001b[39mRandomApply(transforms\u001b[39m=\u001b[39m[v2\u001b[39m.\u001b[39mRandomEqualize()],p\u001b[39m=\u001b[39m\u001b[39m0.25\u001b[39m),\n\u001b[1;32m 33\u001b[0m SquarePad(fill\u001b[39m=\u001b[39mappliedFill),v2\u001b[39m.\u001b[39mResize(\u001b[39m1100\u001b[39m)])\n\u001b[1;32m 35\u001b[0m adjustedimage \u001b[39m=\u001b[39m tvf\u001b[39m.\u001b[39maffine(image, appliedRotation, [appliedXTranslation,appliedYTranslation], appliedScale, [appliedXShear, appliedYShear], fill\u001b[39m=\u001b[39mappliedFill)\n\u001b[0;32m---> 37\u001b[0m adjustedimage \u001b[39m=\u001b[39m appliers(adjustedimage)\n\u001b[1;32m 40\u001b[0m \u001b[39mreturn\u001b[39;00m {\u001b[39m'\u001b[39m\u001b[39mimage\u001b[39m\u001b[39m'\u001b[39m:adjustedimage,\u001b[39m'\u001b[39m\u001b[39mlabel\u001b[39m\u001b[39m'\u001b[39m:appliedRotation}\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py:1501\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1496\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1497\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1498\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1499\u001b[0m \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1500\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1501\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 1502\u001b[0m \u001b[39m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1503\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[39m=\u001b[39m [], []\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/_container.py:51\u001b[0m, in \u001b[0;36mCompose.forward\u001b[0;34m(self, *inputs)\u001b[0m\n\u001b[1;32m 49\u001b[0m sample \u001b[39m=\u001b[39m inputs \u001b[39mif\u001b[39;00m \u001b[39mlen\u001b[39m(inputs) \u001b[39m>\u001b[39m \u001b[39m1\u001b[39m \u001b[39melse\u001b[39;00m inputs[\u001b[39m0\u001b[39m]\n\u001b[1;32m 50\u001b[0m \u001b[39mfor\u001b[39;00m transform \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtransforms:\n\u001b[0;32m---> 51\u001b[0m sample \u001b[39m=\u001b[39m transform(sample)\n\u001b[1;32m 52\u001b[0m \u001b[39mreturn\u001b[39;00m sample\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py:1501\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1496\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1497\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1498\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1499\u001b[0m \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1500\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1501\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 1502\u001b[0m \u001b[39m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1503\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[39m=\u001b[39m [], []\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/_container.py:106\u001b[0m, in \u001b[0;36mRandomApply.forward\u001b[0;34m(self, *inputs)\u001b[0m\n\u001b[1;32m 103\u001b[0m \u001b[39mreturn\u001b[39;00m sample\n\u001b[1;32m 105\u001b[0m \u001b[39mfor\u001b[39;00m transform \u001b[39min\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mtransforms:\n\u001b[0;32m--> 106\u001b[0m sample \u001b[39m=\u001b[39m transform(sample)\n\u001b[1;32m 107\u001b[0m \u001b[39mreturn\u001b[39;00m sample\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/nn/modules/module.py:1501\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1496\u001b[0m \u001b[39m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1497\u001b[0m \u001b[39m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1498\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_backward_pre_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_hooks \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1499\u001b[0m \u001b[39mor\u001b[39;00m _global_backward_pre_hooks \u001b[39mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1500\u001b[0m \u001b[39mor\u001b[39;00m _global_forward_hooks \u001b[39mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1501\u001b[0m \u001b[39mreturn\u001b[39;00m forward_call(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 1502\u001b[0m \u001b[39m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1503\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[39m=\u001b[39m [], []\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/_transform.py:40\u001b[0m, in \u001b[0;36mTransform.forward\u001b[0;34m(self, *inputs)\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_check_inputs(flat_inputs)\n\u001b[1;32m 39\u001b[0m needs_transform_list \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_needs_transform_list(flat_inputs)\n\u001b[0;32m---> 40\u001b[0m params \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_get_params(\n\u001b[1;32m 41\u001b[0m [inpt \u001b[39mfor\u001b[39;49;00m (inpt, needs_transform) \u001b[39min\u001b[39;49;00m \u001b[39mzip\u001b[39;49m(flat_inputs, needs_transform_list) \u001b[39mif\u001b[39;49;00m needs_transform]\n\u001b[1;32m 42\u001b[0m )\n\u001b[1;32m 44\u001b[0m flat_outputs \u001b[39m=\u001b[39m [\n\u001b[1;32m 45\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_transform(inpt, params) \u001b[39mif\u001b[39;00m needs_transform \u001b[39melse\u001b[39;00m inpt\n\u001b[1;32m 46\u001b[0m \u001b[39mfor\u001b[39;00m (inpt, needs_transform) \u001b[39min\u001b[39;00m \u001b[39mzip\u001b[39m(flat_inputs, needs_transform_list)\n\u001b[1;32m 47\u001b[0m ]\n\u001b[1;32m 49\u001b[0m \u001b[39mreturn\u001b[39;00m tree_unflatten(flat_outputs, spec)\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/_geometry.py:1083\u001b[0m, in \u001b[0;36mElasticTransform._get_params\u001b[0;34m(self, flat_inputs)\u001b[0m\n\u001b[1;32m 1081\u001b[0m \u001b[39mif\u001b[39;00m kx \u001b[39m%\u001b[39m \u001b[39m2\u001b[39m \u001b[39m==\u001b[39m \u001b[39m0\u001b[39m:\n\u001b[1;32m 1082\u001b[0m kx \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m1\u001b[39m\n\u001b[0;32m-> 1083\u001b[0m dx \u001b[39m=\u001b[39m F\u001b[39m.\u001b[39;49mgaussian_blur(dx, [kx, kx], \u001b[39mlist\u001b[39;49m(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49msigma))\n\u001b[1;32m 1084\u001b[0m dx \u001b[39m=\u001b[39m dx \u001b[39m*\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39malpha[\u001b[39m0\u001b[39m] \u001b[39m/\u001b[39m size[\u001b[39m0\u001b[39m]\n\u001b[1;32m 1086\u001b[0m dy \u001b[39m=\u001b[39m torch\u001b[39m.\u001b[39mrand([\u001b[39m1\u001b[39m, \u001b[39m1\u001b[39m] \u001b[39m+\u001b[39m size) \u001b[39m*\u001b[39m \u001b[39m2\u001b[39m \u001b[39m-\u001b[39m \u001b[39m1\u001b[39m\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/functional/_misc.py:175\u001b[0m, in \u001b[0;36mgaussian_blur\u001b[0;34m(inpt, kernel_size, sigma)\u001b[0m\n\u001b[1;32m 172\u001b[0m _log_api_usage_once(gaussian_blur)\n\u001b[1;32m 174\u001b[0m \u001b[39mif\u001b[39;00m torch\u001b[39m.\u001b[39mjit\u001b[39m.\u001b[39mis_scripting() \u001b[39mor\u001b[39;00m is_simple_tensor(inpt):\n\u001b[0;32m--> 175\u001b[0m \u001b[39mreturn\u001b[39;00m gaussian_blur_image_tensor(inpt, kernel_size\u001b[39m=\u001b[39;49mkernel_size, sigma\u001b[39m=\u001b[39;49msigma)\n\u001b[1;32m 176\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(inpt, datapoints\u001b[39m.\u001b[39m_datapoint\u001b[39m.\u001b[39mDatapoint):\n\u001b[1;32m 177\u001b[0m \u001b[39mreturn\u001b[39;00m inpt\u001b[39m.\u001b[39mgaussian_blur(kernel_size\u001b[39m=\u001b[39mkernel_size, sigma\u001b[39m=\u001b[39msigma)\n", - "File \u001b[0;32m/usr/local/lib/python3.10/dist-packages/torchvision/transforms/v2/functional/_misc.py:140\u001b[0m, in \u001b[0;36mgaussian_blur_image_tensor\u001b[0;34m(image, kernel_size, sigma)\u001b[0m\n\u001b[1;32m 138\u001b[0m padding \u001b[39m=\u001b[39m [kernel_size[\u001b[39m0\u001b[39m] \u001b[39m/\u001b[39m\u001b[39m/\u001b[39m \u001b[39m2\u001b[39m, kernel_size[\u001b[39m0\u001b[39m] \u001b[39m/\u001b[39m\u001b[39m/\u001b[39m \u001b[39m2\u001b[39m, kernel_size[\u001b[39m1\u001b[39m] \u001b[39m/\u001b[39m\u001b[39m/\u001b[39m \u001b[39m2\u001b[39m, kernel_size[\u001b[39m1\u001b[39m] \u001b[39m/\u001b[39m\u001b[39m/\u001b[39m \u001b[39m2\u001b[39m]\n\u001b[1;32m 139\u001b[0m output \u001b[39m=\u001b[39m torch_pad(output, padding, mode\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mreflect\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m--> 140\u001b[0m output \u001b[39m=\u001b[39m conv2d(output, kernel, groups\u001b[39m=\u001b[39;49mshape[\u001b[39m-\u001b[39;49m\u001b[39m3\u001b[39;49m])\n\u001b[1;32m 142\u001b[0m \u001b[39mif\u001b[39;00m ndim \u001b[39m==\u001b[39m \u001b[39m3\u001b[39m:\n\u001b[1;32m 143\u001b[0m output \u001b[39m=\u001b[39m output\u001b[39m.\u001b[39msqueeze(dim\u001b[39m=\u001b[39m\u001b[39m0\u001b[39m)\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "new_testing_dataset = og_testing_dataset.map(transform_picture, fn_kwargs={'parameters':params}, num_proc=4)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "new_validation_dataset = og_validation_dataset.map(transform_picture, fn_kwargs={'parameters':params}, num_proc=4)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "new_training_dataset = og_training_dataset.map(transform_picture, fn_kwargs={'parameters':params}, num_proc=4)\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.10.12" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -}