--- license: openrail language: en library_name: timm tags: - image-classification - anime - real - rendered - 3d-graphics datasets: - coco - custom-anime - steam-screenshots --- # EfficientNet-B0 - Anime/Real/Rendered Classifier Fast, lightweight image classifier distinguishing photographs from anime and 3D rendered images. ## Model Summary - **Model Name:** efficientnet_b0 - **Framework:** PyTorch + TIMM - **Input:** 224×224 RGB images - **Output:** 3 classes (anime, real, rendered) - **Parameters:** 5.3M - **Size:** 16.2 MB ## Intended Use Classify images into three categories: - **anime**: Drawn 2D or cel-shaded animation - **real**: Photographs and real-world footage - **rendered**: 3D graphics (games, CGI, Pixar, etc.) ## Performance **Validation Accuracy:** 97.44% | Class | Precision | Recall | F1-Score | Support | |-------|-----------|--------|----------|---------| | anime | 0.98 | 0.99 | 0.99 | 236 | | real | 0.98 | 0.98 | 0.98 | 500 | | rendered | 0.96 | 0.93 | 0.94 | 161 | | **weighted avg** | **0.97** | **0.97** | **0.97** | **897** | ## Training Data - **Real images:** 5,000 COCO 2017 validation set images - **Anime images:** 2,357 curated animation frames and key scenes - **Rendered images:** 1,549 AAA game screenshots (Metacritic ≥75) + 61 Pixar movie stills - **Total:** 8,967 images, 8,070 training, 897 validation (perceptually-hashed for diversity) ## Training Details - **Framework:** PyTorch - **Augmentation:** Resize only (224×224) - **Loss Function:** CrossEntropyLoss with inverse frequency class weights - **Optimizer:** AdamW (lr=0.001) - **Batch Size:** 80 - **Epochs:** 20 - **Hardware:** NVIDIA RTX 3060 (12GB VRAM) - **Training Time:** ~20 minutes ## Limitations 1. Photorealistic video games sometimes classified as real (90% recall on rendered class) 2. Cel-shaded games may score as anime rather than rendered 3. Artistic 3D renders (Pixar, high-quality CGI) show mixed confidence 4. Performance degrades on images <224×224 ## Recommendations - Use confidence threshold of ≥80% for reliable predictions - For critical applications, ensemble with tf_efficientnetv2_s - Check confusion patterns in own use cases - Manually review edge cases (game screenshots, stylized renders) ## How to Use ```python from PIL import Image import torch from torchvision import transforms import timm from safetensors.torch import load_file # Load model = timm.create_model('efficientnet_b0', num_classes=3, pretrained=False) state_dict = load_file('model.safetensors') model.load_state_dict(state_dict) model.eval() # Prepare image transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), ]) img = Image.open('image.jpg').convert('RGB') x = transform(img).unsqueeze(0) # Infer with torch.no_grad(): logits = model(x) probs = torch.softmax(logits, dim=1) pred = probs.argmax().item() labels = ['anime', 'real', 'rendered'] print(f"{labels[pred]}: {probs[0, pred]:.1%}") ``` ## Benchmarks **Inference Speed (RTX 3060)** - Single image: ~20ms - Batch of 32: ~150ms **Accuracy Comparison** | Model | Accuracy | Speed | Params | |-------|----------|-------|--------| | EfficientNet-B0 | 97.44% | Fast | 5.3M | | TF-EfficientNetV2-S | 97.55% | Moderate | 21.5M | ## Ethical Considerations This model classifies images by visual style/source. Potential misuse: - Detecting deepfakes/AI-generated content (not designed for this) - Filtering user-generated content (may have cultural bias) - Surveillance or profiling **Recommendations:** - Use with human review for content moderation - Test on your target domain before deployment - Don't rely solely on automatic classification for safety-critical decisions - Consider cultural representation in anime/rendered content ## Contact For questions or issues: [GitHub repo] ## License OpenRAIL (Open Responsible AI License) - free for research and commercial use with proper attribution