mirror of
https://github.com/SikongJueluo/Mini-Nav.git
synced 2026-03-12 12:25:32 +08:00
refactor(configs): remove unused settings
This commit is contained in:
@@ -1,22 +1,20 @@
|
||||
from .models import (
|
||||
ModelConfig,
|
||||
VisualizationConfig,
|
||||
OutputConfig,
|
||||
FeatureCompressorConfig,
|
||||
PoolingType,
|
||||
)
|
||||
from .loader import load_yaml, save_yaml, ConfigError
|
||||
from .config import (
|
||||
ConfigManager,
|
||||
cfg_manager,
|
||||
)
|
||||
from .loader import ConfigError, load_yaml, save_yaml
|
||||
from .models import (
|
||||
Config,
|
||||
ModelConfig,
|
||||
OutputConfig,
|
||||
PoolingType,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
# Models
|
||||
"ModelConfig",
|
||||
"VisualizationConfig",
|
||||
"OutputConfig",
|
||||
"FeatureCompressorConfig",
|
||||
"Config",
|
||||
"PoolingType",
|
||||
# Loader
|
||||
"load_yaml",
|
||||
|
||||
@@ -4,14 +4,14 @@ from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
from .loader import load_yaml, save_yaml
|
||||
from .models import FeatureCompressorConfig
|
||||
from .models import Config
|
||||
|
||||
|
||||
class ConfigManager:
|
||||
"""Singleton configuration manager for unified config."""
|
||||
|
||||
_instance: Optional["ConfigManager"] = None
|
||||
_config: Optional[FeatureCompressorConfig] = None
|
||||
_config: Optional[Config] = None
|
||||
|
||||
def __new__(cls) -> "ConfigManager":
|
||||
"""Singleton pattern - ensure only one instance exists."""
|
||||
@@ -24,17 +24,17 @@ class ConfigManager:
|
||||
self.config_dir = Path(__file__).parent
|
||||
self.config_path = self.config_dir / "config.yaml"
|
||||
|
||||
def load(self) -> FeatureCompressorConfig:
|
||||
def load(self) -> Config:
|
||||
"""Load configuration from config.yaml file.
|
||||
|
||||
Returns:
|
||||
Loaded and validated FeatureCompressorConfig instance
|
||||
"""
|
||||
config = load_yaml(self.config_path, FeatureCompressorConfig)
|
||||
config = load_yaml(self.config_path, Config)
|
||||
self._config = config
|
||||
return config
|
||||
|
||||
def get(self) -> FeatureCompressorConfig:
|
||||
def get(self) -> Config:
|
||||
"""Get loaded configuration, auto-loading if not already loaded.
|
||||
|
||||
Returns:
|
||||
@@ -50,7 +50,7 @@ class ConfigManager:
|
||||
|
||||
def save(
|
||||
self,
|
||||
config: Optional[FeatureCompressorConfig] = None,
|
||||
config: Optional[Config] = None,
|
||||
path: Optional[Path] = None,
|
||||
) -> None:
|
||||
"""Save configuration to YAML file.
|
||||
|
||||
@@ -1,21 +1,7 @@
|
||||
model:
|
||||
name: "facebook/dinov2-large"
|
||||
compression_dim: 256
|
||||
pooling_type: "attention" # attention-based Top-K
|
||||
top_k_ratio: 0.5 # Keep 50% of tokens
|
||||
hidden_ratio: 2.0 # MLP hidden = compression_dim * 2
|
||||
dropout_rate: 0.1
|
||||
use_residual: true
|
||||
device: "auto" # auto-detect GPU
|
||||
|
||||
visualization:
|
||||
plot_theme: "plotly_white"
|
||||
color_scale: "viridis"
|
||||
point_size: 8
|
||||
fig_width: 900
|
||||
fig_height: 600
|
||||
compression_dim: 512
|
||||
device: "auto" # auto-detect GPU
|
||||
|
||||
output:
|
||||
directory: "./outputs"
|
||||
html_self_contained: true
|
||||
png_scale: 2 # 2x resolution for PNG
|
||||
|
||||
@@ -19,42 +19,17 @@ class ModelConfig(BaseModel):
|
||||
|
||||
name: str = "facebook/dinov2-large"
|
||||
compression_dim: int = Field(
|
||||
default=256, gt=0, description="Output feature dimension"
|
||||
default=512, gt=0, description="Output feature dimension"
|
||||
)
|
||||
pooling_type: PoolingType = PoolingType.ATTENTION
|
||||
top_k_ratio: float = Field(
|
||||
default=0.5, ge=0, le=1, description="Ratio of tokens to keep"
|
||||
)
|
||||
hidden_ratio: float = Field(
|
||||
default=2.0, gt=0, description="MLP hidden dim as multiple of compression_dim"
|
||||
)
|
||||
dropout_rate: float = Field(
|
||||
default=0.1, ge=0, le=1, description="Dropout probability"
|
||||
)
|
||||
use_residual: bool = True
|
||||
device: str = "auto"
|
||||
|
||||
|
||||
class VisualizationConfig(BaseModel):
|
||||
"""Configuration for visualization settings."""
|
||||
|
||||
model_config = ConfigDict(extra="ignore")
|
||||
|
||||
plot_theme: str = "plotly_white"
|
||||
color_scale: str = "viridis"
|
||||
point_size: int = Field(default=8, gt=0)
|
||||
fig_width: int = Field(default=900, gt=0)
|
||||
fig_height: int = Field(default=600, gt=0)
|
||||
|
||||
|
||||
class OutputConfig(BaseModel):
|
||||
"""Configuration for output settings."""
|
||||
|
||||
model_config = ConfigDict(extra="ignore")
|
||||
|
||||
directory: Path = Path(__file__).parent.parent.parent / "outputs"
|
||||
html_self_contained: bool = True
|
||||
png_scale: int = Field(default=2, gt=0)
|
||||
|
||||
@field_validator("directory", mode="after")
|
||||
def convert_to_absolute(cls, v: Path) -> Path:
|
||||
@@ -67,11 +42,10 @@ class OutputConfig(BaseModel):
|
||||
return Path(__file__).parent.parent.parent / v
|
||||
|
||||
|
||||
class FeatureCompressorConfig(BaseModel):
|
||||
class Config(BaseModel):
|
||||
"""Root configuration for the feature compressor."""
|
||||
|
||||
model_config = ConfigDict(extra="ignore")
|
||||
|
||||
model: ModelConfig
|
||||
visualization: VisualizationConfig
|
||||
output: OutputConfig
|
||||
|
||||
Reference in New Issue
Block a user