Computer_Vision/Chapter09/Instance_Segmentation.ipynb

1018 lines
1.2 MiB
Plaintext
Raw Normal View History

2024-02-13 03:34:51 +01:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"https://colab.research.google.com/github/PacktPublishing/Hands-On-Computer-Vision-with-PyTorch/blob/master/Chapter09/Instance_Segmentation.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[K |████████████████████████████████| 48 kB 2.6 MB/s \n",
"\u001b[K |████████████████████████████████| 60 kB 5.9 MB/s \n",
"\u001b[K |████████████████████████████████| 10.9 MB 30.2 MB/s \n",
"\u001b[K |████████████████████████████████| 78 kB 6.3 MB/s \n",
"\u001b[K |████████████████████████████████| 948 kB 29.1 MB/s \n",
"\u001b[K |████████████████████████████████| 58 kB 5.3 MB/s \n",
"\u001b[K |████████████████████████████████| 232 kB 48.2 MB/s \n",
"\u001b[K |████████████████████████████████| 51 kB 6.4 MB/s \n",
"\u001b[?25h Building wheel for typing (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
"\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
"albumentations 0.1.12 requires imgaug<0.2.7,>=0.2.5, but you have imgaug 0.4.0 which is incompatible.\u001b[0m\n",
" Building wheel for pycocotools (setup.py) ... \u001b[?25l\u001b[?25hdone\n"
]
}
],
"source": [
"!wget --quiet http://sceneparsing.csail.mit.edu/data/ChallengeData2017/images.tar\n",
"!wget --quiet http://sceneparsing.csail.mit.edu/data/ChallengeData2017/annotations_instance.tar\n",
"!tar -xf images.tar\n",
"!tar -xf annotations_instance.tar\n",
"!rm images.tar annotations_instance.tar\n",
"!pip install -qU torch_snippets\n",
"!wget --quiet https://raw.githubusercontent.com/pytorch/vision/release/0.12/references/detection/engine.py\n",
"!wget --quiet https://raw.githubusercontent.com/pytorch/vision/release/0.12/references/detection/utils.py\n",
"!wget --quiet https://raw.githubusercontent.com/pytorch/vision/release/0.12/references/detection/transforms.py\n",
"!wget --quiet https://raw.githubusercontent.com/pytorch/vision/release/0.12/references/detection/coco_eval.py\n",
"!wget --quiet https://raw.githubusercontent.com/pytorch/vision/release/0.12/references/detection/coco_utils.py\n",
"!pip install -q -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from torch_snippets import *\n",
"from torch_snippets.inspector import inspect\n",
"import torchvision\n",
"from torchvision.models.detection.faster_rcnn import FastRCNNPredictor\n",
"from torchvision.models.detection.mask_rcnn import MaskRCNNPredictor\n",
"\n",
"from engine import train_one_epoch, evaluate\n",
"import utils\n",
"import transforms as T\n",
"device = 'cuda' if torch.cuda.is_available() else 'cpu'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"all_images = Glob('images/training')\n",
"all_annots = Glob('annotations_instance/training')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x1440 with 5 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"f = 'ADE_train_00014301'\n",
"\n",
"im = read(find(f, all_images), 1)\n",
"an = read(find(f, all_annots), 1).transpose(2,0,1)\n",
"r,g,b = an\n",
"nzs = np.nonzero(r==4) # 4 stands for person\n",
"instances = np.unique(g[nzs])\n",
"masks = np.zeros((len(instances), *r.shape))\n",
"for ix,_id in enumerate(instances):\n",
" masks[ix] = g==_id\n",
"\n",
"subplots([im, *masks], sz=20)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 5000/5000 [00:27<00:00, 179.49it/s]\n"
]
}
],
"source": [
"annots = []\n",
"for ann in Tqdm(all_annots[:5000]):\n",
" _ann = read(ann, 1).transpose(2,0,1)\n",
" r,g,b = _ann\n",
" if 4 not in np.unique(r): continue\n",
" annots.append(ann)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"_annots = stems(annots)\n",
"trn_items, val_items = train_test_split(_annots, random_state=2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_transform(train):\n",
" image_transforms = []\n",
" image_transforms.append(T.PILToTensor())\n",
" if train:\n",
" image_transforms.append(T.RandomHorizontalFlip(0.5))\n",
" return T.Compose(image_transforms)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"class MasksDataset(Dataset):\n",
" def __init__(self, items, transforms, N):\n",
" self.items = items\n",
" self.transforms = transforms\n",
" self.N = N\n",
" def get_mask(self, path):\n",
" an = read(path, 1).transpose(2,0,1)\n",
" r,g,b = an\n",
" nzs = np.nonzero(r==4)\n",
" instances = np.unique(g[nzs])\n",
" masks = np.zeros((len(instances), *r.shape))\n",
" for ix,_id in enumerate(instances):\n",
" masks[ix] = g==_id\n",
" return masks\n",
" def __getitem__(self, ix):\n",
" _id = self.items[ix]\n",
" img_path = f'images/training/{_id}.jpg'\n",
" mask_path = f'annotations_instance/training/{_id}.png'\n",
" masks = self.get_mask(mask_path)\n",
" obj_ids = np.arange(1, len(masks)+1)\n",
" img = Image.open(img_path).convert(\"RGB\")\n",
" num_objs = len(obj_ids)\n",
" boxes = []\n",
" for i in range(num_objs):\n",
" obj_pixels = np.where(masks[i])\n",
" xmin = np.min(obj_pixels[1])\n",
" xmax = np.max(obj_pixels[1])\n",
" ymin = np.min(obj_pixels[0])\n",
" ymax = np.max(obj_pixels[0])\n",
" if (((xmax-xmin)<=10) | (ymax-ymin)<=10):\n",
" xmax = xmin+10\n",
" ymax = ymin+10\n",
" boxes.append([xmin, ymin, xmax, ymax])\n",
" boxes = torch.as_tensor(boxes, dtype=torch.float32)\n",
" labels = torch.ones((num_objs,), dtype=torch.int64)\n",
" masks = torch.as_tensor(masks, dtype=torch.uint8)\n",
" area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])\n",
" iscrowd = torch.zeros((num_objs,), dtype=torch.int64)\n",
" image_id = torch.tensor([ix])\n",
" target = {}\n",
" target[\"boxes\"] = boxes\n",
" target[\"labels\"] = labels\n",
" target[\"masks\"] = masks\n",
" target[\"image_id\"] = image_id\n",
" target[\"area\"] = area\n",
" target[\"iscrowd\"] = iscrowd\n",
" if self.transforms is not None:\n",
" img, target = self.transforms(img, target)\n",
" if (img.dtype == torch.float32) or (img.dtype == torch.uint8) :\n",
" img = img/255.\n",
" return img, target\n",
" def __len__(self):\n",
" return self.N\n",
" def choose(self):\n",
" return self[randint(len(self))]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Tensor\tShape: torch.Size([3, 512, 684])\tMin: 0.000\tMax: 1.000\tMean: 0.486\tdtype: torch.float32\n",
" Dict Of 6 items\n",
"\tBOXES:\n",
"\t Tensor\tShape: torch.Size([3, 4])\tMin: 42.000\tMax: 477.000\tMean: 259.417\tdtype: torch.float32\n",
"\tLABELS:\n",
"\t Tensor\tShape: torch.Size([3])\tMin: 1.000\tMax: 1.000\tMean: 1.000\tdtype: torch.int64\n",
"\tMASKS:\n",
"\t Tensor\tShape: torch.Size([3, 512, 684])\tMin: 0.000\tMax: 1.000\tMean: 0.008\tdtype: torch.uint8\n",
"\tIMAGE_ID:\n",
"\t Tensor\tShape: torch.Size([1])\tMin: 0.000\tMax: 0.000\tMean: 0.000\tdtype: torch.int64\n",
"\tAREA:\n",
"\t Tensor\tShape: torch.Size([3])\tMin: 1932.000\tMax: 10688.000\tMean: 5270.667\tdtype: torch.float32\n",
"... ... 1 more item(s)\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x720 with 4 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = MasksDataset(trn_items, get_transform(train=True), N=100)\n",
"im,targ = x[0]\n",
"inspect(im,targ)\n",
"subplots([im, *targ['masks']], sz=10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def get_model_instance_segmentation(num_classes):\n",
" # load an instance segmentation model pre-trained pre-trained on COCO\n",
" model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)\n",
"\n",
" # get number of input features for the classifier\n",
" in_features = model.roi_heads.box_predictor.cls_score.in_features\n",
" # replace the pre-trained head with a new one\n",
" model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)\n",
"\n",
" # now get the number of input features for the mask classifier\n",
" in_features_mask = model.roi_heads.mask_predictor.conv5_mask.in_channels\n",
" hidden_layer = 256\n",
" # and replace the mask predictor with a new one\n",
" model.roi_heads.mask_predictor = MaskRCNNPredictor(in_features_mask,\n",
" hidden_layer,num_classes)\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MaskRCNN(\n",
" (transform): GeneralizedRCNNTransform(\n",
" Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n",
" Resize(min_size=(800,), max_size=1333, mode='bilinear')\n",
" )\n",
" (backbone): BackboneWithFPN(\n",
" (body): IntermediateLayerGetter(\n",
" (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n",
" (bn1): FrozenBatchNorm2d(64, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n",
" (layer1): Sequential(\n",
" (0): Bottleneck(\n",
" (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(64, eps=0.0)\n",
" (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(64, eps=0.0)\n",
" (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(256, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" (downsample): Sequential(\n",
" (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (1): FrozenBatchNorm2d(256, eps=0.0)\n",
" )\n",
" )\n",
" (1): Bottleneck(\n",
" (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(64, eps=0.0)\n",
" (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(64, eps=0.0)\n",
" (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(256, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (2): Bottleneck(\n",
" (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(64, eps=0.0)\n",
" (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(64, eps=0.0)\n",
" (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(256, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" )\n",
" (layer2): Sequential(\n",
" (0): Bottleneck(\n",
" (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(512, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" (downsample): Sequential(\n",
" (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
" (1): FrozenBatchNorm2d(512, eps=0.0)\n",
" )\n",
" )\n",
" (1): Bottleneck(\n",
" (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(512, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (2): Bottleneck(\n",
" (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(512, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (3): Bottleneck(\n",
" (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(128, eps=0.0)\n",
" (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(512, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" )\n",
" (layer3): Sequential(\n",
" (0): Bottleneck(\n",
" (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(1024, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" (downsample): Sequential(\n",
" (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
" (1): FrozenBatchNorm2d(1024, eps=0.0)\n",
" )\n",
" )\n",
" (1): Bottleneck(\n",
" (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(1024, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (2): Bottleneck(\n",
" (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(1024, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (3): Bottleneck(\n",
" (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(1024, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (4): Bottleneck(\n",
" (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(1024, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (5): Bottleneck(\n",
" (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(256, eps=0.0)\n",
" (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(1024, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" )\n",
" (layer4): Sequential(\n",
" (0): Bottleneck(\n",
" (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(512, eps=0.0)\n",
" (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(512, eps=0.0)\n",
" (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(2048, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" (downsample): Sequential(\n",
" (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
" (1): FrozenBatchNorm2d(2048, eps=0.0)\n",
" )\n",
" )\n",
" (1): Bottleneck(\n",
" (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(512, eps=0.0)\n",
" (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(512, eps=0.0)\n",
" (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(2048, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" (2): Bottleneck(\n",
" (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn1): FrozenBatchNorm2d(512, eps=0.0)\n",
" (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
" (bn2): FrozenBatchNorm2d(512, eps=0.0)\n",
" (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
" (bn3): FrozenBatchNorm2d(2048, eps=0.0)\n",
" (relu): ReLU(inplace=True)\n",
" )\n",
" )\n",
" )\n",
" (fpn): FeaturePyramidNetwork(\n",
" (inner_blocks): ModuleList(\n",
" (0): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))\n",
" (1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
" (2): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))\n",
" (3): Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))\n",
" )\n",
" (layer_blocks): ModuleList(\n",
" (0): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (3): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" )\n",
" (extra_blocks): LastLevelMaxPool()\n",
" )\n",
" )\n",
" (rpn): RegionProposalNetwork(\n",
" (anchor_generator): AnchorGenerator()\n",
" (head): RPNHead(\n",
" (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (cls_logits): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
" (bbox_pred): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n",
" )\n",
" )\n",
" (roi_heads): RoIHeads(\n",
" (box_roi_pool): MultiScaleRoIAlign(featmap_names=['0', '1', '2', '3'], output_size=(7, 7), sampling_ratio=2)\n",
" (box_head): TwoMLPHead(\n",
" (fc6): Linear(in_features=12544, out_features=1024, bias=True)\n",
" (fc7): Linear(in_features=1024, out_features=1024, bias=True)\n",
" )\n",
" (box_predictor): FastRCNNPredictor(\n",
" (cls_score): Linear(in_features=1024, out_features=2, bias=True)\n",
" (bbox_pred): Linear(in_features=1024, out_features=8, bias=True)\n",
" )\n",
" (mask_roi_pool): MultiScaleRoIAlign(featmap_names=['0', '1', '2', '3'], output_size=(14, 14), sampling_ratio=2)\n",
" (mask_head): MaskRCNNHeads(\n",
" (mask_fcn1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (relu1): ReLU(inplace=True)\n",
" (mask_fcn2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (relu2): ReLU(inplace=True)\n",
" (mask_fcn3): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (relu3): ReLU(inplace=True)\n",
" (mask_fcn4): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
" (relu4): ReLU(inplace=True)\n",
" )\n",
" (mask_predictor): MaskRCNNPredictor(\n",
" (conv5_mask): ConvTranspose2d(256, 256, kernel_size=(2, 2), stride=(2, 2))\n",
" (relu): ReLU(inplace=True)\n",
" (mask_fcn_logits): Conv2d(256, 2, kernel_size=(1, 1), stride=(1, 1))\n",
" )\n",
" )\n",
")"
]
},
"execution_count": null,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model = get_model_instance_segmentation(2).to(device)\n",
"model"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataset = MasksDataset(trn_items, get_transform(train=True), N=len(trn_items))\n",
"dataset_test = MasksDataset(val_items, get_transform(train=False), N=len(val_items))\n",
"\n",
"# define training and validation data loaders\n",
"data_loader = torch.utils.data.DataLoader(\n",
" dataset, batch_size=2, shuffle=True, num_workers=0,\n",
" collate_fn=utils.collate_fn)\n",
"\n",
"data_loader_test = torch.utils.data.DataLoader(\n",
" dataset_test, batch_size=1, shuffle=False, num_workers=0,\n",
" collate_fn=utils.collate_fn)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"num_classes = 2\n",
"model = get_model_instance_segmentation(num_classes).to(device)\n",
"params = [p for p in model.parameters() if p.requires_grad]\n",
"optimizer = torch.optim.SGD(params, lr=0.005,\n",
" momentum=0.9, weight_decay=0.0005)\n",
"# and a learning rate scheduler\n",
"lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer,\n",
" step_size=3,\n",
" gamma=0.1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: [0] [ 0/482] eta: 0:19:00 lr: 0.000015 loss: 5.5752 (5.5752) loss_classifier: 0.8792 (0.8792) loss_box_reg: 0.8384 (0.8384) loss_mask: 3.7591 (3.7591) loss_objectness: 0.0579 (0.0579) loss_rpn_box_reg: 0.0406 (0.0406) time: 2.3664 data: 0.2396 max mem: 5656\n",
"Epoch: [0] [ 10/482] eta: 0:17:21 lr: 0.000119 loss: 4.4057 (4.4962) loss_classifier: 0.8939 (0.8836) loss_box_reg: 0.3374 (0.3255) loss_mask: 3.1220 (3.2297) loss_objectness: 0.0395 (0.0374) loss_rpn_box_reg: 0.0189 (0.0200) time: 2.2061 data: 0.0599 max mem: 7010\n",
"Epoch: [0] [ 20/482] eta: 0:16:13 lr: 0.000223 loss: 2.3401 (3.1059) loss_classifier: 0.5854 (0.6268) loss_box_reg: 0.2879 (0.3154) loss_mask: 1.5016 (2.1052) loss_objectness: 0.0275 (0.0391) loss_rpn_box_reg: 0.0097 (0.0193) time: 2.0950 data: 0.0462 max mem: 7010\n",
"Epoch: [0] [ 30/482] eta: 0:15:52 lr: 0.000327 loss: 1.3235 (2.5105) loss_classifier: 0.2697 (0.5083) loss_box_reg: 0.3295 (0.3287) loss_mask: 0.6481 (1.6156) loss_objectness: 0.0256 (0.0382) loss_rpn_box_reg: 0.0169 (0.0197) time: 2.0544 data: 0.0498 max mem: 7010\n",
"Epoch: [0] [ 40/482] eta: 0:15:16 lr: 0.000431 loss: 1.1525 (2.1411) loss_classifier: 0.2526 (0.4368) loss_box_reg: 0.3490 (0.3244) loss_mask: 0.4338 (1.3189) loss_objectness: 0.0398 (0.0401) loss_rpn_box_reg: 0.0169 (0.0209) time: 2.0381 data: 0.0498 max mem: 7010\n",
"Epoch: [0] [ 50/482] eta: 0:14:54 lr: 0.000535 loss: 0.9247 (1.9162) loss_classifier: 0.1698 (0.3886) loss_box_reg: 0.2237 (0.3282) loss_mask: 0.3867 (1.1401) loss_objectness: 0.0281 (0.0392) loss_rpn_box_reg: 0.0114 (0.0202) time: 2.0131 data: 0.0610 max mem: 7010\n",
"Epoch: [0] [ 60/482] eta: 0:14:28 lr: 0.000638 loss: 0.8918 (1.7327) loss_classifier: 0.1380 (0.3478) loss_box_reg: 0.2182 (0.3140) loss_mask: 0.3384 (1.0056) loss_objectness: 0.0281 (0.0426) loss_rpn_box_reg: 0.0114 (0.0226) time: 2.0290 data: 0.0806 max mem: 7010\n",
"Epoch: [0] [ 70/482] eta: 0:14:18 lr: 0.000742 loss: 0.6852 (1.5877) loss_classifier: 0.1196 (0.3171) loss_box_reg: 0.2182 (0.3067) loss_mask: 0.2703 (0.9032) loss_objectness: 0.0281 (0.0394) loss_rpn_box_reg: 0.0066 (0.0212) time: 2.1122 data: 0.0643 max mem: 7010\n",
"Epoch: [0] [ 80/482] eta: 0:13:59 lr: 0.000846 loss: 0.7877 (1.5065) loss_classifier: 0.1280 (0.2988) loss_box_reg: 0.3146 (0.3121) loss_mask: 0.2894 (0.8359) loss_objectness: 0.0127 (0.0377) loss_rpn_box_reg: 0.0114 (0.0220) time: 2.1728 data: 0.0598 max mem: 7397\n",
"Epoch: [0] [ 90/482] eta: 0:13:40 lr: 0.000950 loss: 0.9356 (1.4376) loss_classifier: 0.1458 (0.2816) loss_box_reg: 0.3707 (0.3133) loss_mask: 0.3574 (0.7842) loss_objectness: 0.0190 (0.0365) loss_rpn_box_reg: 0.0180 (0.0220) time: 2.1258 data: 0.0642 max mem: 7397\n",
"Epoch: [0] [100/482] eta: 0:13:17 lr: 0.001054 loss: 0.9208 (1.3765) loss_classifier: 0.1397 (0.2671) loss_box_reg: 0.3707 (0.3114) loss_mask: 0.3647 (0.7410) loss_objectness: 0.0144 (0.0351) loss_rpn_box_reg: 0.0127 (0.0219) time: 2.0945 data: 0.0482 max mem: 7397\n",
"Epoch: [0] [110/482] eta: 0:12:57 lr: 0.001158 loss: 0.7449 (1.3182) loss_classifier: 0.1145 (0.2534) loss_box_reg: 0.3175 (0.3092) loss_mask: 0.3104 (0.7013) loss_objectness: 0.0113 (0.0331) loss_rpn_box_reg: 0.0096 (0.0213) time: 2.0841 data: 0.0597 max mem: 7397\n",
"Epoch: [0] [120/482] eta: 0:12:37 lr: 0.001262 loss: 0.8370 (1.2859) loss_classifier: 0.1253 (0.2448) loss_box_reg: 0.3549 (0.3110) loss_mask: 0.3249 (0.6721) loss_objectness: 0.0138 (0.0340) loss_rpn_box_reg: 0.0193 (0.0240) time: 2.1204 data: 0.0764 max mem: 7397\n",
"Epoch: [0] [130/482] eta: 0:12:17 lr: 0.001365 loss: 0.7976 (1.2434) loss_classifier: 0.1197 (0.2353) loss_box_reg: 0.2635 (0.3046) loss_mask: 0.3405 (0.6463) loss_objectness: 0.0226 (0.0334) loss_rpn_box_reg: 0.0215 (0.0238) time: 2.1225 data: 0.0722 max mem: 7397\n",
"Epoch: [0] [140/482] eta: 0:11:59 lr: 0.001469 loss: 0.7081 (1.2095) loss_classifier: 0.1068 (0.2274) loss_box_reg: 0.2080 (0.3000) loss_mask: 0.3405 (0.6248) loss_objectness: 0.0217 (0.0327) loss_rpn_box_reg: 0.0171 (0.0246) time: 2.1536 data: 0.0611 max mem: 7397\n",
"Epoch: [0] [150/482] eta: 0:11:37 lr: 0.001573 loss: 0.7522 (1.1775) loss_classifier: 0.0847 (0.2193) loss_box_reg: 0.1924 (0.2910) loss_mask: 0.3606 (0.6111) loss_objectness: 0.0174 (0.0320) loss_rpn_box_reg: 0.0199 (0.0241) time: 2.1382 data: 0.0556 max mem: 7397\n",
"Epoch: [0] [160/482] eta: 0:11:14 lr: 0.001677 loss: 0.7844 (1.1583) loss_classifier: 0.1275 (0.2149) loss_box_reg: 0.1283 (0.2864) loss_mask: 0.3421 (0.5944) loss_objectness: 0.0413 (0.0379) loss_rpn_box_reg: 0.0124 (0.0246) time: 2.0422 data: 0.0565 max mem: 7397\n",
"Epoch: [0] [170/482] eta: 0:10:53 lr: 0.001781 loss: 0.7441 (1.1383) loss_classifier: 0.1275 (0.2104) loss_box_reg: 0.1731 (0.2818) loss_mask: 0.3421 (0.5821) loss_objectness: 0.0512 (0.0393) loss_rpn_box_reg: 0.0140 (0.0247) time: 2.0471 data: 0.0580 max mem: 7397\n",
"Epoch: [0] [180/482] eta: 0:10:30 lr: 0.001885 loss: 0.7389 (1.1167) loss_classifier: 0.1088 (0.2058) loss_box_reg: 0.1782 (0.2773) loss_mask: 0.3572 (0.5695) loss_objectness: 0.0371 (0.0394) loss_rpn_box_reg: 0.0169 (0.0247) time: 2.0214 data: 0.0548 max mem: 7397\n",
"Epoch: [0] [190/482] eta: 0:10:09 lr: 0.001988 loss: 0.7369 (1.0932) loss_classifier: 0.1137 (0.2013) loss_box_reg: 0.1782 (0.2730) loss_mask: 0.3162 (0.5559) loss_objectness: 0.0230 (0.0385) loss_rpn_box_reg: 0.0142 (0.0244) time: 2.0172 data: 0.0557 max mem: 7472\n",
"Epoch: [0] [200/482] eta: 0:09:49 lr: 0.002092 loss: 0.6406 (1.0779) loss_classifier: 0.1390 (0.1998) loss_box_reg: 0.1775 (0.2714) loss_mask: 0.3061 (0.5442) loss_objectness: 0.0176 (0.0383) loss_rpn_box_reg: 0.0076 (0.0242) time: 2.1139 data: 0.0526 max mem: 7472\n",
"Epoch: [0] [210/482] eta: 0:09:27 lr: 0.002196 loss: 0.6591 (1.0593) loss_classifier: 0.1058 (0.1949) loss_box_reg: 0.1948 (0.2685) loss_mask: 0.3317 (0.5347) loss_objectness: 0.0178 (0.0372) loss_rpn_box_reg: 0.0128 (0.0239) time: 2.0869 data: 0.0533 max mem: 7472\n",
"Epoch: [0] [220/482] eta: 0:09:05 lr: 0.002300 loss: 0.5995 (1.0413) loss_classifier: 0.0771 (0.1903) loss_box_reg: 0.1384 (0.2628) loss_mask: 0.3158 (0.5275) loss_objectness: 0.0091 (0.0368) loss_rpn_box_reg: 0.0132 (0.0239) time: 2.0243 data: 0.0517 max mem: 7472\n",
"Epoch: [0] [230/482] eta: 0:08:45 lr: 0.002404 loss: 0.5488 (1.0206) loss_classifier: 0.0771 (0.1861) loss_box_reg: 0.1384 (0.2585) loss_mask: 0.3013 (0.5169) loss_objectness: 0.0074 (0.0357) loss_rpn_box_reg: 0.0060 (0.0234) time: 2.0572 data: 0.0482 max mem: 7472\n",
"Epoch: [0] [240/482] eta: 0:08:24 lr: 0.002508 loss: 0.5726 (1.0085) loss_classifier: 0.0902 (0.1839) loss_box_reg: 0.1435 (0.2558) loss_mask: 0.3014 (0.5098) loss_objectness: 0.0091 (0.0353) loss_rpn_box_reg: 0.0133 (0.0237) time: 2.1009 data: 0.0742 max mem: 7472\n",
"Epoch: [0] [250/482] eta: 0:08:03 lr: 0.002612 loss: 0.5975 (0.9965) loss_classifier: 0.0902 (0.1816) loss_box_reg: 0.1355 (0.2537) loss_mask: 0.3355 (0.5032) loss_objectness: 0.0154 (0.0347) loss_rpn_box_reg: 0.0170 (0.0233) time: 2.0566 data: 0.0683 max mem: 7472\n",
"Epoch: [0] [260/482] eta: 0:07:43 lr: 0.002715 loss: 0.6450 (0.9821) loss_classifier: 0.0816 (0.1786) loss_box_reg: 0.1494 (0.2506) loss_mask: 0.3354 (0.4959) loss_objectness: 0.0153 (0.0341) loss_rpn_box_reg: 0.0119 (0.0229) time: 2.1059 data: 0.0468 max mem: 7472\n",
"Epoch: [0] [270/482] eta: 0:07:23 lr: 0.002819 loss: 0.6738 (0.9781) loss_classifier: 0.1087 (0.1784) loss_box_reg: 0.1711 (0.2504) loss_mask: 0.3463 (0.4899) loss_objectness: 0.0163 (0.0361) loss_rpn_box_reg: 0.0119 (0.0233) time: 2.1858 data: 0.0666 max mem: 7472\n",
"Epoch: [0] [280/482] eta: 0:07:01 lr: 0.002923 loss: 0.6262 (0.9664) loss_classifier: 0.0892 (0.1756) loss_box_reg: 0.1449 (0.2462) loss_mask: 0.3501 (0.4849) loss_objectness: 0.0280 (0.0364) loss_rpn_box_reg: 0.0087 (0.0232) time: 2.1137 data: 0.0605 max mem: 7472\n",
"Epoch: [0] [290/482] eta: 0:06:40 lr: 0.003027 loss: 0.6054 (0.9550) loss_classifier: 0.0817 (0.1727) loss_box_reg: 0.0929 (0.2428) loss_mask: 0.3019 (0.4783) loss_objectness: 0.0440 (0.0382) loss_rpn_box_reg: 0.0113 (0.0231) time: 2.0563 data: 0.0434 max mem: 7472\n",
"Epoch: [0] [300/482] eta: 0:06:20 lr: 0.003131 loss: 0.6487 (0.9488) loss_classifier: 0.0922 (0.1709) loss_box_reg: 0.1191 (0.2404) loss_mask: 0.3320 (0.4754) loss_objectness: 0.0427 (0.0389) loss_rpn_box_reg: 0.0121 (0.0232) time: 2.0836 data: 0.0515 max mem: 7472\n",
"Epoch: [0] [310/482] eta: 0:05:59 lr: 0.003235 loss: 0.7082 (0.9449) loss_classifier: 0.0969 (0.1694) loss_box_reg: 0.1515 (0.2396) loss_mask: 0.3683 (0.4714) loss_objectness: 0.0424 (0.0398) loss_rpn_box_reg: 0.0133 (0.0247) time: 2.0858 data: 0.0690 max mem: 7472\n",
"Epoch: [0] [320/482] eta: 0:05:38 lr: 0.003338 loss: 0.7512 (0.9427) loss_classifier: 0.0994 (0.1687) loss_box_reg: 0.1919 (0.2402) loss_mask: 0.3849 (0.4693) loss_objectness: 0.0353 (0.0396) loss_rpn_box_reg: 0.0357 (0.0250) time: 2.1452 data: 0.0762 max mem: 7472\n",
"Epoch: [0] [330/482] eta: 0:05:18 lr: 0.003442 loss: 0.8277 (0.9388) loss_classifier: 0.1592 (0.1682) loss_box_reg: 0.2393 (0.2398) loss_mask: 0.3809 (0.4659) loss_objectness: 0.0306 (0.0397) loss_rpn_box_reg: 0.0325 (0.0252) time: 2.2168 data: 0.0701 max mem: 7472\n",
"Epoch: [0] [340/482] eta: 0:04:57 lr: 0.003546 loss: 0.6757 (0.9307) loss_classifier: 0.1065 (0.1662) loss_box_reg: 0.1474 (0.2375) loss_mask: 0.3438 (0.4626) loss_objectness: 0.0306 (0.0396) loss_rpn_box_reg: 0.0133 (0.0248) time: 2.1240 data: 0.0569 max mem: 7472\n",
"Epoch: [0] [350/482] eta: 0:04:35 lr: 0.003650 loss: 0.5709 (0.9201) loss_classifier: 0.0669 (0.1634) loss_box_reg: 0.1112 (0.2336) loss_mask: 0.3369 (0.4597) loss_objectness: 0.0229 (0.0388) loss_rpn_box_reg: 0.0117 (0.0246) time: 1.9926 data: 0.0469 max mem: 7472\n",
"Epoch: [0] [360/482] eta: 0:04:14 lr: 0.003754 loss: 0.6046 (0.9188) loss_classifier: 0.1003 (0.1641) loss_box_reg: 0.1324 (0.2334) loss_mask: 0.3303 (0.4571) loss_objectness: 0.0204 (0.0392) loss_rpn_box_reg: 0.0121 (0.0250) time: 2.0180 data: 0.0626 max mem: 7472\n",
"Epoch: [0] [370/482] eta: 0:03:53 lr: 0.003858 loss: 0.6006 (0.9078) loss_classifier: 0.0758 (0.1615) loss_box_reg: 0.0887 (0.2301) loss_mask: 0.3290 (0.4529) loss_objectness: 0.0181 (0.0386) loss_rpn_box_reg: 0.0084 (0.0247) time: 2.0244 data: 0.0655 max mem: 7472\n",
"Epoch: [0] [380/482] eta: 0:03:32 lr: 0.003962 loss: 0.5364 (0.9007) loss_classifier: 0.0682 (0.1604) loss_box_reg: 0.0931 (0.2289) loss_mask: 0.2617 (0.4485) loss_objectness: 0.0139 (0.0383) loss_rpn_box_reg: 0.0050 (0.0247) time: 2.0151 data: 0.0667 max mem: 7472\n",
"Epoch: [0] [390/482] eta: 0:03:11 lr: 0.004065 loss: 0.7302 (0.9014) loss_classifier: 0.1498 (0.1610) loss_box_reg: 0.2004 (0.2305) loss_mask: 0.3288 (0.4462) loss_objectness: 0.0307 (0.0386) loss_rpn_box_reg: 0.0100 (0.0250) time: 2.1033 data: 0.0753 max mem: 7472\n",
"Epoch: [0] [400/482] eta: 0:02:51 lr: 0.004169 loss: 0.7474 (0.8952) loss_classifier: 0.1134 (0.1600) loss_box_reg: 0.2025 (0.2292) loss_mask: 0.3490 (0.4431) loss_objectness: 0.0315 (0.0381) loss_rpn_box_reg: 0.0130 (0.0248) time: 2.1243 data: 0.0560 max mem: 7472\n",
"Epoch: [0] [410/482] eta: 0:02:30 lr: 0.004273 loss: 0.5860 (0.8895) loss_classifier: 0.0841 (0.1584) loss_box_reg: 0.1454 (0.2277) loss_mask: 0.3100 (0.4401) loss_objectness: 0.0135 (0.0377) loss_rpn_box_reg: 0.0110 (0.0257) time: 2.1124 data: 0.0537 max mem: 7472\n",
"Epoch: [0] [420/482] eta: 0:02:09 lr: 0.004377 loss: 0.6747 (0.8857) loss_classifier: 0.0979 (0.1575) loss_box_reg: 0.1829 (0.2272) loss_mask: 0.3432 (0.4379) loss_objectness: 0.0167 (0.0374) loss_rpn_box_reg: 0.0182 (0.0256) time: 2.0534 data: 0.0636 max mem: 7472\n",
"Epoch: [0] [430/482] eta: 0:01:48 lr: 0.004481 loss: 0.6763 (0.8817) loss_classifier: 0.1123 (0.1566) loss_box_reg: 0.2011 (0.2271) loss_mask: 0.3441 (0.4354) loss_objectness: 0.0201 (0.0370) loss_rpn_box_reg: 0.0182 (0.0256) time: 1.9787 data: 0.0590 max mem: 7472\n",
"Epoch: [0] [440/482] eta: 0:01:27 lr: 0.004585 loss: 0.5922 (0.8753) loss_classifier: 0.0770 (0.1549) loss_box_reg: 0.1138 (0.2247) loss_mask: 0.3409 (0.4336) loss_objectness: 0.0169 (0.0367) loss_rpn_box_reg: 0.0143 (0.0255) time: 2.0144 data: 0.0529 max mem: 7472\n",
"Epoch: [0] [450/482] eta: 0:01:06 lr: 0.004688 loss: 0.5922 (0.8718) loss_classifier: 0.0838 (0.1539) loss_box_reg: 0.1332 (0.2244) loss_mask: 0.3409 (0.4317) loss_objectness: 0.0113 (0.0363) loss_rpn_box_reg: 0.0107 (0.0254) time: 2.0415 data: 0.0510 max mem: 7472\n",
"Epoch: [0] [460/482] eta: 0:00:45 lr: 0.004792 loss: 0.7216 (0.8688) loss_classifier: 0.1217 (0.1534) loss_box_reg: 0.2018 (0.2241) loss_mask: 0.3192 (0.4296) loss_objectness: 0.0107 (0.0362) loss_rpn_box_reg: 0.0123 (0.0254) time: 2.0111 data: 0.0544 max mem: 7472\n",
"Epoch: [0] [470/482] eta: 0:00:24 lr: 0.004896 loss: 0.6759 (0.8650) loss_classifier: 0.1234 (0.1532) loss_box_reg: 0.1583 (0.2228) loss_mask: 0.3192 (0.4277) loss_objectness: 0.0207 (0.0359) loss_rpn_box_reg: 0.0134 (0.0254) time: 1.9929 data: 0.0480 max mem: 7472\n",
"Epoch: [0] [480/482] eta: 0:00:04 lr: 0.005000 loss: 0.6775 (0.8623) loss_classifier: 0.1407 (0.1530) loss_box_reg: 0.1559 (0.2217) loss_mask: 0.3240 (0.4261) loss_objectness: 0.0219 (0.0360) loss_rpn_box_reg: 0.0148 (0.0254) time: 1.9480 data: 0.0479 max mem: 7472\n",
"Epoch: [0] [481/482] eta: 0:00:02 lr: 0.005000 loss: 0.6555 (0.8611) loss_classifier: 0.1407 (0.1528) loss_box_reg: 0.1366 (0.2213) loss_mask: 0.3131 (0.4257) loss_objectness: 0.0219 (0.0359) loss_rpn_box_reg: 0.0134 (0.0254) time: 1.9022 data: 0.0456 max mem: 7472\n",
"Epoch: [0] Total time: 0:16:38 (2.0720 s / it)\n",
"creating index...\n",
"index created!\n",
"Test: [ 0/321] eta: 0:03:07 model_time: 0.5358 (0.5358) evaluator_time: 0.0336 (0.0336) time: 0.5840 data: 0.0141 max mem: 7472\n",
"Test: [100/321] eta: 0:01:56 model_time: 0.4708 (0.4680) evaluator_time: 0.0227 (0.0377) time: 0.5279 data: 0.0188 max mem: 7472\n",
"Test: [200/321] eta: 0:01:04 model_time: 0.4536 (0.4670) evaluator_time: 0.0357 (0.0438) time: 0.5308 data: 0.0233 max mem: 7472\n",
"Test: [300/321] eta: 0:00:11 model_time: 0.4652 (0.4660) evaluator_time: 0.0366 (0.0433) time: 0.5570 data: 0.0269 max mem: 7472\n",
"Test: [320/321] eta: 0:00:00 model_time: 0.4608 (0.4663) evaluator_time: 0.0370 (0.0441) time: 0.5569 data: 0.0280 max mem: 7472\n",
"Test: Total time: 0:02:51 (0.5352 s / it)\n",
"Averaged stats: model_time: 0.4608 (0.4663) evaluator_time: 0.0370 (0.0441)\n",
"Accumulating evaluation results...\n",
"DONE (t=0.13s).\n",
"Accumulating evaluation results...\n",
"DONE (t=0.14s).\n",
"IoU metric: bbox\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.338\n",
" Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.665\n",
" Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.296\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.208\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.402\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.488\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.140\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.405\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.485\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.374\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.545\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.614\n",
"IoU metric: segm\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.295\n",
" Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.630\n",
" Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.231\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.158\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.355\n",
" Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.466\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.126\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.356\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.422\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.304\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.487\n",
" Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.553\n"
]
}
],
"source": [
"num_epochs = 1\n",
"\n",
"trn_history = []\n",
"for epoch in range(num_epochs):\n",
" # train for one epoch, printing every 10 iterations\n",
" res = train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)\n",
" trn_history.append(res)\n",
" # update the learning rate\n",
" lr_scheduler.step()\n",
" # evaluate on the test dataset \n",
" res = evaluate(model, data_loader_test, device=device)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.title('Training Loss') \n",
"losses = [np.mean(list(trn_history[i].meters['loss'].deque)) for i in range(len(trn_history))]\n",
"plt.plot(losses)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUoAAAEICAYAAAA5ub1iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9e5Bt2V3f9/mttfc++5x+3DujGY1GDyQesiuIEiKWhTE4UYIdkIpEOHZUEhQICkckIMcEnCBjMAoYTCXh6QJkuaQIiqcAgYQjYYMcDFQCllCIQBLCAiQ0g6RBmpn76O5z9t5r/fLHWmvvfU6f04/b3XP7zqxP1ak+vd/n3u5v/37r9xJVJZPJZDKbMbf7ATKZTOayk4Uyk8lkjiELZSaTyRxDFspMJpM5hiyUmUwmcwxZKDOZTOYYslDeQYjIa0TkJ273c2QyTzSyUF4yROTLRORdInJTRD4qIm8XkS+43c8FICLfKSK/LyKdiLzmmGOvisgbRORjInJDRP5IRF79GD3qUc/1PBH5XRHZj1+fd8Sxr4r/FwsReePKvs+M+x6Jr18Tkc8c7Z+IyGtF5OMi8rCI/LKIPG3NPZ4tIvPVP4Dx5+DDIrInIr8kIneP9v1E/Nm4Hv9d/97KuX9PRD4Yf4Z+RUSeOtr39rg9vRoR+f1T/SM+AclCeYkQkW8EfgD4buA+4FOAHwFecjufa8QHgf8Z+D9PcOz3A9vAfwRcAf6reP65ISLFKY+vgLcAPwHcBfwY8Ja4fR1/DvxT4A0b9v1d4G7gHuCtwM+M9v8D4POA5wJPBR4B/vma6/ww8M6V53wO8C+AryD8HOwTfg4S/wx4lqruEv5d/6mI/JV47gsJPz8vic/2p8BPpxNV9UWqup1ewP8N/NyGz5+JZKG8JIjIFeA7gK9X1Ter6p6qtqr6y6r6P2045+eixXZNRH4j/oKlfS8WkfdFa+5BEfmHcfs9IvKvROTRaOn8poic6OdAVX9MVd8O3DjB4X8V+ClVfURVvar+oar+/Oj5niMivxqf4eMi8i1x+0REfkBE/jy+fkBEJnHfC0XkARH5ZhH5GPB/iIgRkVeLyB+LyCdF5E1j62uFFwIF8AOqulDVHwIE+M83fN43q+ovAZ9cs+9RVf2QhtI2ARzwGaNDPhX416r6cVWdAz8LPGd8DRF5GfAo8I6Vy3858Muq+huqehP4NuC/FpGdeO/3quoiPUp8fXr8/kuAn4vHNMB3Av+JiHw6K4jIs4C/Afz4us+fGchCeXn4PKAGfvEU57wdeDbwZODdwE+O9r0e+FpV3QE+C/i3cfs3AQ8A9xKslW8h/KIhIj8iImPL5Sz8NvBdIvLVIvLs8Y74C/9rwK8QrK3PYBCLfwz8NeB5wGcDLwC+dXT6UwiW0jOBVwJ/H/hS4D9lsNx+eHSv94jIl8VvnwO8R5frdt/DioCdBhF5FJgTrMXvHu16PfD5IvJUEZkRxO/to/N2CX8Yv3HNZZ8D/H/pG1X9Y6AB/tLo/B8RkX3gD4GPAm8bP9aa95+15j5fCfymqn7o6E+ZyUJ5eXgS8AlV7U56gqq+QVVvROviNcBnR8sUoAU+U0R2o1X37tH2+4FnRov1N5NwqOrXqerXndPn+fsE4X4V8L64ZvaiuO9LgI+p6veq6jx+ht+J+74c+A5VfUhV/wL4XwguaMID3x4twgPgvwP+sao+MPp3+LvJLVfV56rqT8Vzt4FrK895Ddi51Q+pqlcJSwuvAv7f0a7/AHwEeBC4TliC+I7R/u8EXq+qD6y57LHPGf+fdggW4ZuBZGH+CvBSEXmuiEyBf0L4Qzhbc5+vBN547IfMZKG8RHwSuOek624iYkXke6LLeR34UNx1T/z6d4AXAx8WkX8nIp8Xt/9vhLXCfyMif3JRARZVPVDV71bVv0L4I/Am4OeiW/wM4I83nPpU4MOj7z8ctyX+IrqyiWcCvxiXEh4F3k9wg+9bc+2bwO7Ktl1OtpSwEVXdA14L/LiIPDlu/mFgQvjsWwQxezuEgBLwNwnruOs40XOqqlPV3wKeDvz3cduvAd8O/ALhZ+JD8bwlQZYQIHwK8PNkjiUL5eXh/yFYBV96wuO/jLBg/zcJFs2z4nYBUNV3qupLCG75LxGEimi9fZOqfhohEPCNIvKF5/Uh1qGq1wlu6RZh7e4jwKdtOPzPCeKX+JS4rb/cyvEfAV6kqldHr1pVH1xz7fcCzxWRsWv63Lj9rBiC1ZYi288D3qiqD0dL958DLxCRewhrpc8C/iyutf5D4O+ISLL630tYdgBARD6NILp/tOHeBcMaJar6w6r6bFW9jyCYBfAHK+e8AnhzXAPNHEMWykuCql4juEk/LCJfKiIzESlF5EUi8r+uOWWHIKyfJPyC9utjIlKJyJeLyBVVbQmun4/7vkREPiOKxTWC9eVP8ozxeWrCz00hIrWI2A3HfpuI/NX4LDUhCvwo8AHgXwH3i8g3xODNjoh8bjz1p4FvFZF7o6j8E0KUehOvJayFPjPe914R2ZQl8Ovx8/4P8b6vitv/7bqDRaSIz24BGz9vEff9LRH5nGjZ7wLfR1gffX88/Z3AV4rIFREpga8D/lxVPwG8jiBsz4uv1xIyCb4onvuTwH8pIn9DRLYILvubVfWGiDxZRF4mItvx3l8EvJy4xhuf8bMk8CnxXj+oqo+MPtcUeCnZ7T45qppfl+hFWKN7F7AHfIzwC/TX477XAD8R328TUl1uENzTryRYW58BVIS1qkcIIvlO4Avief8jwR3bI7hj3za692uB1x7xbG9kiLKm11dtOPZbCVbMdeBhgkj99dH+zyL8cj8SP+er4/Ya+CFCgOKj8X0d970QeGDlPoYQEPlA/Lf4Y+C7R/vfC3z56PvPAX4XOCAEwD5ntO9bgLePvn/Nms/7mrjvvyEEUm4CfxH/n547OvdJBMF7iPAH4reAF2z4t+r/X0fbvgz4s/j/9Bbg7rj9XuDfxWteB34f+G9H510lBKjSz88/A+zKtV8ef2bkdv+83ykvif9wmUwmk9lAdr0zmUzmGC5MKEXki0XkAzEt5LaXrmUymcytciGud1zg/yPgbxHWwd4JvFxV33fuN8tkMpkL5qIsyhcAH1TVP9FQRvUzXJ565UwmkzkVp2oqcAqeRshvSzwAfO6GY6lkojVbF/QomUwmczw3eOQTqnrvun0XJZTHIiKvJNTqUjPjcy825zmTyWSO5Nf05z+8ad9Fud4PEsrUEk+P23pU9XWq+nxVfX7J5IIeI5PJZM7ORQnlO4Fni8inSuj19zJCv75MJpO547gQ11tVu1ge9q8J5V9vUNXzqKfNZDKZx5wLW6NU1bex3CMvk8lk7khyZU4mk8kcQxbKTCaTOYYslJlMJnMMWSgzmUzmGLJQZjKZzDFkocxkMpljyEKZyWQyx5CFMpPJZI4hC2Umk8kcQxbKTCaTOYYslJlMJnMMWSgzmUzmGLJQZjKZzDFkocxkMpljyEKZyWQyx5CFMpPJZI4hC2Umk8kcQxbKTCaTOYYslJlMJnMMt22ud+Zxjgiort8+Zt0xmcwl40xCKSIfAm4ADuhU9fkicjfws8CzgA8BL1XVR872mJlLjwhIcFDEDGKoXtMbEBP2iQnfp/3x/XCtYf8hIV0V2vE5w02zAGfOlfNwvf8zVX2eqj4/fv9q4B2q+mzgHfH7zOOZKJJiZBBCa8FaxNqwPb4P2wxSFOF9On706rf11x6/zNpXuvdwPdksqpnMKbkI1/slwAvj+x8Dfh345gu4T+ayMBY3I4gIGAPegxXUxcNsFFATLU/nUEBwS9cKXzzq1/8dH1usS5akEfA6nKt+EMtsYWbOwFmFUoF/IyIK/AtVfR1wn6p+NO7/GHDfGe+RuczIYMWJNUEEk1DGdUoBVDVsM9GahCiSI/d8LIBYRBR1QUTXiuNomyRBjMK8JJbxObNYZm6VswrlF6jqgyLyZOBXReQPxztVVaOIHkJEXgm8EqBmdsbHyNxuepG0NlqUAtagLgiVQNhXFFAUoB5Rg3rfC14vdtEaVQOimwVy6fiwIYi
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUoAAAEICAYAAAA5ub1iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAbCklEQVR4nO3de5RdZZ3m8e9T91QuhFyJSUxAghhoCRq5KLMGQW1guTrYKAu1JeMwK/aI3dg60w14w7Z1tHsUh16KTS+QKCLibWDRqI0Bb6MCATHkQkgQMknIhdzvlVTVb/7Yb4VtTVXeU6k6dSqV57PWXmfv9333Oe97TtVTe7+7zjmKCMzMrHd1te6AmdlQ56A0M8twUJqZZTgozcwyHJRmZhkOSjOzDAflECbpJkl31bofZsc7B2WNSXqPpMWS9kjaIOlHki6odb8AJH1G0tOS2iXdlGk7VtIdkjZK2i3pWUnXD1JXj9SvOZKekLQv3c45Qttxkn4oaa+kNZLeU6q7Mb1GXct+SZ2SJqT6OyUd7NamvrT/xZKeSf14RNKMbo/9FklPpsdeJ+nKSsYg6W8k/UHSLkkvSrpZUkOpvtfXUNKFaQzlPs8/yqd6WHNQ1pCkjwBfBj4HTAZeCXwVmFfLfpWsBv4W+LcK2t4MjAJeA5wA/Fnaf8CUA6DC9k3AfcBdwInAQuC+VN6TrwAHKV6L9wK3SjoDICI+FxGjuhbgC8DPImJLaf9/LLeJiI7UjwnAD4BPAOOAxcB3Sv2cDdwNfIziuTsLeKLCMdwPvC4ixgBnpn3/utSn3Gv4Yrc+L+yl3fEtIrzUYKH4hdgDvOsIbW4C7iptfxfYCOwEfgGcUaq7DFgO7AbWA/8tlU8AHgB2ANuAXwJ1fezrXcBNmTZLgcuPUH8G8FDqwybgxlTeTPHH4sW0fBloTnUXAuuAv0vj/ibFH/frgeeArcC9wLheHvNt6blQqez/Apf00HYkRUieVir7JvD5HtoK+AMwv1R2J/APvfRjAfDrbo+1Hzg9bd8NfGYAxjAe+Cnw1Upew67nt9a/C8fC4iPK2jkfaAF+2Id9fgTMAiYBTwLfKtXdDnwgIkZTHFk8nMo/ShE2EymOlG4Eit926auSvtqPMZT9FvispPdLmlWukDSa4hf4x8ArgFOBRan6Y8B5wByKo6FzgI+Xdj+J4ihsBkXg/BVwOfAf031tpzgS7HqsJaVT5jOAJZFSIVmSyrs7DWiPiGdLZb/vpe1/oHgNvt+t/IOStqXT4ytK5Wek+wIgIvZSBH3XfZ+X+v50mn65S9K4SseQpm92AVsonsN/6aHPvZkkaZOk59Np+8g+7HvccFDWznhgS0S0V7pDRNwREbsjoo3iaPMsSSek6kPAbEljImJ7RDxZKp8CzIiIQxHxy65fuoj4YER8cIDG81cUwf0hYLmk1ZIuTXVvBzZGxBcj4kAaw6Op7r3A30fE5oh4Cfg08L7S/XYCn4qItojYD/wl8LGIWFd6Ht7ZdVoeEa+NiLvTvqMojr7LdgKje+j/KGBXhW3nA9+LiD2lslt4+Y/YJ4A7Jb2pwn5MS2O+It3HCOCfKx1DRNwdxan3acDXKI7YK/EMxR+oKcBFwOuBL1W473HFQVk7W4EJlc67SaqX9HlJz6WjhxdS1YR0ewXF6fcaST+XdH4q/yeKeap/T5P+VbnAEhH7o5jHez3FH4F7ge+mI6PpFEdQPXkFsKa0vSaVdXkpIg6UtmcAP5S0Q9IOYAXQQXG03N0eYEy3sjEU0xNH1VZSK/AuirnCwyLiyYjYGhHtEfEgxR+NP6/wvvcDX4+IZ1P4fo7itezTGCJiFbCMYp47KyI2RsTyiOiMiOcp5jKvyO13PHJQ1s5vgDaK08hKvIfiIs9bKOY3Z6ZyAUTE4xExj+KI5n9TBBXp6O2jEXEKxQWWj0i6eKAG0ZOI2EXxyz4SOBlYC5zSS/MXKcKvyytT2eG769Z+LXBpRIwtLS0Rsb6H+14GvFaSSmWvTeXdPQs0dJs2OKuHtu+gmGf9WS/jKfe763GXpfsCIJ3evqp030v443GW1/syBoCGdN9HI3Am9MhPSo1ExE7gk8BXJF0uqVVSo6RLJf1jD7uMpgjWrUArRRABxZVRSe+VdEJEHKI4hexMdW+XdGr6RdtJcfTVWUkfU39aKH5OGiS1lP/lpVvbT0h6Q+pLC3AdxQWklRQXk6ZI+rCkZkmjJZ2bdv028HFJE9PV4U9SXHjozdco5kJnpMedKKm3/xL4WRrvX6fH/VAqf7h7wzRv+APg7yWNTKfN8ygu6JTNB77Rbc4QSe+UNEpSnaS3AX9BcUUainnoMyVdkZ6bT1LMOz6T6r8OvF/SKemI9fr0nGXHIOm/SJqU1mcDN/Dy/O8RX0NJb5Y0Q4XpwOcprrBbd7W+mnS8LxRzdIuBvRRXdv8NeGOqu4l01Ztiruo+ilOuNcDVFEcApwJNFBdKtlOE5OPABWm/v6E4Td9LcVHnE6XH/hrwtSP07c70GOXlP/XS9uMUV7538fIR1xtL9WdS/AJvT+O8PpW3UMzvbUjLLUBLqruQbldlKX7hP0IRwLspTuk/V6pfBry3tH02xb/a7Ke4AHZ2qe5G4Eel7XEUR+N7Ka4sv6fbY08F2oFTexj/Lyn+EO2iuHBzVbf6t1DMCe5Pz83MbvWfBl5KyzeBEyscw9cp5iT3ptf5n7qev9xrmJ7H9cA+iiP1W4DRtf6dGIqL0hNmZma98Km3mVlG1YJS0iWSVqZ/E6n5W9nMzI5WVU6902Txs8BbKebFHgfeHRHLB/zBzMyqrFpHlOcAqyPiDxFxELiHofP+ZTOzPunThwz0wVSKq2hd1gHn9tKWJjVHC37nlJnVzm62b4mIiT3VVSsosyQtoHjvLi20cm51/wfazOyIfhrfW9NbXbVOvddTvG2ty7RUdlhE3BYRcyNibiPNVeqGmVn/VSsoHwdmSTo5fW7eVbz8LgUzs2NKVU69I6I9vdXqJ0A9cEdE9PbeVDOzIa1qc5RRfILKg9W6fzOzweJ35piZZTgozcwyHJRmZhkOSjOzDAelmVmGg9LMLMNBaWaW4aA0M8twUJqZZTgozcwyHJRmZhkOSjOzDAelmVmGg9LMLMNBaWaW4aA0M8twUJqZZTgozcwyHJRmZhkOSjOzjH59uZikF4DdQAfQHhFzJY0DvgPMBF4AroyI7f3rpplZ7QzEEeWbI2JORMxN29cDiyJiFrAobZuZHbOqceo9D1iY1hcCl1fhMczMBk1/gzKAf5f0hKQFqWxyRGxI6xuByf18DDOzmurXHCVwQUSslzQJeEjSM+XKiAhJ0dOOKVgXALTQ2s9umJlVT7+OKCNifbrdDPwQOAfYJGkKQLrd3Mu+t0XE3IiY20hzf7phZlZVRx2UkkZKGt21DrwNWArcD8xPzeYD9/W3k2ZmtdSfU+/JwA8ldd3P3RHxY0mPA/dKugZYA1zZ/26amdXOUQdlRPwBOKuH8q3Axf3plJnZUOJ35piZZTgozcwyHJRmZhkOSjOzDAelmVmGg9LMLMNBaWaW4aA0M8twUJqZZTgozcwyHJRmZhkOSjOzDAelmVmGg9LMLMNBaWaW4aA0M8twUJqZZTgozcwyHJRmZhkOSjOzjGxQSrpD0mZJS0tl4yQ9JGlVuj0xlUvSLZJWS1oi6XXV7LyZ2WCo5IjyTuCSbmXXA4siYhawKG0DXArMSssC4NaB6aaZWe1kgzIifgFs61Y8D1iY1hcCl5fKvxGF3wJjJU0ZqM6amdXC0c5RTo6IDWl9IzA5rU8F1pbarUtlZmbHrH5fzImIAKKv+0laIGmxpMWHaOtvN8zMquZog3JT1yl1ut2cytcD00vtpqWy/09E3BYRcyNibiPNR9kNM7PqO9qgvB+Yn9bnA/eVyq9OV7/PA3aWTtHNzI5JDbkGkr4NXAhMkLQO+BTweeBeSdcAa4ArU/MHgcuA1cA+4P1V6LOZ2aDKBmVEvLuXqot7aBvAtf3tlJnZUOJ35piZZTgozcwyHJRmZhkOSjOzDAelmVmGg9LMLMNBaWa
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUoAAAEICAYAAAA5ub1iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOy9e5TlWVXn+dnn/B733nhkZFYmWVVZJUVJ+YKRQqtLfDBNi7bA6tXgjM1CXYouZ5Wulm4dnR7x0SP2DLbd0zatMy1OdUNbPlBplYFRdESEUVyCFIgFFBYWUFBVVFVmZeQjIu7j9/uds+ePc27EzajIvBH5Tmp/1vqtuPf8fr97z43HN/Y+e5+9RVUxDMMwzo670hMwDMO42jGhNAzDmIMJpWEYxhxMKA3DMOZgQmkYhjEHE0rDMIw5mFBeQ4jI60Tk16/0PAzj6YYJ5VWGiHyHiNwrIusi8piI/KGIfMOVnheAiPyvIvJREelE5HVzrl0RkTeLyOMisiYinxSR116mqZ5rXreLyIdEZJi/3n6Oaw+IyNtEZENEPisi37Ht/CEReYuInBKREyLyG2d5jWMi8r5t468UkU/k7839IvKKs8zh3SKiIlLMjN0iIu/Jn+FvReSbtt1zq4j8fn7tJ0Xk386ce6+IjPPv17qIPDD/u2aYUF5FiMiPAP8B+FngMPBFwC8BL7+S85rhQeB/Bv5gF9e+AVgEvhzYB/zjfP9FY1Y8dnl9Bbwd+HVgP3AP8PY8vhP/EWhIP4vvBN4oIs+ZOf97wOOkn9MzgH+3w2v8G+AT2+ZxJM/hR4Bl4F8AbxGRZ2y77juBcofX/E3gr4HrgJ8EfkdEDs18xncBfwpcD9yU32uW16jqYj6+9Cyf3ZhFVe24Cg6SmKwD/+Qc17wO+PWZ5/+V9Id6Cvgz4Dkz514G3A+sAY8C/1MePwj8PnASWAX+HHB7nOuvA6+bc83HgFec4/xzSH/Qq8ATwE/k8Zr0z+Lz+fgPQJ3PvQh4BPix/Ll/jfTP/rXAp4DjwFuBA2d5z3+YvxcyM/Y54CU7XLtAEskvmRn7NeDnZl7rIcCf4zN+HfCXwPcC75sZ/xrg6LZrjwFfu+334ZPACwAFijz+JcAEWJq59s+BH8iP7wL+/Bxzei/wP1zp3/dr7TCL8urha4Ee8LY93POHwG0ka+bDwKzr9ybg+1V1CXguycIA+FGS2BwiWUo/QfpDRER+SUR+6QI+wyzvB14vIt8rIrfNnhCRJeBPgD8CbgSeDbw7n/5JkjjcDjwPuBP4qZnbrwcOAM8kicI/A14B/P38WidIluD0ve6bcZmfA9ynWTEy9+Xx7XwJ0KnqJ2fG/mbm2hcADwD3iMhxEfmgiPz9mff1wP8JvIb8/Z3hXuATIvKPRcRnt3uS5zLlZ4E3kv4hzPIc4NOqunaOeT2Ul2yezK72f7PtNf51PvcXIvKiHT67sQ0TyquH64AnVbXb7Q2q+mZVXVPVCcnafJ6I7MunW+ArRGRZVU+o6odnxm8Anqmqrar++VQ4VPWfquo/vUif55+RhPs1wP0i8qCIvDSf+0fA46r686o6zp/hA/ncdwL/SlWPquox4GeA75p53Qj8tKpOVHUE/ADwk6r6yMz34dumbrmqfqWqviXfu0iyvmc5BSztMP9F4PQ5rr2JZFW+hyTeP09y4w/m8/8c+ICqfmj7C6tqAH4VeAtJIN9C+qe2ASAidwBfD/wfZ5nXuT7DTcCrgF8k/eP4A85cXvgx4FbgCHA38P+IyBfv8D7GDCaUVw/HgYO7XXfLlsjPicinROQ0yQ2E5FoD/Pck9/uzIvL/icjX5vH/nbRW+Mci8ulLFWBR1ZGq/qyqfjXpn8Bbgf8qIgeAm0mu8k7cCHx25vln89iUY6o6nnn+TOBtInJSRE6S1gMDyVrezjppTXCWZdLyxF6vHQEPqeqb8j+c3wIeBr5eRG4kCeVP7vQBc/Dl35KWEiqSNfyfc6DJkdalf+gs/zR3M6/3qeofqmpDWje9jrRWjKp+YPrPVVXvAf6C9HtinAMTyquHvyRZFztGP3fgO0hBnm8irWfdkscFQFU/qKovJ7nl/zdJqMh/JD+qqreSAiw/IiIvvlgfYidU9TTJlVwAnkUSlFvPcvnnSeI35Yvy2ObLbbv+YeClqroyc/RU9dEdXvvjwFeKiMyMfWUe384ngWLbssHzZq69b4e5TJ/fSbLa7xeRx4FfAO7MGQCetKzwZ6p6r6pGVf0g8AHSz3IZuAP47XzvB/NrPiIiL8zvf2tevtjtvM6Fkn9njLNjQnmVoKqngP8F+I8i8goRGYhIKSIvnU3vmGGJJKzHgQFJiIAU+RSR7xSRfaraklzImM/9IxF5dhaLUyTrK+5mjnk+PdLvTSEivfyHv9O1/1JE/l6eSw/4IVIA6QFSMOkGEflhEalFZElEvibf+pvAT+XUm4P5e3Ku3NFfJq2FPjO/7yEROVuWwHvz5/3n+X1fk8f/dPuF2Q3+PeBficiCiHw96R/Tr+VL3gbsF5FXZ+v+20hu71+Q1o5vIQni7fkz/DVwe3a7Pwi8UHJqkog8H3ghSeROkSzo6b1Ta++rSa78J4GPAD+dv//fShL7383X/TrwAhH5pvyz+WHgSdKa6IqIfEu+r8hR9f+WtFZsnIsrHU2y48yDtEZ3L7BBWsj/A+Dr8rnXkaPepLWqt5Ncrs8C302yDp5Ncuf+iBTYOE36w/yGfN//SHLTN0hBnX85896/DPzyOeb2K/k9Zo/vOcu1P0WKfJ8mRbbfO/0c+fxzSQGcE/lzvjaP90jra4/l4xeBXj73IuCRbe/jSGk2D+TvxaeAn505/3HgO2eePx/4EMlF/TDw/JlzPwH84czzAyRrfIMUHf+Obe/9QuCjJHf4XuCFZ/lefA8zUe889hrSEsga8GngR89y7y3MRL1nxt6bP8MDwDdtu+e/y699Ol/3nDx+KP8urJH+ab0f+OYr/Tt/LRySv4GGYRjGWTDX2zAMYw6XTChF5CUi8kBOC7niW9cMwzDOl0vieudF5E8C30xaB/sg8O2qev9FfzPDMIxLzKWyKO8EHlTVT2vK5fotrp79yoZhGHtiT0UF9sARUn7blEdI+1t3pJJaeyxcoqkYhmHMZ40TT6rqoZ3OXSqhnIuI3EXaq0uPAV9zaXOeDcMwzsmf6O989mznLpXr/Shpm9qUm/LYJqp6t6reoap3lNSXaBqGYRgXzqUSyg8Ct4nIs/Jm/FcB77hE72UYhnFJuSSut6p2eXvY/wt44M2qutN+WsMwjKueS7ZGqarvBN55qV7fMAzjcmE7cwzDMOZgQmkYhjEHE0rDMIw5mFAahmHMwYTSMAxjDiaUhmEYczChNAzDmIMJpWEYxhxMKA3DMOZgQmkYhjEHE0rDMIw5mFAahmHMwYTSMAxjDiaUhmEYczChNAzDmIMJpWEYxhxMKA3DMOZgQmkYhjEHE0rDMIw5mFAahmHM4YKai4nIQ8AaEIBOVe8QkQPAbwO3AA8Br1TVExc2TcMwjCvHxbAo/4Gq3q6qd+TnrwXeraq3Ae/Ozw3DMK5ZLoXr/XLgnvz4HuAVl+A9DMMwLhsXKpQK/LGIfEhE7spjh1X1sfz4ceDwBb6HYRjGFeWC1iiBb1DVR0XkGcC7RORvZ0+qqoqI7nRjFta7AHoMLnAahmEYl44LsihV9dH89SjwNuBO4AkRuQEgfz16lnvvVtU7VPWOkvpCpmEYhnFJOW+hFJEFEVmaPgb+IfAx4B3Aq/NlrwbefqGTNAzDuJJciOt9GHibiExf5y2q+kci8kHgrSLyfcBngVde+DQNwzCuHOctlKr6aeB5O4wfB158IZMyDMO4mrCdOYZhGHMwoTQMw5iDCaVhGMYcTCgNwzDmYEJpGIYxBxNKwzCMOZhQGoZhzMGE0jAMYw4mlIZhGHMwoTQMw5iDCaVhGMYcTCgNwzDmYEJpGIYxBxNKwzCMOZhQGoZhzMGE0jAMYw4mlIZhGHMwoTQMw5iDCaVhGMYcTCgNwzDmMFcoReTNInJURD42M3ZARN4lIn+
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"model.eval()\n",
"im = dataset_test[10][0]\n",
"show(im)\n",
"with torch.no_grad():\n",
" prediction = model([im.to(device)])\n",
" for i in range(len(prediction[0]['masks'])):\n",
" plt.imshow(Image.fromarray(prediction[0]['masks'][i, 0].mul(255).byte().cpu().numpy()))\n",
" plt.title('Class: '+str(prediction[0]['labels'][i].cpu().numpy())+' Score:'+str(prediction[0]['scores'][i].cpu().numpy()))\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
" "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "python3",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}