MobileNetV3-Large for Bacterial Colony Classification

This model is a fine-tuned MobileNetV3-Large for classifying bacterial colony images from the DIBaS dataset.

Model Description

  • Architecture: MobileNetV3-Large (ImageNet pretrained)
  • Task: Multi-class image classification (33 bacterial species)
  • Input Size: 224×224×3 RGB
  • Parameters: 4.24M
  • Validation Accuracy: 95.45%
  • Macro F1-Score: 0.954

Available Formats

Format File Size Use Case
PyTorch (.bin) pytorch_model.bin 16.4 MB Training, fine-tuning
TorchScript (.pt) mobilenet_v3_large.pt 17.6 MB Python inference, iOS (Core ML)
ONNX (.onnx) mobilenet_v3_large.onnx + .data 17.0 MB Cross-platform, Android, Edge

Quick Start

Installation

pip install torch torchvision timm huggingface_hub

Load PyTorch Model

import torch
import timm
from huggingface_hub import hf_hub_download

# Download checkpoint
checkpoint_path = hf_hub_download(
    repo_id="ihoflaz/dibas-mobilenet-v3-large",
    filename="pytorch_model.bin"
)

# Create model
model = timm.create_model("mobilenetv3_large_100", pretrained=False, num_classes=33)
model.load_state_dict(torch.load(checkpoint_path, map_location="cpu"))
model.eval()

# Inference
from torchvision import transforms
from PIL import Image

transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

image = Image.open("bacteria_image.jpg").convert("RGB")
input_tensor = transform(image).unsqueeze(0)

with torch.no_grad():
    output = model(input_tensor)
    pred_idx = output.argmax(dim=1).item()
    confidence = torch.softmax(output, dim=1)[0, pred_idx].item()

print(f"Predicted class: {pred_idx}, Confidence: {confidence:.2%}")

Load TorchScript Model

import torch
from huggingface_hub import hf_hub_download

# Download TorchScript model
model_path = hf_hub_download(
    repo_id="ihoflaz/dibas-mobilenet-v3-large",
    filename="mobilenet_v3_large.pt"
)

# Load and use
model = torch.jit.load(model_path, map_location="cpu")
model.eval()

# Inference (same preprocessing as above)
with torch.no_grad():
    output = model(input_tensor)

Load ONNX Model

import onnxruntime as ort
import numpy as np
from huggingface_hub import hf_hub_download

# Download ONNX files
onnx_path = hf_hub_download(
    repo_id="ihoflaz/dibas-mobilenet-v3-large",
    filename="mobilenet_v3_large.onnx"
)
# Data file will be downloaded automatically if in same directory

# Create session
session = ort.InferenceSession(onnx_path)

# Inference
input_name = session.get_inputs()[0].name
output = session.run(None, {input_name: input_array})[0]
pred_idx = np.argmax(output, axis=1)[0]

Download Labels

from huggingface_hub import hf_hub_download

labels_path = hf_hub_download(
    repo_id="ihoflaz/dibas-mobilenet-v3-large",
    filename="labels.txt"
)

with open(labels_path) as f:
    labels = [line.strip() for line in f.readlines()]

print(f"Predicted: {labels[pred_idx]}")

Class Labels (33 species)

Acinetobacter_baumannii, Actinomyces_israelii, Bacteroides_fragilis,
Bifidobacterium_spp, Candida_albicans, Clostridium_perfringens,
Enterococcus_faecalis, Enterococcus_faecium, Escherichia_coli,
Fusobacterium, Lactobacillus_casei, Lactobacillus_crispatus,
Lactobacillus_delbrueckii, Lactobacillus_gasseri, Lactobacillus_jensenii,
Lactobacillus_johnsonii, Lactobacillus_paracasei, Lactobacillus_plantarum,
Lactobacillus_reuteri, Lactobacillus_rhamnosus, Lactobacillus_salivarius,
Listeria_monocytogenes, Micrococcus_spp, Neisseria_gonorrhoeae,
Porphyromonas_gingivalis, Propionibacterium_acnes, Proteus,
Pseudomonas_aeruginosa, Staphylococcus_aureus, Staphylococcus_epidermidis,
Staphylococcus_saprophyticus, Streptococcus_agalactiae, Veillonella

Training Details

  • Dataset: DIBaS (Digital Image of Bacterial Species)
  • Split: 70% train / 20% val / 10% test (stratified, seed=42)
  • Optimizer: AdamW (lr=1e-4, weight_decay=0.01)
  • Scheduler: CosineAnnealingLR
  • Epochs: 20
  • Batch Size: 32
  • Mixed Precision: FP16 (AMP)
  • Augmentation: RandomResizedCrop, HorizontalFlip, ColorJitter

Mobile Deployment

iOS (Core ML)

Convert TorchScript to Core ML on macOS:

import coremltools as ct
import torch

model = torch.jit.load("mobilenet_v3_large.pt", map_location="cpu")
mlmodel = ct.convert(
    model,
    inputs=[ct.ImageType(shape=(1, 3, 224, 224), scale=1/255.0,
            bias=[-0.485/0.229, -0.456/0.224, -0.406/0.225])]
)
mlmodel.save("BacteriaClassifier.mlpackage")

Android (ONNX Runtime)

val session = OrtEnvironment.getEnvironment()
    .createSession(modelBytes, OrtSession.SessionOptions())

Citation

@misc{dibas-mobilenet-v3-large,
  author = {İbrahim Hulusi Oflaz},
  title = {MobileNetV3-Large for Bacterial Colony Classification},
  year = {2025},
  publisher = {Hugging Face},
  url = {https://huggingface.co/ihoflaz/dibas-mobilenet-v3-large}
}

References

License

MIT License

Downloads last month
13
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support