lunar_project / predict.py
Crystalbullet's picture
Upload final lunar terrain classifier and reproducibility artifacts
fc9a057 verified
Raw History Blame Contribute Delete
1.6 kB
"""Inference from a self-describing audited checkpoint; CSV schema enforced."""
import argparse
from pathlib import Path
import pandas as pd
from experiment_utils import ROOT, atomic_csv, validate_submission
from training_engine import Settings, setup, build_model, load_checkpoint, prediction_frame
def predict(checkpoint,output):
state=load_checkpoint(checkpoint)
if state.get('schema')!=2:
raise ValueError('Legacy checkpoint: use its archived source/preprocessing in original_snapshot.')
settings=Settings(**state['settings']); setup(settings.seed)
model=build_model(settings,False).cuda(); model.load_state_dict(state['model'])
frame=pd.read_csv(ROOT/'Test_DATA/test_metadata.csv')
probabilities=prediction_frame(model,frame,settings,state['threshold'],ROOT/'Test_DATA/eval_images')
submission=pd.DataFrame(dict(image_id=frame.image_id,label=probabilities.prediction.astype(int)))
validate_submission(submission,frame.image_id)
output=Path(output)
if output.exists():
raise FileExistsError(f'Preserve the existing output or choose a new path: {output}')
atomic_csv(output,submission)
atomic_csv(output.with_name('evaluation_probabilities.csv'),probabilities)
print(f'Validated {len(submission)} predictions: {output}',flush=True)
return submission
def main():
parser=argparse.ArgumentParser()
parser.add_argument('--checkpoint',type=Path,required=True)
parser.add_argument('--output',type=Path,required=True)
args=parser.parse_args(); predict(args.checkpoint,args.output)
if __name__=='__main__': main()