Spaces:
Sleeping
Sleeping
π [Fix] display on DDP mode
Browse files- yolo/tools/data_loader.py +1 -1
- yolo/tools/solver.py +1 -2
- yolo/utils/logger.py +2 -1
- yolo/utils/logging_utils.py +18 -11
yolo/tools/data_loader.py
CHANGED
|
@@ -46,7 +46,7 @@ class YoloDataset(Dataset):
|
|
| 46 |
Returns:
|
| 47 |
dict: The loaded data from the cache for the specified phase.
|
| 48 |
"""
|
| 49 |
-
cache_path = dataset_path / f"{phase_name}.
|
| 50 |
|
| 51 |
if not cache_path.exists():
|
| 52 |
logger.info(f":factory: Generating {phase_name} cache")
|
|
|
|
| 46 |
Returns:
|
| 47 |
dict: The loaded data from the cache for the specified phase.
|
| 48 |
"""
|
| 49 |
+
cache_path = dataset_path / f"{phase_name}.cache1"
|
| 50 |
|
| 51 |
if not cache_path.exists():
|
| 52 |
logger.info(f":factory: Generating {phase_name} cache")
|
yolo/tools/solver.py
CHANGED
|
@@ -59,10 +59,10 @@ class ValidateModel(BaseModel):
|
|
| 59 |
def on_validation_epoch_end(self):
|
| 60 |
epoch_metrics = self.metric.compute()
|
| 61 |
del epoch_metrics["classes"]
|
|
|
|
| 62 |
self.log_dict(
|
| 63 |
{"PyCOCO/AP @ .5:.95": epoch_metrics["map"], "PyCOCO/AP @ .5": epoch_metrics["map_50"]}, rank_zero_only=True
|
| 64 |
)
|
| 65 |
-
self.log_dict(epoch_metrics, prog_bar=True, logger=True, on_epoch=True, rank_zero_only=True)
|
| 66 |
self.metric.reset()
|
| 67 |
|
| 68 |
|
|
@@ -92,7 +92,6 @@ class TrainModel(ValidateModel):
|
|
| 92 |
self.log_dict(
|
| 93 |
loss_item,
|
| 94 |
prog_bar=True,
|
| 95 |
-
logger=True,
|
| 96 |
on_epoch=True,
|
| 97 |
batch_size=batch_size,
|
| 98 |
rank_zero_only=True,
|
|
|
|
| 59 |
def on_validation_epoch_end(self):
|
| 60 |
epoch_metrics = self.metric.compute()
|
| 61 |
del epoch_metrics["classes"]
|
| 62 |
+
self.log_dict(epoch_metrics, prog_bar=True, rank_zero_only=True)
|
| 63 |
self.log_dict(
|
| 64 |
{"PyCOCO/AP @ .5:.95": epoch_metrics["map"], "PyCOCO/AP @ .5": epoch_metrics["map_50"]}, rank_zero_only=True
|
| 65 |
)
|
|
|
|
| 66 |
self.metric.reset()
|
| 67 |
|
| 68 |
|
|
|
|
| 92 |
self.log_dict(
|
| 93 |
loss_item,
|
| 94 |
prog_bar=True,
|
|
|
|
| 95 |
on_epoch=True,
|
| 96 |
batch_size=batch_size,
|
| 97 |
rank_zero_only=True,
|
yolo/utils/logger.py
CHANGED
|
@@ -1,10 +1,11 @@
|
|
| 1 |
import logging
|
| 2 |
|
|
|
|
| 3 |
from rich.console import Console
|
| 4 |
from rich.logging import RichHandler
|
| 5 |
|
| 6 |
logger = logging.getLogger("yolo")
|
| 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, markup=True))
|
|
|
|
| 1 |
import logging
|
| 2 |
|
| 3 |
+
from lightning.pytorch.utilities.rank_zero import rank_zero_only
|
| 4 |
from rich.console import Console
|
| 5 |
from rich.logging import RichHandler
|
| 6 |
|
| 7 |
logger = logging.getLogger("yolo")
|
| 8 |
logger.setLevel(logging.DEBUG)
|
| 9 |
logger.propagate = False
|
| 10 |
+
if rank_zero_only.rank == 0 and not logger.hasHandlers():
|
| 11 |
logger.addHandler(RichHandler(console=Console(), show_level=True, show_path=True, show_time=True, markup=True))
|
yolo/utils/logging_utils.py
CHANGED
|
@@ -223,21 +223,27 @@ class ImageLogger(Callback):
|
|
| 223 |
logger.log_image("Prediction", images, step=step, boxes=[log_bbox(pred_boxes)])
|
| 224 |
|
| 225 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 226 |
def setup(cfg: Config):
|
| 227 |
-
seed_everything(cfg.lucky_number)
|
| 228 |
if hasattr(cfg, "quite"):
|
| 229 |
logger.removeHandler("YOLO_logger")
|
| 230 |
return
|
| 231 |
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
return f":high_voltage: {super().format(record)}"
|
| 235 |
-
|
| 236 |
-
rich_handler = RichHandler(markup=True)
|
| 237 |
-
rich_handler.setFormatter(EmojiFormatter("%(message)s"))
|
| 238 |
-
lightning_logger = logging.getLogger("lightning.pytorch")
|
| 239 |
-
lightning_logger.handlers.clear()
|
| 240 |
-
lightning_logger.addHandler(rich_handler)
|
| 241 |
|
| 242 |
def custom_wandb_log(string="", level=int, newline=True, repeat=True, prefix=True, silent=False):
|
| 243 |
if silent:
|
|
@@ -288,6 +294,7 @@ def log_model_structure(model: Union[ModuleList, YOLOLayer, YOLO]):
|
|
| 288 |
console.print(table)
|
| 289 |
|
| 290 |
|
|
|
|
| 291 |
def validate_log_directory(cfg: Config, exp_name: str) -> Path:
|
| 292 |
base_path = Path(cfg.out_path, cfg.task.task)
|
| 293 |
save_path = base_path / exp_name
|
|
@@ -305,7 +312,7 @@ def validate_log_directory(cfg: Config, exp_name: str) -> Path:
|
|
| 305 |
)
|
| 306 |
|
| 307 |
save_path.mkdir(parents=True, exist_ok=True)
|
| 308 |
-
logger.info(f"π Created log folder: [blue b u]
|
| 309 |
logger.addHandler(FileHandler(save_path / "output.log"))
|
| 310 |
return save_path
|
| 311 |
|
|
|
|
| 223 |
logger.log_image("Prediction", images, step=step, boxes=[log_bbox(pred_boxes)])
|
| 224 |
|
| 225 |
|
| 226 |
+
def setup_logger(logger_name):
|
| 227 |
+
class EmojiFormatter(logging.Formatter):
|
| 228 |
+
def format(self, record, emoji=":high_voltage:"):
|
| 229 |
+
return f"{emoji} {super().format(record)}"
|
| 230 |
+
|
| 231 |
+
rich_handler = RichHandler(markup=True)
|
| 232 |
+
rich_handler.setFormatter(EmojiFormatter("%(message)s"))
|
| 233 |
+
rich_logger = logging.getLogger(logger_name)
|
| 234 |
+
if rich_logger:
|
| 235 |
+
rich_logger.handlers.clear()
|
| 236 |
+
rich_logger.addHandler(rich_handler)
|
| 237 |
+
|
| 238 |
+
|
| 239 |
def setup(cfg: Config):
|
| 240 |
+
# seed_everything(cfg.lucky_number)
|
| 241 |
if hasattr(cfg, "quite"):
|
| 242 |
logger.removeHandler("YOLO_logger")
|
| 243 |
return
|
| 244 |
|
| 245 |
+
setup_logger("lightning.fabric")
|
| 246 |
+
setup_logger("lightning.pytorch")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
|
| 248 |
def custom_wandb_log(string="", level=int, newline=True, repeat=True, prefix=True, silent=False):
|
| 249 |
if silent:
|
|
|
|
| 294 |
console.print(table)
|
| 295 |
|
| 296 |
|
| 297 |
+
@rank_zero_only
|
| 298 |
def validate_log_directory(cfg: Config, exp_name: str) -> Path:
|
| 299 |
base_path = Path(cfg.out_path, cfg.task.task)
|
| 300 |
save_path = base_path / exp_name
|
|
|
|
| 312 |
)
|
| 313 |
|
| 314 |
save_path.mkdir(parents=True, exist_ok=True)
|
| 315 |
+
logger.info(f"π Created log folder: [blue b u]{save_path}[/]")
|
| 316 |
logger.addHandler(FileHandler(save_path / "output.log"))
|
| 317 |
return save_path
|
| 318 |
|