π¬ [Update] logging -> loguru, consistency logging
Browse files- yolo/model/module.py +1 -1
- yolo/model/yolo.py +1 -1
- yolo/tools/data_loader.py +3 -3
- yolo/tools/dataset_preparation.py +1 -1
- yolo/tools/drawer.py +1 -1
- yolo/tools/loss_functions.py +1 -1
- yolo/tools/solver.py +1 -1
- yolo/utils/bounding_box_utils.py +1 -1
- yolo/utils/dataset_utils.py +1 -1
- yolo/utils/deploy_utils.py +1 -1
- yolo/utils/logger.py +10 -0
- yolo/utils/logging_utils.py +7 -12
- yolo/utils/model_utils.py +1 -1
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"
|
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"
|
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 |
-
|
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.
|
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.
|
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.
|
300 |
-
logger.
|
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:
|