Download clean/video/lipfd/validate.py from deepsafe/model-code: direct link, hf CLI and curl.
- Browser
- Download file 2.49 kB
-
https://huggingface.co/deepsafe/model-code/resolve/main/clean/video/lipfd/validate.py
- Command line
-
hf download hf://deepsafe/model-code/clean/video/lipfd/validate.py
-
curl -L -o validate.py https://huggingface.co/deepsafe/model-code/resolve/main/clean/video/lipfd/validate.py
2.49 kB
| import argparse | |
| import torch | |
| import numpy as np | |
| from data import AVLip | |
| import torch.utils.data | |
| from models import build_model | |
| from sklearn.metrics import average_precision_score, confusion_matrix, accuracy_score | |
| def validate(model, loader, gpu_id): | |
| print("validating...") | |
| device = torch.device(f"cuda:{gpu_id[0]}" if torch.cuda.is_available() else "cpu") | |
| with torch.no_grad(): | |
| y_true, y_pred = [], [] | |
| for img, crops, label in loader: | |
| img_tens = img.to(device) | |
| crops_tens = [[t.to(device) for t in sublist] for sublist in crops] | |
| features = model.get_features(img_tens).to(device) | |
| y_pred.extend(model(crops_tens, features)[0].sigmoid().flatten().tolist()) | |
| y_true.extend(label.flatten().tolist()) | |
| y_true = np.array(y_true) | |
| y_pred = np.where(np.array(y_pred) >= 0.5, 1, 0) | |
| # Get AP | |
| ap = average_precision_score(y_true, y_pred) | |
| cm = confusion_matrix(y_true, y_pred) | |
| tp, fn, fp, tn = cm.ravel() | |
| fnr = fn / (fn + tp) | |
| fpr = fp / (fp + tn) | |
| acc = accuracy_score(y_true, y_pred) | |
| return ap, fpr, fnr, acc | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) | |
| parser.add_argument("--real_list_path", type=str, default="./datasets/val/0_real") | |
| parser.add_argument("--fake_list_path", type=str, default="./datasets/val/1_fake") | |
| parser.add_argument("--max_sample", type=int, default=1000, help="max number of validate samples") | |
| parser.add_argument("--batch_size", type=int, default=10) | |
| parser.add_argument("--data_label", type=str, default="val") | |
| parser.add_argument("--arch", type=str, default="CLIP:ViT-L/14") | |
| parser.add_argument("--ckpt", type=str, default="./checkpoints/ckpt.pth") | |
| parser.add_argument("--gpu", type=int, default=0) | |
| opt = parser.parse_args() | |
| device = torch.device(f"cuda:{opt.gpu}" if torch.cuda.is_available() else "cpu") | |
| print(f"Using cuda {opt.gpu} for inference.") | |
| model = build_model(opt.arch) | |
| state_dict = torch.load(opt.ckpt, map_location="cpu") | |
| model.load_state_dict(state_dict["model"]) | |
| print("Model loaded.") | |
| model.eval() | |
| model.to(device) | |
| dataset = AVLip(opt) | |
| loader = data_loader = torch.utils.data.DataLoader( | |
| dataset, batch_size=opt.batch_size, shuffle=True | |
| ) | |
| ap, fpr, fnr, acc = validate(model, loader, gpu_id=[opt.gpu]) | |
| print(f"acc: {acc} ap: {ap} fpr: {fpr} fnr: {fnr}") | |