Foreground segmentation
DeepLabV3+ MobileNetV2 (VOC)
A 23 MB segmentation model for the 21 Pascal VOC classes.
About this model
DeepLabV3+ paired with a MobileNetV2 backbone. Trained on Pascal VOC for 21 classes: background plus 20 foreground categories like person, car, cat, and dog. The export bakes argmax into the graph and returns a uint8 class-index map at 520x520.
The build is the Qualcomm AI Hub float export, around 23 MB. On M1 Max with CoreML, warm runs land at 37 ms on a 1280x720 image.
What you can build
- Cut out a person from a photo with a small, fast model.
- Tag pets and vehicles in user uploads at 27 fps on Apple Silicon.
- Build a quick foreground mask for downstream effects.
- Pre-segment a frame before applying ByteTrack on detected people.
Variants & downloads
Choose the build for your appModel files are being prepared.
Explore the model’s examples, source links, and integration notes while download variants are added.
Example inference
Performance
Results depend on the device, runtime, and test conditions. Each measurement keeps its own context.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CPU
679.5 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CoreML
36.6 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
RTX 2060, Ubuntu 24.04, ONNX Runtime 1.24.3
See original catalog hardware notes · CUDA
38.2 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
Integration examples
Vision SDK integration
cpp
#include "imaged/sdk.hpp"
#include "imaged/families/semantic_segmentation/semantic_segmentation_family.hpp"
imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("semantic_segmentation.model", "weights/deeplabv3_plus_mobilenet.onnx");
config.set("semantic_segmentation.normalize", "scale255");
imaged::SDK::SemanticSegmentationFamily family;
family.load(config);
imaged::SDK::Image image;
image.load("scene.png");
auto result = std::get<imaged::SDK::SegmentationResult>(family.run({&image}));
// result.mask is W*H bytes, each pixel a VOC class index 0..20