Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
116 lines (90 loc) · 3.7 KB
/
Copy pathmain.py
File metadata and controls
116 lines (90 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
"""
MIDAS V1: Multi-Modal Skin Cancer Detection System
Main entry point
"""
import argparse
import sys
from pathlib import Path
# Add src to path
sys.path.append(str(Path(__file__).parent / "src"))
from src.config.config import MIDASConfig
from src.utils.helpers import setup_logging, set_seed, log_system_info
from src.data.dataloader import DataManager
from src.models.model import ModelFactory
def main():
"""Main function to run MIDAS system."""
parser = argparse.ArgumentParser(description="MIDAS - Skin Cancer Detection System")
parser.add_argument("--mode", choices=["train", "api", "test"], default="api",
help="Mode to run the system in")
parser.add_argument("--model", default="efficientnet_b0",
help="Model architecture to use")
parser.add_argument("--epochs", type=int, default=50,
help="Number of training epochs")
parser.add_argument("--batch-size", type=int, default=32,
help="Batch size for training")
parser.add_argument("--lr", type=float, default=0.001,
help="Learning rate")
args = parser.parse_args()
# Initialize configuration
config = MIDASConfig()
config.num_epochs = args.epochs
config.batch_size = args.batch_size
config.learning_rate = args.lr
# Setup logging
logger = setup_logging(config.logs_dir, config.project_name)
# Set random seed
set_seed(config.seed)
logger.info(f"Random seed set to {config.seed}")
# Log system information
log_system_info(logger)
if args.mode == "api":
# Run API server
logger.info("Starting API server...")
import uvicorn
from src.api.inference_api import app
uvicorn.run(
app,
host=config.api_host,
port=config.api_port,
log_level="info"
)
elif args.mode == "train":
# Training mode (to be implemented)
logger.info("Training mode - To be implemented")
logger.info(f"Model: {args.model}")
logger.info(f"Epochs: {config.num_epochs}")
logger.info(f"Batch Size: {config.batch_size}")
logger.info(f"Learning Rate: {config.learning_rate}")
# Initialize data manager
data_manager = DataManager(config, logger)
# Load datasets
logger.info("Loading datasets...")
ham10000 = data_manager.load_ham10000()
if ham10000:
logger.info(f"HAM10000 loaded: {ham10000.get('image_count', 0)} images")
# Create model
model = ModelFactory.create_model(
model_name=args.model,
num_classes=config.num_classes,
pretrained=True
)
model_info = ModelFactory.get_model_info(args.model)
logger.info(f"Model created: {model_info}")
logger.info("Training pipeline ready. Implementation needed for full training loop.")
elif args.mode == "test":
# Test mode
logger.info("Test mode - Running system checks...")
# Test imports
logger.info("✓ All imports successful")
# Test configuration
logger.info(f"✓ Configuration loaded: {config.project_name}")
# Test data manager
data_manager = DataManager(config, logger)
logger.info("✓ Data manager initialized")
# Test model creation
model = ModelFactory.create_model("efficientnet_b0")
logger.info("✓ Model creation successful")
logger.info("All system checks passed!")
logger.info("MIDAS system execution complete")
if __name__ == "__main__":
main()