diff --git a/cpts/.keep.txt b/cpts/.keep.txt deleted file mode 100644 index e69de29..0000000 diff --git a/figures/model_comparison_inference_speed.png b/figures/model_comparison_inference_speed.png deleted file mode 100644 index 04e46bb..0000000 Binary files a/figures/model_comparison_inference_speed.png and /dev/null differ diff --git a/figures/model_comparison_map.png b/figures/model_comparison_map.png deleted file mode 100644 index 581988a..0000000 Binary files a/figures/model_comparison_map.png and /dev/null differ diff --git a/figures/resnet18_loss_map.png b/figures/resnet18_loss_map.png deleted file mode 100644 index 56f33db..0000000 Binary files a/figures/resnet18_loss_map.png and /dev/null differ diff --git a/figures/resnet50_loss_map.png b/figures/resnet50_loss_map.png deleted file mode 100644 index 180bb57..0000000 Binary files a/figures/resnet50_loss_map.png and /dev/null differ diff --git a/figures/tiny_resnet18_loss_map.png b/figures/tiny_resnet18_loss_map.png deleted file mode 100644 index 63dfa66..0000000 Binary files a/figures/tiny_resnet18_loss_map.png and /dev/null differ diff --git a/figures/vgg19bn_loss_map.png b/figures/vgg19bn_loss_map.png deleted file mode 100644 index 3ae531f..0000000 Binary files a/figures/vgg19bn_loss_map.png and /dev/null differ diff --git a/figures/yolov1_demo.gif b/figures/yolov1_demo.gif deleted file mode 100644 index bfcc7c3..0000000 Binary files a/figures/yolov1_demo.gif and /dev/null differ diff --git a/loss/__pycache__/__init__.cpython-37.pyc b/loss/__pycache__/__init__.cpython-37.pyc deleted file mode 100755 index c88292c..0000000 Binary files a/loss/__pycache__/__init__.cpython-37.pyc and /dev/null differ diff --git a/loss/__pycache__/yolov1_loss.cpython-37.pyc b/loss/__pycache__/yolov1_loss.cpython-37.pyc deleted file mode 100755 index 1562b41..0000000 Binary files a/loss/__pycache__/yolov1_loss.cpython-37.pyc and /dev/null differ diff --git a/loss/yolov1_loss.py b/loss/yolov1_loss.py deleted file mode 100755 index 2182394..0000000 --- a/loss/yolov1_loss.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Sat Mar 26 22:24:58 2022 - -@author: sen -""" -import torch -import torch.nn as nn -from utils.yolov1_utils import intersec_over_union as IUO - -class YoloV1Loss(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(YoloV1Loss, self).__init__() - self.S = S - self.B = B - self.C = C - self.lambda_no_obj = 0.5 - self.lambda_obj = 5 - - def forward(self, preds, target): - mse_loss = nn.MSELoss(reduction="sum") - # reshape predictions to S by S by 30 - preds = preds.reshape(-1, self.S, self.S, self.C + self.B * 5) - # extract 4 bounding box values for bounding box 1 and box 2 - iou_bbox1 = IUO(preds[...,21:25], target[...,21:25]) - iou_bbox2 = IUO(preds[...,26:30], target[...,21:25]) - ious = torch.cat([iou_bbox1.unsqueeze(0), iou_bbox2.unsqueeze(0)], dim = 0) - _ , bestbox = torch.max(ious, dim = 0) - # Determine if an object is in cell i using identity - identity_obj_i = target[...,20].unsqueeze(3) - - # 1. Bouding Box Loss Component - boxpreds = identity_obj_i * ( - ( - bestbox * preds[...,26:30] - + (1 - bestbox) * preds[...,21:25] - ) - ) - - boxtargets = identity_obj_i * target[...,21:25] - - boxpreds[...,2:4] = torch.sign(boxpreds[...,2:4]) * torch.sqrt( - torch.abs(boxpreds[...,2:4] + 1e-6) - ) - boxtargets[...,2:4] = torch.sqrt(boxtargets[...,2:4]) - - # N, S, S, 4 -> N*N*S,4 - - boxloss = mse_loss(torch.flatten(boxpreds, end_dim = -2), - torch.flatten(boxtargets, end_dim = -2) - ) - - # 2. Object Loss Component - # has shape N by S by S - - predbox = ( - bestbox * preds[...,25:26] + (1 - bestbox) * preds[...,20:21] - ) - - - objloss = mse_loss( - torch.flatten(identity_obj_i * predbox), - torch.flatten(identity_obj_i * target[...,20:21]) - ) - - - # 3. No Object Loss Component - no_objloss = mse_loss( - torch.flatten((1 - identity_obj_i) * preds[...,20:21], start_dim = 1), - torch.flatten((1 - identity_obj_i) * target[...,20:21], start_dim = 1) - ) - - no_objloss += mse_loss( - torch.flatten((1 - identity_obj_i) * preds[...,25:26], start_dim = 1), - torch.flatten((1 - identity_obj_i) * target[...,20:21], start_dim = 1) - ) - - # 4. Class Loss Component - classloss = mse_loss( - torch.flatten(identity_obj_i * preds[...,:20], end_dim = -2), - torch.flatten(identity_obj_i * target[...,:20], end_dim = -2) - ) - - # 5. Combine Loss Components - loss = ( - self.lambda_obj * boxloss - + objloss - + self.lambda_no_obj * no_objloss - + classloss) - - return loss \ No newline at end of file diff --git a/models/.DS_Store b/models/.DS_Store deleted file mode 100644 index f6eb10c..0000000 Binary files a/models/.DS_Store and /dev/null differ diff --git a/models/__init__.py b/models/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/models/__pycache__/__init__.cpython-37.pyc b/models/__pycache__/__init__.cpython-37.pyc deleted file mode 100755 index 14acedb..0000000 Binary files a/models/__pycache__/__init__.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/yolov1net_darknet.cpython-37.pyc b/models/__pycache__/yolov1net_darknet.cpython-37.pyc deleted file mode 100755 index f9ed54e..0000000 Binary files a/models/__pycache__/yolov1net_darknet.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/yolov1net_resnet18.cpython-37.pyc b/models/__pycache__/yolov1net_resnet18.cpython-37.pyc deleted file mode 100755 index dabf35b..0000000 Binary files a/models/__pycache__/yolov1net_resnet18.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/yolov1net_resnet50.cpython-37.pyc b/models/__pycache__/yolov1net_resnet50.cpython-37.pyc deleted file mode 100755 index ca32116..0000000 Binary files a/models/__pycache__/yolov1net_resnet50.cpython-37.pyc and /dev/null differ diff --git a/models/__pycache__/yolov1net_vgg19bn.cpython-37.pyc b/models/__pycache__/yolov1net_vgg19bn.cpython-37.pyc deleted file mode 100755 index ccd0aac..0000000 Binary files a/models/__pycache__/yolov1net_vgg19bn.cpython-37.pyc and /dev/null differ diff --git a/models/darknet.py b/models/darknet.py deleted file mode 100755 index f5f9716..0000000 --- a/models/darknet.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Sun Mar 20 16:48:38 2022 - -@author: sen -""" -import torch -import torch.nn as nn -test_model = False - -def conv_params(input_h, n_padding, kernel_size, n_stride): - return (input_h - kernel_size + 2*n_padding) / (n_stride) + 1 - -def num_paddings(kernel_size): - return (kernel_size -1) //2 - -class DarkNet(nn.Module): - def __init__(self): - super(DarkNet, self).__init__() - self.darknet = nn.Sequential( - # Block 1 - nn.Conv2d(in_channels = 3, out_channels = 64, - kernel_size = (7, 7) , stride = 2, - padding = 3), - nn.BatchNorm2d(64), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 2 - nn.Conv2d(in_channels = 64, out_channels = 192, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(192), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 3 - nn.Conv2d(in_channels = 192, out_channels = 128, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(128), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 128, out_channels = 256, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 4 - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 512, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 5 - nn.Conv2d(in_channels = 1024, out_channels = 512, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 512, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - ) - - self.fc_block1 = nn.Sequential ( - nn.AvgPool2d(7), - ) - - self.fc_block2 = nn.Sequential ( - nn.Linear(1024, 1000), - ) - - def forward(self, x): - x = self.darknet(x) - x = self.fc_block1(x) - x = torch.squeeze(x) - x = self.fc_block2(x) - return x - -if __name__ == "__main__": - if test_model == True: - batch_size, nclasses, channels, h, w = 32, 1000, 3, 244, 244 - darknet_model = DarkNet() - input = torch.randn(batch_size, channels, h, w) - output = darknet_model(input) - assert output.size() == torch.Size([batch_size, nclasses]) - print("Passed size check") - \ No newline at end of file diff --git a/models/tiny_yolov1net.py b/models/tiny_yolov1net.py deleted file mode 100755 index 591ff27..0000000 --- a/models/tiny_yolov1net.py +++ /dev/null @@ -1,98 +0,0 @@ -import torch -import torch.nn as nn -import torchvision.models as models - -class Tiny_YoloV1(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(Tiny_YoloV1, self).__init__() - - # Model architecture modelled after TinyYoloV1 from - # https://github.com/pjreddie/darknet/blob/master/cfg/yolov1-tiny.cfg - self.tiny_backbone = nn.Sequential( - nn.Conv2d(in_channels = 3, out_channels = 16, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(16), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = 2, stride = 2), - - nn.Conv2d(in_channels = 16, out_channels = 32, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(32), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = 2, stride = 2), - - nn.Conv2d(in_channels = 32, out_channels = 64, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(64), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = 2, stride = 2), - - nn.Conv2d(in_channels = 64, out_channels = 128, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(128), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = 2, stride = 2), - - nn.Conv2d(in_channels = 128, out_channels = 256, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = 2, stride = 2), - - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = 2, stride = 2), - ) - - - self.yolov1head = nn.Sequential ( - - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - nn.Conv2d(in_channels = 1024, out_channels = 256, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - nn.Linear(in_features = 256 * S * S, out_features = 1470), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - - nn.Linear(in_features = 1470, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S, S, 30) with C + B * 5 = 30 - ) - - self.random_weight_init() - - def forward(self, x): - x = self.tiny_backbone(x) - x = self.yolov1head(x) - return x - - def random_weight_init(self): - for i in range(len(self.yolov1head)): - if type(self.yolov1head[i]) == torch.nn.modules.conv.Conv2d: - self.yolov1head[i].weight.data = self.yolov1head[i].weight.data.normal_(0, 0.02) - self.yolov1head[i].bias.data = self.yolov1head[i].bias.data.zero_() -def test (): - model = Tiny_YoloV1() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() \ No newline at end of file diff --git a/models/tiny_yolov1net_mobilenetv3_large.py b/models/tiny_yolov1net_mobilenetv3_large.py deleted file mode 100755 index 0435b87..0000000 --- a/models/tiny_yolov1net_mobilenetv3_large.py +++ /dev/null @@ -1,57 +0,0 @@ -import torch -import torch.nn as nn -import torchvision.models as models - -class Tiny_YoloV1_MobileNetV3_Large(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(Tiny_YoloV1_MobileNetV3_Large, self).__init__() - - self.mobilenetv3_backbone = nn.Sequential(*list(models.mobilenet_v3_large(weights='MobileNet_V3_Large_Weights.IMAGENET1K_V2').children())[:-2]) - #self.squeeze_net = nn.Sequential(*list(models.squeezenet1_1(weights='IMAGENET1K_V1').children())[:-1]) - self.yolov1head = nn.Sequential ( - # Block 5 (last two conv layers) - # Since the last MobileNetV3 layer consists of a (1x1, 960) conv layer - # we adjust the input size of the yolo head from 1024 to 960. - - nn.Conv2d(in_channels = 960, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - - nn.Conv2d(in_channels = 512, out_channels = 128, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(128), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - # shape before flatten is [2, 256, 14, 14] -> 256 * 14 * 14 = 50176 - # we adjust the linear layer input to be 1024 * 7 * 7 = 50176 - nn.Linear(in_features = 512 * S * S, out_features = 1470), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - nn.Linear(in_features = 1470, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S, S, 30) with C + B * 5 = 30 - ) - - self.random_weight_init() - - def forward(self, x): - x = self.mobilenetv3_backbone(x) - x = self.yolov1head(x) - return x - - def random_weight_init(self): - for i in range(len(self.yolov1head)): - if type(self.yolov1head[i]) == torch.nn.modules.conv.Conv2d: - self.yolov1head[i].weight.data = self.yolov1head[i].weight.data.normal_(0, 0.02) - self.yolov1head[i].bias.data = self.yolov1head[i].bias.data.zero_() -def test (): - model = Tiny_YoloV1_MobileNetV3_Large() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() \ No newline at end of file diff --git a/models/tiny_yolov1net_mobilenetv3_small.py b/models/tiny_yolov1net_mobilenetv3_small.py deleted file mode 100755 index a1bfaf6..0000000 --- a/models/tiny_yolov1net_mobilenetv3_small.py +++ /dev/null @@ -1,48 +0,0 @@ -import torch -import torch.nn as nn -import torchvision.models as models - -class Tiny_YoloV1_MobileNetV3_Small(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(Tiny_YoloV1_MobileNetV3_Small, self).__init__() - - self.mobilenetv3_small_backbone = nn.Sequential(*list(models.mobilenet_v3_small(weights='MobileNet_V3_Small_Weights.IMAGENET1K_V1').children())[:-2]) - - self.yolov1head = nn.Sequential ( - # Block 5 (last two conv layers) - # Since the last MobileNetV3 small layer consists of a (1x1, 567) conv layer - # we adjust the input size of the yolo head from 1024 to 567 - - nn.Conv2d(in_channels = 576, out_channels = 192, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(192), - nn.LeakyReLU(0.1), - - nn.Conv2d(in_channels = 192, out_channels = 96, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(96), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - nn.Linear(in_features = 384 * S * S, out_features = 1470), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - nn.Linear(in_features = 1470, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S, S, 30) with C + B * 5 = 30 - ) - - def forward(self, x): - x = self.mobilenetv3_small_backbone(x) - x = self.yolov1head(x) - return x - -def test (): - model = Tiny_YoloV1_MobileNetV3_Small() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() \ No newline at end of file diff --git a/models/tiny_yolov1net_squeezenet.py b/models/tiny_yolov1net_squeezenet.py deleted file mode 100755 index 414ee29..0000000 --- a/models/tiny_yolov1net_squeezenet.py +++ /dev/null @@ -1,60 +0,0 @@ -import torch -import torch.nn as nn -import torchvision.models as models - -import torch -import torch.nn as nn -import torchvision.models as models - -class Tiny_YoloV1_SqueezeNet(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(Tiny_YoloV1_SqueezeNet, self).__init__() - - self.squeezenet_backbone = nn.Sequential(*list(models.squeezenet1_1(weights='SqueezeNet1_1_Weights.IMAGENET1K_V1').children())[:-1]) - self.yolov1head = nn.Sequential ( - # Block 5 (last two conv layers) - # Since the last SqueezeNet layer consists of a (1x1, 512) conv layer - # we adjust the input size of the yolo head from 1024 to 512. - - nn.Conv2d(in_channels = 512, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - - nn.Conv2d(in_channels = 512, out_channels = 128, - kernel_size = (3, 3), stride = 2, - padding = 1), - nn.BatchNorm2d(128), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - # shape before flatten is [2, 256, 14, 14] -> 256 * 14 * 14 = 50176 - # we adjust the linear layer input to be 1024 * 7 * 7 = 50176 - nn.Linear(in_features = 512 * S * S, out_features = 1470), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - nn.Linear(in_features = 1470, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S, S, 30) with C + B * 5 = 30 - ) - - self.random_weight_init() - - def forward(self, x): - x = self.squeezenet_backbone(x) - x = self.yolov1head(x) - return x - - def random_weight_init(self): - for i in range(len(self.yolov1head)): - if type(self.yolov1head[i]) == torch.nn.modules.conv.Conv2d: - self.yolov1head[i].weight.data = self.yolov1head[i].weight.data.normal_(0, 0.02) - self.yolov1head[i].bias.data = self.yolov1head[i].bias.data.zero_() -def test (): - model = Tiny_YoloV1_SqueezeNet() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() \ No newline at end of file diff --git a/models/yolov1net_darknet.py b/models/yolov1net_darknet.py deleted file mode 100755 index 91d1617..0000000 --- a/models/yolov1net_darknet.py +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Sun Mar 20 16:48:38 2022 - -@author: sen -""" -import torch -import torch.nn as nn - -def conv_params(input_h, n_padding, kernel_size, n_stride): - return (input_h - kernel_size + 2*n_padding) / (n_stride) + 1 - -def num_paddings(kernel_size): - return (kernel_size -1) //2 - - -class YoloV1Net(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(YoloV1Net, self).__init__() - # darknet backbone - self.darknet = nn.Sequential( - # Block 1 - nn.Conv2d(in_channels = 3, out_channels = 64, - kernel_size = (7, 7) , stride = 2, - padding = 3), - nn.BatchNorm2d(64), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 2 - nn.Conv2d(in_channels = 64, out_channels = 192, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(192), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 3 - nn.Conv2d(in_channels = 192, out_channels = 128, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(128), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 128, out_channels = 256, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 4 - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 256, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(256), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 256, out_channels = 512, - kernel_size = (3, 3), stride = 1, - padding = 0), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 512, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.MaxPool2d(kernel_size = (2, 2), stride = 2), - - # Block 5 (first 4 conv layers) - nn.Conv2d(in_channels = 1024, out_channels = 512, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 512, - kernel_size = (1, 1), stride = 1, - padding = 0), - nn.BatchNorm2d(512), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - ) - - # yolo head - self.yolov1head = nn.Sequential ( - # Block 5 (last two conv layers) - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 2, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # Block 6 - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - nn.Linear(in_features = 1024 * S * S, out_features = 4096), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - nn.Linear(in_features = 4096, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S,S, 30) with C + B * 5 = 30 - ) - - self.random_weight_init() - - def forward(self, x): - x = self.darknet(x) - x = self.yolov1head(x) - return x - - def random_weight_init(self): - for i in range(len(self.yolov1head)): - if type(self.yolov1head[i]) == torch.nn.modules.conv.Conv2d: - self.yolov1head[i].weight.data = self.yolov1head[0].weight.data.normal_(0, 0.01) - - -def test (): - model = YoloV1Net() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() - diff --git a/models/yolov1net_resnet18.py b/models/yolov1net_resnet18.py deleted file mode 100755 index 42e10ce..0000000 --- a/models/yolov1net_resnet18.py +++ /dev/null @@ -1,65 +0,0 @@ -import torch -import torch.nn as nn -import torchvision.models as models - -class YoloV1_Resnet18(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(YoloV1_Resnet18, self).__init__() - - self.resnet18backbone = nn.Sequential(*list(models.resnet18(weights='ResNet18_Weights.IMAGENET1K_V1').children())[:-2]) - - self.yolov1head = nn.Sequential ( - # Block 5 (last two conv layers) - # Since the last ResNet 18 layer consists of a (3x3, 512) conv layer - # we adjust the input size of the yolo head from 1024 to 512. - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 2, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # Block 6 - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - nn.Linear(in_features = 1024 * S * S, out_features = 4096), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - nn.Linear(in_features = 4096, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S, S, 30) with C + B * 5 = 30 - ) - - self.random_weight_init() - - def forward(self, x): - x = self.resnet18backbone(x) - x = self.yolov1head(x) - return x - - def random_weight_init(self): - for i in range(len(self.yolov1head)): - if type(self.yolov1head[i]) == torch.nn.modules.conv.Conv2d: - self.yolov1head[i].weight.data = self.yolov1head[i].weight.data.normal_(0, 0.02) - self.yolov1head[i].bias.data = self.yolov1head[i].bias.data.zero_() -def test (): - model = YoloV1_Resnet18() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() \ No newline at end of file diff --git a/models/yolov1net_resnet50.py b/models/yolov1net_resnet50.py deleted file mode 100755 index 374eade..0000000 --- a/models/yolov1net_resnet50.py +++ /dev/null @@ -1,66 +0,0 @@ -import torch -import torch.nn as nn -import torchvision.models as models - -class YoloV1_Resnet50(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(YoloV1_Resnet50, self).__init__() - - self.resnet50backbone = nn.Sequential(*list(models.resnet50(weights='ResNet50_Weights.IMAGENET1K_V2').children())[:-2]) - - self.yolov1head = nn.Sequential ( - # Block 5 (last two conv layers) - # Since the last ResNet 50 layer consists of a (3x3, 2048) conv layer - # we adjust the input size of the yolo head from 1024 to 2048. - nn.Conv2d(in_channels = 2048, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 2, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # Block 6 - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - nn.Linear(in_features = 1024 * S * S, out_features = 4096), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - nn.Linear(in_features = 4096, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S, S, 30) with C + B * 5 = 30 - ) - - self.random_weight_init() - - def forward(self, x): - x = self.resnet50backbone(x) - x = self.yolov1head(x) - return x - - def random_weight_init(self): - for i in range(len(self.yolov1head)): - if type(self.yolov1head[i]) == torch.nn.modules.conv.Conv2d: - self.yolov1head[i].weight.data = self.yolov1head[i].weight.data.normal_(0, 0.02) - self.yolov1head[i].bias.data = self.yolov1head[i].bias.data.zero_() - -def test (): - model = YoloV1_Resnet50() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() \ No newline at end of file diff --git a/models/yolov1net_vgg19bn.py b/models/yolov1net_vgg19bn.py deleted file mode 100755 index cf25f8f..0000000 --- a/models/yolov1net_vgg19bn.py +++ /dev/null @@ -1,65 +0,0 @@ -import torch -import torch.nn as nn -import torchvision.models as models - -class YoloV1_Vgg19bn(nn.Module): - def __init__(self, S = 7, B = 2, C = 20): - super(YoloV1_Vgg19bn, self).__init__() - - self.vgg19bnbackbone = models.vgg19_bn(weights='VGG19_BN_Weights.IMAGENET1K_V1').features - - self.yolov1head = nn.Sequential ( - # Block 5 (last two conv layers) - # Since the last block of Vgg 19 consists of 4 x Conv(3x3,512) - # we adjust the input size of the yolo head from 1024 to 512. - nn.Conv2d(in_channels = 512, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 2, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # Block 6 - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - nn.Conv2d(in_channels = 1024, out_channels = 1024, - kernel_size = (3, 3), stride = 1, - padding = 1), - nn.BatchNorm2d(1024), - nn.LeakyReLU(0.1), - - # prediction block - nn.Flatten(), - nn.Linear(in_features = 1024 * S * S, out_features = 4096), - nn.Dropout(0.5), - nn.LeakyReLU(0.1), - nn.Linear(in_features = 4096, out_features = S * S * (C + B * 5)), - # reshape in loss to be (S,S, 30) with C + B * 5 = 30 - ) - - self.random_weight_init() - - def forward(self, x): - x = self.vgg19bnbackbone(x) - x = self.yolov1head(x) - return x - - def random_weight_init(self): - for i in range(len(self.yolov1head)): - if type(self.yolov1head[i]) == torch.nn.modules.conv.Conv2d: - self.yolov1head[i].weight.data = self.yolov1head[i].weight.data.normal_(0, 0.02) - self.yolov1head[i].bias.data = self.yolov1head[i].bias.data.zero_() -def test (): - model = YoloV1_Vgg19bn() - x = torch.rand(2, 3, 448, 448) - xshape = model(x).shape - return x, xshape - -testx, xdims = test() diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..498b2d9 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,944 @@ +[[package]] +name = "brotlipy" +version = "0.7.0" +description = "Python binding to the Brotli library" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +cffi = ">=1.0.0" + +[[package]] +name = "certifi" +version = "2022.6.15" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "2.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "colorama" +version = "0.4.5" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "cryptography" +version = "37.0.4" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx_rtd_theme"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +sdist = ["setuptools_rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] + +[[package]] +name = "cycler" +version = "0.11.0" +description = "Composable style cycles" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "docopt" +version = "0.6.2" +description = "Pythonic argument parser, that will make you smile" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "fonttools" +version = "4.34.4" +description = "Tools to manipulate font files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "scipy"] +lxml = ["lxml (>=4.0,<5)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=14.0.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "kiwisolver" +version = "1.4.4" +description = "A fast implementation of the Cassowary constraint solver" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "matplotlib" +version = "3.5.3" +description = "Python plotting package" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.0.1" +numpy = ">=1.17" +packaging = ">=20.0" +pillow = ">=6.2.0" +pyparsing = ">=2.2.1" +python-dateutil = ">=2.7" +setuptools_scm = ">=4,<7" + +[[package]] +name = "numpy" +version = "1.23.1" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "opencv-python" +version = "4.6.0.66" +description = "Wrapper package for OpenCV python bindings." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +numpy = [ + {version = ">=1.19.3", markers = "python_version >= \"3.6\" and platform_system == \"Linux\" and platform_machine == \"aarch64\" or python_version >= \"3.9\""}, + {version = ">=1.14.5", markers = "python_version >= \"3.7\""}, + {version = ">=1.17.3", markers = "python_version >= \"3.8\""}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\" or python_version >= \"3.6\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, +] + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pandas" +version = "1.4.3" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +numpy = [ + {version = ">=1.18.5", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, + {version = ">=1.20.0", markers = "platform_machine == \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, +] +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" + +[package.extras] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] + +[[package]] +name = "Pillow" +version = "9.2.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "pip" +version = "22.3" +description = "The PyPA recommended tool for installing Python packages." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pyOpenSSL" +version = "22.0.0" +description = "Python wrapper module around the OpenSSL library" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cryptography = ">=35.0" + +[package.extras] +docs = ["sphinx", "sphinx-rtd-theme"] +test = ["flaky", "pretend", "pytest (>=3.0.1)"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "PySocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2022.1" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "requests" +version = "2.28.1" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "61.2.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx", "sphinx-favicon", "sphinx-inline-tabs", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mock", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "setuptools-scm" +version = "6.4.2" +description = "the blessed package to manage your versions by scm tags" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +packaging = ">=20.0" +setuptools = "*" +tomli = ">=1.0.0" + +[package.extras] +test = ["pytest (>=6.2)", "virtualenv (>20)"] +toml = ["setuptools (>=42)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "torch" +version = "1.12.0" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +category = "main" +optional = false +python-versions = ">=3.7.0" + +[package.dependencies] +typing-extensions = "*" + +[[package]] +name = "torchvision" +version = "0.13.0" +description = "image and video datasets and models for torch deep learning" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +numpy = "*" +pillow = ">=5.3.0,<8.3.0 || >=8.4.0" +requests = "*" +torch = "1.12.0" +typing-extensions = "*" + +[package.extras] +scipy = ["scipy"] + +[[package]] +name = "typing-extensions" +version = "4.3.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "urllib3" +version = "1.26.10" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "wheel" +version = "0.37.1" +description = "A built-package format for Python" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.extras] +test = ["pytest (>=3.0.0)", "pytest-cov"] + +[[package]] +name = "win-inet-pton" +version = "1.1.0" +description = "Native inet_pton and inet_ntop implementation for Python on Windows (with ctypes)." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "wincertstore" +version = "0.2" +description = "Python module to extract CA and CRL certs from Windows' cert store (ctypes based)." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "yarg" +version = "0.1.9" +description = "A semi hard Cornish cheese, also queries PyPI (PyPI client)" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +requests = "*" + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "8c8017073770fa7d762060c5e7e4172529b6e1a47be10f8302801b0879bce171" + +[metadata.files] +brotlipy = [ + {file = "brotlipy-0.7.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:af65d2699cb9f13b26ec3ba09e75e80d31ff422c03675fcb36ee4dabe588fdc2"}, + {file = "brotlipy-0.7.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:50ca336374131cfad20612f26cc43c637ac0bfd2be3361495e99270883b52962"}, + {file = "brotlipy-0.7.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:fd1d1c64214af5d90014d82cee5d8141b13d44c92ada7a0c0ec0679c6f15a471"}, + {file = "brotlipy-0.7.0-cp27-cp27m-win32.whl", hash = "sha256:5de6f7d010b7558f72f4b061a07395c5c3fd57f0285c5af7f126a677b976a868"}, + {file = "brotlipy-0.7.0-cp27-cp27m-win_amd64.whl", hash = "sha256:637847560d671657f993313ecc6c6c6666a936b7a925779fd044065c7bc035b9"}, + {file = "brotlipy-0.7.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:b4c98b0d2c9c7020a524ca5bbff42027db1004c6571f8bc7b747f2b843128e7a"}, + {file = "brotlipy-0.7.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8b39abc3256c978f575df5cd7893153277216474f303e26f0e43ba3d3969ef96"}, + {file = "brotlipy-0.7.0-cp33-cp33m-macosx_10_6_intel.whl", hash = "sha256:96bc59ff9b5b5552843dc67999486a220e07a0522dddd3935da05dc194fa485c"}, + {file = "brotlipy-0.7.0-cp33-cp33m-manylinux1_i686.whl", hash = "sha256:091b299bf36dd6ef7a06570dbc98c0f80a504a56c5b797f31934d2ad01ae7d17"}, + {file = "brotlipy-0.7.0-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:0be698678a114addcf87a4b9496c552c68a2c99bf93cf8e08f5738b392e82057"}, + {file = "brotlipy-0.7.0-cp33-cp33m-win32.whl", hash = "sha256:d2c1c724c4ac375feb2110f1af98ecdc0e5a8ea79d068efb5891f621a5b235cb"}, + {file = "brotlipy-0.7.0-cp33-cp33m-win_amd64.whl", hash = "sha256:3a3e56ced8b15fbbd363380344f70f3b438e0fd1fcf27b7526b6172ea950e867"}, + {file = "brotlipy-0.7.0-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:653faef61241bf8bf99d73ca7ec4baa63401ba7b2a2aa88958394869379d67c7"}, + {file = "brotlipy-0.7.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:0fa6088a9a87645d43d7e21e32b4a6bf8f7c3939015a50158c10972aa7f425b7"}, + {file = "brotlipy-0.7.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:79aaf217072840f3e9a3b641cccc51f7fc23037496bd71e26211856b93f4b4cb"}, + {file = "brotlipy-0.7.0-cp34-cp34m-win32.whl", hash = "sha256:a07647886e24e2fb2d68ca8bf3ada398eb56fd8eac46c733d4d95c64d17f743b"}, + {file = "brotlipy-0.7.0-cp34-cp34m-win_amd64.whl", hash = "sha256:c6cc0036b1304dd0073eec416cb2f6b9e37ac8296afd9e481cac3b1f07f9db25"}, + {file = "brotlipy-0.7.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:382971a641125323e90486244d6266ffb0e1f4dd920fbdcf508d2a19acc7c3b3"}, + {file = "brotlipy-0.7.0-cp35-abi3-manylinux1_i686.whl", hash = "sha256:82f61506d001e626ec3a1ac8a69df11eb3555a4878599befcb672c8178befac8"}, + {file = "brotlipy-0.7.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:7ff18e42f51ebc9d9d77a0db33f99ad95f01dd431e4491f0eca519b90e9415a9"}, + {file = "brotlipy-0.7.0-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:8ef230ca9e168ce2b7dc173a48a0cc3d78bcdf0bd0ea7743472a317041a4768e"}, + {file = "brotlipy-0.7.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:b7cf5bb69e767a59acc3da0d199d4b5d0c9fed7bef3ffa3efa80c6f39095686b"}, + {file = "brotlipy-0.7.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:e5c549ae5928dda952463196180445c24d6fad2d73cb13bd118293aced31b771"}, + {file = "brotlipy-0.7.0-cp35-abi3-win32.whl", hash = "sha256:79ab3bca8dd12c17e092273484f2ac48b906de2b4828dcdf6a7d520f99646ab3"}, + {file = "brotlipy-0.7.0-cp35-abi3-win_amd64.whl", hash = "sha256:ac1d66c9774ee62e762750e399a0c95e93b180e96179b645f28b162b55ae8adc"}, + {file = "brotlipy-0.7.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:07194f4768eb62a4f4ea76b6d0df6ade185e24ebd85877c351daa0a069f1111a"}, + {file = "brotlipy-0.7.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7e31f7adcc5851ca06134705fcf3478210da45d35ad75ec181e1ce9ce345bb38"}, + {file = "brotlipy-0.7.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9448227b0df082e574c45c983fa5cd4bda7bfb11ea6b59def0940c1647be0c3c"}, + {file = "brotlipy-0.7.0-cp35-cp35m-win32.whl", hash = "sha256:dc6c5ee0df9732a44d08edab32f8a616b769cc5a4155a12d2d010d248eb3fb07"}, + {file = "brotlipy-0.7.0-cp35-cp35m-win_amd64.whl", hash = "sha256:3c1d5e2cf945a46975bdb11a19257fa057b67591eb232f393d260e7246d9e571"}, + {file = "brotlipy-0.7.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:2a80319ae13ea8dd60ecdc4f5ccf6da3ae64787765923256b62c598c5bba4121"}, + {file = "brotlipy-0.7.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2699945a0a992c04fc7dc7fa2f1d0575a2c8b4b769f2874a08e8eae46bef36ae"}, + {file = "brotlipy-0.7.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1ea4e578241504b58f2456a6c69952c88866c794648bdc74baee74839da61d44"}, + {file = "brotlipy-0.7.0-cp36-cp36m-win32.whl", hash = "sha256:2e5c64522364a9ebcdf47c5744a5ddeb3f934742d31e61ebfbbc095460b47162"}, + {file = "brotlipy-0.7.0-cp36-cp36m-win_amd64.whl", hash = "sha256:09ec3e125d16749b31c74f021aba809541b3564e5359f8c265cbae442810b41a"}, + {file = "brotlipy-0.7.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:4e4638b49835d567d447a2cfacec109f9a777f219f071312268b351b6839436d"}, + {file = "brotlipy-0.7.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5664fe14f3a613431db622172bad923096a303d3adce55536f4409c8e2eafba4"}, + {file = "brotlipy-0.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1379347337dc3d20b2d61456d44ccce13e0625db2611c368023b4194d5e2477f"}, + {file = "brotlipy-0.7.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:22a53ccebcce2425e19f99682c12be510bf27bd75c9b77a1720db63047a77554"}, + {file = "brotlipy-0.7.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4bac11c1ffba9eaa2894ec958a44e7f17778b3303c2ee9f99c39fcc511c26668"}, + {file = "brotlipy-0.7.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:08a16ebe2ffc52f645c076f96b138f185e74e5d59b4a65e84af17d5997d82890"}, + {file = "brotlipy-0.7.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7b21341eab7c939214e457e24b265594067a6ad268305289148ebaf2dacef325"}, + {file = "brotlipy-0.7.0-pp226-pp226u-macosx_10_10_x86_64.whl", hash = "sha256:786afc8c9bd67de8d31f46e408a3386331e126829114e4db034f91eacb05396d"}, + {file = "brotlipy-0.7.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:890b973039ba26c3ad2e86e8908ab527ed64f9b1357f81a676604da8088e4bf9"}, + {file = "brotlipy-0.7.0-pp37-pypy37_pp73-manylinux1_x86_64.whl", hash = "sha256:4864ac52c116ea3e3a844248a9c9fbebb8797891cbca55484ecb6eed3ebeba24"}, + {file = "brotlipy-0.7.0.tar.gz", hash = "sha256:36def0b859beaf21910157b4c33eb3b06d8ce459c942102f16988cca6ea164df"}, +] +certifi = [ + {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, + {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, +] +cffi = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"}, + {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"}, +] +colorama = [ + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, +] +cryptography = [ + {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884"}, + {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6"}, + {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046"}, + {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5"}, + {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b"}, + {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8"}, + {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280"}, + {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3"}, + {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59"}, + {file = "cryptography-37.0.4-cp36-abi3-win32.whl", hash = "sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157"}, + {file = "cryptography-37.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327"}, + {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b"}, + {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9"}, + {file = "cryptography-37.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67"}, + {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d"}, + {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282"}, + {file = "cryptography-37.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa"}, + {file = "cryptography-37.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441"}, + {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596"}, + {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a"}, + {file = "cryptography-37.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab"}, + {file = "cryptography-37.0.4.tar.gz", hash = "sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82"}, +] +cycler = [ + {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, + {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, +] +docopt = [ + {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, +] +fonttools = [ + {file = "fonttools-4.34.4-py3-none-any.whl", hash = "sha256:d73f25b283cd8033367451122aa868a23de0734757a01984e4b30b18b9050c72"}, + {file = "fonttools-4.34.4.zip", hash = "sha256:9a1c52488045cd6c6491fd07711a380f932466e317cb8e016fc4e99dc7eac2f0"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +kiwisolver = [ + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, + {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, + {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, + {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, + {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, + {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, + {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, + {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, +] +matplotlib = [ + {file = "matplotlib-3.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a206a1b762b39398efea838f528b3a6d60cdb26fe9d58b48265787e29cd1d693"}, + {file = "matplotlib-3.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cd45a6f3e93a780185f70f05cf2a383daed13c3489233faad83e81720f7ede24"}, + {file = "matplotlib-3.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d62880e1f60e5a30a2a8484432bcb3a5056969dc97258d7326ad465feb7ae069"}, + {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ab29589cef03bc88acfa3a1490359000c18186fc30374d8aa77d33cc4a51a4a"}, + {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2886cc009f40e2984c083687251821f305d811d38e3df8ded414265e4583f0c5"}, + {file = "matplotlib-3.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c995f7d9568f18b5db131ab124c64e51b6820a92d10246d4f2b3f3a66698a15b"}, + {file = "matplotlib-3.5.3-cp310-cp310-win32.whl", hash = "sha256:6bb93a0492d68461bd458eba878f52fdc8ac7bdb6c4acdfe43dba684787838c2"}, + {file = "matplotlib-3.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:2e6d184ebe291b9e8f7e78bbab7987d269c38ea3e062eace1fe7d898042ef804"}, + {file = "matplotlib-3.5.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6ea6aef5c4338e58d8d376068e28f80a24f54e69f09479d1c90b7172bad9f25b"}, + {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:839d47b8ead7ad9669aaacdbc03f29656dc21f0d41a6fea2d473d856c39c8b1c"}, + {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3b4fa56159dc3c7f9250df88f653f085068bcd32dcd38e479bba58909254af7f"}, + {file = "matplotlib-3.5.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:94ff86af56a3869a4ae26a9637a849effd7643858a1a04dd5ee50e9ab75069a7"}, + {file = "matplotlib-3.5.3-cp37-cp37m-win32.whl", hash = "sha256:35a8ad4dddebd51f94c5d24bec689ec0ec66173bf614374a1244c6241c1595e0"}, + {file = "matplotlib-3.5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:43e9d3fa077bf0cc95ded13d331d2156f9973dce17c6f0c8b49ccd57af94dbd9"}, + {file = "matplotlib-3.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:22227c976ad4dc8c5a5057540421f0d8708c6560744ad2ad638d48e2984e1dbc"}, + {file = "matplotlib-3.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf618a825deb6205f015df6dfe6167a5d9b351203b03fab82043ae1d30f16511"}, + {file = "matplotlib-3.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9befa5954cdbc085e37d974ff6053da269474177921dd61facdad8023c4aeb51"}, + {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3840c280ebc87a48488a46f760ea1c0c0c83fcf7abbe2e6baf99d033fd35fd8"}, + {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dacddf5bfcec60e3f26ec5c0ae3d0274853a258b6c3fc5ef2f06a8eb23e042be"}, + {file = "matplotlib-3.5.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b428076a55fb1c084c76cb93e68006f27d247169f056412607c5c88828d08f88"}, + {file = "matplotlib-3.5.3-cp38-cp38-win32.whl", hash = "sha256:874df7505ba820e0400e7091199decf3ff1fde0583652120c50cd60d5820ca9a"}, + {file = "matplotlib-3.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:b28de401d928890187c589036857a270a032961411934bdac4cf12dde3d43094"}, + {file = "matplotlib-3.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3211ba82b9f1518d346f6309df137b50c3dc4421b4ed4815d1d7eadc617f45a1"}, + {file = "matplotlib-3.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6fe807e8a22620b4cd95cfbc795ba310dc80151d43b037257250faf0bfcd82bc"}, + {file = "matplotlib-3.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c096363b206a3caf43773abebdbb5a23ea13faef71d701b21a9c27fdcef72f4"}, + {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bcdfcb0f976e1bac6721d7d457c17be23cf7501f977b6a38f9d38a3762841f7"}, + {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1e64ac9be9da6bfff0a732e62116484b93b02a0b4d4b19934fb4f8e7ad26ad6a"}, + {file = "matplotlib-3.5.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:73dd93dc35c85dece610cca8358003bf0760d7986f70b223e2306b4ea6d1406b"}, + {file = "matplotlib-3.5.3-cp39-cp39-win32.whl", hash = "sha256:879c7e5fce4939c6aa04581dfe08d57eb6102a71f2e202e3314d5fbc072fd5a0"}, + {file = "matplotlib-3.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:ab8d26f07fe64f6f6736d635cce7bfd7f625320490ed5bfc347f2cdb4fae0e56"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:99482b83ebf4eb6d5fc6813d7aacdefdd480f0d9c0b52dcf9f1cc3b2c4b3361a"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f814504e459c68118bf2246a530ed953ebd18213dc20e3da524174d84ed010b2"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57f1b4e69f438a99bb64d7f2c340db1b096b41ebaa515cf61ea72624279220ce"}, + {file = "matplotlib-3.5.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d2484b350bf3d32cae43f85dcfc89b3ed7bd2bcd781ef351f93eb6fb2cc483f9"}, + {file = "matplotlib-3.5.3.tar.gz", hash = "sha256:339cac48b80ddbc8bfd05daae0a3a73414651a8596904c2a881cfd1edb65f26c"}, +] +numpy = [ + {file = "numpy-1.23.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b15c3f1ed08df4980e02cc79ee058b788a3d0bef2fb3c9ca90bb8cbd5b8a3a04"}, + {file = "numpy-1.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ce242162015b7e88092dccd0e854548c0926b75c7924a3495e02c6067aba1f5"}, + {file = "numpy-1.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0d7447679ae9a7124385ccf0ea990bb85bb869cef217e2ea6c844b6a6855073"}, + {file = "numpy-1.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3119daed207e9410eaf57dcf9591fdc68045f60483d94956bee0bfdcba790953"}, + {file = "numpy-1.23.1-cp310-cp310-win32.whl", hash = "sha256:3ab67966c8d45d55a2bdf40701536af6443763907086c0a6d1232688e27e5447"}, + {file = "numpy-1.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:1865fdf51446839ca3fffaab172461f2b781163f6f395f1aed256b1ddc253622"}, + {file = "numpy-1.23.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeba539285dcf0a1ba755945865ec61240ede5432df41d6e29fab305f4384db2"}, + {file = "numpy-1.23.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7e8229f3687cdadba2c4faef39204feb51ef7c1a9b669247d49a24f3e2e1617c"}, + {file = "numpy-1.23.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68b69f52e6545af010b76516f5daaef6173e73353e3295c5cb9f96c35d755641"}, + {file = "numpy-1.23.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1408c3527a74a0209c781ac82bde2182b0f0bf54dea6e6a363fe0cc4488a7ce7"}, + {file = "numpy-1.23.1-cp38-cp38-win32.whl", hash = "sha256:47f10ab202fe4d8495ff484b5561c65dd59177949ca07975663f4494f7269e3e"}, + {file = "numpy-1.23.1-cp38-cp38-win_amd64.whl", hash = "sha256:37e5ebebb0eb54c5b4a9b04e6f3018e16b8ef257d26c8945925ba8105008e645"}, + {file = "numpy-1.23.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:173f28921b15d341afadf6c3898a34f20a0569e4ad5435297ba262ee8941e77b"}, + {file = "numpy-1.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:876f60de09734fbcb4e27a97c9a286b51284df1326b1ac5f1bf0ad3678236b22"}, + {file = "numpy-1.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35590b9c33c0f1c9732b3231bb6a72d1e4f77872390c47d50a615686ae7ed3fd"}, + {file = "numpy-1.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a35c4e64dfca659fe4d0f1421fc0f05b8ed1ca8c46fb73d9e5a7f175f85696bb"}, + {file = "numpy-1.23.1-cp39-cp39-win32.whl", hash = "sha256:c2f91f88230042a130ceb1b496932aa717dcbd665350beb821534c5c7e15881c"}, + {file = "numpy-1.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:37ece2bd095e9781a7156852e43d18044fd0d742934833335599c583618181b9"}, + {file = "numpy-1.23.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8002574a6b46ac3b5739a003b5233376aeac5163e5dcd43dd7ad062f3e186129"}, + {file = "numpy-1.23.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d732d17b8a9061540a10fda5bfeabca5785700ab5469a5e9b93aca5e2d3a5fb"}, + {file = "numpy-1.23.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:55df0f7483b822855af67e38fb3a526e787adf189383b4934305565d71c4b148"}, + {file = "numpy-1.23.1.tar.gz", hash = "sha256:d748ef349bfef2e1194b59da37ed5a29c19ea8d7e6342019921ba2ba4fd8b624"}, +] +opencv-python = [ + {file = "opencv-python-4.6.0.66.tar.gz", hash = "sha256:c5bfae41ad4031e66bb10ec4a0a2ffd3e514d092652781e8b1ac98d1b59f1158"}, + {file = "opencv_python-4.6.0.66-cp36-abi3-macosx_10_15_x86_64.whl", hash = "sha256:e6e448b62afc95c5b58f97e87ef84699e6607fe5c58730a03301c52496005cae"}, + {file = "opencv_python-4.6.0.66-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af8ba35a4fcb8913ffb86e92403e9a656a4bff4a645d196987468f0f8947875"}, + {file = "opencv_python-4.6.0.66-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbdc84a9b4ea2cbae33861652d25093944b9959279200b7ae0badd32439f74de"}, + {file = "opencv_python-4.6.0.66-cp36-abi3-win32.whl", hash = "sha256:f482e78de6e7b0b060ff994ffd859bddc3f7f382bb2019ef157b0ea8ca8712f5"}, + {file = "opencv_python-4.6.0.66-cp36-abi3-win_amd64.whl", hash = "sha256:0dc82a3d8630c099d2f3ac1b1aabee164e8188db54a786abb7a4e27eba309440"}, + {file = "opencv_python-4.6.0.66-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:6e32af22e3202748bd233ed8f538741876191863882eba44e332d1a34993165b"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pandas = [ + {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d51674ed8e2551ef7773820ef5dab9322be0828629f2cbf8d1fc31a0c4fed640"}, + {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:16ad23db55efcc93fa878f7837267973b61ea85d244fc5ff0ccbcfa5638706c5"}, + {file = "pandas-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:958a0588149190c22cdebbc0797e01972950c927a11a900fe6c2296f207b1d6f"}, + {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e48fbb64165cda451c06a0f9e4c7a16b534fcabd32546d531b3c240ce2844112"}, + {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f803320c9da732cc79210d7e8cc5c8019aad512589c910c66529eb1b1818230"}, + {file = "pandas-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:2893e923472a5e090c2d5e8db83e8f907364ec048572084c7d10ef93546be6d1"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:24ea75f47bbd5574675dae21d51779a4948715416413b30614c1e8b480909f81"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ebc990bd34f4ac3c73a2724c2dcc9ee7bf1ce6cf08e87bb25c6ad33507e318"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d6c0106415ff1a10c326c49bc5dd9ea8b9897a6ca0c8688eb9c30ddec49535ef"}, + {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78b00429161ccb0da252229bcda8010b445c4bf924e721265bec5a6e96a92e92"}, + {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dfbf16b1ea4f4d0ee11084d9c026340514d1d30270eaa82a9f1297b6c8ecbf0"}, + {file = "pandas-1.4.3-cp38-cp38-win32.whl", hash = "sha256:48350592665ea3cbcd07efc8c12ff12d89be09cd47231c7925e3b8afada9d50d"}, + {file = "pandas-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:605d572126eb4ab2eadf5c59d5d69f0608df2bf7bcad5c5880a47a20a0699e3e"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a3924692160e3d847e18702bb048dc38e0e13411d2b503fecb1adf0fcf950ba4"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07238a58d7cbc8a004855ade7b75bbd22c0db4b0ffccc721556bab8a095515f6"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:755679c49460bd0d2f837ab99f0a26948e68fa0718b7e42afbabd074d945bf84"}, + {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41fc406e374590a3d492325b889a2686b31e7a7780bec83db2512988550dadbf"}, + {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d9382f72a4f0e93909feece6fef5500e838ce1c355a581b3d8f259839f2ea76"}, + {file = "pandas-1.4.3-cp39-cp39-win32.whl", hash = "sha256:0daf876dba6c622154b2e6741f29e87161f844e64f84801554f879d27ba63c0d"}, + {file = "pandas-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:721a3dd2f06ef942f83a819c0f3f6a648b2830b191a72bbe9451bcd49c3bd42e"}, + {file = "pandas-1.4.3.tar.gz", hash = "sha256:2ff7788468e75917574f080cd4681b27e1a7bf36461fe968b49a87b5a54d007c"}, +] +Pillow = [ + {file = "Pillow-9.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a9c9bc489f8ab30906d7a85afac4b4944a572a7432e00698a7239f44a44e6efb"}, + {file = "Pillow-9.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:510cef4a3f401c246cfd8227b300828715dd055463cdca6176c2e4036df8bd4f"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7888310f6214f19ab2b6df90f3f06afa3df7ef7355fc025e78a3044737fab1f5"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:831e648102c82f152e14c1a0938689dbb22480c548c8d4b8b248b3e50967b88c"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc1d2451e8a3b4bfdb9caf745b58e6c7a77d2e469159b0d527a4554d73694d1"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:136659638f61a251e8ed3b331fc6ccd124590eeff539de57c5f80ef3a9594e58"}, + {file = "Pillow-9.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6e8c66f70fb539301e064f6478d7453e820d8a2c631da948a23384865cd95544"}, + {file = "Pillow-9.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:37ff6b522a26d0538b753f0b4e8e164fdada12db6c6f00f62145d732d8a3152e"}, + {file = "Pillow-9.2.0-cp310-cp310-win32.whl", hash = "sha256:c79698d4cd9318d9481d89a77e2d3fcaeff5486be641e60a4b49f3d2ecca4e28"}, + {file = "Pillow-9.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:254164c57bab4b459f14c64e93df11eff5ded575192c294a0c49270f22c5d93d"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:adabc0bce035467fb537ef3e5e74f2847c8af217ee0be0455d4fec8adc0462fc"}, + {file = "Pillow-9.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:336b9036127eab855beec9662ac3ea13a4544a523ae273cbf108b228ecac8437"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50dff9cc21826d2977ef2d2a205504034e3a4563ca6f5db739b0d1026658e004"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb6259196a589123d755380b65127ddc60f4c64b21fc3bb46ce3a6ea663659b0"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0554af24df2bf96618dac71ddada02420f946be943b181108cac55a7a2dcd4"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:15928f824870535c85dbf949c09d6ae7d3d6ac2d6efec80f3227f73eefba741c"}, + {file = "Pillow-9.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:bdd0de2d64688ecae88dd8935012c4a72681e5df632af903a1dca8c5e7aa871a"}, + {file = "Pillow-9.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5b87da55a08acb586bad5c3aa3b86505f559b84f39035b233d5bf844b0834b1"}, + {file = "Pillow-9.2.0-cp311-cp311-win32.whl", hash = "sha256:b6d5e92df2b77665e07ddb2e4dbd6d644b78e4c0d2e9272a852627cdba0d75cf"}, + {file = "Pillow-9.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6bf088c1ce160f50ea40764f825ec9b72ed9da25346216b91361eef8ad1b8f8c"}, + {file = "Pillow-9.2.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:2c58b24e3a63efd22554c676d81b0e57f80e0a7d3a5874a7e14ce90ec40d3069"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef7592281f7c174d3d6cbfbb7ee5984a671fcd77e3fc78e973d492e9bf0eb3f"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dcd7b9c7139dc8258d164b55696ecd16c04607f1cc33ba7af86613881ffe4ac8"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a138441e95562b3c078746a22f8fca8ff1c22c014f856278bdbdd89ca36cff1b"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:93689632949aff41199090eff5474f3990b6823404e45d66a5d44304e9cdc467"}, + {file = "Pillow-9.2.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:f3fac744f9b540148fa7715a435d2283b71f68bfb6d4aae24482a890aed18b59"}, + {file = "Pillow-9.2.0-cp37-cp37m-win32.whl", hash = "sha256:fa768eff5f9f958270b081bb33581b4b569faabf8774726b283edb06617101dc"}, + {file = "Pillow-9.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:69bd1a15d7ba3694631e00df8de65a8cb031911ca11f44929c97fe05eb9b6c1d"}, + {file = "Pillow-9.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:030e3460861488e249731c3e7ab59b07c7853838ff3b8e16aac9561bb345da14"}, + {file = "Pillow-9.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:74a04183e6e64930b667d321524e3c5361094bb4af9083db5c301db64cd341f3"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d33a11f601213dcd5718109c09a52c2a1c893e7461f0be2d6febc2879ec2402"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fd6f5e3c0e4697fa7eb45b6e93996299f3feee73a3175fa451f49a74d092b9f"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a647c0d4478b995c5e54615a2e5360ccedd2f85e70ab57fbe817ca613d5e63b8"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4134d3f1ba5f15027ff5c04296f13328fecd46921424084516bdb1b2548e66ff"}, + {file = "Pillow-9.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:bc431b065722a5ad1dfb4df354fb9333b7a582a5ee39a90e6ffff688d72f27a1"}, + {file = "Pillow-9.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1536ad017a9f789430fb6b8be8bf99d2f214c76502becc196c6f2d9a75b01b76"}, + {file = "Pillow-9.2.0-cp38-cp38-win32.whl", hash = "sha256:2ad0d4df0f5ef2247e27fc790d5c9b5a0af8ade9ba340db4a73bb1a4a3e5fb4f"}, + {file = "Pillow-9.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ec52c351b35ca269cb1f8069d610fc45c5bd38c3e91f9ab4cbbf0aebc136d9c8"}, + {file = "Pillow-9.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ed2c4ef2451de908c90436d6e8092e13a43992f1860275b4d8082667fbb2ffc"}, + {file = "Pillow-9.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ad2f835e0ad81d1689f1b7e3fbac7b01bb8777d5a985c8962bedee0cc6d43da"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea98f633d45f7e815db648fd7ff0f19e328302ac36427343e4432c84432e7ff4"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7761afe0126d046974a01e030ae7529ed0ca6a196de3ec6937c11df0df1bc91c"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a54614049a18a2d6fe156e68e188da02a046a4a93cf24f373bffd977e943421"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:5aed7dde98403cd91d86a1115c78d8145c83078e864c1de1064f52e6feb61b20"}, + {file = "Pillow-9.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:13b725463f32df1bfeacbf3dd197fb358ae8ebcd8c5548faa75126ea425ccb60"}, + {file = "Pillow-9.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:808add66ea764ed97d44dda1ac4f2cfec4c1867d9efb16a33d158be79f32b8a4"}, + {file = "Pillow-9.2.0-cp39-cp39-win32.whl", hash = "sha256:337a74fd2f291c607d220c793a8135273c4c2ab001b03e601c36766005f36885"}, + {file = "Pillow-9.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:fac2d65901fb0fdf20363fbd345c01958a742f2dc62a8dd4495af66e3ff502a4"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ad2277b185ebce47a63f4dc6302e30f05762b688f8dc3de55dbae4651872cdf3"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7b502bc34f6e32ba022b4a209638f9e097d7a9098104ae420eb8186217ebbb"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d1f14f5f691f55e1b47f824ca4fdcb4b19b4323fe43cc7bb105988cad7496be"}, + {file = "Pillow-9.2.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:dfe4c1fedfde4e2fbc009d5ad420647f7730d719786388b7de0999bf32c0d9fd"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:f07f1f00e22b231dd3d9b9208692042e29792d6bd4f6639415d2f23158a80013"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1802f34298f5ba11d55e5bb09c31997dc0c6aed919658dfdf0198a2fe75d5490"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17d4cafe22f050b46d983b71c707162d63d796a1235cdf8b9d7a112e97b15bac"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96b5e6874431df16aee0c1ba237574cb6dff1dcb173798faa6a9d8b399a05d0e"}, + {file = "Pillow-9.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0030fdbd926fb85844b8b92e2f9449ba89607231d3dd597a21ae72dc7fe26927"}, + {file = "Pillow-9.2.0.tar.gz", hash = "sha256:75e636fd3e0fb872693f23ccb8a5ff2cd578801251f3a4f6854c6a5d437d3c04"}, +] +pip = [ + {file = "pip-22.3-py3-none-any.whl", hash = "sha256:1daab4b8d3b97d1d763caeb01a4640a2250a0ea899e257b1e44b9eded91e15ab"}, + {file = "pip-22.3.tar.gz", hash = "sha256:8182aec21dad6c0a49a2a3d121a87cd524b950e0b6092b181625f07ebdde7530"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pyOpenSSL = [ + {file = "pyOpenSSL-22.0.0-py2.py3-none-any.whl", hash = "sha256:ea252b38c87425b64116f808355e8da644ef9b07e429398bfece610f893ee2e0"}, + {file = "pyOpenSSL-22.0.0.tar.gz", hash = "sha256:660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +PySocks = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +pytz = [ + {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, + {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, +] +requests = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] +setuptools = [ + {file = "setuptools-61.2.0-py3-none-any.whl", hash = "sha256:8f4813dd6a4d6cc17bde85fb2e635fe19763f96efbb0ddf5575562e5ee0bc47a"}, + {file = "setuptools-61.2.0.tar.gz", hash = "sha256:c3d4e2ab578fbf83775755cd76dae73627915a22832cf4ea5de895978767833b"}, +] +setuptools-scm = [ + {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, + {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +torch = [ + {file = "torch-1.12.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:3322d33a06e440d715bb214334bd41314c94632d9a2f07d22006bf21da3a2be4"}, + {file = "torch-1.12.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:2568f011dddeb5990d8698cc375d237f14568ffa8489854e3b94113b4b6b7c8b"}, + {file = "torch-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:e3e8348edca3e3cee5a67a2b452b85c57712efe1cc3ffdb87c128b3dde54534e"}, + {file = "torch-1.12.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:349ea3ba0c0e789e0507876c023181f13b35307aebc2e771efd0e045b8e03e84"}, + {file = "torch-1.12.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:13c7cca6b2ea3704d775444f02af53c5f072d145247e17b8cd7813ac57869f03"}, + {file = "torch-1.12.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:60d06ee2abfa85f10582d205404d52889d69bcbb71f7e211cfc37e3957ac19ca"}, + {file = "torch-1.12.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:a1325c9c28823af497cbf443369bddac9ac59f67f1e600f8ab9b754958e55b76"}, + {file = "torch-1.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fb47291596677570246d723ee6abbcbac07eeba89d8f83de31e3954f21f44879"}, + {file = "torch-1.12.0-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:abbdc5483359b9495dc76e3bd7911ccd2ddc57706c117f8316832e31590af871"}, + {file = "torch-1.12.0-cp37-none-macosx_11_0_arm64.whl", hash = "sha256:72207b8733523388c49d43ffcc4416d1d8cd64c40f7826332e714605ace9b1d2"}, + {file = "torch-1.12.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0986685f2ec8b7c4d3593e8cfe96be85d462943f1a8f54112fc48d4d9fbbe903"}, + {file = "torch-1.12.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0399746f83b4541bcb5b219a18dbe8cade760aba1c660d2748a38c6dc338ebc7"}, + {file = "torch-1.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:7ddb167827170c4e3ff6a27157414a00b9fef93dea175da04caf92a0619b7aee"}, + {file = "torch-1.12.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:2143d5fe192fd908b70b494349de5b1ac02854a8a902bd5f47d13d85b410e430"}, + {file = "torch-1.12.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:44a3804e9bb189574f5d02ccc2dc6e32e26a81b3e095463b7067b786048c6072"}, + {file = "torch-1.12.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:844f1db41173b53fe40c44b3e04fcca23a6ce00ac328b7099f2800e611766845"}, + {file = "torch-1.12.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:63341f96840a223f277e498d2737b39da30d9f57c7a1ef88857b920096317739"}, + {file = "torch-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:201abf43a99bb4980cc827dd4b38ac28f35e4dddac7832718be3d5479cafd2c1"}, + {file = "torch-1.12.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:c0313438bc36448ffd209f5fb4e5f325b3af158cdf61c8829b8ddaf128c57816"}, + {file = "torch-1.12.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:5ed69d5af232c5c3287d44cef998880dadcc9721cd020e9ae02f42e56b79c2e4"}, +] +torchvision = [ + {file = "torchvision-0.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:61d5093a50b7923a4e5bf9e0271001c29e01abec2348b7dd93370a0a9d15836c"}, + {file = "torchvision-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c4c35428c758adc485ff8f239b5ed68c1b6c26efa261a52e431cab0f7f22aec"}, + {file = "torchvision-0.13.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:acb72a40e5dc0cd454d28514dbdd589a5057afd9bb5c785b87a54718b999bfa1"}, + {file = "torchvision-0.13.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df16abf31e7a5fce8db1f781bf1e4f20c8bc730c7c3f657e946cc5820c04e465"}, + {file = "torchvision-0.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:01e9e7b2e7724e66561e8d98f900985d80191e977c5c0b3f33ed31800ba0210c"}, + {file = "torchvision-0.13.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c31e9b3004142dbfdf32adc4cf2d4fd709b820833e9786f839ae3a91ff65ef0"}, + {file = "torchvision-0.13.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a20662c11dc14fd4eff102ceb946a7ee80b9f98303bb52435cc903f2c4c1fe10"}, + {file = "torchvision-0.13.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:ada295dbfe55017b02acfab960a997387f5addbadd28ee5e575e24f692992ce4"}, + {file = "torchvision-0.13.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad458146aca15f652f9b0c227bebd5403602c7341f15f68f20ec119fa8e8f4a5"}, + {file = "torchvision-0.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83a4d9d50787d1e886c94486b63b15978391f6cf1892fce6a93132c09b14e128"}, + {file = "torchvision-0.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:42d95ab197d090efc5669fec02fbc603d05c859e50ca2c60180d1a113aa9b3e2"}, + {file = "torchvision-0.13.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1b703701f0b99f307ad925b1abda2b3d5bdbf30643ff02102b6aeeb8840ae278"}, + {file = "torchvision-0.13.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:667cac55afb13cda7d362466e7eba3119e529b210e55507d231bead09aca5e1f"}, + {file = "torchvision-0.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e2049f1207631d42d743205f663f1d2235796565be3f18b0339d479626faf30"}, + {file = "torchvision-0.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c2278a189663087bb8e65915062aa7a25b8f8e5a3cfaa5879fe277e23e4bbf40"}, + {file = "torchvision-0.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:253eb0c67bf88cef4a79ec69058c3e94f9fde28b9e3699ad1afc0b3ed50f8075"}, + {file = "torchvision-0.13.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:0e28740bd5695076f7c449af650fc474d6566722d446461c2ceebf9c9599b37f"}, + {file = "torchvision-0.13.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b620a43df4131ad09f5761c415a016a9ea95aaf8ec8c91d030fb59bad591094a"}, + {file = "torchvision-0.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:b7a2c9aebc7ef265777fe7e82577364288d98cf6b8cf0a63bb2621df78a7af1a"}, +] +typing-extensions = [ + {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, + {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, +] +urllib3 = [ + {file = "urllib3-1.26.10-py2.py3-none-any.whl", hash = "sha256:8298d6d56d39be0e3bc13c1c97d133f9b45d797169a0e11cdd0e0489d786f7ec"}, + {file = "urllib3-1.26.10.tar.gz", hash = "sha256:879ba4d1e89654d9769ce13121e0f94310ea32e8d2f8cf587b77c08bbcdb30d6"}, +] +wheel = [ + {file = "wheel-0.37.1-py2.py3-none-any.whl", hash = "sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a"}, + {file = "wheel-0.37.1.tar.gz", hash = "sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4"}, +] +win-inet-pton = [ + {file = "win_inet_pton-1.1.0-py2.py3-none-any.whl", hash = "sha256:eaf0193cbe7152ac313598a0da7313fb479f769343c0c16c5308f64887dc885b"}, + {file = "win_inet_pton-1.1.0.tar.gz", hash = "sha256:dd03d942c0d3e2b1cf8bab511844546dfa5f74cb61b241699fa379ad707dea4f"}, +] +wincertstore = [ + {file = "wincertstore-0.2-py2.py3-none-any.whl", hash = "sha256:22d5eebb52df88a8d4014d5cf6d1b6c3a5d469e6c3b2e2854f3a003e48872356"}, + {file = "wincertstore-0.2.zip", hash = "sha256:780bd1557c9185c15d9f4221ea7f905cb20b93f7151ca8ccaed9714dce4b327a"}, +] +yarg = [ + {file = "yarg-0.1.9-py2.py3-none-any.whl", hash = "sha256:4f9cebdc00fac946c9bf2783d634e538a71c7d280a4d806d45fd4dc0ef441492"}, + {file = "yarg-0.1.9.tar.gz", hash = "sha256:55695bf4d1e3e7f756496c36a69ba32c40d18f821e38f61d028f6049e5e15911"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..52cd69b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,50 @@ +[tool.poetry] +name = "yolov1-real-time-obj-detection" +version = "0.1.0" +description = "" +authors = ["Your Name "] +readme = "README.md" +packages = [{include = "src"}] + +[tool.poetry.dependencies] +python = "^3.8" +brotlipy = "0.7.0" +certifi = "2022.6.15" +cffi = "1.15.1" +charset-normalizer = "2.1.0" +colorama = "0.4.5" +cryptography = "37.0.4" +cycler = "0.11.0" +docopt = "0.6.2" +fonttools = "4.34.4" +idna = "3.3" +kiwisolver = "1.4.4" +matplotlib = "3.5.3" +numpy = "1.23.1" +opencv-python = "4.6.0.66" +packaging = "21.3" +pandas = "1.4.3" +Pillow = "9.2.0" +pycparser = "2.21" +pyOpenSSL = "22.0.0" +pyparsing = "3.0.9" +PySocks = "1.7.1" +python-dateutil = "2.8.2" +pytz = "2022.1" +requests = "2.28.1" +setuptools = "61.2.0" +six = "1.16.0" +torch = "1.12.0" +torchvision = "0.13.0" +typing-extensions = "4.3.0" +urllib3 = "1.26.10" +wheel = "0.37.1" +win-inet-pton = "1.1.0" +wincertstore = "0.2" +yarg = "0.1.9" +pip = "^22.3" + + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/results/.DS_Store b/results/.DS_Store deleted file mode 100644 index 62c5531..0000000 Binary files a/results/.DS_Store and /dev/null differ diff --git a/results/resnet18_adj_lr_inference_speed.txt b/results/resnet18_adj_lr_inference_speed.txt deleted file mode 100644 index bea6fa4..0000000 --- a/results/resnet18_adj_lr_inference_speed.txt +++ /dev/null @@ -1 +0,0 @@ -1.9568531513214111, 1.9615190029144287, 1.9670121669769287, 1.9716849327087402, 1.9763259887695312, 1.98091459274292, 1.9861485958099365, 1.9909536838531494, 1.995678186416626, 2.0001444816589355, 2.0048840045928955, 2.0096211433410645, 2.014310359954834, 2.019742250442505, 2.0246500968933105, 2.031667709350586, 2.036015272140503, 2.0407156944274902, 2.0452516078948975, 2.049849033355713, 2.05466365814209, 2.0596084594726562, 2.0640459060668945, 2.068669080734253, 2.073390245437622, 2.0781941413879395, 2.0830447673797607, 2.0877902507781982, 2.0925450325012207, 2.0971522331237793, 2.1017143726348877, 2.106313467025757, 2.111039400100708, 2.1156516075134277, 2.1203012466430664, 2.1250550746917725, 2.1298325061798096, 2.134538412094116, 2.1392407417297363, 2.143486261367798, 2.1478233337402344, 2.1524899005889893, 2.157132625579834, 2.1621198654174805, 2.1666948795318604, 2.171464443206787, 2.1763737201690674, 2.181232452392578, 2.185791015625, 2.1906330585479736, 2.1954336166381836, 2.2002956867218018, 2.205179214477539, 2.2137279510498047, 2.2181575298309326, 2.2226152420043945, 2.2274487018585205, 2.232154130935669, 2.2367870807647705, 2.2416388988494873, 2.2461507320404053, 2.2508792877197266, 2.255474805831909, 2.2596166133880615, 2.264033079147339, 2.268639326095581, 2.273179054260254, 2.2781577110290527, 2.2832086086273193, 2.2885751724243164, 2.2931101322174072, 2.29819393157959, 2.3029110431671143, 2.3074707984924316, 2.311591148376465, 2.315763235092163, 2.3204996585845947, 2.325047254562378, 2.32956862449646, 2.3341305255889893, 2.338707447052002, 2.3435897827148438, 2.3485825061798096, 2.3528385162353516, 2.35760760307312, 2.362281560897827, 2.36739444732666, 2.3719253540039062, 2.376415252685547, 2.3809516429901123, 2.3857016563415527, 2.390382766723633, 2.395094633102417, 2.3998098373413086, 2.4046695232391357, 2.4095237255096436, 2.4143500328063965, 2.4190449714660645, 2.4239001274108887, 2.428615093231201, 2.433366298675537, 2.4379611015319824, 2.4426450729370117, 2.447326421737671, 2.4518985748291016, 2.456596851348877, 2.4613823890686035, 2.4664080142974854, 2.471050977706909, 2.475759506225586, 2.4799489974975586, 2.484647750854492, 2.4893312454223633, 2.4943783283233643, 2.4989993572235107, 2.5033297538757324, 2.50854229927063, 2.5133583545684814, 2.5180883407592773, 2.522658109664917, 2.5274972915649414, 2.532442092895508, 2.537787914276123, 2.5420665740966797, 2.546818256378174, 2.5514988899230957, 2.5558786392211914, 2.560472249984741, 2.5654520988464355, 2.5702531337738037, 2.5754518508911133, 2.5796313285827637, 2.5842103958129883, 2.5888516902923584, 2.5936036109924316, 2.598189115524292, 2.603358507156372, 2.6086878776550293, 2.613178014755249, 2.618757724761963, 2.623133420944214, 2.6277718544006348, 2.6326818466186523, 2.637356996536255, 2.642235517501831, 2.647139549255371, 2.6517679691314697, 2.6560420989990234, 2.6607444286346436, 2.6652426719665527, 2.669804334640503, 2.6749179363250732, 2.679425001144409, 2.683633327484131, 2.68833327293396, 2.6930747032165527, 2.697969675064087, 2.7027432918548584, 2.707000494003296, 2.7116425037384033, 2.716280221939087, 2.7212400436401367, 2.725919723510742, 2.7301883697509766, 2.734889268875122, 2.7395684719085693, 2.7442002296447754, 2.7488090991973877, 2.7534422874450684, 2.758256196975708, 2.762859582901001, 2.767624855041504, 2.7723779678344727, 2.7771260738372803, 2.781619071960449, 2.7864251136779785, 2.791062355041504, 2.7952585220336914, 2.8000714778900146, 2.8047733306884766, 2.8095977306365967, 2.8144426345825195, 2.8189990520477295, 2.8238284587860107, 2.8286685943603516, 2.8335235118865967, 2.8382232189178467, 2.8431341648101807, 2.847959041595459, 2.852766275405884, 2.857313871383667, 2.862074613571167, 2.8665313720703125, 2.87142014503479, 2.8761789798736572, 2.881096124649048, 2.8861658573150635, 2.8912131786346436, 2.8961641788482666, 2.9003658294677734, 2.904594659805298, 2.9093713760375977, 2.914062261581421, 2.9187984466552734, 2.9233577251434326, 2.928375482559204, 2.933187484741211, 2.9381325244903564, 2.9428184032440186, 2.947570562362671, 2.9522385597229004, 2.9564435482025146, 2.9608335494995117, 2.965418815612793, 2.9705796241760254, 2.9752397537231445, 2.980905055999756, 2.9856138229370117, 2.9903504848480225, 2.995142698287964, 2.9997246265411377, 3.004133701324463, 3.0118727684020996, 3.016526937484741, 3.0211539268493652, 3.0258593559265137, 3.03334903717041, 3.038010835647583, 3.043583631515503, 3.048295736312866, 3.0530335903167725, 3.057839870452881, 3.0628459453582764, 3.0678231716156006, 3.0724682807922363, 3.0770232677459717, 3.0816593170166016, 3.0863640308380127, 3.0910372734069824, 3.0957071781158447, 3.100281238555908, 3.10490083694458, 3.1095383167266846, 3.114227294921875, 3.1189961433410645, 3.1236038208007812, 3.128164529800415, 3.1327919960021973, 3.137200355529785, 3.142226457595825, 3.1468358039855957, 3.151073932647705, 3.155808448791504, 3.160383701324463, 3.1652514934539795, 3.1699085235595703, 3.17445969581604, 3.1790714263916016, 3.1837050914764404, 3.187845230102539, 3.1924688816070557, 3.1977148056030273, 3.202465057373047, 3.207085609436035, 3.211676836013794, 3.216560125350952, 3.2212724685668945, 3.226034641265869, 3.2307517528533936, 3.2361056804656982, 3.2408576011657715, 3.245600700378418, 3.250150203704834, 3.2551286220550537, 3.260453701019287, 3.2651219367980957, 3.2697150707244873, 3.274494171142578, 3.2791695594787598, 3.2843382358551025, 3.2890655994415283, 3.2931883335113525, 3.297734498977661, 3.3038644790649414, 3.3085553646087646, 3.313371181488037, 3.317929267883301, 3.3224761486053467, 3.3265950679779053, 3.3312199115753174, 3.3358607292175293, 3.340083122253418, 3.3446829319000244, 3.3492743968963623, 3.3534915447235107, 3.358107566833496, 3.363170623779297, 3.367780923843384, 3.3724517822265625, 3.377167224884033 \ No newline at end of file diff --git a/results/resnet18_adj_lr_test_loss.txt b/results/resnet18_adj_lr_test_loss.txt deleted file mode 100644 index fa620ce..0000000 --- a/results/resnet18_adj_lr_test_loss.txt +++ /dev/null @@ -1 +0,0 @@ -30.625530242919922, 21.031160354614258, 9.845437049865723, 5.809131622314453, 16.266130447387695, 6.72197151184082, 10.376768112182617, 8.659393310546875, 21.814964294433594, 5.269040107727051, 13.0330810546875, 16.00315284729004, 6.588315486907959, 24.08645248413086, 26.64838218688965, 15.158759117126465, 13.848859786987305, 6.649706840515137, 17.560422897338867, 40.816558837890625, 4.866087913513184, 40.02381134033203, 1.6143863201141357, 8.481575012207031, 8.709336280822754, 5.175628662109375, 18.8874568939209, 1.3607767820358276, 9.106586456298828, 19.64363670349121, 24.533620834350586, 10.07548713684082, 3.0159173011779785, 5.517580986022949, 1.12105393409729, 21.307552337646484, 11.611492156982422, 2.14341402053833, 3.783997058868408, 22.03894805908203, 10.783385276794434, 9.897775650024414, 1.6030539274215698, 2.149311065673828, 12.325461387634277, 6.787454605102539, 3.984609842300415, 5.253530025482178, 7.420923709869385, 34.151451110839844, 15.22113037109375, 6.4923224449157715, 10.791224479675293, 5.093177795410156, 17.030696868896484, 14.879217147827148, 9.777875900268555, 2.9049034118652344, 6.753229141235352, 1.978805422782898, 4.672183036804199, 2.910271406173706, 6.284323215484619, 6.490167617797852, 10.391012191772461, 1.8118131160736084, 3.682727336883545, 6.129965305328369, 1.8152904510498047, 6.7005510330200195, 6.649273872375488, 11.814786911010742, 1.5044564008712769, 7.48615837097168, 1.9541370868682861, 4.147430896759033, 5.004842758178711, 14.341358184814453, 2.778878688812256, 13.135473251342773, 14.235092163085938, 6.709136486053467, 7.837997913360596, 22.916553497314453, 9.295015335083008, 3.548158645629883, 3.9183216094970703, 7.00923490524292, 5.407121658325195, 1.0367021560668945, 13.14541244506836, 7.4303297996521, 2.049212694168091, 1.237661600112915, 4.924388885498047, 0.5784128308296204, 3.1271965503692627, 6.3144330978393555, 9.165871620178223, 2.9903111457824707, 0.8226765990257263, 2.8311715126037598, 3.012969493865967, 5.109396457672119, 11.235690116882324, 21.930816650390625, 2.75631046295166, 1.9753259420394897, 10.636612892150879, 2.0175743103027344, 6.438491344451904, 5.951047897338867, 5.830451965332031, 4.314661026000977, 7.27524471282959, 8.940475463867188, 13.141382217407227, 4.924638748168945, 6.539007663726807, 8.949747085571289, 1.5968959331512451, 2.2510790824890137, 4.466289043426514, 7.712711811065674, 3.7980737686157227, 12.015907287597656, 5.907224655151367, 7.716965198516846, 6.459070205688477, 4.169830322265625, 3.609220504760742, 8.44234848022461, 7.331880569458008, 1.0597202777862549, 2.2675085067749023 \ No newline at end of file diff --git a/results/resnet18_adj_lr_test_mAP.txt b/results/resnet18_adj_lr_test_mAP.txt deleted file mode 100644 index c40a999..0000000 --- a/results/resnet18_adj_lr_test_mAP.txt +++ /dev/null @@ -1 +0,0 @@ -0.0, 0.001314039807766676, 0.010369332507252693, 0.03459370881319046, 0.0663226991891861, 0.1122283935546875, 0.09917344152927399, 0.10688531398773193, 0.10400678962469101, 0.08706443756818771, 0.08893727511167526, 0.05166801065206528, 0.08916078507900238, 0.09805269539356232, 0.1339985877275467, 0.13575035333633423, 0.17954948544502258, 0.08590542525053024, 0.15220704674720764, 0.18300719559192657, 0.16133546829223633, 0.19662006199359894, 0.1173093318939209, 0.2061564177274704, 0.23747499287128448, 0.1936083436012268, 0.23048058152198792, 0.21474304795265198, 0.2982833683490753, 0.26813626289367676, 0.2042975127696991, 0.2518289387226105, 0.2465953826904297, 0.22437863051891327, 0.2875966727733612, 0.30745264887809753, 0.32053738832473755, 0.32694628834724426, 0.3336644768714905, 0.32207363843917847, 0.32204902172088623, 0.32306766510009766, 0.3453139662742615, 0.345024436712265, 0.3101593255996704, 0.3469536006450653, 0.34696394205093384, 0.36387214064598083, 0.3427979052066803, 0.34728386998176575, 0.3778396248817444, 0.383676141500473, 0.39055830240249634, 0.3714418411254883, 0.35307180881500244, 0.3639441728591919, 0.3905763030052185, 0.3690081536769867, 0.3873412013053894, 0.3842976689338684, 0.362434446811676, 0.371942400932312, 0.362025648355484, 0.3811224400997162, 0.39462798833847046, 0.3789348006248474, 0.3782740831375122, 0.4025936722755432, 0.3895564675331116, 0.3793884217739105, 0.3741301894187927, 0.3791887164115906, 0.3664776384830475, 0.39693039655685425, 0.380288302898407, 0.4035664498806, 0.3990330100059509, 0.3840182423591614, 0.3904949426651001, 0.3886529505252838, 0.3929806649684906, 0.3917902112007141, 0.4116714596748352, 0.42485103011131287, 0.42562562227249146, 0.42176929116249084, 0.4231255054473877, 0.4288913309574127, 0.4270123541355133, 0.4375618100166321, 0.42832762002944946, 0.43267983198165894, 0.4331219792366028, 0.4394378066062927, 0.42080122232437134, 0.4333844780921936, 0.43560224771499634, 0.4390629231929779, 0.43263307213783264, 0.4321480691432953, 0.4306670129299164, 0.4380679130554199, 0.4359227120876312, 0.44348087906837463, 0.43940049409866333, 0.43878188729286194, 0.4429761469364166, 0.4428176283836365, 0.4345232844352722, 0.4489363133907318, 0.4394167363643646, 0.44123777747154236, 0.441200315952301, 0.44189658761024475, 0.4404400885105133, 0.4489862322807312, 0.44499415159225464, 0.4406994879245758, 0.4413033425807953, 0.44022250175476074, 0.4426555633544922, 0.4381003975868225, 0.44215869903564453, 0.4414980411529541, 0.4392097592353821, 0.4445573389530182, 0.44011107087135315, 0.4382382035255432, 0.44540518522262573, 0.44319644570350647, 0.4412514567375183, 0.4435059428215027, 0.4462752938270569, 0.44343891739845276, 0.4429486393928528 \ No newline at end of file diff --git a/results/resnet18_adj_lr_train_loss.txt b/results/resnet18_adj_lr_train_loss.txt deleted file mode 100644 index c6e3434..0000000 --- a/results/resnet18_adj_lr_train_loss.txt +++ /dev/null @@ -1 +0,0 @@ -38.92281723022461, 24.08129119873047, 11.1947021484375, 11.993424415588379, 31.736713409423828, 17.32699203491211, 8.824563026428223, 26.999927520751953, 9.708121299743652, 7.842012405395508, 6.768986701965332, 23.7596378326416, 2.349430561065674, 7.692448139190674, 17.949180603027344, 3.6047589778900146, 8.266084671020508, 5.708385944366455, 8.165657043457031, 10.761236190795898, 7.700714111328125, 4.463153839111328, 10.674115180969238, 6.3554368019104, 10.560248374938965, 32.324440002441406, 10.741009712219238, 7.464257717132568, 3.2464542388916016, 14.234152793884277, 5.14685583114624, 25.66840934753418, 4.689289093017578, 8.644203186035156, 3.4421374797821045, 4.3532023429870605, 4.244616508483887, 2.8336069583892822, 6.27620792388916, 8.330466270446777, 7.818049907684326, 3.316349983215332, 8.56804084777832, 7.716939926147461, 1.413529634475708, 5.43433952331543, 5.219088554382324, 11.608847618103027, 9.272421836853027, 8.5438814163208, 4.048821449279785, 5.314058780670166, 1.3057262897491455, 7.0739312171936035, 3.14042329788208, 11.203056335449219, 19.627487182617188, 6.558691501617432, 1.4619526863098145, 3.257143974304199, 5.216439723968506, 3.896716594696045, 14.655790328979492, 2.4262614250183105, 16.52430534362793, 8.200296401977539, 1.2046144008636475, 7.773534774780273, 15.518680572509766, 5.97585391998291, 4.490781784057617, 6.592682361602783, 5.29562520980835, 2.9156041145324707, 4.82822322845459, 10.712194442749023, 2.393437147140503, 1.3296043872833252, 3.3182506561279297, 2.6345055103302, 3.270324230194092, 1.1789523363113403, 6.569370269775391, 6.635044097900391, 2.47995662689209, 2.9604709148406982, 5.358194351196289, 5.063639163970947, 0.5536026954650879, 1.2974811792373657, 6.758141040802002, 0.9574751853942871, 1.282341718673706, 0.8253270387649536, 1.2937910556793213, 10.983046531677246, 0.7947837114334106, 1.5647329092025757, 0.2954350411891937, 3.509305238723755, 3.0420992374420166, 3.798631429672241, 0.6784164309501648, 2.880587100982666, 2.2108139991760254, 1.0190775394439697, 1.7458202838897705, 5.975054740905762, 17.517210006713867, 2.104043960571289, 3.1817715167999268, 2.7556333541870117, 6.130502223968506, 0.39863672852516174, 7.880806922912598, 3.82842755317688, 2.714160442352295, 2.457001209259033, 1.200125813484192, 4.833022117614746, 3.0040509700775146, 3.2866768836975098, 1.3851488828659058, 1.1090620756149292, 14.03776741027832, 3.6783969402313232, 4.054959774017334, 1.3116461038589478, 15.74782943725586, 2.2778332233428955, 1.027712345123291, 4.345073223114014, 4.939018249511719, 2.499950408935547, 3.3115134239196777 \ No newline at end of file diff --git a/results/resnet18_adj_lr_train_mAP.txt b/results/resnet18_adj_lr_train_mAP.txt deleted file mode 100644 index 33ca498..0000000 --- a/results/resnet18_adj_lr_train_mAP.txt +++ /dev/null @@ -1 +0,0 @@ -0.0, 0.002652804832905531, 0.019955307245254517, 0.04761794954538345, 0.09453745186328888, 0.11456738412380219, 0.11298270523548126, 0.11168136447668076, 0.10559029877185822, 0.1142783984541893, 0.12026573717594147, 0.08854377269744873, 0.12023426592350006, 0.1564110368490219, 0.17550742626190186, 0.16229817271232605, 0.225722074508667, 0.11239725351333618, 0.15575315058231354, 0.21738001704216003, 0.20962996780872345, 0.25158780813217163, 0.14969049394130707, 0.23776403069496155, 0.2970258295536041, 0.23225228488445282, 0.25313854217529297, 0.2856079638004303, 0.35894685983657837, 0.3233032524585724, 0.2610931992530823, 0.32029759883880615, 0.31682950258255005, 0.2857510447502136, 0.35888972878456116, 0.3748388886451721, 0.390403687953949, 0.405631959438324, 0.4135235846042633, 0.39813539385795593, 0.4250483512878418, 0.4211215376853943, 0.4610803723335266, 0.43374261260032654, 0.43145474791526794, 0.4759373068809509, 0.46040597558021545, 0.5011181235313416, 0.4655344486236572, 0.49075570702552795, 0.5098975300788879, 0.5219646692276001, 0.5285449624061584, 0.5260360240936279, 0.4973965287208557, 0.5259597897529602, 0.5485078692436218, 0.542946457862854, 0.5483752489089966, 0.5512961149215698, 0.524422287940979, 0.553176999092102, 0.5372684001922607, 0.5522960424423218, 0.5850532054901123, 0.5552413463592529, 0.5612937211990356, 0.576050877571106, 0.5731607675552368, 0.5590539574623108, 0.5671032071113586, 0.5796722173690796, 0.5556296110153198, 0.59046471118927, 0.5741134881973267, 0.6021690964698792, 0.5817486643791199, 0.5799533128738403, 0.5897449254989624, 0.5867547392845154, 0.60186368227005, 0.581072211265564, 0.6242095232009888, 0.6317014098167419, 0.6372796893119812, 0.635155200958252, 0.6410067677497864, 0.6532405614852905, 0.640597939491272, 0.6627882122993469, 0.6484183669090271, 0.6629337668418884, 0.6567127704620361, 0.6661648750305176, 0.6444762945175171, 0.6512593626976013, 0.6549975872039795, 0.6566800475120544, 0.6539733409881592, 0.6662873029708862, 0.6601952314376831, 0.6763409376144409, 0.6704860925674438, 0.6791234016418457, 0.6710315942764282, 0.6744289994239807, 0.6805962324142456, 0.6774506568908691, 0.6743086576461792, 0.6829177141189575, 0.6816824674606323, 0.6781805157661438, 0.6807029843330383, 0.6789276599884033, 0.6828973889350891, 0.6868268847465515, 0.6901055574417114, 0.6844365000724792, 0.6824177503585815, 0.6836601495742798, 0.6863035559654236, 0.6795652508735657, 0.6874918937683105, 0.6879882216453552, 0.6833459734916687, 0.6844228506088257, 0.6842241883277893, 0.6876190900802612, 0.6858288049697876, 0.687203049659729, 0.6805416345596313, 0.691207230091095, 0.6899980902671814, 0.6846206784248352, 0.6839364171028137 \ No newline at end of file diff --git a/results/resnet50_adj_lr_inference_speed.txt b/results/resnet50_adj_lr_inference_speed.txt deleted file mode 100644 index a182408..0000000 --- a/results/resnet50_adj_lr_inference_speed.txt +++ /dev/null @@ -1 +0,0 @@ -4.703891038894653, 4.718825101852417, 4.728790760040283, 4.739244222640991, 4.748927354812622, 4.758567810058594, 4.768955945968628, 4.77834939956665, 4.7880308628082275, 4.797618627548218, 4.807054281234741, 4.816635847091675, 4.826384544372559, 4.835944414138794, 4.845773220062256, 4.855835199356079, 4.86539363861084, 4.8751420974731445, 4.885186672210693, 4.8949127197265625, 4.904592037200928, 4.914272785186768, 4.924379348754883, 4.935230731964111, 4.944804430007935, 4.954261779785156, 4.964260816574097, 4.973605394363403, 4.983557462692261, 4.993881464004517, 5.003226280212402, 5.0132222175598145, 5.022738933563232, 5.032599925994873, 5.044496297836304, 5.054326772689819, 5.0641090869903564, 5.073861598968506, 5.083657503128052, 5.094132423400879, 5.103887319564819, 5.113467216491699, 5.124826431274414, 5.13455057144165, 5.14415979385376, 5.154041528701782, 5.163592100143433, 5.173285961151123, 5.183115005493164, 5.193172454833984, 5.203633785247803, 5.21333646774292, 5.222877025604248, 5.23288893699646, 5.242843866348267, 5.253112554550171, 5.263425588607788, 5.273276329040527, 5.283215045928955, 5.2936201095581055, 5.303849697113037, 5.313580513000488, 5.323127031326294, 5.3327882289886475, 5.342322111129761, 5.351903915405273, 5.362256765365601, 5.371727705001831, 5.381356477737427, 5.391542911529541, 5.401019096374512, 5.41532564163208, 5.42815899848938, 5.441163063049316, 5.457231283187866, 5.4721839427948, 5.484533786773682, 5.49700403213501, 5.50943398475647, 5.526450157165527, 5.5391623973846436, 5.554944753646851, 5.566847562789917, 5.576472997665405, 5.586169719696045, 5.5960693359375, 5.605684518814087, 5.615533828735352, 5.625375032424927, 5.635004281997681, 5.6452717781066895, 5.655301332473755, 5.6652514934539795, 5.675997018814087, 5.686463356018066, 5.696374177932739, 5.705978870391846, 5.715631723403931, 5.7257301807403564, 5.735822916030884, 5.745751142501831, 5.755755662918091, 5.769510746002197, 5.779552698135376, 5.789263010025024, 5.79897928237915, 5.808844566345215, 5.8186657428741455, 5.828702926635742, 5.838059902191162, 5.847696304321289, 5.8574841022491455, 5.868187427520752, 5.878193378448486, 5.8879714012146, 5.8979198932647705, 5.907581806182861, 5.91712760925293, 5.926884174346924, 5.941537141799927, 5.951313734054565, 5.960828542709351, 5.9706504344940186, 5.980613470077515, 5.990209579467773, 5.9998767375946045, 6.009361743927002, 6.018911838531494, 6.028782367706299, 6.038314580917358, 6.0478081703186035, 6.057676076889038, 6.067536115646362, 6.077091217041016, 6.087899208068848, 6.100134611129761, 6.109816551208496, 6.1192896366119385, 6.128879547119141, 6.138316869735718, 6.147988796234131, 6.157931089401245, 6.16782283782959, 6.1774468421936035, 6.189444065093994, 6.199168682098389, 6.209014177322388, 6.218711614608765, 6.228513240814209, 6.238662481307983, 6.248363494873047, 6.258049964904785, 6.268023490905762, 6.277863025665283, 6.287405729293823, 6.29788613319397, 6.307898759841919, 6.317730665206909, 6.327641725540161, 6.337374210357666, 6.3468194007873535, 6.356889486312866, 6.3666956424713135, 6.3758156299591064, 6.3852219581604, 6.39595365524292, 6.405821323394775, 6.415983438491821, 6.426454067230225, 6.4359540939331055, 6.445583343505859, 6.4556684494018555, 6.4653074741363525, 6.47506308555603, 6.485522031784058, 6.4954657554626465, 6.505297660827637, 6.515157222747803, 6.5250067710876465, 6.534867763519287, 6.544902086257935, 6.554939031600952, 6.564934730529785, 6.575151443481445, 6.585233211517334, 6.594991207122803, 6.606288194656372, 6.6156957149505615, 6.625040769577026, 6.634900331497192, 6.6454081535339355, 6.655269622802734, 6.665077209472656, 6.674451112747192, 6.684130430221558, 6.693426609039307, 6.703667879104614, 6.713391304016113, 6.7232584953308105, 6.733070611953735, 6.746303558349609, 6.756433010101318, 6.766100168228149, 6.775378227233887, 6.7851457595825195, 6.795121669769287, 6.805492639541626, 6.815258741378784, 6.82503342628479, 6.8347437381744385, 6.845526456832886, 6.855020046234131, 6.864506959915161, 6.874267101287842, 6.884856700897217, 6.895014524459839, 6.904776334762573, 6.914435625076294, 6.926292657852173, 6.936533451080322, 6.9465248584747314, 6.956427812576294, 6.966311454772949, 6.976288795471191, 6.9860312938690186, 6.996001243591309, 7.005547523498535, 7.01469874382019, 7.024354457855225, 7.034219026565552, 7.04390287399292, 7.053001165390015, 7.062552213668823, 7.071661949157715, 7.081942319869995, 7.091725826263428, 7.102180242538452, 7.111566543579102, 7.121957302093506, 7.135648488998413, 7.146878957748413, 7.15662407875061, 7.166294574737549, 7.176087856292725, 7.18578314781189, 7.195458173751831, 7.2049243450164795, 7.214693307876587, 7.224518299102783, 7.23661732673645, 7.2465174198150635, 7.256296873092651, 7.266199827194214, 7.276097297668457, 7.286405563354492, 7.296220541000366, 7.305846691131592, 7.315286874771118, 7.325054168701172, 7.3348400592803955, 7.344567537307739, 7.354235649108887, 7.3636860847473145, 7.373557090759277, 7.383280515670776, 7.392930269241333, 7.402952671051025, 7.412928581237793, 7.422529935836792, 7.432281970977783, 7.441880464553833, 7.451328277587891, 7.461423873901367, 7.471098899841309, 7.480551719665527, 7.4903175830841064, 7.500181674957275, 7.509997606277466, 7.5198283195495605, 7.529514312744141, 7.539090156555176, 7.548814535140991, 7.558611869812012, 7.567766904830933, 7.5771706104278564, 7.586592435836792, 7.596608877182007, 7.6065754890441895, 7.616340637207031, 7.6261351108551025, 7.635862350463867, 7.646168231964111, 7.655646562576294, 7.6648948192596436, 7.6750876903533936, 7.685169219970703, 7.694568872451782, 7.704566717147827, 7.7142014503479, 7.7237467765808105 \ No newline at end of file diff --git a/results/resnet50_adj_lr_test_loss.txt b/results/resnet50_adj_lr_test_loss.txt deleted file mode 100644 index 884908b..0000000 --- a/results/resnet50_adj_lr_test_loss.txt +++ /dev/null @@ -1 +0,0 @@ -23.854860305786133, 20.31869125366211, 10.371794700622559, 27.199729919433594, 23.153526306152344, 7.403091907501221, 19.437564849853516, 14.788046836853027, 10.392608642578125, 39.668235778808594, 13.861448287963867, 6.228944778442383, 408.2536926269531, 9.956294059753418, 6.273197650909424, 317.2459411621094, 5.312463283538818, 7.363752365112305, 7.725819110870361, 2.5624969005584717, 11.668654441833496, 645.41748046875, 4.162677764892578, 21.640064239501953, 6.084969997406006, 8.400716781616211, 8.63035774230957, 15.357549667358398, 3.018850564956665, 3.9596760272979736, 2.1401634216308594, 6.5734052658081055, 3.0939722061157227, 56.45844268798828, 5.470005989074707, 5.436901092529297, 3.7546591758728027, 6.442952632904053, 27.746788024902344, 8.512070655822754, 6.205816268920898, 8.3817777633667, 2.608367919921875, 15.401073455810547, 7.513028621673584, 3.9497318267822266, 7.128245830535889, 13.680871963500977, 7.881247520446777, 20.97350311279297, 7.298486709594727, 2.687188148498535, 13.118751525878906, 9.284857749938965, 9.295961380004883, 6.55356502532959, 3.2874462604522705, 8.968143463134766, 7.636997222900391, 7.636997222900391, 1.9873077869415283, 1.944502592086792, 3.4570722579956055, 9.156414031982422, 2.6411654949188232, 5.703716278076172, 10.962661743164062, 12.872247695922852, 1.3870909214019775, 2.114506959915161, 4.151496887207031, 2.346482992172241, 4.320693016052246, 12.710779190063477, 17.39889144897461, 13.241458892822266, 2.551698923110962, 2.8906197547912598, 3.9179434776306152, 6.262059211730957, 4.205040454864502, 3.4135608673095703, 4.706653594970703, 4.290155410766602, 4.586759090423584, 1.2963486909866333, 4.210206031799316, 4.470795154571533, 17.642654418945312, 3.2573461532592773, 0.7707394361495972, 6.9381256103515625, 2.7092690467834473, 10.985530853271484, 2.7502031326293945, 1.4652518033981323, 6.955197334289551, 2.0851263999938965, 2.160188674926758, 11.607686996459961, 1.8028184175491333, 2.4637961387634277, 5.815850734710693, 2.3214919567108154, 8.480628967285156, 4.288424015045166, 1.460832118988037, 0.3449077904224396, 0.7542744874954224, 2.676170825958252, 7.884337425231934, 4.163364410400391, 2.2071423530578613, 5.142892837524414, 2.441742181777954, 6.230315208435059, 4.1586408615112305, 8.051725387573242, 13.028328895568848, 14.191865921020508, 13.028328895568848, 14.191865921020508, 10.34217357635498, 2.417799472808838, 2.110429048538208, 1.9981765747070312, 3.3432955741882324, 3.9728713035583496, 9.876289367675781, 0.9092956781387329, 5.088091850280762, 0.8609206676483154, 2.226433515548706, 3.34975004196167, 3.6545050144195557 \ No newline at end of file diff --git a/results/resnet50_adj_lr_test_mAP.txt b/results/resnet50_adj_lr_test_mAP.txt deleted file mode 100644 index 4c56b9f..0000000 --- a/results/resnet50_adj_lr_test_mAP.txt +++ /dev/null @@ -1 +0,0 @@ -0.0, 0.000025942514184862375, 0.002559800399467349, 0.009182234294712543, 0.03610250726342201, 0.07057882845401764, 0.08829288929700851, 0.09175865352153778, 0.11289063841104507, 0.12860211730003357, 0.08918323367834091, 0.12492609024047852, 0.06717397272586823, 0.08201278001070023, 0.07227827608585358, 0.09741058945655823, 0.08740844577550888, 0.10846662521362305, 0.09311355650424957, 0.08892779052257538, 0.17074692249298096, 0.09628288447856903, 0.06462270021438599, 0.10615024715662003, 0.1761111319065094, 0.1368536651134491, 0.20207937061786652, 0.25150519609451294, 0.32339635491371155, 0.3221002519130707, 0.22934012115001678, 0.2695464789867401, 0.25227317214012146, 0.2974947690963745, 0.29359525442123413, 0.307912677526474, 0.2961779236793518, 0.33224350214004517, 0.36186903715133667, 0.3968415856361389, 0.3435836434364319, 0.40321287512779236, 0.3928331136703491, 0.39245691895484924, 0.40767502784729004, 0.38510769605636597, 0.40273183584213257, 0.3591286540031433, 0.37738996744155884, 0.4169842600822449, 0.44305628538131714, 0.40735024213790894, 0.4295279085636139, 0.46317124366760254, 0.431403785943985, 0.44598788022994995, 0.4424450397491455, 0.41755008697509766, 0.42980775237083435, 0.42980775237083435, 0.4391549229621887, 0.45228686928749084, 0.4415450990200043, 0.4406376779079437, 0.4283544421195984, 0.45494985580444336, 0.4364033341407776, 0.4613564610481262, 0.4656137526035309, 0.46493950486183167, 0.3859247863292694, 0.44939056038856506, 0.4460935592651367, 0.45897942781448364, 0.4456576704978943, 0.4260009229183197, 0.4510965943336487, 0.4540664553642273, 0.441395103931427, 0.40455999970436096, 0.4653272032737732, 0.4510541558265686, 0.4581846594810486, 0.4698285162448883, 0.47025370597839355, 0.4787302017211914, 0.47651347517967224, 0.47843629121780396, 0.4813505709171295, 0.480776309967041, 0.47926217317581177, 0.48067229986190796, 0.48427000641822815, 0.4779711663722992, 0.48455411195755005, 0.4880692958831787, 0.4893206059932709, 0.4871334135532379, 0.4896051287651062, 0.49220991134643555, 0.4877069890499115, 0.4983765482902527, 0.49125996232032776, 0.4985276758670807, 0.4997223913669586, 0.4911644458770752, 0.4943082332611084, 0.4875044822692871, 0.48865851759910583, 0.49948954582214355, 0.4972812533378601, 0.49322018027305603, 0.49705275893211365, 0.5053421258926392, 0.5004684925079346, 0.5023605823516846, 0.505135178565979, 0.5034533739089966, 0.501758873462677, 0.5050216913223267, 0.501758873462677, 0.5050216913223267, 0.5030959844589233, 0.5036386847496033, 0.49941486120224, 0.4953114986419678, 0.49961987137794495, 0.4969879686832428, 0.5016027092933655, 0.5042456388473511, 0.4987846910953522, 0.5018512010574341, 0.505273699760437, 0.5058155655860901, 0.49947530031204224 \ No newline at end of file diff --git a/results/resnet50_adj_lr_train_loss.txt b/results/resnet50_adj_lr_train_loss.txt deleted file mode 100644 index f4bfb9a..0000000 --- a/results/resnet50_adj_lr_train_loss.txt +++ /dev/null @@ -1 +0,0 @@ -47.303855895996094, 48.11188507080078, 19.518051147460938, 10.311565399169922, 34.44383239746094, 10.188770294189453, 19.474361419677734, 21.59210777282715, 13.971717834472656, 10.856589317321777, 27.282211303710938, 20.487308502197266, 6.40566349029541, 13.948226928710938, 10.216928482055664, 24.008663177490234, 36.267005920410156, 23.774559020996094, 9.6178560256958, 24.785778045654297, 3.63922381401062, 5.299362659454346, 22.972877502441406, 10.798018455505371, 21.797260284423828, 3.655303478240967, 19.395912170410156, 6.25339412689209, 13.303569793701172, 7.69580602645874, 4.540354251861572, 5.2934889793396, 8.534786224365234, 8.94800853729248, 6.224243640899658, 4.733727931976318, 4.042201995849609, 12.22486686706543, 10.67291259765625, 10.191057205200195, 12.110416412353516, 5.668235778808594, 6.529327392578125, 8.544411659240723, 23.159753799438477, 4.197359085083008, 4.387864112854004, 17.59990119934082, 12.7679443359375, 9.943061828613281, 4.0980610847473145, 3.5646462440490723, 5.200918197631836, 8.242549896240234, 6.153234481811523, 6.529177188873291, 7.139273166656494, 11.59366226196289, 8.384322166442871, 12.7679443359375, 11.830072402954102, 2.8771567344665527, 6.69192361831665, 1.0573575496673584, 28.886764526367188, 2.6126794815063477, 4.453433990478516, 1.1198277473449707, 0.4579012095928192, 6.814385414123535, 1.3272899389266968, 0.7311967611312866, 1.2897257804870605, 11.401375770568848, 2.3004307746887207, 1.4205992221832275, 4.915154933929443, 1.5235683917999268, 2.0440938472747803, 1.8860663175582886, 1.9255545139312744, 10.60533332824707, 0.42722514271736145, 2.9624409675598145, 10.582000732421875, 3.776681900024414, 1.9658700227737427, 1.5339264869689941, 6.954150199890137, 2.738304376602173, 9.568927764892578, 2.883700370788574, 7.752347469329834, 1.178797960281372, 6.265802383422852, 3.3034939765930176, 3.3100881576538086, 0.8943270444869995, 1.6031684875488281, 2.760525941848755, 0.725226640701294, 6.4952850341796875, 1.9571702480316162, 1.0425058603286743, 6.978090286254883, 2.8633453845977783, 18.723798751831055, 3.829789161682129, 6.627405166625977, 4.782853603363037, 2.1649668216705322, 2.3820433616638184, 7.8414459228515625, 1.9373576641082764, 1.1005094051361084, 2.5619518756866455, 1.6263840198516846, 11.511739730834961, 0.7703496813774109, 2.8448636531829834, 0.7703496813774109, 2.8448636531829834, 5.7584428787231445, 0.6394315361976624, 0.48151642084121704, 3.069077253341675, 0.47953060269355774, 2.278308629989624, 0.47236374020576477, 1.0295473337173462, 2.687638759613037, 1.9911460876464844, 5.203855514526367, 5.3218584060668945, 0.9595547318458557 \ No newline at end of file diff --git a/results/resnet50_adj_lr_train_mAP.txt b/results/resnet50_adj_lr_train_mAP.txt deleted file mode 100644 index c137f2e..0000000 --- a/results/resnet50_adj_lr_train_mAP.txt +++ /dev/null @@ -1 +0,0 @@ -0.00000000092383674044072, 0.00010208345338469371, 0.0054415445774793625, 0.013312362134456635, 0.042972564697265625, 0.09077434986829758, 0.10756953805685043, 0.12626364827156067, 0.15402258932590485, 0.16927266120910645, 0.10224691778421402, 0.15312883257865906, 0.09754586219787598, 0.08682240545749664, 0.10279130935668945, 0.13137272000312805, 0.09291482716798782, 0.1339939534664154, 0.1287754625082016, 0.11078943312168121, 0.21916289627552032, 0.1389925181865692, 0.11769640445709229, 0.13915100693702698, 0.24964186549186707, 0.19106891751289368, 0.25908753275871277, 0.30532246828079224, 0.38576602935791016, 0.38787832856178284, 0.3016720116138458, 0.3313932418823242, 0.3409216105937958, 0.36766737699508667, 0.36959487199783325, 0.3655918538570404, 0.37387022376060486, 0.38927125930786133, 0.44581446051597595, 0.46828898787498474, 0.4295724928379059, 0.49870309233665466, 0.47571688890457153, 0.4854818880558014, 0.5165983438491821, 0.49179619550704956, 0.5077184438705444, 0.4732721447944641, 0.49529972672462463, 0.5279857516288757, 0.5593532919883728, 0.5367492437362671, 0.5578475594520569, 0.5747171640396118, 0.5423150062561035, 0.5715792775154114, 0.574123203754425, 0.5530046224594116, 0.5688040256500244, 0.5688040256500244, 0.5613917112350464, 0.5933766961097717, 0.5954087376594543, 0.5771423578262329, 0.5792996287345886, 0.5915791392326355, 0.5937500596046448, 0.5973087549209595, 0.6153582334518433, 0.6181674599647522, 0.5474133491516113, 0.6139620542526245, 0.6176053285598755, 0.6197134852409363, 0.6121924519538879, 0.5874727964401245, 0.6219302415847778, 0.6230899095535278, 0.6134504675865173, 0.5756633281707764, 0.6439019441604614, 0.6272990107536316, 0.6396158337593079, 0.6489838361740112, 0.650390625, 0.6640866994857788, 0.6625329256057739, 0.6676542162895203, 0.6799588799476624, 0.6638050079345703, 0.6756966710090637, 0.6688355207443237, 0.6715778708457947, 0.6747501492500305, 0.6832321286201477, 0.6865290403366089, 0.6865335702896118, 0.683552622795105, 0.6792737245559692, 0.6838561296463013, 0.6824784278869629, 0.6972020268440247, 0.6889297366142273, 0.6969256401062012, 0.6913524270057678, 0.697281002998352, 0.6948421001434326, 0.6840397119522095, 0.6920968294143677, 0.7019596695899963, 0.6907315254211426, 0.692331075668335, 0.6934955716133118, 0.7124031186103821, 0.6956884264945984, 0.7046844959259033, 0.7112303972244263, 0.713739812374115, 0.6975728273391724, 0.7046677470207214, 0.7046677470207214, 0.703025758266449, 0.7101287245750427, 0.7001938223838806, 0.7059996128082275, 0.6966667175292969, 0.6983028054237366, 0.7035613656044006, 0.6986668109893799, 0.704979658126831, 0.694238543510437, 0.7074579000473022, 0.706805408000946, 0.7052711844444275, 0.6951751112937927 \ No newline at end of file diff --git a/results/vgg19bn_adj_lr_inference_speed.txt b/results/vgg19bn_adj_lr_inference_speed.txt deleted file mode 100644 index b516cdc..0000000 --- a/results/vgg19bn_adj_lr_inference_speed.txt +++ /dev/null @@ -1 +0,0 @@ -1.8188674449920654, 1.8231029510498047, 1.8276584148406982, 1.8318812847137451, 1.836005449295044, 1.840219497680664, 1.8447036743164062, 1.848538875579834, 1.8527719974517822, 1.8569450378417969, 1.8611106872558594, 1.8654685020446777, 1.8697841167449951, 1.8738956451416016, 1.8780810832977295, 1.882143259048462, 1.8862981796264648, 1.8904478549957275, 1.8948440551757812, 1.8992326259613037, 1.9036922454833984, 1.907959222793579, 1.912229061126709, 1.9164190292358398, 1.9204447269439697, 1.9247467517852783, 1.9295299053192139, 1.9338634014129639, 1.9386482238769531, 1.9429266452789307, 1.9472084045410156, 1.952178955078125, 1.9561872482299805, 1.9605166912078857, 1.964761734008789, 1.9690113067626953, 1.973322868347168, 1.9776341915130615, 1.9820480346679688, 1.9862825870513916, 1.9905753135681152, 1.9947304725646973, 1.9990673065185547, 2.0029115676879883, 2.007375478744507, 2.01163649559021, 2.0157806873321533, 2.0197319984436035, 2.0240793228149414, 2.0282938480377197, 2.0324087142944336, 2.0366382598876953, 2.0410375595092773, 2.045344591140747, 2.0492806434631348, 2.0535030364990234, 2.057748794555664, 2.0621371269226074, 2.0662734508514404, 2.070563554763794, 2.0748324394226074, 2.0816752910614014, 2.085862159729004, 2.089780569076538, 2.094237804412842, 2.0988059043884277, 2.1030449867248535, 2.107325553894043, 2.111187219619751, 2.115431547164917, 2.1197516918182373, 2.124044895172119, 2.1278839111328125, 2.132359266281128, 2.136646032333374, 2.140913724899292, 2.1451518535614014, 2.149501085281372, 2.153679370880127, 2.1579387187957764, 2.162142515182495, 2.166098117828369, 2.1705832481384277, 2.174684524536133, 2.1789543628692627, 2.1838860511779785, 2.1881937980651855, 2.192716360092163, 2.196942090988159, 2.20174241065979, 2.2062389850616455, 2.2101175785064697, 2.2145845890045166, 2.2187039852142334, 2.2231991291046143, 2.227374792098999, 2.23160982131958, 2.2360219955444336, 2.2399964332580566, 2.244572401046753, 2.2517459392547607, 2.256051778793335, 2.2602243423461914, 2.264774799346924, 2.268908739089966, 2.273926019668579, 2.278505325317383, 2.282912015914917, 2.287350654602051, 2.291505813598633, 2.295987367630005, 2.300130605697632, 2.303966522216797, 2.308065176010132, 2.312528610229492, 2.3167965412139893, 2.3212640285491943, 2.3254733085632324, 2.3297059535980225, 2.334120750427246, 2.3387675285339355, 2.3425405025482178, 2.346745491027832, 2.350759983062744, 2.3549458980560303, 2.359483480453491, 2.363858699798584, 2.3682661056518555, 2.3728389739990234, 2.3772802352905273, 2.381770372390747, 2.3858673572540283, 2.390024185180664, 2.395020008087158, 2.39933180809021, 2.4035751819610596, 2.4078047275543213, 2.412078619003296, 2.4161672592163086, 2.4204940795898438, 2.4246275424957275, 2.4288711547851562, 2.4331893920898438, 2.437819004058838, 2.4420411586761475, 2.4460906982421875, 2.4504854679107666, 2.454639196395874, 2.4586427211761475, 2.4632163047790527, 2.467435359954834, 2.4715964794158936, 2.475867509841919, 2.4803552627563477, 2.4845874309539795, 2.48852276802063, 2.492793321609497, 2.497288227081299, 2.5015039443969727, 2.505756378173828, 2.5098257064819336, 2.5139756202697754, 2.5188162326812744, 2.5230178833007812, 2.5273609161376953, 2.531094789505005, 2.535539150238037, 2.53983211517334, 2.5442726612091064, 2.548440933227539, 2.5523784160614014, 2.556565046310425, 2.5607686042785645, 2.5648670196533203, 2.5693116188049316, 2.5735247135162354, 2.5786380767822266, 2.5832200050354004, 2.5873465538024902, 2.591611385345459, 2.595841884613037, 2.6000640392303467, 2.6047286987304688, 2.6090383529663086, 2.613294839859009, 2.6174416542053223, 2.6221628189086914, 2.6262688636779785, 2.6304214000701904, 2.6344680786132812, 2.6383442878723145, 2.6423325538635254, 2.646214485168457, 2.6503703594207764, 2.6544840335845947, 2.6587867736816406, 2.663187026977539, 2.6674273014068604, 2.671351909637451, 2.6758530139923096, 2.6803388595581055, 2.6844539642333984, 2.6891403198242188, 2.6933958530426025, 2.6977877616882324, 2.7019875049591064, 2.7056643962860107, 2.709866523742676, 2.713662624359131, 2.7179203033447266, 2.7224068641662598, 2.7266743183135986, 2.7308125495910645, 2.735147476196289, 2.739449977874756, 2.744359254837036, 2.7485549449920654, 2.7528586387634277, 2.756788730621338, 2.7606632709503174, 2.765437364578247, 2.7696731090545654, 2.773902177810669, 2.778762102127075, 2.7833685874938965, 2.7880659103393555, 2.792320489883423, 2.796473264694214, 2.800626516342163, 2.804946184158325, 2.808835029602051, 2.8129231929779053, 2.8172073364257812, 2.8215651512145996, 2.826014757156372, 2.8302133083343506, 2.834378480911255, 2.838658332824707, 2.842772960662842, 2.8471155166625977, 2.850987672805786, 2.855271339416504, 2.859815835952759, 2.8641443252563477, 2.8684072494506836, 2.8725898265838623, 2.876539945602417, 2.8807711601257324, 2.884884834289551, 2.8897323608398438, 2.8940699100494385, 2.8982808589935303, 2.902480125427246, 2.906994104385376, 2.9115545749664307, 2.9158031940460205, 2.920610189437866, 2.9258313179016113, 2.9301302433013916, 2.9342525005340576, 2.938488721847534, 2.943061351776123, 2.9482033252716064, 2.9524435997009277, 2.9562954902648926, 2.9600203037261963, 2.964299201965332, 2.968935012817383, 2.9738147258758545, 2.978073835372925, 2.98226261138916, 2.986497640609741, 2.990748167037964, 2.994669198989868, 2.9993276596069336, 3.0034663677215576, 3.0079827308654785, 3.0122854709625244, 3.016057252883911, 3.0202486515045166, 3.024435043334961, 3.02871036529541, 3.0327579975128174, 3.037018060684204, 3.0411975383758545, 3.0459835529327393, 3.0501012802124023, 3.054502010345459, 3.0585086345672607, 3.063103437423706, 3.067274332046509, 3.0715560913085938, 3.0758938789367676, 3.0801329612731934, 3.0843193531036377, 3.0910491943359375, 3.0952439308166504, 3.0994675159454346, 3.104048013687134, 3.1084301471710205 \ No newline at end of file diff --git a/results/vgg19bn_adj_lr_test_loss.txt b/results/vgg19bn_adj_lr_test_loss.txt deleted file mode 100644 index 5f04315..0000000 --- a/results/vgg19bn_adj_lr_test_loss.txt +++ /dev/null @@ -1 +0,0 @@ -20.667448043823242, 51.49041748046875, 16.09416961669922, 21.506959915161133, 22.9069881439209, 10.703123092651367, 5.459601402282715, 3.2093141078948975, 9.23528003692627, 734.8048706054688, 5.874899864196777, 13.132003784179688, 3.0783286094665527, 7.782561302185059, 10.675488471984863, 4.744257926940918, 13.682915687561035, 6.635459899902344, 20.648448944091797, 40.581024169921875, 2.464813709259033, 281.7519226074219, 33.3673095703125, 10.575919151306152, 7.116440296173096, 10.51548957824707, 13.721210479736328, 3.3207192420959473, 9.108711242675781, 112.03436279296875, 66.17877197265625, 2.644826650619507, 6.063129425048828, 1.625471591949463, 3.4578683376312256, 9.354640007019043, 5.36652135848999, 9.940752029418945, 9.729543685913086, 2.197540760040283, 10.419400215148926, 11.67164134979248, 7.659914016723633, 3.5798888206481934, 24.518836975097656, 9.024261474609375, 3.9016036987304688, 2.771566152572632, 8.111620903015137, 8.565022468566895, 5.646344184875488, 5.719574928283691, 11.828020095825195, 7.126567840576172, 6.806572914123535, 10.749972343444824, 13.147613525390625, 13.468988418579102, 14.431451797485352, 16.86807632446289, 2.176961898803711, 5.626987457275391, 9.592805862426758, 7.885353088378906, 5.22630500793457, 14.64359188079834, 13.757631301879883, 4.24951696395874, 1.9517254829406738, 8.354917526245117, 3.096003532409668, 3.9884510040283203, 5.060224533081055, 4.226584434509277, 12.988027572631836, 12.715624809265137, 9.119558334350586, 7.615320205688477, 9.971717834472656, 1.2789459228515625, 1.764667272567749, 1.8891801834106445, 4.849733352661133, 1.3366191387176514, 4.595634937286377, 0.21051627397537231, 5.59160041809082, 1.993415355682373, 1.8119935989379883, 1.666304588317871, 2.2375402450561523, 9.680986404418945, 6.348214149475098, 3.65109920501709, 17.692840576171875, 6.641922473907471, 2.718806028366089, 8.090585708618164, 15.60386848449707, 3.9241933822631836, 18.558740615844727, 2.354501247406006, 2.8105108737945557, 9.2444429397583, 1.404412031173706, 3.84877872467041, 8.94538688659668, 1.9062316417694092, 11.966073036193848, 4.664031505584717, 16.408031463623047, 5.371913433074951, 5.214807987213135, 5.313265323638916, 8.289206504821777, 1.9874712228775024, 1.4553985595703125, 14.58333969116211, 3.5150668621063232, 3.322176933288574, 7.651589393615723, 9.881876945495605, 4.921921730041504, 2.0519704818725586, 2.993687152862549, 5.272492408752441, 4.117626190185547, 10.474433898925781, 16.143131256103516, 2.454115390777588, 9.842630386352539, 2.9023423194885254, 8.898204803466797, 0.6199935674667358, 3.770379066467285 \ No newline at end of file diff --git a/results/vgg19bn_adj_lr_test_mAP.txt b/results/vgg19bn_adj_lr_test_mAP.txt deleted file mode 100644 index 0ac0516..0000000 --- a/results/vgg19bn_adj_lr_test_mAP.txt +++ /dev/null @@ -1 +0,0 @@ -0.0, 0.0, 0.0006924167973920703, 0.00863768719136715, 0.034021954983472824, 0.07017908990383148, 0.08372783660888672, 0.07381241023540497, 0.06725111603736877, 0.06645264476537704, 0.08167534321546555, 0.06738214194774628, 0.11351549625396729, 0.08830210566520691, 0.07696739584207535, 0.11707991361618042, 0.11318270117044449, 0.08580412715673447, 0.058406103402376175, 0.14328846335411072, 0.16252835094928741, 0.16933545470237732, 0.11335106194019318, 0.10872497409582138, 0.14087998867034912, 0.20499348640441895, 0.20079413056373596, 0.1934300661087036, 0.20758584141731262, 0.22272852063179016, 0.22303971648216248, 0.1778390109539032, 0.1832890510559082, 0.23347124457359314, 0.26445871591567993, 0.2387784719467163, 0.2496403157711029, 0.24803023040294647, 0.2656542658805847, 0.2848561704158783, 0.2547113299369812, 0.16318343579769135, 0.25704461336135864, 0.2986106276512146, 0.30339378118515015, 0.24671025574207306, 0.2707834243774414, 0.31057578325271606, 0.325892835855484, 0.3185865879058838, 0.32601168751716614, 0.3079632520675659, 0.34070825576782227, 0.3309936821460724, 0.31949469447135925, 0.3401274085044861, 0.3434810936450958, 0.30070993304252625, 0.348154217004776, 0.3631330132484436, 0.3550880253314972, 0.3430750072002411, 0.3784724175930023, 0.3728453516960144, 0.37230831384658813, 0.3575172424316406, 0.35239237546920776, 0.30571720004081726, 0.347147136926651, 0.3748572766780853, 0.3720037341117859, 0.3582208752632141, 0.34830304980278015, 0.37109506130218506, 0.39490050077438354, 0.38975995779037476, 0.3625734746456146, 0.33284181356430054, 0.3761219382286072, 0.3718656003475189, 0.3447099030017853, 0.37020474672317505, 0.39899760484695435, 0.4037768840789795, 0.4055541157722473, 0.404836505651474, 0.4136623442173004, 0.42295560240745544, 0.42424139380455017, 0.4317680299282074, 0.41507792472839355, 0.4124770760536194, 0.4226151406764984, 0.4235573410987854, 0.42063969373703003, 0.426108181476593, 0.414943128824234, 0.4196416437625885, 0.4215719699859619, 0.4327559471130371, 0.43473705649375916, 0.4311734735965729, 0.42721399664878845, 0.4336417615413666, 0.43692049384117126, 0.4349435269832611, 0.43065589666366577, 0.43274345993995667, 0.4246516227722168, 0.4374712407588959, 0.4329396188259125, 0.4344078600406647, 0.4320306181907654, 0.4406489431858063, 0.4484015107154846, 0.43766212463378906, 0.4381381869316101, 0.44505977630615234, 0.44003111124038696, 0.44291847944259644, 0.44554463028907776, 0.43996700644493103, 0.4340208172798157, 0.44089943170547485, 0.4400522708892822, 0.4444557726383209, 0.44818171858787537, 0.4410504400730133, 0.44540587067604065, 0.44286108016967773, 0.43967676162719727, 0.44092288613319397, 0.4441225528717041, 0.43792158365249634, 0.44015759229660034 \ No newline at end of file diff --git a/results/vgg19bn_adj_lr_train_loss.txt b/results/vgg19bn_adj_lr_train_loss.txt deleted file mode 100644 index 8a44b82..0000000 --- a/results/vgg19bn_adj_lr_train_loss.txt +++ /dev/null @@ -1 +0,0 @@ -23.541671752929688, 45.77372741699219, 27.036279678344727, 16.01385498046875, 15.789569854736328, 13.46284294128418, 9.393022537231445, 12.842981338500977, 5.343930244445801, 16.58155059814453, 20.201642990112305, 11.25663948059082, 13.718735694885254, 12.985006332397461, 12.589219093322754, 11.187409400939941, 8.723152160644531, 7.648795127868652, 3.9192240238189697, 2.954678773880005, 34.945556640625, 14.441991806030273, 7.272005081176758, 6.858744144439697, 17.933834075927734, 10.82839298248291, 3.50545072555542, 8.724225044250488, 2.3580069541931152, 25.580272674560547, 8.301047325134277, 4.32163143157959, 12.453206062316895, 8.295135498046875, 6.07261848449707, 2.6231741905212402, 4.97162389755249, 3.944777250289917, 2.8947596549987793, 10.360274314880371, 7.037894248962402, 7.777772426605225, 11.749613761901855, 9.783723831176758, 15.27349853515625, 3.3643178939819336, 10.678741455078125, 2.811453342437744, 4.1332879066467285, 5.574734687805176, 5.2238664627075195, 2.7253451347351074, 1.9541425704956055, 3.484611988067627, 10.860893249511719, 2.858165979385376, 2.921771287918091, 2.5477051734924316, 5.852868556976318, 1.8471544981002808, 17.909395217895508, 8.804841995239258, 1.385319709777832, 3.3490052223205566, 1.7809067964553833, 6.57010555267334, 6.344254970550537, 7.487347602844238, 5.4487457275390625, 8.982704162597656, 2.4050192832946777, 1.97062087059021, 8.395865440368652, 11.44987678527832, 3.6313090324401855, 8.610279083251953, 1.7055459022521973, 3.8849470615386963, 0.9340318441390991, 6.113358497619629, 13.16845703125, 2.2056312561035156, 2.5753676891326904, 15.610864639282227, 1.1448118686676025, 7.912338733673096, 1.9266440868377686, 1.1543631553649902, 2.006835699081421, 1.738377332687378, 0.345000684261322, 2.6011524200439453, 13.892428398132324, 1.0198547840118408, 5.652731895446777, 1.0614800453186035, 3.385878562927246, 2.5861868858337402, 1.9369566440582275, 1.1579322814941406, 1.0816187858581543, 11.731109619140625, 2.5346851348876953, 2.4227352142333984, 1.9821388721466064, 6.651864051818848, 1.3302634954452515, 0.5376745462417603, 9.601583480834961, 6.2053422927856445, 5.527566909790039, 1.7832790613174438, 1.2620786428451538, 6.118307113647461, 1.3952291011810303, 1.6074141263961792, 2.0671422481536865, 0.7562646269798279, 1.48473060131073, 7.789883136749268, 1.9821901321411133, 7.333333969116211, 2.5508220195770264, 0.4439185857772827, 2.868826389312744, 1.707422137260437, 1.2220523357391357, 1.7306596040725708, 4.992526054382324, 0.6888301968574524, 4.626822471618652, 8.031421661376953, 0.904480516910553, 4.2020745277404785, 2.199287176132202 \ No newline at end of file diff --git a/results/vgg19bn_adj_lr_train_mAP.txt b/results/vgg19bn_adj_lr_train_mAP.txt deleted file mode 100644 index 3c3cd85..0000000 --- a/results/vgg19bn_adj_lr_train_mAP.txt +++ /dev/null @@ -1 +0,0 @@ -0.0, 0.0021255153696984053, 0.013555051758885384, 0.039045967161655426, 0.07910150289535522, 0.10830466449260712, 0.09404009580612183, 0.08920631557703018, 0.08247643709182739, 0.11327618360519409, 0.098722442984581, 0.13515299558639526, 0.1450389325618744, 0.10238345712423325, 0.14170417189598083, 0.13675399124622345, 0.1270924061536789, 0.07561962306499481, 0.16858765482902527, 0.1722678542137146, 0.2087654173374176, 0.1493859589099884, 0.16201485693454742, 0.1976672261953354, 0.2603408694267273, 0.2505156993865967, 0.24480870366096497, 0.2666105329990387, 0.2860676646232605, 0.29088670015335083, 0.2256234884262085, 0.23743900656700134, 0.3112100064754486, 0.34439557790756226, 0.3277972340583801, 0.3242906630039215, 0.3213273286819458, 0.3461706340312958, 0.3682166635990143, 0.35386377573013306, 0.19344930350780487, 0.3288901150226593, 0.37180015444755554, 0.3854237198829651, 0.3229636251926422, 0.3438164293766022, 0.4122629165649414, 0.43770724534988403, 0.44821348786354065, 0.4463328421115875, 0.4171711802482605, 0.4514738917350769, 0.44677382707595825, 0.4459742605686188, 0.4735493063926697, 0.4784697890281677, 0.48547548055648804, 0.44270458817481995, 0.4947524964809418, 0.5079933404922485, 0.5194647312164307, 0.5177748203277588, 0.5394793748855591, 0.5243459939956665, 0.5368514657020569, 0.5239453315734863, 0.5294268131256104, 0.4274216294288635, 0.5180133581161499, 0.5470656752586365, 0.5399162173271179, 0.5240228176116943, 0.5211723446846008, 0.551478385925293, 0.5871893763542175, 0.5829021334648132, 0.5705693364143372, 0.5044311285018921, 0.5500603914260864, 0.5747069716453552, 0.5214389562606812, 0.5630577206611633, 0.5842095613479614, 0.6099362969398499, 0.6065754890441895, 0.5955883860588074, 0.6230202913284302, 0.6217117309570312, 0.6304068565368652, 0.6441178917884827, 0.6225563883781433, 0.6267367601394653, 0.6360465288162231, 0.6468465328216553, 0.6442972421646118, 0.640893280506134, 0.6349192261695862, 0.6118223667144775, 0.633533775806427, 0.6465684771537781, 0.6513093113899231, 0.6498139500617981, 0.6488038897514343, 0.658221960067749, 0.6710504293441772, 0.6576849222183228, 0.6574691534042358, 0.6582821607589722, 0.646359384059906, 0.6711291074752808, 0.6557649970054626, 0.6586548686027527, 0.6552547216415405, 0.6521798372268677, 0.6650015711784363, 0.6551448106765747, 0.6675872206687927, 0.6746946573257446, 0.6679291129112244, 0.6688349843025208, 0.6660500168800354, 0.6621698141098022, 0.6575433015823364, 0.6730473637580872, 0.665543794631958, 0.6613012552261353, 0.6755402088165283, 0.66917884349823, 0.6756131649017334, 0.6755726933479309, 0.6694204211235046, 0.6671804189682007, 0.6671380400657654, 0.6599788665771484, 0.6612229347229004 \ No newline at end of file diff --git a/application/__init__.py b/src/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from application/__init__.py rename to src/__init__.py diff --git a/loss/__init__.py b/src/application/__init__.py similarity index 100% rename from loss/__init__.py rename to src/application/__init__.py diff --git a/application/yolov1_watches_you.py b/src/application/yolov1_watches_you.py similarity index 93% rename from application/yolov1_watches_you.py rename to src/application/yolov1_watches_you.py index 16043a2..9322664 100644 --- a/application/yolov1_watches_you.py +++ b/src/application/yolov1_watches_you.py @@ -14,15 +14,15 @@ from utils.yolov1_utils import non_max_suppression, cellboxes_to_boxes, get_bboxes import torchvision.transforms as T import torchvision.transforms.functional as TF -from models.yolov1net_darknet import YoloV1Net -from models.yolov1net_vgg19bn import YoloV1_Vgg19bn -from models.yolov1net_resnet18 import YoloV1_Resnet18 -from models.yolov1net_resnet50 import YoloV1_Resnet50 -from models.tiny_yolov1net import Tiny_YoloV1 -from models.tiny_yolov1net_mobilenetv3_large import Tiny_YoloV1_MobileNetV3_Large -from models.tiny_yolov1net_mobilenetv3_small import Tiny_YoloV1_MobileNetV3_Small -from models.tiny_yolov1net_squeezenet import Tiny_YoloV1_SqueezeNet -from utils.custom_transform import draw_bounding_box +from src.models.yolov1net_darknet import YoloV1Net +from src.models.yolov1net_vgg19bn import YoloV1_Vgg19bn +from src.models.yolov1net_resnet18 import YoloV1_Resnet18 +from src.models.yolov1net_resnet50 import YoloV1_Resnet50 +from src.models.tiny_yolov1net import Tiny_YoloV1 +from src.models.tiny_yolov1net_mobilenetv3_large import Tiny_YoloV1_MobileNetV3_Large +from src.models.tiny_yolov1net_mobilenetv3_small import Tiny_YoloV1_MobileNetV3_Small +from src.models.tiny_yolov1net_squeezenet import Tiny_YoloV1_SqueezeNet +from src.utils.custom_transform import draw_bounding_box torch.set_num_threads(4) diff --git a/application/yolov1_watches_youtube.py b/src/application/yolov1_watches_youtube.py similarity index 94% rename from application/yolov1_watches_youtube.py rename to src/application/yolov1_watches_youtube.py index e373161..9b0bead 100755 --- a/application/yolov1_watches_youtube.py +++ b/src/application/yolov1_watches_youtube.py @@ -13,12 +13,12 @@ from utils.yolov1_utils import non_max_suppression, cellboxes_to_boxes, get_bboxes import torchvision.transforms as T import torchvision.transforms.functional as TF -from models.yolov1net_darknet import YoloV1Net -from models.yolov1net_vgg19bn import YoloV1_Vgg19bn -from models.yolov1net_resnet18 import YoloV1_Resnet18 -from models.yolov1net_resnet50 import YoloV1_Resnet50 +from src.models.yolov1net_darknet import YoloV1Net +from src.models.yolov1net_vgg19bn import YoloV1_Vgg19bn +from src.models.yolov1net_resnet18 import YoloV1_Resnet18 +from src.models.yolov1net_resnet50 import YoloV1_Resnet50 import matplotlib.pyplot as plt -from utils.custom_transform import draw_bounding_box +from src.utils.custom_transform import draw_bounding_box transform = T.Compose([T.ToTensor()]) weight_decay = 0.0005 diff --git a/train/__init__.py b/train/__init__.py deleted file mode 100755 index 30d7a43..0000000 --- a/train/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .train import utils \ No newline at end of file diff --git a/train/train_darknet.py b/train/train_darknet.py deleted file mode 100755 index 38c7a0a..0000000 --- a/train/train_darknet.py +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Fri Apr 29 13:27:34 2022 - -@author: sen -""" -import torch -import torch.nn as nn -import torchvision.transforms as T -import torch.optim as optim -from torch.utils.data import DataLoader -from torchvision.datasets import ImageFolder -from models.darknet import DarkNet -from utils.darknet_utils import top1accuracy, top5accuracy -from numpy import genfromtxt -import math - -lr = 0.0003 -device = "cuda" if torch.cuda.is_available() else "cpu" -batch_size = 128 -weight_decay = 0.0005 -epochs = 250 -num_workers = 2 -pin_memory = True -continue_training = False -path_cpt_file = 'cpts/darknet.cpt' -path_train_data = 'data/ILSVRC2012_img_train' -path_val_data = 'data/ILSVRC2012_img_val' - -class Compose(object): - def __init__(self, transforms): - self.transforms = transforms - - def __call__(self, img): - for t in self.transforms: - img = t(img) - return img - -def step_wise_lr_schedule(optimizer, epoch): - """Sets the learning rate to the initial LR decayed by 10 every 30 epochs""" - lr = lr * (0.1 ** (epoch // 30)) - for param_group in optimizer.param_groups: - param_group['lr'] = lr - - # TensorBoard - writer.add_scalar('lr', lr, epoch) - -train_transform = Compose([T.Resize((244, 244)), - #T.RandomResizedCrop((224, 224)), - T.ColorJitter(brightness=[0, 0.75], - saturation=[0, 0.75], - hue = [0, 0.1]), - T.RandomHorizontalFlip(), - T.ToTensor(), - T.Normalize(mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) - ]) - -val_transform = Compose([T.Resize((244, 244)), - #T.CenterCrop((224, 224)), - T.ToTensor(), - T.Normalize(mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) - ]) - -def train (train_loader, model, optimizer, loss_f): - loop = tqdm(train_loader, leave = True) - model.train() - for batch_idx, (x, y) in enumerate(loop): - x, y = x.to(device), y.to(device) - out = model(x) - pred_class = torch.argmax(out, dim = 1) - top1_acc = top1accuracy(out, y, batch_size) - top5_acc = top5accuracy(out, y, batch_size) - del x - loss_val = loss_f(out, y) - del y - del out - optimizer.zero_grad() - loss_val.backward() - optimizer.step() - # update progress bar - loop.set_postfix(loss = loss_val.item()) - return (float(loss_val.item()), top1_acc, top5_acc) - -def test(test_loader, model, loss_f): - loop = tqdm(test_loader, leave = True) - model.eval() - with torch.no_grad(): - for batch_idx, (x, y) in enumerate(loop): - x, y = x.to(device), y.to(device) - out = model(x) - top1_acc = top1accuracy(out, y, batch_size) - top5_acc = top5accuracy(out, y, batch_size) - del x - test_loss_val = loss_f(out, y) - del y - del out - # update progress bar - loop.set_postfix(loss = test_loss_val.item()) - return(float(test_loss_val), top1_acc, top5_acc) - -def main(): - save_model = True - model = DarkNet().to(device) - - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - loss_f = nn.CrossEntropyLoss() - train_data = ImageFolder(path_train_data, transform = train_transform) - - train_loader = DataLoader(train_data, shuffle = True, batch_size = batch_size, - num_workers = num_workers, pin_memory=True) - - val_data = ImageFolder(path_val_data, transform = val_transform) - val_loader = DataLoader(val_data, shuffle = True, batch_size = batch_size, - num_workers = num_workers, pin_memory=True) - - # scheduler = optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.94) - scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=4, - T_mult=2, - eta_min=0.00001, - last_epoch=-1) - - train_loss_lst = [] - val_loss_lst = [] - train_top1_acc_lst = [] - train_top5_acc_lst = [] - val_top1_acc_lst = [] - val_top5_acc_lst = [] - last_epoch = 0 - if (continue_training == True): - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - scheduler.load_state_dict(checkpoint['scheduler_state_dict']) - - last_epoch = checkpoint['epoch'] - print(f"Checkpoint from epoch:{last_epoch} successfully loaded.") - train_loss_lst = list(genfromtxt("results/darknet_trainloss.txt", delimiter=',')) - val_loss_lst = list(genfromtxt("results/darknet_valloss.txt", delimiter=',')) - train_top1_acc_lst = list(genfromtxt("results/darknet_traintop1acc.txt", delimiter=',')) - train_top5_acc_lst = list(genfromtxt("results/darknet_traintop5acc.txt", delimiter=',')) - val_top1_acc_lst = list(genfromtxt("results/darknet_valtop1acc.txt", delimiter=',')) - val_top5_acc_lst = list(genfromtxt("results/darknet_valtop5acc.txt", delimiter=',')) - - - for epoch in range(epochs - last_epoch): - torch.cuda.empty_cache() - train_loss, train_top1_acc, train_top5_acc = train(train_loader, model, optimizer, loss_f) - train_loss_lst.append(train_loss) - train_top1_acc_lst.append(train_top1_acc) - train_top5_acc_lst.append(train_top5_acc) - - val_loss, val_top1_acc, val_top5_acc = test(val_loader, model, loss_f) - val_loss_lst.append(val_loss) - val_top1_acc_lst.append(val_top1_acc) - val_top5_acc_lst.append(val_top5_acc) - print(f"Learning Rate:", optimizer.param_groups[0]["lr"]) - print(f"Epoch:{epoch+last_epoch} Train[Loss:{train_loss} Top-1-Accuracy:{train_top1_acc} Top-5-Accuracy:{train_top5_acc}]") - print(f"Epoch:{epoch+last_epoch} Test[Loss:{val_loss} Top-1-Accuracy:{val_top1_acc} Top-5-Accuracy:{val_top5_acc}]") - - scheduler.step() - #step_wise_lr_schedule(optimizer, epoch + last_epoch) - - if save_model == True and (epoch % 10) == 0: - torch.save({ - 'epoch': epoch+last_epoch, - 'model_state_dict': model.state_dict(), - 'optimizer_state_dict': optimizer.state_dict(), - 'scheduler_state_dict': scheduler.state_dict() - }, path_cpt_file) - print(f"Checkpoint at {epoch+last_epoch} stored") - with open('results/darknet_trainloss.txt','w') as values: - values.write(str(train_loss_lst)) - with open('results/darknet_traintop1acc.txt','w') as values: - values.write(str(train_top1_acc_lst)) - with open('results/darknet_traintop5acc.txt','w') as values: - values.write(str(train_top5_acc_lst)) - with open('results/darknet_valloss.txt','w') as values: - values.write(str(val_loss_lst)) - with open('results/darknet_valtop1acc.txt','w') as values: - values.write(str(val_top1_acc_lst)) - with open('results/darknet_valtop5acc.txt','w') as values: - values.write(str(val_top5_acc_lst)) - - if ((save_model == True and (val_top5_acc_lst[-1] >= 0.88)) or (save_model == True and (epoch+last_epoch == epochs))): - torch.save({ - 'epoch': epoch+last_epoch, - 'model_state_dict': model.state_dict(), - 'optimizer_state_dict': optimizer.state_dict(), - 'scheduler': scheduler.state_dict() - }, path_cpt_file) - save_model = False - print(f"Stopping condition top 5 accuracy or max epoch reached.") - print(f"Model has been stored.") - with open('results/darknet_trainloss.txt','w') as values: - values.write(str(train_loss_lst)) - with open('results/darknet_top1acc.txt','w') as values: - values.write(str(train_top1_acc_lst)) - with open('results/darknet_top5acc.txt','w') as values: - values.write(str(train_top5_acc_lst)) - with open('results/darknet_testloss.txt','w') as values: - values.write(str(val_loss_lst)) - with open('results/darknet_valtop1acc.txt','w') as values: - values.write(str(val_top1_acc_lst)) - with open('results/darknet_valtop5acc.txt','w') as values: - values.write(str(val_top5_acc_lst)) - break - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/train/train_yolov1.py b/train/train_yolov1.py deleted file mode 100644 index 8b40e60..0000000 --- a/train/train_yolov1.py +++ /dev/null @@ -1,282 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Fri Apr 29 13:27:34 2022 - -@author: sen -""" -import torch -import torchvision.transforms as T -import torch.optim as optim -from torch.utils.data import DataLoader - -from utils.yolov1_utils import mean_average_precision as mAP -from utils.yolov1_utils import get_bboxes -from utils.dataset import VOCData -from loss.yolov1_loss import YoloV1Loss -from torch.optim import lr_scheduler -from models.yolov1net_darknet import YoloV1Net -from models.yolov1net_vgg19bn import YoloV1_Vgg19bn -from models.yolov1net_resnet18 import YoloV1_Resnet18 -from models.yolov1net_resnet50 import YoloV1_Resnet50 -from models.tiny_yolov1net_resnet18 import Tiny_YoloV1_Resnet18 - -import cv2 as cv -import numpy as np -from numpy import genfromtxt - - -device = "cuda" if torch.cuda.is_available() else "cpu" -batch_size = 4 -weight_decay = 0.0005 -epochs = 140 -nworkers = 2 -pin_memory = True - -continue_training = True - -img_dir = 'data/images/' -label_dir = 'data/labels/' -lr_sched_original = False -lr_sched_adjusted = True -use_vgg19bn_backbone = False -use_original_darknet_backbone = False -use_resnet18_backbone = False -use_resnet50_backbone = False -use_tiny_resnet18_backbone = True - -check_image_transform = False -save_model = True - -model_names = ['vgg19bn_orig_lr_', - 'vgg19bn_adj_lr_', - 'resnet18_adj_lr_', - 'resnet50_adj_lr_', - 'tiny_resnet18_adj_lr_'] - -if lr_sched_original == True and use_vgg19bn_backbone == True: - lr = 0.001 - current_model = model_names[0] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif lr_sched_adjusted == True and use_vgg19bn_backbone == True: - lr = 0.00001 - current_model = model_names[1] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif lr_sched_adjusted == True and use_resnet18_backbone == True: - lr = 0.00001 - current_model = model_names[2] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif lr_sched_adjusted == True and use_resnet50_backbone == True: - lr = 0.00001 - current_model = model_names[3] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif lr_sched_adjusted == True and use_tiny_resnet18_backbone == True: - lr = 0.00001 - current_model = model_names[4] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' - - -class Compose(object): - def __init__(self, transforms): - self.transforms = transforms - - def __call__(self, img, bboxes): - for t in self.transforms: - img, bboxes = t(img), bboxes - return img, bboxes - -train_transform = Compose([T.Resize((448, 448)), - T.ColorJitter(brightness=[0,1.5], saturation=[0,1.5]), - T.ToTensor()]) - -test_transform = Compose([T.Resize((448, 448)), - T.ToTensor()]) - -def train (train_loader, model, optimizer, loss_f): - """ - Input: train loader (torch loader), model (torch model), optimizer (torch optimizer) - loss function (torch custom yolov1 loss). - Output: loss (torch float). - """ - # Gradient accumulation parameter: perform gradient accumulation over 16 - # batches - accum_iter = 16 - model.train() - - for batch_idx, (x, y) in enumerate(train_loader): - x, y = x.to(device), y.to(device) - x_cpu = x.to("cpu") - - with torch.set_grad_enabled(True): - out = model(x) - del x - loss_val = loss_f(out, y) - # Maybe we need to divide loss by accum_iter. I however doubt this - # since loss is computed within each batch, so this correction is - # not needed. - loss_val = loss_val - del y - del out - - loss_val.backward() - - if ((batch_idx + 1) % accum_iter == 0) or (batch_idx + 1 == len(train_loader)): - optimizer.step() - optimizer.zero_grad() - - return (float(loss_val.item())) - -def test (test_loader, model, loss_f): - """ - Input: test loader (torch loader), model (torch model), loss function - (torch custom yolov1 loss). - Output: test loss (torch float). - """ - model.eval() - with torch.no_grad(): - for batch_idx, (x, y) in enumerate(test_loader): - x, y = x.to(device), y.to(device) - out = model(x) - del x - test_loss_val = loss_f(out, y) - del y - del out - - return(float(test_loss_val)) - -def main(): - - if use_original_darknet_backbone == True: - model = YoloV1Net(S = 7, B = 2, C = 20).to(device) - print("Untrained darknet network initalized as a backbone.") - print("Note: This is the original backbone from the YoloV1 paper. PyTorch weights are not available.") - print("This backbone requieres pre-training on ImageNet to obtain compareable performance to other backbones.") - - elif use_vgg19bn_backbone == True: - model = YoloV1_Vgg19bn(S = 7, B = 2, C = 20).to(device) - print("Petrained vgg 19 network with batch normalization initalized as a backbone.") - - elif use_resnet18_backbone == True: - model = YoloV1_Resnet18(S = 7, B = 2, C = 20).to(device) - print("Petrained resnet 18 network initalized as a backbone.") - - elif use_resnet50_backbone == True: - model = YoloV1_Resnet50(S = 7, B = 2, C = 20).to(device) - print("Petrained resnet 50 network initalized as a backbone.") - - elif use_tiny_resnet18_backbone == True: - model = Tiny_YoloV1_Resnet18(S = 7, B = 2, C = 20).to(device) - print("Petrained tiny resnet 18 yolo network initalized as a backbone.") - - else: - print("No backbone was specified. Please check the boolean flags in train_yolov1.py and set the flag for supported backbones to True.") - - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - loss_f = YoloV1Loss() - - train_loss_lst = [] - train_mAP_lst = [] - test_mAP_lst = [] - test_loss_lst = [] - last_epoch = 0 - - if continue_training == True: - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - last_epoch = checkpoint['epoch'] - print(f"Checkpoint from epoch:{last_epoch + 1} successfully loaded.") - train_loss_lst = list(genfromtxt(f"results/{current_model}train_loss.txt", delimiter=',')) - train_mAP_lst = list(genfromtxt(f"results/{current_model}train_mAP.txt", delimiter=',')) - test_loss_lst = list(genfromtxt(f"results/{current_model}test_loss.txt", delimiter=',')) - test_mAP_lst = list(genfromtxt(f"results/{current_model}test_mAP.txt", delimiter=',')) - - - train_dataset = VOCData(csv_file = 'data/train.csv', - img_dir = img_dir, label_dir = label_dir, - transform = train_transform, transform_scale_translate = True) - - test_dataset = VOCData(csv_file = 'data/test.csv', - img_dir = img_dir, label_dir = label_dir, - transform = test_transform, transform_scale_translate = False) - - train_loader = DataLoader(dataset = train_dataset, batch_size = batch_size, - num_workers = nworkers, shuffle = True) - - test_loader = DataLoader(dataset = test_dataset, batch_size = batch_size, - num_workers = nworkers, shuffle = True) - - for epoch in range(epochs - last_epoch): - torch.cuda.empty_cache() - # learning rate scheduler - # 1. something like the orginal learning rate from the YoloV1 paper - # results are terrible - if lr_sched_original == True: - for g in optimizer.param_groups: - # 1. linear increase from 0.001 (10^-3) to 0.01 (10^-2) over 5 epochs - if epoch + last_epoch > 0 and epoch + last_epoch <= 5: - g['lr'] = 0.001 + 0.0018 * epoch - # train at 0.01 for 75 epochs - if epoch + last_epoch <=80 and epoch + last_epoch > 5: - g['lr'] = 0.01 - # train at 0.001 for 30 epochs - if epoch + last_epoch <= 110 and epoch + last_epoch > 80: - g['lr'] = 0.001 - # continue training until done - if epoch + last_epoch > 110: - g['lr'] = 0.00001 - - if lr_sched_adjusted == True: - for g in optimizer.param_groups: - # 1. linear increase from 0.00001 to 0.0001 over 5 epochs - if epoch + last_epoch > 0 and epoch + last_epoch <= 5: - g['lr'] = 0.00001 +(0.00009/5) * (epoch + last_epoch) - # train at 0.0001 for 75 epochs - if epoch + last_epoch <=80 and epoch + last_epoch > 5: - g['lr'] = 0.0001 - # train at 0.00001 for 30 epochs - if epoch + last_epoch <= 110 and epoch + last_epoch > 80: - g['lr'] = 0.00001 - # train until done - if epoch + last_epoch > 110: - g['lr'] = 0.000001 - - - # for training data - pred_bbox, target_bbox = get_bboxes(train_loader, model, iou_threshold = 0.5, - threshold = 0.4) - - test_pred_bbox, test_target_bbox = get_bboxes(test_loader, model, iou_threshold = 0.5, - threshold = 0.4) - - # store mAP and average mAP - train_mAP_val = mAP(pred_bbox, target_bbox, iou_threshold = 0.5, boxformat="midpoints") - test_mAP_val = mAP(test_pred_bbox, test_target_bbox, iou_threshold = 0.5, boxformat="midpoints") - train_mAP_lst.append(train_mAP_val.item()) - test_mAP_lst.append(test_mAP_val.item()) - train_loss_value = train(train_loader, model, optimizer, loss_f) - train_loss_lst.append(train_loss_value) - test_loss_value = test(test_loader, model, loss_f) - test_loss_lst.append(test_loss_value) - print(f"Learning Rate:", optimizer.param_groups[0]["lr"]) - print(f"Epoch:{epoch + last_epoch + 1 } Train[Loss:{train_loss_value} mAP:{train_mAP_val}] Test[Loss:{test_loss_value} mAP:{test_mAP_val}]") - - if save_model == True and ( (epoch + last_epoch + 1 ) % 5) == 0 or epoch + last_epoch == epochs - 1 : - torch.save({ - 'epoch': epoch + last_epoch, - 'model_state_dict': model.state_dict(), - 'optimizer_state_dict': optimizer.state_dict() - }, path_cpt_file) - print(f"Checkpoint at {epoch + last_epoch + 1} stored") - with open(f'results/{current_model}train_loss.txt','w') as values: - values.write(str(train_loss_lst)) - with open(f'results/{current_model}train_mAP.txt','w') as values: - values.write(str(train_mAP_lst)) - with open(f'results/{current_model}test_loss.txt','w') as values: - values.write(str(test_loss_lst)) - with open(f'results/{current_model}test_mAP.txt','w') as values: - values.write(str(test_mAP_lst)) - - -if __name__ == "__main__": - main() diff --git a/utils/.DS_Store b/utils/.DS_Store deleted file mode 100644 index bfac1ed..0000000 Binary files a/utils/.DS_Store and /dev/null differ diff --git a/utils/__init__.py b/utils/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/utils/__pycache__/__init__.cpython-37.pyc b/utils/__pycache__/__init__.cpython-37.pyc deleted file mode 100755 index ed67799..0000000 Binary files a/utils/__pycache__/__init__.cpython-37.pyc and /dev/null differ diff --git a/utils/__pycache__/custom_transform.cpython-37.pyc b/utils/__pycache__/custom_transform.cpython-37.pyc deleted file mode 100755 index 2a21a3f..0000000 Binary files a/utils/__pycache__/custom_transform.cpython-37.pyc and /dev/null differ diff --git a/utils/__pycache__/yolov1_utils.cpython-37.pyc b/utils/__pycache__/yolov1_utils.cpython-37.pyc deleted file mode 100755 index 17b4029..0000000 Binary files a/utils/__pycache__/yolov1_utils.cpython-37.pyc and /dev/null differ diff --git a/utils/custom_transform.py b/utils/custom_transform.py deleted file mode 100755 index 00f818e..0000000 --- a/utils/custom_transform.py +++ /dev/null @@ -1,192 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Thu Aug 11 12:31:32 2022 - -@author: deniz -""" -import cv2 as cv -import numpy as np -import matplotlib.pyplot as plt -from PIL import Image - -def scale_translate(image, factor = 20): - """ - Input: img (path to image). - scale_img (boolean) determining wheter to scale the image. - translate (boolean) determining wheter to translate the image. - factoor (int) how much to translate and/or scale the image with - respect to the images original size. Default 20 is 20 %. - Output: transformed image. - """ - image = cv.cvtColor(np.array(image), cv.COLOR_RGB2BGR) - height, width = image.shape[:2] - - # Scaling variables - x_up_bound = width - x_low_bound = width - (width / 100 * factor) - x_scale_to = np.random.randint(low = x_low_bound, high = x_up_bound) - - y_up_bound = height - y_low_bound = height - (height / 100 * factor) - y_scale_to = np.random.randint(low = y_low_bound, high = y_up_bound) - - x_ratio_percentage = x_scale_to / width * 100 - y_ratio_percentage = y_scale_to / height * 100 - - # Translation variables - x_upper_bound = float(width / 100 * factor) - x_lower_bound = float(width / 100 * factor) * -1 - y_upper_bound = float(height / 100 * factor) - y_lower_bound = float(height / 100 * factor) * -1 - - # Uniform vals to translate into x coord t_x and y coord t_y - t_x = np.random.uniform(low = x_lower_bound, high = x_upper_bound) - t_y = np.random.uniform(low = y_lower_bound, high = y_upper_bound) - - # Translation matrix T - T = np.float32([[1, 0, t_x], [0, 1, t_y]]) - - # Scale image - scaled_img = cv.resize(image, (x_scale_to, y_scale_to), interpolation = cv.INTER_CUBIC) - height_scaled, width_scaled = scaled_img.shape[:2] - blankimg = np.zeros(shape=[height, width, 3], dtype=np.uint8) - height_blank, width_blank = blankimg.shape[:2] - yoff = round((height_blank - height_scaled) / 2) - xoff = round((width_blank - width_scaled) / 2) - result = blankimg.copy() - result[yoff:yoff + height_scaled, xoff:xoff + width_scaled] = scaled_img - scaled_img = result - - # Translate image after performing scaling - img_scale_trans = cv.warpAffine(scaled_img, T, (width, height)) - # Convert from opencv format to pil - # Opencv uses brg, pil uses rgb: convert brg to rgb - img_scale_trans = cv.cvtColor(img_scale_trans, cv.COLOR_BGR2RGB) - img_scale_trans = Image.fromarray(img_scale_trans) - - transform_vals = np.array([[int(height), int(width)], - [t_x, t_y], - [xoff, yoff], - [x_ratio_percentage, - y_ratio_percentage]]) - - return img_scale_trans, transform_vals - -def draw_bounding_box(image, bounding_boxes, test = False): - """ - Input: PIL image and bounding boxes (as list). - Output: Image with drawn bounding boxes. - """ - image = np.ascontiguousarray(image, dtype = np.uint8) - colors = [[147,69,52], # aeroplane - [29,178,255], # bicycle - [200,149,255], # bird - [151,157, 255], # boat - [255,115,100], # bottle - [134,219,61], # bus - [199,55,255], # car - [49,210,207], # cat - [187,212, 0], # chair - [52,147,26], # cow - [236,24,0], # diningtable - [168,153,44], # dog - [56,56,255], # horse - [10,249,72], # motorbike - [255,194, 0], # person - [255,56,132], # plant - [133,0,82], # sheep - [255,56,203], # sofa - [31 ,112,255], # train - [23,204,146]] # tvmonitor - - class_names = ["aeroplane","bicycle","bird","boat","bottle","bus","car", - "cat","chair","cow","diningtable","dog","horse","motorbike","person", - "pottedplant","sheep","sofa","train","tvmonitor"] - - # Extract transform_vals - for i in range(len(bounding_boxes)): - if test == True: - height, width = image.shape[:2] - - class_pred = int(bounding_boxes[i][0]) - certainty = bounding_boxes[i][1] - bounding_box = bounding_boxes[i][2:] - - # Note: width and heigh indexes are switches, somewhere, these are switched so - # we correct for the switch by switching - bounding_box[2], bounding_box[3] = bounding_box[3], bounding_box[2] - assert len(bounding_box) == 4, "Bounding box prediction exceed x, y ,w, h." - # Extract x, midpoint, y midpoint, w width and h height - x = bounding_box[0] - y = bounding_box[1] - w = bounding_box[2] - h = bounding_box[3] - - else: - height, width = image.shape[:2] - class_pred = int(bounding_boxes[i][0]) - bounding_box = bounding_boxes[i][1:] - - assert len(bounding_box) == 4, "Bounding box prediction exceed x, y ,w, h." - # Extract x midpoint, y midpoint, w width and h height - x = bounding_box[0] - y = bounding_box[1] - w = bounding_box[2] - h = bounding_box[3] - - l = int((x - w / 2) * width) - r = int((x + w / 2) * width) - t = int((y - h / 2) * height) - b = int((y + h / 2) * height) - - if l < 0: - l = 0 - if r > width - 1: - r = width - 1 - if t < 0: - t = 0 - if b > height - 1: - b = height - 1 - - image = cv.rectangle(image, (l, t), (int(r), int(b)), colors[class_pred], 3) - (txt_width, txt_height), _ = cv.getTextSize(class_names[class_pred], cv.FONT_HERSHEY_TRIPLEX, 0.6, 2) - - if t < 20: - image = cv.rectangle(image, (l-2, t + 15), (l + txt_width, t), colors[class_pred], -1) - image = cv.putText(image, class_names[class_pred], (l, t+12), - cv.FONT_HERSHEY_TRIPLEX, 0.5, [255, 255, 255], 1) - else: - image = cv.rectangle(image, (l-2, t - 15), (l + txt_width, t), colors[class_pred], -1) - image = cv.putText(image, class_names[class_pred], (l, t-3), - cv.FONT_HERSHEY_TRIPLEX, 0.5, [255, 255, 255], 1) - - return image - - -def scale_translate_bounding_box(bounding_boxes, trans_vals): - """ - Input: A list where each element is a list of the original (non-transformed) - bounding box information of length 5 ( x, y ,w, h.). - Output: A list where each element is a list of scaled and translated - bounding box information of length 5 ( x, y ,w, h.). - """ - t_x, t_y = trans_vals[1] - xoff, yoff = trans_vals[2] - x_ratio_percentage, y_ratio_percentage = trans_vals[3] - transformed_bounding_boxes = bounding_boxes.copy() - for i in range(len(bounding_boxes)): - height, width = trans_vals[0] - # Extract bounding box information (x, y ,w, h.) - bounding_box = bounding_boxes[i][1:] - - assert len(bounding_box) == 4, "Bounding box prediction exceed x, y ,w, h." - # Extract x midpoint, y midpoint, w width and h height and transform - # corresponding to the image transformation - x = np.clip( ((bounding_box[0] / 100) * x_ratio_percentage) + (xoff / width) + (t_x / width), 0, 0.999) - y = np.clip( ((bounding_box[1] / 100) * y_ratio_percentage) + (yoff / height) + (t_y / height), 0, 0.999) - w = np.clip( ((bounding_box[2] / 100) * x_ratio_percentage), 0, 0.999) - h = np.clip( ((bounding_box[3] / 100) * y_ratio_percentage), 0, 0.999) - - transformed_bounding_boxes[i][1:] = [x, y ,w ,h] - - return transformed_bounding_boxes \ No newline at end of file diff --git a/utils/darknet_utils.py b/utils/darknet_utils.py deleted file mode 100755 index 5ac45b1..0000000 --- a/utils/darknet_utils.py +++ /dev/null @@ -1,32 +0,0 @@ -import torch - -def top1accuracy(out, target, batch_size): - """ - Calculates top 1 accuracy. - Input: Output of class probabilities from the neural network (tensor) - and target class predictions (tensor) of shape number of classes by batch size - Output: Top 1 accuracy (float). - """ - with torch.no_grad(): - pred_class = torch.argmax(out, dim = 1) - top1_acc = float(sum(target==pred_class) / batch_size) - return top1_acc - -def top5accuracy(out, target, batch_size): - """ - Calculates top 1 accuracy. - Input: Output of class probabilities from the neural network (tensor) - of shape number of classes by batch size. - Output: Top 5 accuracy (float). - """ - with torch.no_grad(): - _, top5_class_pred = out.topk(5, 1, largest = True, sorted = True) - top5_class_pred = top5_class_pred.t() - target_reshaped = target.view(1, -1).expand_as(top5_class_pred) - correct = (top5_class_pred == target_reshaped) - ncorrect_top5 = 0 - for i in range(correct.shape[1]): - if (sum(correct[:,i]) >= 1): - ncorrect_top5 = ncorrect_top5 + 1 - top5_acc = ncorrect_top5 / batch_size - return top5_acc \ No newline at end of file diff --git a/utils/dataset.py b/utils/dataset.py deleted file mode 100755 index c550234..0000000 --- a/utils/dataset.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Wed Apr 13 13:23:33 2022 - -@author: sen -""" -import torch -import os -import pandas as pd -from PIL import Image -from utils.custom_transform import scale_translate, scale_translate_bounding_box - - -class VOCData(torch.utils.data.Dataset): - # csv file: image.jpg and labels.txt - def __init__(self, csv_file, img_dir, label_dir, S = 7, B = 2, C = 20, - transform = None, transform_scale_translate = True): - - self.annotations = pd.read_csv(csv_file) - self.img_dir = img_dir - self.label_dir = label_dir - self.transform = transform - self.S = S - self.B = B - self.C = C - self. transform_scale_translate = transform_scale_translate - - def __len__(self): - return len(self.annotations) - - def __getitem__(self, index): - # loads label txt annotation location - label_path = os.path.join(self.label_dir, self.annotations.iloc[index, 1]) - #print("Label Path Index, 1 :", label_path) - boxes = [] - with open(label_path) as f: - # for every line - for label in f.readlines(): - # class is an int and x,y width and height is a float - # converts the string class_label, x, y width, height into int and floats - class_label, x, y, width, height = [ - float(x) if float(x) != int(float(x)) else int(x) - for x in label.replace("\n", "").split()] - # append line of anotation to list of bounding box - boxes.append([class_label, x, y, width, height]) - - # loads image location - img_path = os.path.join(self.img_dir, self.annotations.iloc[index, 0]) - # open the image - - image = Image.open(img_path) - - # scale and translate image - - if self.transform_scale_translate == True: - image, transform_vals = scale_translate(image) - # scale and translate bounding boxes - boxes = scale_translate_bounding_box(boxes, transform_vals) - - # conver the boxes into a tensor - boxes = torch.tensor(boxes) - if self.transform: - # image = self.transform(image) - image, boxes = self.transform(image, boxes) - - # Convert To Cells - label_matrix = torch.zeros((self.S, self.S, self.C + 5 * self.B)) - - # iterate over each box to convert it to fit the label_matrix - # it is relative to the entire image, we want to see which cell - # this bounding box belongs to and convert it relative to that cell - for box in boxes: - # class_label, x, y, width, height = box.tolist() - class_label, x, y, height, width = box.tolist() - #print("Class label:, X:, Y:, W:, H:", class_label, x, y, width, height) - - class_label = int(class_label) - - # i,j represents the cell row and cell column - i, j = int(self.S * y), int(self.S * x) - #("Index I and J:", i,j) - x_cell, y_cell = self.S * x - j, self.S * y - i - - """ - Calculating the width and height of cell of bounding box, - relative to the cell is done by the following, with - width as the example: - - width_pixels = (width*self.image_width) - cell_pixels = (self.image_width) - - Then to find the width relative to the cell is simply: - width_pixels/cell_pixels, simplification leads to the - formulas below. - """ - width_cell, height_cell = ( - width * self.S, - height * self.S,) - - # If no object already found for specific cell i,j - # Note: This means we restrict to ONE object - # per cell! - if label_matrix[i, j, 20] == 0: - # Set that there exists an object - label_matrix[i, j, 20] = 1 - - # Box coordinates - box_coordinates = torch.tensor( - [x_cell, y_cell, width_cell, height_cell]) - - label_matrix[i, j, 21:25] = box_coordinates - - # Set one hot encoding for class_label - label_matrix[i, j, class_label] = 1 - - return image, label_matrix \ No newline at end of file diff --git a/utils/figs.py b/utils/figs.py deleted file mode 100644 index 0ff7a08..0000000 --- a/utils/figs.py +++ /dev/null @@ -1,356 +0,0 @@ -import cv2 as cv -import numpy as np -import torch -import torch.optim as optim -from utils.yolov1_utils import non_max_suppression, cellboxes_to_boxes, get_bboxes -import torchvision.transforms as T -import torchvision.transforms.functional as TF -from models.yolov1net_darknet import YoloV1Net -from models.yolov1net_vgg19bn import YoloV1_Vgg19bn -from models.yolov1net_resnet18 import YoloV1_Resnet18 -from models.yolov1net_resnet50 import YoloV1_Resnet50 -from models.tiny_yolov1net_resnet18 import Tiny_YoloV1_Resnet18 -import matplotlib.pyplot as plt -from PIL import Image -from utils.custom_transform import scale_translate, draw_bounding_box, scale_translate_bounding_box -import os -import pandas as pd -from numpy import genfromtxt - -img_dir = 'data/images/' -label_dir = 'data/labels/' -results_dir = 'results/' -transform = T.Compose([T.ToTensor()]) -weight_decay = 0.0005 -device = "cuda" if torch.cuda.is_available() else "cpu" - -yolov1_darknet_pretrained = False -yolov1_vgg19bn_pretrained = False -yolov1_resnet18_pretrained = False -yolov1_resnet50_pretrained = False -tiny_yolov1_resnet18_pretrained = True - -model_names = ['vgg19bn_orig_lr_', - 'vgg19bn_adj_lr_', - 'resnet18_adj_lr_', - 'resnet50_adj_lr_', - 'tiny_resnet18_adj_lr_'] - -if yolov1_vgg19bn_pretrained == True: - lr = 0.00001 - current_model = model_names[0] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif yolov1_resnet18_pretrained == True: - lr = 0.00001 - current_model = model_names[1] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif yolov1_resnet50_pretrained == True: - lr = 0.00001 - current_model = model_names[2] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif tiny_yolov1_resnet18_pretrained == True: - lr = 0.00001 - current_model = model_names[4] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' - -# Initalize model -if yolov1_darknet_pretrained == True: - model = YoloV1Net(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Pretrained yolov1 darknet network initalized.") - print("Note: This is the original backbone from the YoloV1 paper. PyTorch weights are not available.") - print("This backbone requieres pre-training on ImageNet to obtain compareable performance to other backbones.") - -elif yolov1_vgg19bn_pretrained == True: - model = YoloV1_Vgg19bn(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained yolov1 vgg 19 network with batch normalization initalized.") - -elif yolov1_resnet18_pretrained == True: - model = YoloV1_Resnet18(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file, map_location=torch.device('cpu')) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained yolov1 resnet 18 network initalized.") - -elif yolov1_resnet50_pretrained == True: - model = YoloV1_Resnet50(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained yolov1 resnet 50 network initalized.") - -elif tiny_yolov1_resnet18_pretrained == True: - model = Tiny_YoloV1_Resnet18(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained tiny yolov1 resnet 18 network initalized.") - -else: - print("No pretrained yolov1 model was specified. Please check the boolean flags and set the flag for supported pretrained models to True.") - -# Plot train data with ground truth bounding box -csvfile = pd.read_csv('data/train.csv', header=None, nrows = 250) -random_row = (csvfile.sample()) -img_path = random_row.iloc[0, 0] -label_path = random_row.iloc[0, 1] -img = Image.open(img_dir+img_path) -transformed_img, transform_vals = scale_translate(img) -transformed_img = np.array(transformed_img) -transformed_img = cv.resize(transformed_img, (448, 448)) -cv.imwrite('figures/train_img.jpg', transformed_img) - - -boxes = [] -with open(label_dir+label_path) as f: - # for every line - for label in f.readlines(): - # class is an int and x,y width and height is a float - # converts the string class_label, x, y width, height into int and floats - class_label, x, y, width, height = [ - float(x) if float(x) != int(float(x)) else int(x) - for x in label.replace("\n", "").split()] - # append line of anotation to list of bounding box - boxes.append([class_label, x, y, width, height]) - -boxes = scale_translate_bounding_box(boxes, transform_vals) -train_img_bboxes = draw_bounding_box(transformed_img, boxes) -cv.imwrite('figures/train_img_bboxes.jpg', train_img_bboxes) - - -# Plot test data with predicted bounding box -csvfile = pd.read_csv('data/test.csv', header=None, nrows = 250) -random_row = (csvfile.sample()) -img_path = random_row.iloc[0, 0] -test_img = Image.open(img_dir+img_path) -test_img = np.array(test_img) -test_img = cv.resize(test_img, (448, 448)) -cv.imwrite('figures/test_img.jpg', test_img) - -test_img = transform(test_img) -test_img = test_img.unsqueeze(0).to(device) -preds = model(test_img) -get_bboxes = cellboxes_to_boxes(preds) -test_img = test_img.squeeze(0) -test_img = test_img.permute(1, 2, 0).cpu().numpy() * 255 -bboxes = non_max_suppression(get_bboxes[0], iou_threshold=0.5, threshold=0.4, boxformat="midpoints") -test_img_bboxes = draw_bounding_box(test_img, bboxes, test = True) -cv.imwrite('figures/test_img_bboxes.jpg', test_img_bboxes) - - -def strip_square_brackets(pathtotxt): - with open(pathtotxt, 'r') as my_file: - text = my_file.read() - text = text.replace("[", "") - text = text.replace("]", "") - with open(pathtotxt, 'w') as my_file: - my_file.write(text) - -# strip square brackets, which results in first and last element to be NaN -strip_square_brackets("results/vgg19bn_adj_lr_train_loss.txt") -strip_square_brackets("results/vgg19bn_adj_lr_train_mAP.txt") -strip_square_brackets("results/vgg19bn_adj_lr_test_loss.txt") -strip_square_brackets("results/vgg19bn_adj_lr_test_mAP.txt") - -strip_square_brackets("results/resnet18_adj_lr_train_loss.txt") -strip_square_brackets("results/resnet18_adj_lr_train_mAP.txt") -strip_square_brackets("results/resnet18_adj_lr_test_loss.txt") -strip_square_brackets("results/resnet18_adj_lr_test_mAP.txt") - -strip_square_brackets("results/resnet50_adj_lr_train_loss.txt") -strip_square_brackets("results/resnet50_adj_lr_train_mAP.txt") -strip_square_brackets("results/resnet50_adj_lr_test_loss.txt") -strip_square_brackets("results/resnet50_adj_lr_test_mAP.txt") - -strip_square_brackets("results/tiny_resnet18_adj_lr_train_loss.txt") -strip_square_brackets("results/tiny_resnet18_adj_lr_train_mAP.txt") -strip_square_brackets("results/tiny_resnet18_adj_lr_test_loss.txt") -strip_square_brackets("results/tiny_resnet18_adj_lr_test_mAP.txt") - -strip_square_brackets("results/vgg19bn_adj_lr_inference_speed.txt") -strip_square_brackets("results/resnet18_adj_lr_inference_speed.txt") -strip_square_brackets("results/resnet50_adj_lr_inference_speed.txt") -strip_square_brackets("results/tiny_resnet18_adj_lr_inference_speed.txt") - -# Load values from txt file -train_vgg19_loss = genfromtxt("results/vgg19bn_adj_lr_train_loss.txt", delimiter=',') -train_vgg19_map = genfromtxt("results/vgg19bn_adj_lr_train_mAP.txt", delimiter=',') -test_vgg19_loss = genfromtxt("results/vgg19bn_adj_lr_test_loss.txt", delimiter=',') -test_vgg19_map = genfromtxt("results/vgg19bn_adj_lr_test_mAP.txt", delimiter=',') - -train_resnet18_loss = genfromtxt("results/resnet18_adj_lr_train_loss.txt", delimiter=',') -train_resnet18_map = genfromtxt("results/resnet18_adj_lr_train_mAP.txt", delimiter=',') -test_resnet18_loss = genfromtxt("results/resnet18_adj_lr_test_loss.txt", delimiter=',') -test_resnet18_map = genfromtxt("results/resnet18_adj_lr_test_mAP.txt", delimiter=',') - -train_resnet50_loss = genfromtxt("results/resnet50_adj_lr_train_loss.txt", delimiter=',') -train_resnet50_map = genfromtxt("results/resnet50_adj_lr_train_mAP.txt", delimiter=',') -test_resnet50_loss = genfromtxt("results/resnet50_adj_lr_test_loss.txt", delimiter=',') -test_resnet50_map = genfromtxt("results/resnet50_adj_lr_test_mAP.txt", delimiter=',') - -train_tiny_resnet18_loss = genfromtxt("results/tiny_resnet18_adj_lr_train_loss.txt", delimiter=',') -train_tiny_resnet18_map = genfromtxt("results/tiny_resnet18_adj_lr_train_mAP.txt", delimiter=',') -test_tiny_resnet18_loss = genfromtxt("results/tiny_resnet18_adj_lr_test_loss.txt", delimiter=',') -test_tiny_resnet18_map = genfromtxt("results/tiny_resnet18_adj_lr_test_mAP.txt", delimiter=',') - -speed_vgg19bn = genfromtxt("results/vgg19bn_adj_lr_inference_speed.txt", delimiter=',') -speed_resnet18 = genfromtxt("results/resnet18_adj_lr_inference_speed.txt", delimiter=',') -speed_resnet50 = genfromtxt("results/resnet50_adj_lr_inference_speed.txt", delimiter=',') -speed_tiny_resnet18 = genfromtxt("results/tiny_resnet18_adj_lr_inference_speed.txt", delimiter=',') - -# First inference pass takes longer than subsequent passes. As such we substract -# each element by that constant. -speed_vgg19bn = np.array(speed_vgg19bn) - speed_vgg19bn[0] -speed_resnet18 = speed_resnet18 - speed_resnet18[0] -speed_resnet50 = speed_resnet50 - speed_resnet50[0] -speed_tiny_resnet18 = speed_tiny_resnet18 - speed_tiny_resnet18[0] - -# Plot Vgg loss -plt.figure(figsize=(13,5)) -plt.subplot(1,2,1) -plt.plot(train_vgg19_loss, linewidth=1.5) -plt.plot(test_vgg19_loss, linewidth=1.5) -plt.title('Vgg19bn: Loss per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('Loss value', fontsize = 16) -plt.legend(['Train loss', 'Test loss'], - prop={'size': 14}, - frameon=False) - -# Plot Vgg mean average precision -plt.subplot(1, 2, 2) -plt.plot(train_vgg19_map, linewidth = 1.5) -plt.plot(test_vgg19_map, linewidth = 1.5) -plt.title('Vgg19bn: Mean average precision per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('mAP value ', fontsize = 16) -plt.legend(['Train mAP', 'Test mAP'], prop={'size': 14}, - frameon=False) -plt.savefig('figures/vgg19bn_loss_map.png') - - -# Plot Resnet18 loss -plt.figure(figsize=(13,5)) -plt.subplot(1,2,1) -plt.plot(train_resnet18_loss, linewidth=1.5) -plt.plot(test_resnet18_loss, linewidth=1.5) -plt.title('ResNet18: Loss per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('Loss value', fontsize = 16) -plt.legend(['Train loss', 'Test loss'], - prop={'size': 14}, - frameon=False) - -# Plot Resnet18 mean average precision -plt.subplot(1, 2, 2) -plt.plot(train_resnet18_map, linewidth = 1.5) -plt.plot(test_resnet18_map, linewidth = 1.5) -plt.title('ResNet18: Mean average precision per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('mAP value ', fontsize = 16) -plt.legend(['Train mAP', 'Test mAP'], prop={'size': 14}, - frameon=False) -plt.savefig('figures/resnet18_loss_map.png') - -# Plot Resnet50 loss -plt.figure(figsize=(13,5)) -plt.subplot(1,2,1) -plt.plot(train_resnet50_loss, linewidth=1.5) -plt.plot(test_resnet50_loss, linewidth=1.5) -plt.title('ResNet50: Loss per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('Loss value', fontsize = 16) -plt.legend(['Train loss', 'Test loss'], - prop={'size': 14}, - frameon=False) - -# Plot Resnet50 mean average precision -plt.subplot(1, 2, 2) -plt.plot(train_resnet50_map, linewidth = 1.5) -plt.plot(test_resnet50_map, linewidth = 1.5) -plt.title('ResNet50: Mean average precision per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('mAP value ', fontsize = 16) -plt.legend(['Train mAP', 'Test mAP'], prop={'size': 14}, - frameon=False) -plt.savefig('figures/resnet50_loss_map.png') - -# Plot tiny yolo resnet18 loss -plt.figure(figsize=(13,5)) -plt.subplot(1,2,1) -plt.plot(train_tiny_resnet18_loss, linewidth=1.5) -plt.plot(test_tiny_resnet18_loss, linewidth=1.5) -plt.title('Tiny ResNet18: Loss per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('Loss value', fontsize = 16) -plt.legend(['Train loss', 'Test loss'], - prop={'size': 14}, - frameon=False) - -# Plot tiny yolo resnet18 mean average precision -plt.subplot(1, 2, 2) -plt.plot(train_tiny_resnet18_map, linewidth = 1.5) -plt.plot(test_tiny_resnet18_map, linewidth = 1.5) -plt.title('Tiny ResNet18: Mean average precision per epoch', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('mAP value ', fontsize = 16) -plt.legend(['Train mAP', 'Test mAP'], prop={'size': 14}, - frameon=False) -plt.savefig('figures/tiny_resnet18_loss_map.png') - - -# Plot train map across models -plt.figure(figsize=(13,5)) -plt.subplot(1,2,1) -plt.plot(train_vgg19_map, linewidth=1.5) -plt.plot(train_resnet18_map, linewidth=1.5) -plt.plot(train_resnet50_map, linewidth=1.5) -plt.plot(train_tiny_resnet18_map, linewidth=1.5) -plt.title('Model comparison: Train mAP', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('mAP value', fontsize = 16) -plt.legend(['Vgg19bn', 'Resnet18', 'Resnet50', 'Tiny Resnet18'], - prop={'size': 14}, - frameon=False) - -# Plot test map across models -plt.subplot(1, 2, 2) -plt.plot(test_vgg19_map, linewidth=1.5) -plt.plot(test_resnet18_map, linewidth=1.5) -plt.plot(test_resnet50_map, linewidth=1.5) -plt.plot(test_tiny_resnet18_map, linewidth=1.5) -plt.title('Model comparison: Test mAP', fontsize = 16) -plt.xlabel('Number of epochs', fontsize = 16) -plt.ylabel('mAP value ', fontsize = 16) -plt.legend(['Vgg19bn', 'Resnet18', 'Resnet50', 'Tiny Resnet18'], prop={'size': 14}, - frameon=False) -plt.savefig('figures/model_comparison_map.png') - -# Plot inference speed per image/frame -plt.figure(figsize=(13,5)) -plt.plot(speed_vgg19bn, linewidth=1.5) -plt.plot(speed_resnet18, linewidth=1.5) -plt.plot(speed_resnet50, linewidth=1.5) -plt.plot(speed_tiny_resnet18, linewidth=1.5) -plt.title('Model comparison: Inference speed', fontsize = 16) -plt.xlabel('Number of frames/images processed', fontsize = 16) -plt.ylabel('Time in seconds', fontsize = 16) -plt.legend(['Vgg19bn', 'Resnet18', 'Resnet50', 'Tiny Resnet18'], - prop={'size': 14}, - frameon=False) -plt.savefig('figures/model_comparison_inference_speed.png') \ No newline at end of file diff --git a/utils/generate_csv.py b/utils/generate_csv.py deleted file mode 100755 index f5cb06e..0000000 --- a/utils/generate_csv.py +++ /dev/null @@ -1,22 +0,0 @@ -import os -import csv - -read_train = open("train.txt", "r").readlines() - -with open("train.csv", mode="w", newline="") as train_file: - for line in read_train: - image_file = line.split("/")[-1].replace("\n", "") - text_file = image_file.replace(".jpg", ".txt") - data = [image_file, text_file] - writer = csv.writer(train_file) - writer.writerow(data) - -read_train = open("test.txt", "r").readlines() - -with open("test.csv", mode="w", newline="") as train_file: - for line in read_train: - image_file = line.split("/")[-1].replace("\n", "") - text_file = image_file.replace(".jpg", ".txt") - data = [image_file, text_file] - writer = csv.writer(train_file) - writer.writerow(data) diff --git a/utils/get_data.sh b/utils/get_data.sh deleted file mode 100644 index 00c9dfc..0000000 --- a/utils/get_data.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar -tar xf VOCtrainval_11-May-2012.tar -rm VOCtrainval_11-May-2012.tar - -wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar -tar xf VOCtrainval_06-Nov-2007.tar -rm VOCtrainval_06-Nov-2007.tar - -wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar -tar xf VOCtest_06-Nov-2007.tar -rm VOCtest_06-Nov-2007.tar - -#wget https://pjreddie.com/media/files/voc_label.py -#python3 utils/voc_label.py - -cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt -cp 2007_test.txt test.txt -mkdir old_txt_files -mv 2007* 2012* old_txt_files/ - -mkdir data -mkdir data/images -mkdir data/labels - -mv VOCdevkit/VOC2007/JPEGImages/*.jpg data/images/ -mv VOCdevkit/VOC2012/JPEGImages/*.jpg data/images/ -mv VOCdevkit/VOC2007/labels/*.txt data/labels/ -mv VOCdevkit/VOC2012/labels/*.txt data/labels/ - -rm -rf VOCdevkit/ -python3 utils/generate_csv.py -mv test.txt old_txt_files/ -mv train.txt old_txt_files/ -mv test.csv data/ -mv train.csv data/ -rm -r old_txt_files/ \ No newline at end of file diff --git a/utils/get_data_macos.sh b/utils/get_data_macos.sh deleted file mode 100644 index a8100d0..0000000 --- a/utils/get_data_macos.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar -tar xf VOCtrainval_11-May-2012.tar -rm VOCtrainval_11-May-2012.tar - -wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar -tar xf VOCtrainval_06-Nov-2007.tar -rm VOCtrainval_06-Nov-2007.tar - -wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar -tar xf VOCtest_06-Nov-2007.tar -rm VOCtest_06-Nov-2007.tar - -#wget https://pjreddie.com/media/files/voc_label.py -#mv voc_label.py utils/ -python3 utils/voc_label.py - -cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt -cp 2007_test.txt test.txt -mkdir old_txt_files -mv 2007* 2012* old_txt_files/ - -mkdir data -mkdir data/images -mkdir data/labels - -for f in VOCdevkit/VOC2007/JPEGImages/*.jpg; do mv "$f" data/images/; done -for f in VOCdevkit/VOC2012/JPEGImages/*.jpg; do mv "$f" data/images/; done - -for f in VOCdevkit/VOC2007/labels/*.txt; do mv "$f" data/labels/; done -for f in VOCdevkit/VOC2012/labels/*.txt; do mv "$f" data/labels/; done - - -rm -rf VOCdevkit/ -python3 utils/generate_csv.py -mv test.txt old_txt_files/ -mv train.txt old_txt_files/ -mv test.csv data/ -mv train.csv data/ -rm -r old_txt_files/ \ No newline at end of file diff --git a/utils/get_data_macos_pjreddie.sh b/utils/get_data_macos_pjreddie.sh deleted file mode 100644 index 01dabdf..0000000 --- a/utils/get_data_macos_pjreddie.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash -wget http://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar -tar xf VOCtrainval_11-May-2012.tar -rm VOCtrainval_11-May-2012.tar - -wget http://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar -tar xf VOCtrainval_06-Nov-2007.tar -rm VOCtrainval_06-Nov-2007.tar - -wget http://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar -tar xf VOCtest_06-Nov-2007.tar -rm VOCtest_06-Nov-2007.tar - -#wget https://pjreddie.com/media/files/voc_label.py -#mv voc_label.py utils/ -python3 utils/voc_label.py - -cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt -cp 2007_test.txt test.txt -mkdir old_txt_files -mv 2007* 2012* old_txt_files/ - -mkdir data -mkdir data/images -mkdir data/labels - -for f in VOCdevkit/VOC2007/JPEGImages/*.jpg; do mv "$f" data/images/; done -for f in VOCdevkit/VOC2012/JPEGImages/*.jpg; do mv "$f" data/images/; done - -for f in VOCdevkit/VOC2007/labels/*.txt; do mv "$f" data/labels/; done -for f in VOCdevkit/VOC2012/labels/*.txt; do mv "$f" data/labels/; done - - -rm -rf VOCdevkit/ -python3 utils/generate_csv.py -mv test.txt old_txt_files/ -mv train.txt old_txt_files/ -mv test.csv data/ -mv train.csv data/ -rm -r old_txt_files/ \ No newline at end of file diff --git a/utils/get_data_pjreddie.sh b/utils/get_data_pjreddie.sh deleted file mode 100644 index c6cad2c..0000000 --- a/utils/get_data_pjreddie.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -wget http://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar -tar xf VOCtrainval_11-May-2012.tar -rm VOCtrainval_11-May-2012.tar - -wget http://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar -tar xf VOCtrainval_06-Nov-2007.tar -rm VOCtrainval_06-Nov-2007.tar - -wget http://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar -tar xf VOCtest_06-Nov-2007.tar -rm VOCtest_06-Nov-2007.tar - -#wget https://pjreddie.com/media/files/voc_label.py -#python3 utils/voc_label.py - -cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt -cp 2007_test.txt test.txt -mkdir old_txt_files -mv 2007* 2012* old_txt_files/ - -mkdir data -mkdir data/images -mkdir data/labels - -mv VOCdevkit/VOC2007/JPEGImages/*.jpg data/images/ -mv VOCdevkit/VOC2012/JPEGImages/*.jpg data/images/ -mv VOCdevkit/VOC2007/labels/*.txt data/labels/ -mv VOCdevkit/VOC2012/labels/*.txt data/labels/ - -rm -rf VOCdevkit/ -python3 utils/generate_csv.py -mv test.txt old_txt_files/ -mv train.txt old_txt_files/ -mv test.csv data/ -mv train.csv data/ -rm -r old_txt_files/ \ No newline at end of file diff --git a/utils/get_inference_speed.py b/utils/get_inference_speed.py deleted file mode 100644 index 8a7c733..0000000 --- a/utils/get_inference_speed.py +++ /dev/null @@ -1,138 +0,0 @@ -import numpy as np -import time -import torch -import torch.optim as optim -from models.yolov1net_darknet import YoloV1Net -from models.yolov1net_vgg19bn import YoloV1_Vgg19bn -from models.yolov1net_resnet18 import YoloV1_Resnet18 -from models.yolov1net_resnet50 import YoloV1_Resnet50 -from models.tiny_yolov1net_resnet18 import Tiny_YoloV1_Resnet18 - -import torchvision.transforms as T -from PIL import Image -import pandas as pd -import cv2 as cv - -img_dir = 'data/images/' -label_dir = 'data/labels/' -results_dir = 'results/' -transform = T.Compose([T.ToTensor()]) -weight_decay = 0.0005 -device = "cuda" if torch.cuda.is_available() else "cpu" - -yolov1_darknet_pretrained = False -yolov1_vgg19bn_pretrained = False -yolov1_resnet18_pretrained = False -yolov1_resnet50_pretrained = False -tiny_yolov1_resnet18_pretrained = True - -model_names = ['vgg19bn_orig_lr_', - 'vgg19bn_adj_lr_', - 'resnet18_adj_lr_', - 'resnet50_adj_lr_', - 'tiny_resnet18_adj_lr_'] - -if yolov1_vgg19bn_pretrained == True: - lr = 0.00001 - current_model = model_names[0] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif yolov1_resnet18_pretrained == True: - lr = 0.00001 - current_model = model_names[1] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif yolov1_resnet50_pretrained == True: - lr = 0.00001 - current_model = model_names[2] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' -elif tiny_yolov1_resnet18_pretrained == True: - lr = 0.00001 - current_model = model_names[4] - path_cpt_file = f'cpts/{current_model}yolov1.cpt' - -# # init model -if yolov1_darknet_pretrained == True: - model = YoloV1Net(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Pretrained yolov1 darknet network initalized.") - print("Note: This is the original backbone from the YoloV1 paper. PyTorch weights are not available.") - print("This backbone requieres pre-training on ImageNet to obtain compareable performance to other backbones.") - -elif yolov1_vgg19bn_pretrained == True: - model = YoloV1_Vgg19bn(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained yolov1 vgg 19 network with batch normalization initalized.") - -elif yolov1_resnet18_pretrained == True: - model = YoloV1_Resnet18(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained yolov1 resnet 18 network initalized.") - -elif yolov1_resnet50_pretrained == True: - model = YoloV1_Resnet50(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained yolov1 resnet 50 network initalized.") - -elif tiny_yolov1_resnet18_pretrained == True: - model = Tiny_YoloV1_Resnet18(S = 7, B = 2, C = 20).to(device) - optimizer = optim.Adam(model.parameters(), lr = lr, weight_decay = weight_decay) - checkpoint = torch.load(path_cpt_file) - model.load_state_dict(checkpoint['model_state_dict']) - optimizer.load_state_dict(checkpoint['optimizer_state_dict']) - model.eval() - print("Petrained tiny yolov1 resnet 18 network initalized.") - -else: - print("No pretrained yolov1 model was specified. Please check the boolean flags and set the flag for supported pretrained models to True.") - - -csvfile = pd.read_csv('data/test.csv', header=None) - -lst = [] -prev = 0 -for i in range(300): - random_row = (csvfile.sample()) - img_path = random_row.iloc[0, 0] - img_path = random_row.iloc[0, 0] - test_img = Image.open(img_dir+img_path) - test_img = np.array(test_img) - test_img = cv.resize(test_img, (448, 448)) - test_img = transform(test_img) - test_img = test_img.unsqueeze(0).to(device) - start = time.time() - model(test_img) - end = time.time() - elapsed = (end-start) - lst.append(elapsed + prev) - prev = lst[-1] - -if yolov1_darknet_pretrained == True: - with open(f'results/{current_model}inference_speed.txt','w') as values: - values.write(str(lst)) -elif yolov1_vgg19bn_pretrained == True: - with open(f'results/{current_model}inference_speed.txt','w') as values: - values.write(str(lst)) -elif yolov1_resnet18_pretrained == True: - with open(f'results/{current_model}inference_speed.txt','w') as values: - values.write(str(lst)) -elif yolov1_resnet50_pretrained == True: - with open(f'results/{current_model}inference_speed.txt','w') as values: - values.write(str(lst)) -elif tiny_yolov1_resnet18_pretrained == True: - with open(f'results/{current_model}inference_speed.txt','w') as values: - values.write(str(lst)) \ No newline at end of file diff --git a/utils/iou_map_tester.py b/utils/iou_map_tester.py deleted file mode 100755 index 519c3b0..0000000 --- a/utils/iou_map_tester.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Sat Apr 9 13:28:05 2022 - -@author: sen -""" - -import torch -from yolov1_utils import intersec_over_union as IOU -from yolov1_utils import mean_avg_precision as mAP - - -def iou_tester(true, preds, eps = 0.001): - """ - input: true values and predicted values of x1,y1,x2,y2 coordinates (size: N by 4) - for bounding boxes. - input: epsilon is a trehshhold value indicating the size of error we allow to - occur. - output: booelians of whether predictions match true - """ - res = IOU(preds, true) - return (corr_iou - res < 0.001) - -true_iou_coord = torch.tensor([ - [0.8, 0.1, 0.2, 0.2], - [0.95, 0.6, 0.5, 0.2], - [0.25, 0.15, 0.3, 0.1], - [0.7, 0.95, 0.6, 0.1], - [0.5, 0.5, 0.2, 0.2], - [2, 2, 6, 6], - [0, 0, 2, 2], - [0, 0, 2, 2], - [0, 0, 2, 2], - [0, 0, 2, 2], - [0, 0, 3, 2] - ]) - -preds_iou_coords = torch.tensor([ - [0.9, 0.2, 0.2, 0.2], - [0.95, 0.7, 0.3, 0.2], - [0.25, 0.35, 0.3, 0.1], - [0.5, 1.15, 0.4, 0.7], - [0.5, 0.5, 0.2, 0.2], - [4, 4, 7, 8], - [3, 0, 5, 2], - [0, 3, 2, 5], - [2, 0, 5, 2], - [1, 1, 3, 3], - [1, 1, 3, 3] - ]) - - -corr_iou = torch.tensor([ - [1 / 7], - [3 / 13], - [0], - [3 / 31], - [1], - [4 / 24], - [0], - [0], - [0], - [1 / 7], - [1/4] - ]) - -print("IOU Test return", iou_tester(preds_iou_coords, true_iou_coord)) - -map_preds1 = [ - [0, 0, 0.9, 0.55, 0.2, 0.3, 0.2], - [0, 0, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 0, 0.7, 0.8, 0.7, 0.2, 0.2], - ] -map_true1 = [ - [0, 0, 0.9, 0.55, 0.2, 0.3, 0.2], - [0, 0, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 0, 0.7, 0.8, 0.7, 0.2, 0.2], - ] -# map = 1 -map_preds2 = [ - [1, 0, 0.9, 0.55, 0.2, 0.3, 0.2], - [0, 0, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 0, 0.7, 0.8, 0.7, 0.2, 0.2], - ] -map_true2 = [ - [1, 0, 0.9, 0.55, 0.2, 0.3, 0.2], - [0, 0, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 0, 0.7, 0.8, 0.7, 0.2, 0.2], - ] - -# map = 1 - -map_preds3 = [ - [0, 1, 0.9, 0.55, 0.2, 0.3, 0.2], - [0, 1, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 1, 0.7, 0.8, 0.7, 0.2, 0.2], - ] -map_true3 = [ - [0, 0, 0.9, 0.55, 0.2, 0.3, 0.2], - [0, 0, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 0, 0.7, 0.8, 0.7, 0.2, 0.2], - ] -# map = 0 - -map_preds4 = [ - [0, 0, 0.9, 0.15, 0.25, 0.1, 0.1], - [0, 0, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 0, 0.7, 0.8, 0.7, 0.2, 0.2], - ] - -map_true4 = [ - [0, 0, 0.9, 0.55, 0.2, 0.3, 0.2], - [0, 0, 0.8, 0.35, 0.6, 0.3, 0.2], - [0, 0, 0.7, 0.8, 0.7, 0.2, 0.2], - ] -# map = 5 / 18 - -mAP(map_preds4, map_true4) - - diff --git a/utils/voc_label.py b/utils/voc_label.py deleted file mode 100755 index d1e8823..0000000 --- a/utils/voc_label.py +++ /dev/null @@ -1,56 +0,0 @@ -import xml.etree.ElementTree as ET -import pickle -import os -from os import listdir, getcwd -from os.path import join - -sets=[('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test')] - -classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"] - - -def convert(size, box): - dw = 1./size[0] - dh = 1./size[1] - x = (box[0] + box[1])/2.0 - y = (box[2] + box[3])/2.0 - w = box[1] - box[0] - h = box[3] - box[2] - x = x*dw - w = w*dw - y = y*dh - h = h*dh - return (x,y,w,h) - -def convert_annotation(year, image_id): - in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id)) - out_file = open('VOCdevkit/VOC%s/labels/%s.txt'%(year, image_id), 'w') - tree=ET.parse(in_file) - root = tree.getroot() - size = root.find('size') - w = int(size.find('width').text) - h = int(size.find('height').text) - - for obj in root.iter('object'): - difficult = obj.find('difficult').text - cls = obj.find('name').text - if cls not in classes or int(difficult) == 1: - continue - cls_id = classes.index(cls) - xmlbox = obj.find('bndbox') - b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text)) - bb = convert((w,h), b) - out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n') - -wd = getcwd() - -for year, image_set in sets: - if not os.path.exists('VOCdevkit/VOC%s/labels/'%(year)): - os.makedirs('VOCdevkit/VOC%s/labels/'%(year)) - image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split() - list_file = open('%s_%s.txt'%(year, image_set), 'w') - for image_id in image_ids: - list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg\n'%(wd, year, image_id)) - convert_annotation(year, image_id) - list_file.close() - diff --git a/utils/yolov1_utils.py b/utils/yolov1_utils.py deleted file mode 100755 index f33e323..0000000 --- a/utils/yolov1_utils.py +++ /dev/null @@ -1,411 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Thu Apr 7 15:02:15 2022 - -@author: sen -""" - -import torch -from collections import Counter -device = "cuda" if torch.cuda.is_available() else "cpu" - -def intersec_over_union(bboxes_preds, bboxes_targets, boxformat = "midpoints"): - """ - Calculates intersection of unions (IoU). - Input: Boundbing box predictions (tensor) x1, x2, y1, y2 of shape (N , 4) - with N denoting the number of bounding boxes. - Bounding box target/ground truth (tensor) x1, x2, y1, y2 of shape (N, 4). - box format whether midpoint location or corner location of bounding boxes - are used. - Output: Intersection over union (tensor). - """ - - if boxformat == "midpoints": - box1_x1 = bboxes_preds[...,0:1] - bboxes_preds[...,2:3] / 2 - box1_y1 = bboxes_preds[...,1:2] - bboxes_preds[...,3:4] / 2 - box1_x2 = bboxes_preds[...,0:1] + bboxes_preds[...,2:3] / 2 - box1_y2 = bboxes_preds[...,1:2] + bboxes_preds[...,3:4] / 2 - - box2_x1 = bboxes_targets[...,0:1] - bboxes_targets[...,2:3] / 2 - box2_y1 = bboxes_targets[...,1:2] - bboxes_targets[...,3:4] / 2 - box2_x2 = bboxes_targets[...,0:1] + bboxes_targets[...,2:3] / 2 - box2_y2 = bboxes_targets[...,1:2] + bboxes_targets[...,3:4] / 2 - - if boxformat == "corners": - box1_x1 = bboxes_preds[...,0:1] - box1_y1 = bboxes_preds[...,1:2] - box1_x2 = bboxes_preds[...,2:3] - box1_y2 = bboxes_preds[...,3:4] - - box2_x1 = bboxes_targets[...,0:1] - box2_y1 = bboxes_targets[...,1:2] - box2_x2 = bboxes_targets[...,2:3] - box2_y2 = bboxes_targets[...,3:4] - - x1 = torch.max(box1_x1, box2_x1) - y1 = torch.max(box1_y1, box2_y1) - x2 = torch.min(box1_x2, box2_x2) - y2 = torch.min(box1_y2, box2_y2) - - # clip intersection at zero to ensure it is never negative and equal to zero - # if no intersection exists - intersec = torch.clip((x2 - x1), min = 0) * torch.clip((y2 - y1), min = 0) - box1_area = abs((box1_x2 - box1_x1) * (box1_y2 - box1_y1)) - box2_area = abs((box2_x2 - box2_x1) * (box2_y2 - box2_y1)) - union = box1_area + box2_area - intersec + 1e-6 - iou = intersec / union - return iou - - -def mean_avg_precision(bboxes_preds, bboxes_targets, iou_threshold = 0.5, - boxformat ="midpoints", num_classes = 20): - """ - Calculates mean average precision, by collecting predicted bounding boxes on the - test set and then evaluate whether predictied boxes are TP or FP. Prediction with an - IOU larger than 0.5 are TP and predictions larger than 0.5 are FP. Since there can be - more than a single bounding box for an object, TP and FP are ordered by their confidence - score or class probability in descending order, where the precision is computed as - precision = (TP / (TP + FP)) and recall is computed as recall = (TP /(TP + FN)). - - Input: Predicted bounding boxes (list): [training index, class prediction C, - probability score p, x1, y1, x2, y2], ,[...] - Target/True bounding boxes: - Output: Mean average precision (float) - """ - - avg_precision = [] - - # iterate over classes category - for c in range(num_classes): - # init candidate detections and ground truth as an empty list for storage - candidate_detections = [] - ground_truths = [] - - # iterate over candidate bouding box predictions - for detection in bboxes_preds: - # index 1 is the class prediction and if equal to class c we are currently - # looking at append - # if the candidate detection in the bounding box predictions is equal - # to the class category c we are currently looking at add it to - # candidate list - if detection[1] == c: - candidate_detections.append(detection) - - # iterate over true bouding boxes in the target bounding boxes - for true_bbox in bboxes_targets: - # if true box equal class category c we are currently looking at - # append the ground truth list - if true_bbox[1] == c: - ground_truths.append(true_bbox) - - # first index 0 is the training index, given image zero with 3 bbox - # and img 1 has 5 bounding boxes, Counter will count how many bboxes - # and create a dictionary, so amoung_bbox = [0:3, 1:5] - amount_bboxes = Counter([gt[0] for gt in ground_truths]) - - for key, val in amount_bboxes.items(): - # fills dic with torch tensor zeors of len num_bboxes - amount_bboxes[key] = torch.zeros(val) - - # sort over probability scores - candidate_detections.sort(key=lambda x: x[2], reverse = True) - - # length for true positives and false positives for class based on detection - # initalise tensors of zeros for true positives (TP) and false positives - # (FP) as the length of possible candidate detections for a given class C - TP = torch.zeros((len(candidate_detections))) - FP = torch.zeros((len(candidate_detections))) - total_true_bboxes = len(ground_truths) - - if total_true_bboxes == 0: - continue - - for detection_idx, detection in enumerate(candidate_detections): - ground_truth_img = [bbox for bbox in ground_truths if bbox[0] == detection[0]] - - num_gts = len(ground_truth_img) - best_iou = 0 - - # iterate over all ground truth bbox in grout truth image - for idx, gt in enumerate(ground_truth_img): - iou = intersec_over_union( - # extract x1,x2,y1,y2 using index 3: - bboxes_preds = torch.unsqueeze(torch.tensor(detection[3:]),0), - bboxes_targets = torch.unsqueeze(torch.tensor(gt[3:]),0), - boxformat = boxformat) - - if iou > best_iou: - best_iou = iou - best_gt_idx = idx - - - if best_iou > iou_threshold: - # check if the bounding box has already been covered or examined before - if amount_bboxes[detection[0]][best_gt_idx] == 0: - TP[detection_idx] = 1 - # set it to 1 since we already covered the bounding box - amount_bboxes[detection[0]][best_gt_idx] = 1 - else: - # if bounding box already covered previously set as FP - FP[detection_idx] = 1 - # if the iou was not greater than the treshhold set as FP - else: - FP[detection_idx] = 1 - - # compute cumulative sum of true positives (TP) and false positives (FP) - # i.e. given [1, 1, 0, 1, 0] the cumulative sum is [1, 2, 2, 3, 3] - TP_cumsum = torch.cumsum(TP, dim = 0) - FP_cumsum = torch.cumsum(FP, dim = 0) - recall = torch.div(TP_cumsum , (total_true_bboxes + 1e-6)) - precision = torch.div(TP_cumsum, (TP_cumsum + FP_cumsum + 1e-6)) - - # compute average precision by integrating using numeric integration - # with the trapozoid method starting at point x = 1, y = 0 - # starting points are added to precision = x and recall = y using - # torch cat - precision = torch.cat((torch.tensor([1]), precision)) - recall = torch.cat((torch.tensor([0]), recall)) - integral = torch.trapz(precision, recall) - avg_precision.append(integral) - - return sum(avg_precision) / len(avg_precision) - -def get_bboxes(loader, model, iou_threshold, threshold, pred_format="cells", boxformat="midpoints", - device="cuda" if torch.cuda.is_available() else "cpu"): - - all_pred_boxes = [] - all_true_boxes = [] - - # make sure model is in eval before get bboxes - model.eval() - train_idx = 0 - - for batch_idx, (x, labels) in enumerate(loader): - x = x.to(device) - labels = labels.to(device) - - with torch.no_grad(): - predictions = model(x) - - batch_size = x.shape[0] - true_bboxes = cellboxes_to_boxes(labels) - bboxes = cellboxes_to_boxes(predictions) - - for idx in range(batch_size): - nms_boxes = non_max_suppression(bboxes[idx], iou_threshold=iou_threshold, threshold=threshold,boxformat=boxformat) - - for nms_box in nms_boxes: - all_pred_boxes.append([train_idx] + nms_box) - - for box in true_bboxes[idx]: - # many will get converted to 0 pred - if box[1] > threshold: - all_true_boxes.append([train_idx] + box) - - train_idx += 1 - - #model.train() - return all_pred_boxes, all_true_boxes - - - -def convert_cellboxes(predictions, S=7): - """ - Converts bounding boxes output from Yolo with - an image split size of S into entire image ratios - rather than relative to cell ratios. - """ - - predictions = predictions.to("cpu") - batch_size = predictions.shape[0] - predictions = predictions.reshape(batch_size, 7, 7, 30) - bboxes1 = predictions[..., 21:25] - bboxes2 = predictions[..., 26:30] - scores = torch.cat( (predictions[..., 20].unsqueeze(0), predictions[..., 25].unsqueeze(0)), dim=0 ) - best_box = scores.argmax(0).unsqueeze(-1) - best_boxes = bboxes1 * (1 - best_box) + best_box * bboxes2 - cell_indices = torch.arange(7).repeat(batch_size, 7, 1).unsqueeze(-1) - x = 1 / S * (best_boxes[..., :1] + cell_indices) - y = 1 / S * (best_boxes[..., 1:2] + cell_indices.permute(0, 2, 1, 3)) - w_y = 1 / S * best_boxes[..., 2:4] - converted_bboxes = torch.cat((x, y, w_y), dim=-1) - predicted_class = predictions[..., :20].argmax(-1).unsqueeze(-1) - best_confidence = torch.max(predictions[..., 20], predictions[..., 25]).unsqueeze(-1) - converted_preds = torch.cat( (predicted_class, best_confidence, converted_bboxes), dim=-1 ) - - return converted_preds - - -def cellboxes_to_boxes(out, S=7): - converted_pred = convert_cellboxes(out).reshape(out.shape[0], S * S, -1) - converted_pred[..., 0] = converted_pred[..., 0].long() - all_bboxes = [] - - for ex_idx in range(out.shape[0]): - bboxes = [] - - for bbox_idx in range(S * S): - bboxes.append([x.item() for x in converted_pred[ex_idx, bbox_idx, :]]) - all_bboxes.append(bboxes) - - return all_bboxes - - -def non_max_suppression(bboxes, iou_threshold, threshold, boxformat="corners"): - """ - Does Non Max Suppression given bboxes. - Parameters: - bboxes (list): list of lists containing all bboxes with each bboxes - specified as [class_pred, prob_score, x1, y1, x2, y2] - iou_threshold (float): threshold where predicted bboxes is correct - threshold (float): threshold to remove predicted bboxes (independent of IoU) - box_format (str): "midpoint" or "corners" used to specify bboxes - Returns: - list: bboxes after performing NMS given a specific IoU threshold - """ - - assert type(bboxes) == list - - bboxes = [box for box in bboxes if box[1] > threshold] - bboxes = sorted(bboxes, key=lambda x: x[1], reverse=True) - bboxes_after_nms = [] - - while bboxes: - chosen_box = bboxes.pop(0) - - bboxes = [ - box - for box in bboxes - if box[0] != chosen_box[0] - or intersec_over_union( - torch.tensor(chosen_box[2:]), - torch.tensor(box[2:]), - boxformat=boxformat, - ) - < iou_threshold - ] - - bboxes_after_nms.append(chosen_box) - - return bboxes_after_nms - - -def mean_average_precision( - pred_boxes, true_boxes, iou_threshold=0.5, boxformat="midpoints", num_classes=20 -): - """ - Calculates mean average precision - Parameters: - pred_boxes (list): list of lists containing all bboxes with each bboxes - specified as [train_idx, class_prediction, prob_score, x1, y1, x2, y2] - true_boxes (list): Similar as pred_boxes except all the correct ones - iou_threshold (float): threshold where predicted bboxes is correct - box_format (str): "midpoint" or "corners" used to specify bboxes - num_classes (int): number of classes - Returns: - float: mAP value across all classes given a specific IoU threshold - """ - - # list storing all AP for respective classes - average_precisions = [] - - # used for numerical stability later on - epsilon = 1e-6 - - for c in range(num_classes): - detections = [] - ground_truths = [] - - # Go through all predictions and targets, - # and only add the ones that belong to the - # current class c - for detection in pred_boxes: - if detection[1] == c: - detections.append(detection) - - for true_box in true_boxes: - if true_box[1] == c: - ground_truths.append(true_box) - - # find the amount of bboxes for each training example - # Counter here finds how many ground truth bboxes we get - # for each training example, so let's say img 0 has 3, - # img 1 has 5 then we will obtain a dictionary with: - # amount_bboxes = {0:3, 1:5} - amount_bboxes = Counter([gt[0] for gt in ground_truths]) - - # We then go through each key, val in this dictionary - # and convert to the following (w.r.t same example): - # ammount_bboxes = {0:torch.tensor[0,0,0], 1:torch.tensor[0,0,0,0,0]} - for key, val in amount_bboxes.items(): - amount_bboxes[key] = torch.zeros(val) - - # sort by box probabilities which is index 2 - detections.sort(key=lambda x: x[2], reverse=True) - TP = torch.zeros((len(detections))) - FP = torch.zeros((len(detections))) - total_true_bboxes = len(ground_truths) - - # If none exists for this class then we can safely skip - if total_true_bboxes == 0: - continue - - for detection_idx, detection in enumerate(detections): - # Only take out the ground_truths that have the same - # training idx as detection - ground_truth_img = [ - bbox for bbox in ground_truths if bbox[0] == detection[0] - ] - - # num_gts = len(ground_truth_img) - best_iou = 0 - - for idx, gt in enumerate(ground_truth_img): - iou = intersec_over_union( - torch.tensor(detection[3:]), - torch.tensor(gt[3:]), - boxformat=boxformat, - ) - - if iou > best_iou: - best_iou = iou - best_gt_idx = idx - - if best_iou > iou_threshold: - # only detect ground truth detection once - if amount_bboxes[detection[0]][best_gt_idx] == 0: - # true positive and add this bounding box to seen - TP[detection_idx] = 1 - amount_bboxes[detection[0]][best_gt_idx] = 1 - else: - FP[detection_idx] = 1 - - # if IOU is lower then the detection is a false positive - else: - FP[detection_idx] = 1 - - TP_cumsum = torch.cumsum(TP, dim=0) - FP_cumsum = torch.cumsum(FP, dim=0) - recalls = TP_cumsum / (total_true_bboxes + epsilon) - precisions = torch.divide(TP_cumsum, (TP_cumsum + FP_cumsum + epsilon)) - precisions = torch.cat((torch.tensor([1]), precisions)) - recalls = torch.cat((torch.tensor([0]), recalls)) - # torch.trapz for numerical integration - average_precisions.append(torch.trapz(precisions, recalls)) - - return sum(average_precisions) / len(average_precisions) - -def cellboxes_to_boxes(out, S=7): - converted_pred = convert_cellboxes(out).reshape(out.shape[0], S * S, -1) - converted_pred[..., 0] = converted_pred[..., 0].long() - all_bboxes = [] - - for ex_idx in range(out.shape[0]): - bboxes = [] - - for bbox_idx in range(S * S): - bboxes.append([x.item() for x in converted_pred[ex_idx, bbox_idx, :]]) - all_bboxes.append(bboxes) - - return all_bboxes \ No newline at end of file diff --git a/video/.DS_Store b/video/.DS_Store deleted file mode 100644 index 5008ddf..0000000 Binary files a/video/.DS_Store and /dev/null differ