Tri-Netra-AI / src /evaluate.py
anannyavyas1's picture
Upload folder using huggingface_hub
1cf3825 verified
Raw
History Blame Contribute Delete
1.95 kB
import argparse
import json
import os
import sys
from pathlib import Path
import numpy as np
import tensorflow as tf
root = Path(__file__).resolve().parents[1]
sys.path.append(str(root))
from src.data import get_datasets, prepare_dataset
from src.models import get_model
from src.utils import compute_metrics, save_metrics_json
def parse_args():
parser = argparse.ArgumentParser(description='Evaluate trained brain tumor detection models')
parser.add_argument('--model', choices=['cnn', 'transfer', 'vit'], default='cnn')
parser.add_argument('--dataset', default='dataset')
parser.add_argument('--weights', required=True)
parser.add_argument('--batch_size', type=int, default=32)
parser.add_argument('--output', default='artifacts')
return parser.parse_args()
def main():
args = parse_args()
train_ds, val_ds, test_ds = get_datasets(args.dataset, batch_size=args.batch_size)
if test_ds is None:
print('No test split found in dataset. Evaluation requires dataset/test or a separate evaluation dataset.')
return
test_ds = prepare_dataset(test_ds)
model = get_model(args.model, transfer_weights=None)
model.load_weights(args.weights)
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy', tf.keras.metrics.Precision(name='precision'), tf.keras.metrics.Recall(name='recall')],
)
result = model.evaluate(test_ds, verbose=1)
print('Raw evaluation results:', result)
metrics = compute_metrics(model, test_ds)
os.makedirs(args.output, exist_ok=True)
metrics_path = os.path.join(args.output, f'{args.model}_evaluation_metrics.json')
save_metrics_json(metrics, metrics_path)
print(f'Evaluation metrics saved to {metrics_path}')
print('Classification report:')
print(metrics['classification_report'])
if __name__ == '__main__':
main()