A complete mobile image classification app built with Lambda Native framework, featuring knowledge distillation and GPU-accelerated training. The app can classify images into 5 custom categories with real-time inference on mobile devices.
Knowledge Distillation: Teacher-student training for optimized mobile performance
GPU-Accelerated Training: Fast model training using PyTorch with CUDA
Cross-Platform Mobile App: Built with Lambda Native (Scheme) for Android/iOS
Model Quantization: ONNX and TFLite formats for efficient mobile inference
Real-time Classification: Camera integration and gallery support
Customizable Classes: Train with your own 5 image categories
Hardware NVIDIA GPU (for training)
Android/iOS device (for deployment)
8GB+ RAM recommended
Software Ubuntu 20.04+ (development)
Python 3.9
CUDA 11.8+
Android SDK (for mobile builds)
- Clone the Repository bash git clone https://github.com/yourusername/mobilenet-v4-classifier.git cd mobilenet-v4-classifier
- Environment Setup bash
Create and activate conda environment
conda env create -f environment.yml
conda activate mobilenet-v4-gpu
chmod +x setup_gpu.sh
./setup_gpu.sh
bash
python test_gpu_setup.py
Directory Structure
text
project/
βββ train_data/
β βββ class_0/ # Training images for class 0
β βββ class_1/ # Training images for class 1
β βββ class_2/ # Training images for class 2
β βββ class_3/ # Training images for class 3
β βββ class_4/ # Training images for class 4
βββ val_data/
βββ class_0/ # Validation images for class 0
βββ class_1/ # Validation images for class 1
βββ class_2/ # Validation images for class 2
βββ class_3/ # Validation images for class 3
βββ class_4/ # Validation images for class 4
Supported Image Formats
JPEG (.jpg, .jpeg)
PNG (.png)
Recommended size: 224x224 pixels
Minimum: 100 images per class for training
chmod +x setup_directories.sh
./setup_directories.sh
python check_dataset.py
- Start Training with Knowledge Distillation
bash
python train_mobilenet_gpu.py
Training Process Teacher Model: ResNet50 (high accuracy)
Student Model: MobileNet V2 (optimized for mobile)
Knowledge Distillation: Transfers learning from teacher to student
Training Time: ~30-60 minutes on RTX 3060
Expected Accuracy: 75-85% on validation set
python gpu_monitor.py
tail -f training_logs.txt
After training, models are automatically converted to:
ONNX format: mobilenet_model.onnx
TFLite format: model_quantized.tflite (quantized for mobile)
Class names: class_names.json
bash
chmod +x setup_lambda_native.sh
./setup_lambda_native.sh
cd ~/lambdanative
./configure
App Structure
text
lambdanative/
βββ apps/
β βββ mobilenetclassifier/
β βββ main.scm # Main application logic
β βββ manifest.scm # App configuration
β βββ ui/
β β βββ layout.scm # UI definitions
β βββ plugins/
β βββ mobilenet_model.onnx
β βββ model_quantized.tflite
β βββ class_names.json
bash
cd ~/lambdanative
./createapp mobilenetclassifier
cp mobilenet_model.onnx apps/mobilenetclassifier/plugins/
cp class_names.json apps/mobilenetclassifier/plugins/
cp model_quantized.tflite apps/mobilenetclassifier/plugins/
make android # Build Android APK
make ios # Build iOS app (requires macOS)
make desktop # Build for desktop testing
User Interface Camera Integration: Take photos directly in the app
Gallery Access: Choose images from device gallery
Real-time Results: Instant classification with confidence scores
Clean Design: Simple and intuitive user interface
Classification Capabilities 5 Custom Classes: Configured during training
Confidence Scores: Percentage-based predictions
Fast Inference: Optimized for mobile devices
Offline Operation: No internet connection required
Android Deployment bash
cd ~/lambdanative
make android
adb install -r apps/mobilenetclassifier/mobilenetclassifier.apk
ls apps/mobilenetclassifier/mobilenetclassifier.apk
iOS Deployment bash
make ios
Desktop Testing bash
make desktop ./apps/mobilenetclassifier/mobilenetclassifier
Modify Classes Edit class_names.json or retrain with new datasets:
json
["cats", "dogs", "birds", "cars", "flowers"]
Adjust Model Parameters Modify train_mobilenet_gpu.py:
python
config = {
'training': {
'epochs': 50, # Training iterations
'lr': 0.001, # Learning rate
'temperature': 3, # Distillation temperature
'alpha': 0.7 # Distillation weight
}
}
Edit ui/layout.scm to modify the app interface.
For Better Accuracy Increase training dataset size
Use data augmentation
Train for more epochs
Adjust knowledge distillation parameters
For Faster Inference Use TFLite with quantization
Reduce model complexity
Optimize image preprocessing
Use GPU delegation on supported devices
Common Issues GPU Not Detected
bash
nvidia-smi # Check GPU status
python test_gpu_setup.py
Training Accuracy Low
Check dataset balance
Verify image quality and labels
Adjust learning rate
Mobile App Build Fails
bash
make clean
./configure
make android
Model Conversion Errors
bash
python convert_to_tflite.py # Manual conversion
Logs and Debugging
bash
tail -f training_logs.txt
adb logcat | grep -i lambdanative
./apps/mobilenetclassifier/mobilenetclassifier --debug
π Results and Metrics Typical Performance Training Accuracy: 75-85%
Inference Time: <100ms on mobile
Model Size: 8-15MB (quantized)
Supported Devices: Android 8.0+, iOS 12+
Evaluation bash
python evaluate_model.py
python test_inference.py --image test_image.jpg
π€ Contributing Fork the repository
Create a feature branch (git checkout -b feature/amazing-feature)
Commit your changes (git commit -m 'Add amazing feature')
Push to the branch (git push origin feature/amazing-feature)
Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright (c) 2025, A. N. M. Sajedul Alam
Lambda Native framework developers
PyTorch and TensorFlow teams
NVIDIA for CUDA support
MobileNet and ResNet research teams