Spaces:
Sleeping
Sleeping
| import torch | |
| import torch.nn as nn | |
| import timm | |
| class DeepfakeDetector(nn.Module): | |
| def __init__(self): | |
| super().__init__() | |
| self.backbone = timm.create_model("efficientnet_b0", pretrained=False, num_classes=0) | |
| old_conv = self.backbone.conv_stem | |
| new_conv = nn.Conv2d(4, old_conv.out_channels, | |
| kernel_size=old_conv.kernel_size, stride=old_conv.stride, | |
| padding=old_conv.padding, bias=old_conv.bias is not None) | |
| self.backbone.conv_stem = new_conv | |
| self.head = nn.Sequential( | |
| nn.Dropout(0.3), nn.Linear(1280, 256), nn.ReLU(), | |
| nn.Dropout(0.2), nn.Linear(256, 1)) | |
| def forward(self, x): | |
| return self.backbone(x) | |
| model = DeepfakeDetector() | |
| state = torch.load("best_model.pth", map_location="cpu", weights_only=False) | |
| print(f"Keys in checkpoint: {len(state)}") | |
| print(f"Keys in model: {len(model.state_dict())}") | |
| result = model.load_state_dict(state, strict=False) | |
| print(f"\nMissing keys (not loaded, stay random!): {len(result.missing_keys)}") | |
| for k in result.missing_keys[:20]: | |
| print(f" {k}") | |
| print(f"\nUnexpected keys (in file but unused): {len(result.unexpected_keys)}") | |
| for k in result.unexpected_keys[:20]: | |
| print(f" {k}") | |
| # Check sample tensor for sanity | |
| ckpt_first = list(state.keys())[0] | |
| model_first = list(model.state_dict().keys())[0] | |
| print(f"\nCheckpoint first key: {ckpt_first} shape={state[ckpt_first].shape}") | |
| print(f"Model first key: {model_first} shape={model.state_dict()[model_first].shape}") |