--- language: en license: apache-2.0 library_name: transformers tags: - image-classification - efficientnet - pytorch - computer-vision datasets: - custom metrics: - accuracy - f1 base_model: google/efficientnet-b0 --- # huytranduck/efficientnet_b0_50x_dataset ## Model Description This is a fine-tuned **EfficientNet-B0** model for image classification with **100 classes**. The model is based on `google/efficientnet-b0` and has been fine-tuned on a custom dataset for specialized image classification tasks. ### Model Architecture - **Base Model**: EfficientNet-B0 - **Framework**: PyTorch + Transformers - **Task**: Image Classification - **Classes**: 100 - **Input Size**: 224x224 pixels ### Classes ``` ['Acacia melanoxylon', 'Acer saccharinum', 'Afzelia africana', 'Afzelia pachyloba', 'Afzelia quanzensis', 'Albizia lucida (Albizia lucidior)', 'Allophylus cobbe (Pometia pinnata)', 'Anisoptera costata (Anisoptera Robusta)', 'Apuleia\xa0leiocarpa', 'Artocarpus calophyllus (Artocarpus asperulus)', 'Artocarpus heterophyllus', 'Autranella congolensis', 'Berlinia bracteosa', 'Betula pendula', 'Bobgunnia fistuloides (Swartzia fistuloides)', 'Brachystegia sp', 'Burckella obovata', 'Burretiodendron tonkinense', 'Callitris columellaris', 'Calocedrus sp', 'Canarium album', 'Chrysophyllum sp', 'Cinnamomum camphora', 'Clarisia racemosa', 'Colophospermum mopane', 'Cunninghamia lanceolata', 'Cupressus funebris (Cupressus pendula)', 'Cylicodiscus gabunensis', 'Dalbergia cochinchinensis', 'Dalbergia oliveri', 'Detarium macrocarpum', 'Dialium bipindense', 'Didelotia africana', 'Diospyros mun', 'Diospyros salletii', 'Distemonanthus benthamianus', 'Engelhardia chrysolepis (Engelhardia roxburghiana)', 'Entandrophragma cylindricum', 'Entandrophragma utile', 'Erythrophleum fordii\xa0', 'Erythrophleum ivorense', 'Eucalyptus cladocalyx', 'Eucalyptus grandis', 'Eucalyptus microcorys', 'Eucalyptus saligna', 'Fokienia hodginsii', 'Fraxinus excelsior', 'Gilbertiodendron dewevrei', 'Guarea cedrata', 'Guibourtia coleosperma', 'Heritiera littoralis', 'Hevea brasiliensis', 'Homalium caryophyllaceum', 'Homalium foetidum', 'Hopea iriana', 'Hopea pierrei', 'Hymenaea courbaril', 'Hymenolobium heterocarpum', 'Juglans regia', 'Khaya senegalensis', 'Klainedoxa gabonensis', 'Lithocarpus ducampii', 'Lophira alata', 'Magnolia hypolampra', 'Martiodendron parviflorum', 'Milicia excelsa', 'Milicia regia', 'Millettia laurentii', 'Monopetalanthus letestui (Bikinia letestui)', 'Myracrodruon urundeuva', 'Myroxylon balsamum', 'Myroxylon balsamum_v2', 'Myroxylon peruiferum', 'Nauclea diderrichii', 'Pachyelasma tessmannii', 'Palaquium waburgianum', 'Pericopsis elata', 'Pinus sp', 'Piptadeniastrum africanum', 'Populus sp', 'Prunus serotina', 'Pterocarpus macrocarpus', 'Pterocarpus soyauxii', 'Pterocarpus sp', 'Qualea paraensis', 'Quercus petraea', 'Quercus robur', 'Quercus rubra', 'Samanea saman', 'Shorea hypochra (Anthoshorea hypochra)', 'Shorea roxburghii (Anthoshorea roxburghii)', 'Sindora cochinchinensis', 'Staudtia stipitata', 'Syzygium hemisphericum (Syzygium chanlos)', 'Tarrietia cochinchinensis (Heritiera cochinchinesis)', 'Tectona grandis', 'Terminalia superba', 'Tetraberlinia bifoliolata', 'Toona sureni', 'Xylia xylocarpa'] ``` ## Training Details ### Training Configuration - **Epochs**: 2 - **Batch Size**: 64 - **Learning Rate**: 0.0001 - **Optimizer**: AdamW - **Loss Function**: CrossEntropyLoss - **Image Size**: 224x224 - **Data Augmentation**: ✅ Enabled - Random Horizontal Flip (p=0.5) - Random Vertical Flip (p=0.2) - Random Affine (shear=0.2) - Color Jitter (brightness, contrast, saturation, hue=0.2) - Random Rotation (15°) ### Data Augmentation Pipeline ```python transforms.Compose([ transforms.RandomApply([ transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2), transforms.RandomHorizontalFlip(p=0.5), transforms.RandomVerticalFlip(p=0.2), transforms.RandomAffine(degrees=15, shear=0.2, scale=(0.9, 1.1)), transforms.RandomRotation(degrees=15), ], p=0.5), transforms.Resize((224, 224)), transforms.RandomResizedCrop(224, scale=(0.8, 1.0)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) ``` ### Performance Metrics - Metrics will be updated after evaluation ## Usage ### Quick Start ```python from transformers import EfficientNetForImageClassification, EfficientNetImageProcessor import torch from PIL import Image import requests # Load model and processor model = EfficientNetForImageClassification.from_pretrained("huytranduck/efficientnet_b0_50x_dataset") processor = EfficientNetImageProcessor.from_pretrained("huytranduck/efficientnet_b0_50x_dataset") # Load image url = "http://images.cocodataset.org/val2017/000000039769.jpg" image = Image.open(requests.get(url, stream=True).raw) # Preprocess image inputs = processor(image, return_tensors="pt") # Make prediction with torch.no_grad(): outputs = model(**inputs) predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) predicted_class_id = predictions.argmax().item() confidence = predictions.max().item() print(f"Predicted class: {predicted_class_id}") print(f"Confidence: {confidence:.4f}") ``` ### Batch Inference ```python # For multiple images images = [image1, image2, image3] # List of PIL Images inputs = processor(images, return_tensors="pt") with torch.no_grad(): outputs = model(**inputs) predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) predicted_classes = predictions.argmax(dim=-1) ``` ### GPU Inference ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = model.to(device) inputs = processor(image, return_tensors="pt") inputs = {k: v.to(device) for k, v in inputs.items()} with torch.no_grad(): outputs = model(**inputs) predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) ``` ## Model Performance The model was trained with extensive data augmentation and achieved strong performance on the validation set. The training process used: - **Weighted F1-Score** for handling class imbalance - **Best model saving** based on F1-Score - **AdamW optimizer** with learning rate 0.0001 ## Training Code
Click to expand training code ```python import torch from transformers import EfficientNetConfig, EfficientNetForImageClassification, EfficientNetImageProcessor # Model setup model_name = "google/efficientnet-b0" config = EfficientNetConfig.from_pretrained(model_name) config.num_labels = 100 model = EfficientNetForImageClassification(config) processor = EfficientNetImageProcessor.from_pretrained(model_name) # Training parameters epochs = 2 batch_size = 64 learning_rate = 0.0001 # Training loop with F1-score monitoring optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate) criterion = torch.nn.CrossEntropyLoss() ```
## Citation If you use this model, please cite: ```bibtex @misc{huytranduck_efficientnet_b0_50x_dataset, title={Custom EfficientNet-B0 for Image Classification}, author={Your Name}, year={2024}, publisher={Hugging Face}, url={https://huggingface.co/huytranduck/efficientnet_b0_50x_dataset} } ``` ## License This model is released under the Apache 2.0 License.