henry000 commited on
Commit
0174b5b
Β·
1 Parent(s): dea5a8a

πŸ’¬ [Update] logging -> loguru, consistency logging

Browse files
yolo/model/module.py CHANGED
@@ -3,10 +3,10 @@ from typing import Any, Dict, List, Optional, Tuple
3
  import torch
4
  import torch.nn.functional as F
5
  from einops import rearrange
6
- from loguru import logger
7
  from torch import Tensor, nn
8
  from torch.nn.common_types import _size_2_t
9
 
 
10
  from yolo.utils.module_utils import auto_pad, create_activation_function, round_up
11
 
12
 
 
3
  import torch
4
  import torch.nn.functional as F
5
  from einops import rearrange
 
6
  from torch import Tensor, nn
7
  from torch.nn.common_types import _size_2_t
8
 
9
+ from yolo.utils.logger import logger
10
  from yolo.utils.module_utils import auto_pad, create_activation_function, round_up
11
 
12
 
yolo/model/yolo.py CHANGED
@@ -3,12 +3,12 @@ from pathlib import Path
3
  from typing import Dict, List, Union
4
 
5
  import torch
6
- from loguru import logger
7
  from omegaconf import ListConfig, OmegaConf
8
  from torch import nn
9
 
10
  from yolo.config.config import ModelConfig, YOLOLayer
11
  from yolo.tools.dataset_preparation import prepare_weight
 
12
  from yolo.utils.module_utils import get_layer_map
13
 
14
 
 
3
  from typing import Dict, List, Union
4
 
5
  import torch
 
6
  from omegaconf import ListConfig, OmegaConf
7
  from torch import nn
8
 
9
  from yolo.config.config import ModelConfig, YOLOLayer
10
  from yolo.tools.dataset_preparation import prepare_weight
11
+ from yolo.utils.logger import logger
12
  from yolo.utils.module_utils import get_layer_map
13
 
14
 
yolo/tools/data_loader.py CHANGED
@@ -5,7 +5,6 @@ from typing import Generator, List, Tuple, Union
5
 
6
  import numpy as np
7
  import torch
8
- from loguru import logger
9
  from PIL import Image
10
  from rich.progress import track
11
  from torch import Tensor
@@ -21,6 +20,7 @@ from yolo.utils.dataset_utils import (
21
  locate_label_paths,
22
  scale_segmentation,
23
  )
 
24
 
25
 
26
  class YoloDataset(Dataset):
@@ -48,12 +48,12 @@ class YoloDataset(Dataset):
48
  cache_path = dataset_path / f"{phase_name}.cache"
49
 
50
  if not cache_path.exists():
51
- logger.info("🏭 Generating {} cache", phase_name)
52
  data = self.filter_data(dataset_path, phase_name)
53
  torch.save(data, cache_path)
54
  else:
55
  data = torch.load(cache_path, weights_only=False)
56
- logger.info("πŸ“¦ Loaded {} cache", phase_name)
57
  return data
58
 
59
  def filter_data(self, dataset_path: Path, phase_name: str) -> list:
 
5
 
6
  import numpy as np
7
  import torch
 
8
  from PIL import Image
9
  from rich.progress import track
10
  from torch import Tensor
 
20
  locate_label_paths,
21
  scale_segmentation,
22
  )
23
+ from yolo.utils.logger import logger
24
 
25
 
26
  class YoloDataset(Dataset):
 
48
  cache_path = dataset_path / f"{phase_name}.cache"
49
 
50
  if not cache_path.exists():
51
+ logger.info(f"🏭 Generating {phase_name} cache")
52
  data = self.filter_data(dataset_path, phase_name)
53
  torch.save(data, cache_path)
54
  else:
55
  data = torch.load(cache_path, weights_only=False)
56
+ logger.info(f"πŸ“¦ Loaded {phase_name} cache")
57
  return data
58
 
59
  def filter_data(self, dataset_path: Path, phase_name: str) -> list:
yolo/tools/dataset_preparation.py CHANGED
@@ -3,10 +3,10 @@ from pathlib import Path
3
  from typing import Optional
4
 
5
  import requests
6
- from loguru import logger
7
  from rich.progress import BarColumn, Progress, TextColumn, TimeRemainingColumn
8
 
9
  from yolo.config.config import DatasetConfig
 
10
 
11
 
12
  def download_file(url, destination: Path):
 
3
  from typing import Optional
4
 
5
  import requests
 
6
  from rich.progress import BarColumn, Progress, TextColumn, TimeRemainingColumn
7
 
8
  from yolo.config.config import DatasetConfig
9
+ from yolo.utils.logger import logger
10
 
11
 
12
  def download_file(url, destination: Path):
yolo/tools/drawer.py CHANGED
@@ -3,12 +3,12 @@ from typing import List, Optional, Union
3
 
4
  import numpy as np
5
  import torch
6
- from loguru import logger
7
  from PIL import Image, ImageDraw, ImageFont
8
  from torchvision.transforms.functional import to_pil_image
9
 
10
  from yolo.config.config import ModelConfig
11
  from yolo.model.yolo import YOLO
 
12
 
13
 
14
  def draw_bboxes(
 
3
 
4
  import numpy as np
5
  import torch
 
6
  from PIL import Image, ImageDraw, ImageFont
7
  from torchvision.transforms.functional import to_pil_image
8
 
9
  from yolo.config.config import ModelConfig
10
  from yolo.model.yolo import YOLO
11
+ from yolo.utils.logger import logger
12
 
13
 
14
  def draw_bboxes(
yolo/tools/loss_functions.py CHANGED
@@ -2,12 +2,12 @@ from typing import Any, Dict, List, Tuple
2
 
3
  import torch
4
  import torch.nn.functional as F
5
- from loguru import logger
6
  from torch import Tensor, nn
7
  from torch.nn import BCEWithLogitsLoss
8
 
9
  from yolo.config.config import Config, LossConfig
10
  from yolo.utils.bounding_box_utils import BoxMatcher, Vec2Box, calculate_iou
 
11
 
12
 
13
  class BCELoss(nn.Module):
 
2
 
3
  import torch
4
  import torch.nn.functional as F
 
5
  from torch import Tensor, nn
6
  from torch.nn import BCEWithLogitsLoss
7
 
8
  from yolo.config.config import Config, LossConfig
9
  from yolo.utils.bounding_box_utils import BoxMatcher, Vec2Box, calculate_iou
10
+ from yolo.utils.logger import logger
11
 
12
 
13
  class BCELoss(nn.Module):
yolo/tools/solver.py CHANGED
@@ -8,7 +8,6 @@ from pathlib import Path
8
  from typing import Dict, Optional
9
 
10
  import torch
11
- from loguru import logger
12
  from pycocotools.coco import COCO
13
  from torch import Tensor, distributed
14
  from torch.cuda.amp import GradScaler, autocast
@@ -22,6 +21,7 @@ from yolo.tools.drawer import draw_bboxes, draw_model
22
  from yolo.tools.loss_functions import create_loss_function
23
  from yolo.utils.bounding_box_utils import Vec2Box, calculate_map
24
  from yolo.utils.dataset_utils import locate_label_paths
 
25
  from yolo.utils.logging_utils import ProgressLogger, log_model_structure
26
  from yolo.utils.model_utils import (
27
  ExponentialMovingAverage,
 
8
  from typing import Dict, Optional
9
 
10
  import torch
 
11
  from pycocotools.coco import COCO
12
  from torch import Tensor, distributed
13
  from torch.cuda.amp import GradScaler, autocast
 
21
  from yolo.tools.loss_functions import create_loss_function
22
  from yolo.utils.bounding_box_utils import Vec2Box, calculate_map
23
  from yolo.utils.dataset_utils import locate_label_paths
24
+ from yolo.utils.logger import logger
25
  from yolo.utils.logging_utils import ProgressLogger, log_model_structure
26
  from yolo.utils.model_utils import (
27
  ExponentialMovingAverage,
yolo/utils/bounding_box_utils.py CHANGED
@@ -4,12 +4,12 @@ from typing import Dict, List, Optional, Tuple, Union
4
  import torch
5
  import torch.nn.functional as F
6
  from einops import rearrange
7
- from loguru import logger
8
  from torch import Tensor, arange, tensor
9
  from torchvision.ops import batched_nms
10
 
11
  from yolo.config.config import AnchorConfig, MatcherConfig, ModelConfig, NMSConfig
12
  from yolo.model.yolo import YOLO
 
13
 
14
 
15
  def calculate_iou(bbox1, bbox2, metrics="iou") -> Tensor:
 
4
  import torch
5
  import torch.nn.functional as F
6
  from einops import rearrange
 
7
  from torch import Tensor, arange, tensor
8
  from torchvision.ops import batched_nms
9
 
10
  from yolo.config.config import AnchorConfig, MatcherConfig, ModelConfig, NMSConfig
11
  from yolo.model.yolo import YOLO
12
+ from yolo.utils.logger import logger
13
 
14
 
15
  def calculate_iou(bbox1, bbox2, metrics="iou") -> Tensor:
yolo/utils/dataset_utils.py CHANGED
@@ -5,9 +5,9 @@ from pathlib import Path
5
  from typing import Any, Dict, List, Optional, Tuple
6
 
7
  import numpy as np
8
- from loguru import logger
9
 
10
  from yolo.tools.data_conversion import discretize_categories
 
11
 
12
 
13
  def locate_label_paths(dataset_path: Path, phase_name: Path) -> Tuple[Path, Path]:
 
5
  from typing import Any, Dict, List, Optional, Tuple
6
 
7
  import numpy as np
 
8
 
9
  from yolo.tools.data_conversion import discretize_categories
10
+ from yolo.utils.logger import logger
11
 
12
 
13
  def locate_label_paths(dataset_path: Path, phase_name: Path) -> Tuple[Path, Path]:
yolo/utils/deploy_utils.py CHANGED
@@ -1,11 +1,11 @@
1
  from pathlib import Path
2
 
3
  import torch
4
- from loguru import logger
5
  from torch import Tensor
6
 
7
  from yolo.config.config import Config
8
  from yolo.model.yolo import create_model
 
9
 
10
 
11
  class FastModelLoader:
 
1
  from pathlib import Path
2
 
3
  import torch
 
4
  from torch import Tensor
5
 
6
  from yolo.config.config import Config
7
  from yolo.model.yolo import create_model
8
+ from yolo.utils.logger import logger
9
 
10
 
11
  class FastModelLoader:
yolo/utils/logger.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import logging
2
+
3
+ from rich.console import Console
4
+ from rich.logging import RichHandler
5
+
6
+ logger = logging.getLogger("YOLO_logger")
7
+ logger.setLevel(logging.DEBUG)
8
+ logger.propagate = False
9
+ if not logger.hasHandlers():
10
+ logger.addHandler(RichHandler(console=Console(), show_level=True, show_path=True, show_time=True))
yolo/utils/logging_utils.py CHANGED
@@ -15,6 +15,7 @@ import os
15
  import random
16
  import sys
17
  from collections import deque
 
18
  from pathlib import Path
19
  from typing import Any, Dict, List, Optional, Tuple, Union
20
 
@@ -22,7 +23,6 @@ import numpy as np
22
  import torch
23
  import wandb
24
  import wandb.errors.term
25
- from loguru import logger
26
  from omegaconf import ListConfig
27
  from rich.console import Console, Group
28
  from rich.progress import (
@@ -41,18 +41,13 @@ from torchvision.transforms.functional import pil_to_tensor
41
  from yolo.config.config import Config, YOLOLayer
42
  from yolo.model.yolo import YOLO
43
  from yolo.tools.drawer import draw_bboxes
 
44
  from yolo.utils.solver_utils import make_ap_table
45
 
46
 
47
  def custom_logger(quite: bool = False):
48
- logger.remove()
49
  if quite:
50
- return
51
- logger.add(
52
- sys.stderr,
53
- colorize=True,
54
- format="<fg #003385>[{time:MM/DD HH:mm:ss}]</> <level>{level: ^8}</level>| <level>{message}</level>",
55
- )
56
 
57
 
58
  # TODO: should be moved to correct position
@@ -100,7 +95,7 @@ class ProgressLogger(Progress):
100
  from torch.utils.tensorboard import SummaryWriter
101
 
102
  self.tb_writer = SummaryWriter(log_dir=self.save_path / "tensorboard")
103
- logger.opt(colors=True).info(f"πŸ“ Enable TensorBoard locally at <blue><u>http://localhost:6006</></>")
104
 
105
  def rank_check(logging_function):
106
  def wrapper(self, *args, **kwargs):
@@ -249,7 +244,7 @@ def custom_wandb_log(string="", level=int, newline=True, repeat=True, prefix=Tru
249
  if silent:
250
  return
251
  for line in string.split("\n"):
252
- logger.opt(raw=not newline, colors=True).info("🌐 " + line)
253
 
254
 
255
  def log_model_structure(model: Union[ModuleList, YOLOLayer, YOLO]):
@@ -296,8 +291,8 @@ def validate_log_directory(cfg: Config, exp_name: str) -> Path:
296
  )
297
 
298
  save_path.mkdir(parents=True, exist_ok=True)
299
- logger.opt(colors=True).info(f"πŸ“„ Created log folder: <u><fg #808080>{save_path}</></>")
300
- logger.add(save_path / "output.log", mode="w", backtrace=True, diagnose=True)
301
  return save_path
302
 
303
 
 
15
  import random
16
  import sys
17
  from collections import deque
18
+ from logging import FileHandler
19
  from pathlib import Path
20
  from typing import Any, Dict, List, Optional, Tuple, Union
21
 
 
23
  import torch
24
  import wandb
25
  import wandb.errors.term
 
26
  from omegaconf import ListConfig
27
  from rich.console import Console, Group
28
  from rich.progress import (
 
41
  from yolo.config.config import Config, YOLOLayer
42
  from yolo.model.yolo import YOLO
43
  from yolo.tools.drawer import draw_bboxes
44
+ from yolo.utils.logger import logger
45
  from yolo.utils.solver_utils import make_ap_table
46
 
47
 
48
  def custom_logger(quite: bool = False):
 
49
  if quite:
50
+ logger.removeHandler("YOLO_logger")
 
 
 
 
 
51
 
52
 
53
  # TODO: should be moved to correct position
 
95
  from torch.utils.tensorboard import SummaryWriter
96
 
97
  self.tb_writer = SummaryWriter(log_dir=self.save_path / "tensorboard")
98
+ logger.info(f"πŸ“ Enable TensorBoard locally at <blue><u>http://localhost:6006</></>")
99
 
100
  def rank_check(logging_function):
101
  def wrapper(self, *args, **kwargs):
 
244
  if silent:
245
  return
246
  for line in string.split("\n"):
247
+ logger.info("🌐 " + line)
248
 
249
 
250
  def log_model_structure(model: Union[ModuleList, YOLOLayer, YOLO]):
 
291
  )
292
 
293
  save_path.mkdir(parents=True, exist_ok=True)
294
+ logger.info(f"πŸ“„ Created log folder: [bold gray]{save_path}[/]", extra={"markup": True})
295
+ logger.addHandler(FileHandler(save_path / "output.log"))
296
  return save_path
297
 
298
 
yolo/utils/model_utils.py CHANGED
@@ -4,7 +4,6 @@ from typing import List, Optional, Type, Union
4
 
5
  import torch
6
  import torch.distributed as dist
7
- from loguru import logger
8
  from omegaconf import ListConfig
9
  from torch import Tensor
10
  from torch.optim import Optimizer
@@ -13,6 +12,7 @@ from torch.optim.lr_scheduler import LambdaLR, SequentialLR, _LRScheduler
13
  from yolo.config.config import IDX_TO_ID, NMSConfig, OptimizerConfig, SchedulerConfig
14
  from yolo.model.yolo import YOLO
15
  from yolo.utils.bounding_box_utils import bbox_nms, transform_bbox
 
16
 
17
 
18
  class ExponentialMovingAverage:
 
4
 
5
  import torch
6
  import torch.distributed as dist
 
7
  from omegaconf import ListConfig
8
  from torch import Tensor
9
  from torch.optim import Optimizer
 
12
  from yolo.config.config import IDX_TO_ID, NMSConfig, OptimizerConfig, SchedulerConfig
13
  from yolo.model.yolo import YOLO
14
  from yolo.utils.bounding_box_utils import bbox_nms, transform_bbox
15
+ from yolo.utils.logger import logger
16
 
17
 
18
  class ExponentialMovingAverage: