Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ version_parameters: &version_parameters
default: "https://download.pytorch.org/whl/torch_stable.html"
python_version: # NOTE: only affect linux
type: string
default: '3.7.9'
default: '3.8.6'

environment:
PYTORCH_VERSION: << parameters.pytorch_version >>
Expand Down
6 changes: 3 additions & 3 deletions detectron2/engine/defaults.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
from detectron2.utils import comm
from detectron2.utils.collect_env import collect_env_info
from detectron2.utils.env import seed_all_rng
from detectron2.utils.events import CommonMetricPrinter, JSONWriter, TensorboardXWriter
from detectron2.utils.events import CommonMetricPrinter, JSONWriter, TensorBoardXWriter
from detectron2.utils.file_io import PathManager
from detectron2.utils.logger import setup_logger

Expand Down Expand Up @@ -231,7 +231,7 @@ def default_writers(output_dir: str, max_iter: Optional[int] = None):
"""
Build a list of :class:`EventWriter` to be used.
It now consists of a :class:`CommonMetricPrinter`,
:class:`TensorboardXWriter` and :class:`JSONWriter`.
:class:`TensorBoardXWriter` and :class:`JSONWriter`.

Args:
output_dir: directory to store JSON metrics and tensorboard events
Expand All @@ -245,7 +245,7 @@ def default_writers(output_dir: str, max_iter: Optional[int] = None):
# It may not always print what you want to see, since it prints "common" metrics only.
CommonMetricPrinter(max_iter),
JSONWriter(os.path.join(output_dir, "metrics.json")),
TensorboardXWriter(output_dir),
TensorBoardXWriter(output_dir),
]


Expand Down
6 changes: 2 additions & 4 deletions detectron2/layers/nms.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,10 @@ def nms_rotated(boxes: torch.Tensor, scores: torch.Tensor, iou_threshold: float)
# Note: this function (batched_nms_rotated) might be moved into
# torchvision/ops/boxes.py in the future


@torch.jit.script_if_tracing
def batched_nms_rotated(
boxes: torch.Tensor,
scores: torch.Tensor,
idxs: torch.Tensor,
iou_threshold: float
boxes: torch.Tensor, scores: torch.Tensor, idxs: torch.Tensor, iou_threshold: float
):
"""
Performs non-maximum suppression in a batched fashion.
Expand Down
15 changes: 10 additions & 5 deletions detectron2/utils/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import time
from collections import defaultdict
from contextlib import contextmanager
from functools import cached_property
from typing import Optional
import torch
from fvcore.common.history_buffer import HistoryBuffer
Expand All @@ -15,7 +16,7 @@
__all__ = [
"get_event_storage",
"JSONWriter",
"TensorboardXWriter",
"TensorBoardXWriter",
"CommonMetricPrinter",
"EventStorage",
]
Expand Down Expand Up @@ -128,7 +129,7 @@ def close(self):
self._file_handle.close()


class TensorboardXWriter(EventWriter):
class TensorBoardXWriter(EventWriter):
"""
Write all scalars to a tensorboard file.
"""
Expand All @@ -142,10 +143,14 @@ def __init__(self, log_dir: str, window_size: int = 20, **kwargs):
kwargs: other arguments passed to `torch.utils.tensorboard.SummaryWriter(...)`
"""
self._window_size = window_size
self._writer_args = {"log_dir": log_dir, **kwargs}
self._last_write = -1

@cached_property
def _writer(self):
from torch.utils.tensorboard import SummaryWriter

self._writer = SummaryWriter(log_dir, **kwargs)
self._last_write = -1
return SummaryWriter(**self._writer_args)

def write(self):
storage = get_event_storage()
Expand Down Expand Up @@ -174,7 +179,7 @@ def write(self):
storage.clear_histograms()

def close(self):
if hasattr(self, "_writer"): # doesn't exist when the code fails at import
if "_writer" in self.__dict__:
self._writer.close()


Expand Down
14 changes: 7 additions & 7 deletions tests/data/test_dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,12 @@ def test_reiter_leak(self):
self.assertLess(len(bucket), batchsize)


class _MyData(torch.utils.data.IterableDataset):
def __iter__(self):
while True:
yield 1


class TestDataLoader(unittest.TestCase):
def _get_kwargs(self):
# get kwargs of build_detection_train_loader
Expand All @@ -131,14 +137,8 @@ def test_build_iterable_dataloader_train(self):

def test_build_iterable_dataloader_from_cfg(self):
cfg = get_cfg()

class MyData(torch.utils.data.IterableDataset):
def __iter__(self):
while True:
yield 1

cfg.DATASETS.TRAIN = ["iter_data"]
DatasetCatalog.register("iter_data", lambda: MyData())
DatasetCatalog.register("iter_data", lambda: _MyData())
dl = build_detection_train_loader(cfg, mapper=lambda x: x, aspect_ratio_grouping=False)
next(iter(dl))

Expand Down
22 changes: 22 additions & 0 deletions tests/utils/test_tensorboardx.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import os
import tempfile
import unittest

from detectron2.utils.events import TensorBoardXWriter


class TestTensorBoardXWriter(unittest.TestCase):
def test_no_files_created(self) -> None:
with tempfile.TemporaryDirectory() as tmp_dir:
writer = TensorBoardXWriter(tmp_dir)
writer.close()

self.assertFalse(os.listdir(tmp_dir))

def test_single_write(self) -> None:
with tempfile.TemporaryDirectory() as tmp_dir:
writer = TensorBoardXWriter(tmp_dir)
writer._writer.add_scalar("testing", 1, 1)
writer.close()

self.assertTrue(os.listdir(tmp_dir))