From 4d194d44f4bd97c2ed568bf07b2ef51ea7ec6903 Mon Sep 17 00:00:00 2001 From: Kaushik B <45285388+kaushikb11@users.noreply.github.com> Date: Tue, 9 Mar 2021 15:55:59 +0530 Subject: [PATCH] Fix PT 1.8 compatibility issue (#580) * fix torch._six PT 1.8 comp issue * update torch vision * update torchvision version * revert back torch versions * add user agent * fix expected od loss tensor shape * fix unused imports * move * format Co-authored-by: Jirka Borovec --- .gitignore | 6 ++++++ pl_bolts/datamodules/async_dataloader.py | 3 ++- pl_bolts/datasets/__init__.py | 7 +++++++ pl_bolts/datasets/imagenet_dataset.py | 3 +++ tests/losses/test_object_detection.py | 12 ++++++------ tests/metrics/test_object_detection.py | 12 ++++++------ tests/models/test_classic_ml.py | 9 +++++++-- 7 files changed, 37 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 741916a9c3..89998fba46 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__/ *.py[cod] *$py.class +data/ # C extensions *.so @@ -163,3 +164,8 @@ tests/test-reports/ # MLflow mlruns/ + + +# Downloaded Data through Scripts +VOCdevkit/ +*.tar diff --git a/pl_bolts/datamodules/async_dataloader.py b/pl_bolts/datamodules/async_dataloader.py index 8d7a26adc7..a29c4b905c 100644 --- a/pl_bolts/datamodules/async_dataloader.py +++ b/pl_bolts/datamodules/async_dataloader.py @@ -1,10 +1,11 @@ +import collections.abc as container_abcs import re from queue import Queue from threading import Thread from typing import Any, Optional, Union import torch -from torch._six import container_abcs, string_classes +from torch._six import string_classes from torch.utils.data import DataLoader, Dataset diff --git a/pl_bolts/datasets/__init__.py b/pl_bolts/datasets/__init__.py index 081e78f149..191f37c10a 100644 --- a/pl_bolts/datasets/__init__.py +++ b/pl_bolts/datasets/__init__.py @@ -1,3 +1,5 @@ +import urllib + from pl_bolts.datasets.base_dataset import LightDataset from pl_bolts.datasets.cifar10_dataset import CIFAR10, TrialCIFAR10 from pl_bolts.datasets.concat_dataset import ConcatDataset @@ -31,3 +33,8 @@ "CIFAR10Mixed", "SSLDatasetMixin", ] + +# TorchVision hotfix https://github.com/pytorch/vision/issues/1938 +opener = urllib.request.build_opener() +opener.addheaders = [('User-agent', 'Mozilla/5.0')] +urllib.request.install_opener(opener) diff --git a/pl_bolts/datasets/imagenet_dataset.py b/pl_bolts/datasets/imagenet_dataset.py index b9e2aad745..06d1b89887 100644 --- a/pl_bolts/datasets/imagenet_dataset.py +++ b/pl_bolts/datasets/imagenet_dataset.py @@ -3,6 +3,7 @@ import os import sys import shutil +import sys # noqa F401 import tarfile import tempfile import zipfile @@ -248,6 +249,8 @@ def extract_archive(from_path, to_path=None, remove_finished=False): if to_path is None: to_path = os.path.dirname(from_path) + PY3 = sys.version_info[0] == 3 + if _is_tar(from_path): with tarfile.open(from_path, 'r') as tar: tar.extractall(path=to_path) diff --git a/tests/losses/test_object_detection.py b/tests/losses/test_object_detection.py index ac4ac3083d..26f1231cdf 100644 --- a/tests/losses/test_object_detection.py +++ b/tests/losses/test_object_detection.py @@ -10,7 +10,7 @@ @pytest.mark.parametrize( "preds, target, expected_loss", - [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([0.0]))] + [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([[0.0]]))] ) def test_iou_complete_overlap(preds, target, expected_loss): torch.testing.assert_allclose(iou_loss(preds, target), expected_loss) @@ -18,8 +18,8 @@ def test_iou_complete_overlap(preds, target, expected_loss): @pytest.mark.parametrize( "preds, target, expected_loss", [ - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([1.0])), - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([1.0])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([[1.0]])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([[1.0]])), ] ) def test_iou_no_overlap(preds, target, expected_loss): @@ -28,7 +28,7 @@ def test_iou_no_overlap(preds, target, expected_loss): @pytest.mark.parametrize( "preds, target, expected_loss", - [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([0.0]))] + [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([[0.0]]))] ) def test_complete_overlap(preds, target, expected_loss): torch.testing.assert_allclose(giou_loss(preds, target), expected_loss) @@ -36,8 +36,8 @@ def test_complete_overlap(preds, target, expected_loss): @pytest.mark.parametrize( "preds, target, expected_loss", [ - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([1.0])), - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([1.5])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([[1.0]])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([[1.5]])), ] ) def test_no_overlap(preds, target, expected_loss): diff --git a/tests/metrics/test_object_detection.py b/tests/metrics/test_object_detection.py index 83765012ca..606cbcc1b6 100644 --- a/tests/metrics/test_object_detection.py +++ b/tests/metrics/test_object_detection.py @@ -10,7 +10,7 @@ @pytest.mark.parametrize( "preds, target, expected_iou", - [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([1.0]))] + [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([[1.0]]))] ) def test_iou_complete_overlap(preds, target, expected_iou): torch.testing.assert_allclose(iou(preds, target), expected_iou) @@ -18,8 +18,8 @@ def test_iou_complete_overlap(preds, target, expected_iou): @pytest.mark.parametrize( "preds, target, expected_iou", [ - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([0.0])), - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([0.0])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([[0.0]])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([[0.0]])), ] ) def test_iou_no_overlap(preds, target, expected_iou): @@ -39,7 +39,7 @@ def test_iou_multi(preds, target, expected_iou): @pytest.mark.parametrize( "preds, target, expected_giou", - [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([1.0]))] + [(torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 100, 200, 200]]), torch.tensor([[1.0]]))] ) def test_complete_overlap(preds, target, expected_giou): torch.testing.assert_allclose(giou(preds, target), expected_giou) @@ -47,8 +47,8 @@ def test_complete_overlap(preds, target, expected_giou): @pytest.mark.parametrize( "preds, target, expected_giou", [ - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([0.0])), - (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([-0.5])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[100, 200, 200, 300]]), torch.tensor([[0.0]])), + (torch.tensor([[100, 100, 200, 200]]), torch.tensor([[200, 200, 300, 300]]), torch.tensor([[-0.5]])), ] ) def test_no_overlap(preds, target, expected_giou): diff --git a/tests/models/test_classic_ml.py b/tests/models/test_classic_ml.py index 197c3170a0..513c589f46 100644 --- a/tests/models/test_classic_ml.py +++ b/tests/models/test_classic_ml.py @@ -20,8 +20,13 @@ def test_linear_regression_model(tmpdir): loader = DataLoader(SklearnDataset(X, y), batch_size=2) model = LinearRegression(input_dim=2, learning_rate=0.5) - trainer = pl.Trainer(max_epochs=300, default_root_dir=tmpdir, - progress_bar_refresh_rate=0, logger=False, checkpoint_callback=False) + trainer = pl.Trainer( + max_epochs=300, + default_root_dir=tmpdir, + progress_bar_refresh_rate=0, + logger=False, + checkpoint_callback=False, + ) trainer.fit( model, loader,