A lightweight, 100% open-source image feature extractor designed for on-device transfer learning
🇫🇮 Designed and trained in Finland by BC Bertenex Oy
📱 Built for mobile deployment — runs on any Android/iOS device
🎓 Ideal for education, prototyping, and production mobile apps
⚖️ 100% clean license chain — architecture, data, and weights all openly licensed
OpenImages V7, bounding-box verified subset (CC BY 4.0)
Training Classes
65 diverse categories
License
Apache 2.0
Highlights
Ultra-Lightweight: Only 423K parameters — 8× smaller than MobileNetV2, runs on the cheapest smartphones
512-Dim Feature Extractor: Outputs a compact, powerful feature vector that enables on-device transfer learning with as few as 5–10 images per class
100% Open License Chain: Own architecture → own training code → CC BY 4.0 training data → own weights. No legal grey areas. No inherited license restrictions. Every component is transparent and traceable.
Designed in Finland: Built by BC Bertenex Oy, a Finnish company, to European standards of transparency and data responsibility
Education-Friendly Design: Clear, well-documented architecture suitable for teaching how neural networks work — from first-year students to professionals exploring on-device AI
Production Ready: Exported to ONNX (and TFLite), suitable for embedding in Android/iOS/Flutter apps via standard inference runtimes
Why This Model Exists
Most pre-trained mobile models (MobileNetV2, EfficientNet-Lite) carry weights derived from ImageNet training under ambiguous or restrictive license terms. If you build a commercial product on those weights, your legal standing is unclear.
SekoKuva Mobile 423K solves this. Every component has a clear, permissive license:
Component
Source
License
Architecture
Original design by BC Bertenex Oy
Apache 2.0
Training code
Written from scratch
Apache 2.0
Training data
OpenImages V7 (bbox-verified only)
CC BY 4.0
Model weights
Trained from scratch (random init)
Apache 2.0
You can use this model in commercial products, modify it, redistribute it, and build upon it — with full legal clarity.
Model Architecture
SekoKuva Mobile 423K uses depthwise separable convolutions — the same core building block as MobileNetV1 — arranged in 5 progressive stages that transform a raw photo into a compact feature vector.
Trained on a curated subset of OpenImages V7 with the following key properties:
65 diverse categories spanning fruits, vegetables, animals, people, vehicles, household objects, plants, and nature
Only bounding-box verified images — every training image has a human-drawn bounding box confirming the object's presence (no machine-generated labels, no ambiguity)
Cropped to object region with 20% context padding — ensures every image actually shows the labeled object
Stochastic Weight Averaging in final 25% of training
Hardware
NVIDIA GeForce RTX 4050 Laptop GPU (6 GB VRAM)
Training time
~7 hours total (200 epochs)
Training Techniques
All techniques are implemented in the open-source training script (train.py) and enabled by default:
Automatic Mixed Precision (AMP): ~2× speedup on GPUs with Tensor Cores
CutMix + MixUp: Advanced augmentation that creates mixed training samples, improving regularization (+2–5% accuracy)
Class-Balanced Sampling: WeightedRandomSampler ensures underrepresented classes (e.g., Cabbage: 368 images) get equal training time as larger classes (e.g., Car: 862 images)
Progressive Resolution: Training starts at 112×112 and gradually increases to 224×224, allowing early epochs to run faster while later epochs refine fine details
Stochastic Weight Averaging (SWA): Averages model weights across the final 25% of training epochs, finding a flatter minimum that generalizes better (+1–2% accuracy)
Gradient Accumulation: Configurable effective batch size without additional VRAM
Performance
Classification Accuracy
Metric
Value
Top-1 Accuracy (65 classes)
67.9%
Top-5 Accuracy (65 classes)
~88%
Random baseline (65 classes)
1.5%
Context: Model Size vs. Accuracy
Model
Params
Pre-trained on ImageNet?
Expected Accuracy (65 classes)
Random guess
—
—
1.5%
SekoKuva Mobile 423K
423K
No (trained from scratch)
67.9%
MobileNetV2
3.4M
No
~75%
MobileNetV2
3.4M
Yes
~85%
SekoKuva Mobile 423K achieves competitive accuracy at 8× fewer parameters than MobileNetV2, with the critical advantage of a fully clean license chain. The model is not designed to compete on raw accuracy — it is designed to provide the best possible feature quality at the smallest possible size for on-device transfer learning.
1# Extract 512-dim features for transfer learning2with torch.no_grad():3 features = model.forward_features(input_tensor)# [1, 512]45print(f"Feature vector: {features.shape}")# torch.Size([1, 512])
ONNX Inference
python
1import numpy as np
2import onnxruntime as ort
34# Load ONNX model5session = ort.InferenceSession("exported/sekokuva_mobile_classifier.onnx")67# Run inference (input_array: numpy float32 [1, 3, 224, 224])8result = session.run(None,{"input_image": input_array})9logits = result[0]# [1, 65] for classifier, [1, 512] for features
Feature Extraction (ONNX)
python
1# Use the features ONNX model for transfer learning pipelines2session = ort.InferenceSession("exported/sekokuva_mobile_features.onnx")3result = session.run(None,{"input_image": input_array})4features = result[0]# [1, 512]
Transfer Learning — The Key Feature
This is the primary use case. SekoKuva Mobile 423K is designed as a frozen feature extractor that enables on-device transfer learning with minimal data.
How It Works
The model converts any photo into a 512-dimensional feature vector — a compact numerical "fingerprint" that describes the visual content
A user trains a tiny linear layer on top (512 × num_classes parameters) using just 5–10 images per class
Training happens on-device in under a second — no GPU, no server, no cloud
Example: Custom 3-Class Classifier
python
1import torch
2import torch.nn as nn
34# 1. Freeze the feature extractor5feature_model = SekoKuvaMobile(num_classes=0)# Feature-only mode6feature_model.load_state_dict(checkpoint["model_state_dict"], strict=False)7feature_model.eval()89# 2. Collect features from user's photos (e.g., 10 photos × 3 classes)10features =[]# list of [512] tensors11labels =[]# list of class indices (0, 1, 2)1213for img_path, label in user_training_data:14 img = transform(Image.open(img_path).convert("RGB")).unsqueeze(0)15with torch.no_grad():16 feat = feature_model.forward_features(img)# [1, 512]17 features.append(feat.squeeze())18 labels.append(label)1920X = torch.stack(features)# [30, 512]21y = torch.tensor(labels)# [30]2223# 3. Train a tiny classifier (512 × 3 = 1,536 parameters)24classifier = nn.Linear(512,3)25optimizer = torch.optim.Adam(classifier.parameters(), lr=0.01)26criterion = nn.CrossEntropyLoss()2728for epoch inrange(100):# Takes < 1 second total29 logits = classifier(X)30 loss = criterion(logits, y)31 optimizer.zero_grad()32 loss.backward()33 optimizer.step()3435# 4. Classify a new image36new_img = transform(Image.open("new_photo.jpg").convert("RGB")).unsqueeze(0)37with torch.no_grad():38 feat = feature_model.forward_features(new_img)39 prediction = classifier(feat)40 class_idx = prediction.argmax().item()41print(f"Predicted class: {class_idx}")
Transfer Learning Performance
The quality of transfer learning depends on the feature vector quality, not the top-1 classification accuracy. With SekoKuva Mobile 423K features:
Task
Images per class
Expected accuracy
Binary classification (e.g., healthy vs. sick leaf)
10
85–95%
3-class classification
10
80–90%
5-class classification
15
75–85%
10-class classification
20
70–80%
These estimates assume the classes are visually distinct. Performance may vary for very similar classes.
Available Model Files
File
Format
Size
Description
checkpoints/best.pt
PyTorch
~2 MB
Full model checkpoint (classifier + backbone)
checkpoints/swa.pt
PyTorch
~2 MB
SWA-averaged model (best generalization)
exported/sekokuva_mobile_classifier.onnx
ONNX
~1.7 MB
Full 65-class classifier
exported/sekokuva_mobile_features.onnx
ONNX
~1.6 MB
Feature extractor only (512-dim output)
checkpoints/class_names.json
JSON
1 KB
Ordered list of 65 class names
Which File Should I Use?
Building a mobile app with on-device learning? → sekokuva_mobile_features.onnx
Fine-tuning on your own dataset? → checkpoints/best.pt (PyTorch)
Research or architecture exploration? → checkpoints/best.pt + source code
Fine-Tuning Guide
You can fine-tune the entire model on your own dataset. This is different from transfer learning — fine-tuning updates all weights, while transfer learning only trains a new head on frozen features.
When to Fine-Tune vs. Transfer Learn
Approach
Best for
Data needed
Compute needed
Transfer learning (frozen features)
Quick, few-shot tasks on phone
5–20 per class
CPU, < 1 second
Full fine-tuning
Specialized domains (medical, industrial)
100+ per class
GPU, minutes–hours
Fine-Tuning Example
bash
1# Replace the classifier head and train on your data2python train.py \3 --data_dir /path/to/your/dataset \4 --epochs 50\5 --batch_size 128\6 --lr 0.01\7 --resume checkpoints/best.pt
The training script automatically:
Detects the number of classes from your dataset folder structure
Replaces the classifier head if class count differs
Applies all training enhancements (AMP, CutMix, SWA, etc.)
Mobile image classification: Deploy as a lightweight classifier in Android/iOS/Flutter apps that runs fast even on low-end devices
On-device transfer learning: Use as a frozen feature extractor so end users can build custom classifiers with just a few photos — no server, no cloud
Educational tool: Teach students how neural networks, feature extraction, and transfer learning work through hands-on experimentation
Prototyping: Rapidly test image classification ideas before scaling to larger models
Clean-license foundation: Build commercial products with full legal clarity — no inherited license ambiguity
Out of Scope
Text recognition / OCR: The model processes whole-image features, not localized text
Object detection: The model classifies entire images, not bounding boxes within images
High-accuracy production classifier: For applications requiring >90% accuracy, consider larger models or the upcoming SekoKuva Mobile 5M
Video processing: Designed for single-frame classification
Limitations
65-class vocabulary: The classifier head recognizes 65 categories. The feature extractor generalizes beyond these, but performance on very dissimilar domains (e.g., medical imaging, satellite imagery) may be limited.
Small model capacity: With 423K parameters, the model cannot learn as many fine-grained distinctions as larger models. It trades accuracy for size and speed.
No pre-training on ImageNet: The model was trained from scratch on ~53K images. Models pre-trained on ImageNet's 1.2M images will have richer feature representations.
Resolution: Fixed 224×224 input. Very small objects or fine details may not be captured.
Ethical Considerations
Training data: All training data comes from OpenImages V7, which is publicly available under CC BY 4.0. Images were selected using human-verified bounding box annotations to minimize label noise.
Bias: The training categories reflect a curated subset of OpenImages chosen for broad everyday-object diversity (fruits, vegetables, animals, vehicles, household items). The model may perform unevenly across underrepresented visual domains.
Privacy: No personal data was used beyond what is publicly available in OpenImages V7. The model does not store, transmit, or identify personal information.
Environmental impact: Total training compute was approximately 7 GPU-hours on a laptop GPU — orders of magnitude less than large-scale model training.
About
BC Bertenex Oy
BC Bertenex Oy is a Finnish startup based in Eurajoki, Finland. We build AI-driven solutions for small businesses and design AI models for different purposes. We develop our own AI-based products and create educational content about AI.
The SekoKuva Project
SekoKuva (from the Finnish seko kuva — "messed-up image", inspired by the noisy initial state in diffusion models) is a media generation and AI model project started in July 2025. SekoKuva is a Finnish trademark owned by BC Bertenex Oy. Under the SekoKuva brand, we develop consumer-level AI products and open-source AI models — including this family of lightweight vision models designed for mobile deployment and on-device learning.
Roadmap
Model
Parameters
Status
Description
SekoKuva Mobile 423K
423K
✅ Released
Feature extractor for transfer learning
SekoKuva Mobile 5M
~5M
🔨 In development
Larger model with InvertedResidual blocks, multi-head classification
Reproduce From Scratch
The entire training pipeline is open source. To reproduce this model:
bash
1# 1. Clone the repository2git clone https://github.com/BCBertenex/SekoKuva Mobile.git
3cd SekoKuva Mobile
45# 2. Install dependencies6pip install torch torchvision onnx onnxruntime fiftyone numpy pillow tqdm
78# 3. Download training data (bounding-box verified, CC BY 4.0)9python prepare_data_clean.py --download --preset diverse --max-per-class 10001011# 4. Train (all enhancements enabled by default)12python train.py --data_dir ./data/openimages_clean --epochs 200 --batch_size 128 --num_workers 41314# 5. Export to ONNX15python export_tflite.py --checkpoint checkpoints/best.pt --mode features
16python export_tflite.py --checkpoint checkpoints/best.pt --mode classifier
Citation
bibtex
1@misc{sekokuva2026mobile423k,
2 title = {SekoKuva Mobile 423K: A Lightweight Open-Source Feature Extractor for On-Device Transfer Learning},
3 author = {{BC Bertenex Oy}},
4 year = {2026},
5 url = {https://huggingface.co/BCBertenex/sekokuva-mobile-423k},
6 note = {Apache 2.0 License. Trained on OpenImages V7 (CC BY 4.0).}
7}
License
This model is released under the Apache 2.0 License.
The training data (OpenImages V7) is licensed under Creative Commons Attribution 4.0 (CC BY 4.0).
You are free to use this model for any purpose — commercial, academic, or personal — with attribution to BC Bertenex Oy.