Segment-Anything-Model: Optimized for Mobile Deployment
High-quality segmentation mask generation around any object in an image with simple input prompt
Transformer based encoder-decoder where prompts specify what to segment in an image thereby allowing segmentation without the need for additional training. The image encoder generates embeddings and the lightweight decoder operates on the embeddings for point and mask based image segmentation.
This model is an implementation of Segment-Anything-Model found here.
This repository provides scripts to run Segment-Anything-Model on Qualcomm® devices. More details on model performance across various devices, can be found here.
Model Details
- Model Type: Semantic segmentation
- Model Stats:
- Model checkpoint: vit_l
- Input resolution: 720p (720x1280)
- Number of parameters (SAMDecoder): 5.11M
- Model size (SAMDecoder): 19.6 MB
Model | Device | Chipset | Target Runtime | Inference Time (ms) | Peak Memory Range (MB) | Precision | Primary Compute Unit | Target Model |
---|---|---|---|---|---|---|---|---|
SAMDecoder | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | TFLITE | 7.368 ms | 0 - 29 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | QNN | 6.139 ms | 4 - 7 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMDecoder | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | ONNX | 8.724 ms | 3 - 59 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMDecoder | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | TFLITE | 5.183 ms | 0 - 47 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | QNN | 4.206 ms | 4 - 23 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMDecoder | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | ONNX | 5.79 ms | 4 - 65 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMDecoder | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | TFLITE | 5.19 ms | 0 - 45 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | QNN | 4.385 ms | 4 - 42 MB | FP16 | NPU | Use Export Script |
SAMDecoder | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | ONNX | 5.586 ms | 6 - 59 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMDecoder | SA7255P ADP | SA7255P | TFLITE | 53.085 ms | 0 - 40 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | SA7255P ADP | SA7255P | QNN | 48.936 ms | 1 - 8 MB | FP16 | NPU | Use Export Script |
SAMDecoder | SA8255 (Proxy) | SA8255P Proxy | TFLITE | 7.379 ms | 0 - 32 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | SA8255 (Proxy) | SA8255P Proxy | QNN | 6.142 ms | 4 - 7 MB | FP16 | NPU | Use Export Script |
SAMDecoder | SA8295P ADP | SA8295P | TFLITE | 9.633 ms | 0 - 38 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | SA8295P ADP | SA8295P | QNN | 7.489 ms | 0 - 14 MB | FP16 | NPU | Use Export Script |
SAMDecoder | SA8650 (Proxy) | SA8650P Proxy | TFLITE | 7.374 ms | 0 - 28 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | SA8650 (Proxy) | SA8650P Proxy | QNN | 6.18 ms | 4 - 6 MB | FP16 | NPU | Use Export Script |
SAMDecoder | SA8775P ADP | SA8775P | TFLITE | 10.424 ms | 0 - 40 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | SA8775P ADP | SA8775P | QNN | 8.823 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMDecoder | QCS8275 (Proxy) | QCS8275 Proxy | TFLITE | 53.085 ms | 0 - 40 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | QCS8275 (Proxy) | QCS8275 Proxy | QNN | 48.936 ms | 1 - 8 MB | FP16 | NPU | Use Export Script |
SAMDecoder | QCS8550 (Proxy) | QCS8550 Proxy | TFLITE | 7.377 ms | 0 - 29 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | QCS8550 (Proxy) | QCS8550 Proxy | QNN | 6.15 ms | 4 - 7 MB | FP16 | NPU | Use Export Script |
SAMDecoder | QCS9075 (Proxy) | QCS9075 Proxy | TFLITE | 10.424 ms | 0 - 40 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | QCS9075 (Proxy) | QCS9075 Proxy | QNN | 8.823 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMDecoder | QCS8450 (Proxy) | QCS8450 Proxy | TFLITE | 8.425 ms | 0 - 43 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMDecoder | QCS8450 (Proxy) | QCS8450 Proxy | QNN | 7.554 ms | 4 - 40 MB | FP16 | NPU | Use Export Script |
SAMDecoder | Snapdragon X Elite CRD | Snapdragon® X Elite | QNN | 6.804 ms | 4 - 4 MB | FP16 | NPU | Use Export Script |
SAMDecoder | Snapdragon X Elite CRD | Snapdragon® X Elite | ONNX | 8.733 ms | 11 - 11 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart1 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | TFLITE | 248.723 ms | 12 - 110 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | QNN | 217.855 ms | 12 - 15 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart1 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | ONNX | 244.864 ms | 10 - 214 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart1 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | TFLITE | 171.86 ms | 9 - 940 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | QNN | 150.079 ms | 12 - 31 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart1 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | ONNX | 172.144 ms | 35 - 947 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart1 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | TFLITE | 147.045 ms | 11 - 926 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | QNN | 176.233 ms | 12 - 890 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | ONNX | 181.035 ms | 36 - 908 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart1 | SA7255P ADP | SA7255P | TFLITE | 1332.42 ms | 0 - 914 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | SA7255P ADP | SA7255P | QNN | 1261.003 ms | 12 - 19 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | SA8255 (Proxy) | SA8255P Proxy | TFLITE | 248.72 ms | 12 - 120 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | SA8255 (Proxy) | SA8255P Proxy | QNN | 218.365 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | SA8295P ADP | SA8295P | TFLITE | 293.443 ms | 10 - 886 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | SA8295P ADP | SA8295P | QNN | 251.686 ms | 0 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | SA8650 (Proxy) | SA8650P Proxy | TFLITE | 247.555 ms | 12 - 114 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | SA8650 (Proxy) | SA8650P Proxy | QNN | 215.12 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | SA8775P ADP | SA8775P | TFLITE | 305.909 ms | 12 - 926 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | SA8775P ADP | SA8775P | QNN | 270.478 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | QCS8275 (Proxy) | QCS8275 Proxy | TFLITE | 1332.42 ms | 0 - 914 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | QCS8275 (Proxy) | QCS8275 Proxy | QNN | 1261.003 ms | 12 - 19 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | QCS8550 (Proxy) | QCS8550 Proxy | TFLITE | 249.603 ms | 12 - 104 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | QCS8550 (Proxy) | QCS8550 Proxy | QNN | 213.14 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | QCS9075 (Proxy) | QCS9075 Proxy | TFLITE | 305.909 ms | 12 - 926 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | QCS9075 (Proxy) | QCS9075 Proxy | QNN | 270.478 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | QCS8450 (Proxy) | QCS8450 Proxy | TFLITE | 279.425 ms | 12 - 1376 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart1 | QCS8450 (Proxy) | QCS8450 Proxy | QNN | 283.833 ms | 12 - 974 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | Snapdragon X Elite CRD | Snapdragon® X Elite | QNN | 217.349 ms | 12 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart1 | Snapdragon X Elite CRD | Snapdragon® X Elite | ONNX | 247.096 ms | 46 - 46 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart2 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | TFLITE | 680.259 ms | 0 - 89 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | QNN | 615.417 ms | 12 - 15 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart2 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | ONNX | 782.889 ms | 23 - 168 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart2 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | TFLITE | 516.603 ms | 11 - 793 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | QNN | 461.482 ms | 12 - 31 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart2 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | ONNX | 572.181 ms | 22 - 773 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart2 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | TFLITE | 440.054 ms | 11 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | QNN | 498.801 ms | 12 - 761 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | ONNX | 486.671 ms | 24 - 754 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart2 | SA7255P ADP | SA7255P | TFLITE | 2080.579 ms | 0 - 785 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | SA7255P ADP | SA7255P | QNN | 1976.601 ms | 3 - 10 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | SA8255 (Proxy) | SA8255P Proxy | TFLITE | 666.319 ms | 0 - 82 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | SA8255 (Proxy) | SA8255P Proxy | QNN | 618.277 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | SA8295P ADP | SA8295P | TFLITE | 763.543 ms | 12 - 758 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | SA8295P ADP | SA8295P | QNN | 681.034 ms | 0 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | SA8650 (Proxy) | SA8650P Proxy | TFLITE | 670.805 ms | 12 - 95 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | SA8650 (Proxy) | SA8650P Proxy | QNN | 618.227 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | SA8775P ADP | SA8775P | TFLITE | 767.518 ms | 11 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | SA8775P ADP | SA8775P | QNN | 693.98 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | QCS8275 (Proxy) | QCS8275 Proxy | TFLITE | 2080.579 ms | 0 - 785 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | QCS8275 (Proxy) | QCS8275 Proxy | QNN | 1976.601 ms | 3 - 10 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | QCS8550 (Proxy) | QCS8550 Proxy | TFLITE | 676.281 ms | 0 - 92 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | QCS8550 (Proxy) | QCS8550 Proxy | QNN | 611.067 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | QCS9075 (Proxy) | QCS9075 Proxy | TFLITE | 767.518 ms | 11 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | QCS9075 (Proxy) | QCS9075 Proxy | QNN | 693.98 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | QCS8450 (Proxy) | QCS8450 Proxy | TFLITE | 743.25 ms | 12 - 771 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart2 | QCS8450 (Proxy) | QCS8450 Proxy | QNN | 740.992 ms | 12 - 729 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | Snapdragon X Elite CRD | Snapdragon® X Elite | QNN | 587.357 ms | 12 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart2 | Snapdragon X Elite CRD | Snapdragon® X Elite | ONNX | 730.12 ms | 36 - 36 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart3 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | TFLITE | 672.821 ms | 12 - 93 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | QNN | 617.682 ms | 12 - 15 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart3 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | ONNX | 779.263 ms | 24 - 163 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart3 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | TFLITE | 510.644 ms | 11 - 794 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | QNN | 463.147 ms | 12 - 31 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart3 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | ONNX | 573.142 ms | 35 - 789 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart3 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | TFLITE | 497.103 ms | 11 - 797 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | QNN | 499.164 ms | 12 - 762 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | ONNX | 535.876 ms | 12 - 743 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart3 | SA7255P ADP | SA7255P | TFLITE | 2080.525 ms | 0 - 784 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | SA7255P ADP | SA7255P | QNN | 1967.875 ms | 4 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | SA8255 (Proxy) | SA8255P Proxy | TFLITE | 680.28 ms | 0 - 85 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | SA8255 (Proxy) | SA8255P Proxy | QNN | 614.492 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | SA8295P ADP | SA8295P | TFLITE | 764.476 ms | 11 - 756 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | SA8295P ADP | SA8295P | QNN | 680.306 ms | 0 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | SA8650 (Proxy) | SA8650P Proxy | TFLITE | 670.295 ms | 12 - 103 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | SA8650 (Proxy) | SA8650P Proxy | QNN | 616.884 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | SA8775P ADP | SA8775P | TFLITE | 767.838 ms | 12 - 797 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | SA8775P ADP | SA8775P | QNN | 694.435 ms | 12 - 22 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | QCS8275 (Proxy) | QCS8275 Proxy | TFLITE | 2080.525 ms | 0 - 784 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | QCS8275 (Proxy) | QCS8275 Proxy | QNN | 1967.875 ms | 4 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | QCS8550 (Proxy) | QCS8550 Proxy | TFLITE | 674.671 ms | 0 - 84 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | QCS8550 (Proxy) | QCS8550 Proxy | QNN | 616.901 ms | 12 - 17 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | QCS9075 (Proxy) | QCS9075 Proxy | TFLITE | 767.838 ms | 12 - 797 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | QCS9075 (Proxy) | QCS9075 Proxy | QNN | 694.435 ms | 12 - 22 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | QCS8450 (Proxy) | QCS8450 Proxy | TFLITE | 760.033 ms | 12 - 768 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart3 | QCS8450 (Proxy) | QCS8450 Proxy | QNN | 758.456 ms | 12 - 732 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | Snapdragon X Elite CRD | Snapdragon® X Elite | QNN | 586.318 ms | 12 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart3 | Snapdragon X Elite CRD | Snapdragon® X Elite | ONNX | 735.286 ms | 35 - 35 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart4 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | TFLITE | 669.945 ms | 0 - 87 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | QNN | 617.1 ms | 12 - 15 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart4 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | ONNX | 769.838 ms | 12 - 162 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart4 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | TFLITE | 509.105 ms | 11 - 793 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | QNN | 458.614 ms | 12 - 32 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart4 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | ONNX | 570.567 ms | 24 - 775 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart4 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | TFLITE | 437.498 ms | 11 - 797 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | QNN | 496.587 ms | 12 - 761 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | ONNX | 536.53 ms | 27 - 757 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart4 | SA7255P ADP | SA7255P | TFLITE | 2081.571 ms | 0 - 784 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | SA7255P ADP | SA7255P | QNN | 1976.132 ms | 3 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | SA8255 (Proxy) | SA8255P Proxy | TFLITE | 669.017 ms | 0 - 82 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | SA8255 (Proxy) | SA8255P Proxy | QNN | 616.248 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | SA8295P ADP | SA8295P | TFLITE | 764.855 ms | 12 - 757 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | SA8295P ADP | SA8295P | QNN | 682.303 ms | 0 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | SA8650 (Proxy) | SA8650P Proxy | TFLITE | 669.419 ms | 12 - 72 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | SA8650 (Proxy) | SA8650P Proxy | QNN | 618.263 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | SA8775P ADP | SA8775P | TFLITE | 767.294 ms | 12 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | SA8775P ADP | SA8775P | QNN | 694.355 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | QCS8275 (Proxy) | QCS8275 Proxy | TFLITE | 2081.571 ms | 0 - 784 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | QCS8275 (Proxy) | QCS8275 Proxy | QNN | 1976.132 ms | 3 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | QCS8550 (Proxy) | QCS8550 Proxy | TFLITE | 672.575 ms | 0 - 80 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | QCS8550 (Proxy) | QCS8550 Proxy | QNN | 615.774 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | QCS9075 (Proxy) | QCS9075 Proxy | TFLITE | 767.294 ms | 12 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | QCS9075 (Proxy) | QCS9075 Proxy | QNN | 694.355 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | QCS8450 (Proxy) | QCS8450 Proxy | TFLITE | 754.379 ms | 12 - 767 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart4 | QCS8450 (Proxy) | QCS8450 Proxy | QNN | 739.622 ms | 12 - 731 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | Snapdragon X Elite CRD | Snapdragon® X Elite | QNN | 586.175 ms | 12 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart4 | Snapdragon X Elite CRD | Snapdragon® X Elite | ONNX | 731.787 ms | 35 - 35 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart5 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | TFLITE | 673.83 ms | 0 - 88 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | QNN | 620.228 ms | 14 - 16 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart5 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | ONNX | 774.021 ms | 12 - 147 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart5 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | TFLITE | 506.085 ms | 10 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | QNN | 458.994 ms | 12 - 32 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart5 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | ONNX | 570.102 ms | 24 - 776 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart5 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | TFLITE | 498.671 ms | 12 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | QNN | 440.165 ms | 12 - 760 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | ONNX | 538.191 ms | 24 - 753 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart5 | SA7255P ADP | SA7255P | TFLITE | 2075.136 ms | 0 - 783 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | SA7255P ADP | SA7255P | QNN | 1975.907 ms | 12 - 19 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | SA8255 (Proxy) | SA8255P Proxy | TFLITE | 671.333 ms | 0 - 81 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | SA8255 (Proxy) | SA8255P Proxy | QNN | 618.951 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | SA8295P ADP | SA8295P | TFLITE | 762.394 ms | 12 - 756 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | SA8295P ADP | SA8295P | QNN | 680.206 ms | 0 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | SA8650 (Proxy) | SA8650P Proxy | TFLITE | 672.05 ms | 12 - 79 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | SA8650 (Proxy) | SA8650P Proxy | QNN | 619.339 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | SA8775P ADP | SA8775P | TFLITE | 767.752 ms | 12 - 795 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | SA8775P ADP | SA8775P | QNN | 694.595 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | QCS8275 (Proxy) | QCS8275 Proxy | TFLITE | 2075.136 ms | 0 - 783 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | QCS8275 (Proxy) | QCS8275 Proxy | QNN | 1975.907 ms | 12 - 19 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | QCS8550 (Proxy) | QCS8550 Proxy | QNN | 617.494 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | QCS9075 (Proxy) | QCS9075 Proxy | TFLITE | 767.752 ms | 12 - 795 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | QCS9075 (Proxy) | QCS9075 Proxy | QNN | 694.595 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | QCS8450 (Proxy) | QCS8450 Proxy | TFLITE | 742.93 ms | 12 - 767 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart5 | QCS8450 (Proxy) | QCS8450 Proxy | QNN | 737.86 ms | 12 - 736 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | Snapdragon X Elite CRD | Snapdragon® X Elite | QNN | 587.284 ms | 12 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart5 | Snapdragon X Elite CRD | Snapdragon® X Elite | ONNX | 736.257 ms | 36 - 36 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart6 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | TFLITE | 672.843 ms | 0 - 89 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | QNN | 621.563 ms | 16 - 18 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart6 | Samsung Galaxy S23 | Snapdragon® 8 Gen 2 | ONNX | 771.737 ms | 5 - 158 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart6 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | TFLITE | 520.741 ms | 11 - 796 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | QNN | 459.106 ms | 12 - 32 MB | FP16 | NPU | Segment-Anything-Model.so |
SAMEncoderPart6 | Samsung Galaxy S24 | Snapdragon® 8 Gen 3 | ONNX | 569.357 ms | 27 - 781 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart6 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | TFLITE | 493.833 ms | 10 - 797 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | QNN | 502.431 ms | 12 - 760 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | Snapdragon 8 Elite QRD | Snapdragon® 8 Elite | ONNX | 488.507 ms | 24 - 753 MB | FP16 | NPU | Segment-Anything-Model.onnx |
SAMEncoderPart6 | SA7255P ADP | SA7255P | TFLITE | 2080.562 ms | 12 - 797 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | SA7255P ADP | SA7255P | QNN | 1976.791 ms | 12 - 19 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | SA8255 (Proxy) | SA8255P Proxy | TFLITE | 668.835 ms | 12 - 102 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | SA8255 (Proxy) | SA8255P Proxy | QNN | 615.347 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | SA8295P ADP | SA8295P | TFLITE | 764.252 ms | 12 - 758 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | SA8295P ADP | SA8295P | QNN | 680.522 ms | 0 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | SA8650 (Proxy) | SA8650P Proxy | TFLITE | 672.927 ms | 12 - 77 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | SA8650 (Proxy) | SA8650P Proxy | QNN | 618.049 ms | 12 - 15 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | SA8775P ADP | SA8775P | TFLITE | 769.477 ms | 12 - 798 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | SA8775P ADP | SA8775P | QNN | 694.634 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | QCS8275 (Proxy) | QCS8275 Proxy | TFLITE | 2080.562 ms | 12 - 797 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | QCS8275 (Proxy) | QCS8275 Proxy | QNN | 1976.791 ms | 12 - 19 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | QCS8550 (Proxy) | QCS8550 Proxy | TFLITE | 671.146 ms | 12 - 98 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | QCS8550 (Proxy) | QCS8550 Proxy | QNN | 616.722 ms | 12 - 14 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | QCS9075 (Proxy) | QCS9075 Proxy | TFLITE | 769.477 ms | 12 - 798 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | QCS9075 (Proxy) | QCS9075 Proxy | QNN | 694.634 ms | 1 - 11 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | QCS8450 (Proxy) | QCS8450 Proxy | TFLITE | 741.638 ms | 12 - 767 MB | FP16 | NPU | Segment-Anything-Model.tflite |
SAMEncoderPart6 | QCS8450 (Proxy) | QCS8450 Proxy | QNN | 744.304 ms | 12 - 731 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | Snapdragon X Elite CRD | Snapdragon® X Elite | QNN | 585.577 ms | 12 - 12 MB | FP16 | NPU | Use Export Script |
SAMEncoderPart6 | Snapdragon X Elite CRD | Snapdragon® X Elite | ONNX | 740.654 ms | 35 - 35 MB | FP16 | NPU | Segment-Anything-Model.onnx |
Installation
Install the package via pip:
pip install "qai-hub-models[sam]"
Configure Qualcomm® AI Hub to run this model on a cloud-hosted device
Sign-in to Qualcomm® AI Hub with your
Qualcomm® ID. Once signed in navigate to Account -> Settings -> API Token
.
With this API token, you can configure your client to run models on the cloud hosted devices.
qai-hub configure --api_token API_TOKEN
Navigate to docs for more information.
Demo off target
The package contains a simple end-to-end demo that downloads pre-trained weights and runs this model on a sample input.
python -m qai_hub_models.models.sam.demo
The above demo runs a reference implementation of pre-processing, model inference, and post processing.
NOTE: If you want running in a Jupyter Notebook or Google Colab like environment, please add the following to your cell (instead of the above).
%run -m qai_hub_models.models.sam.demo
Run model on a cloud-hosted device
In addition to the demo, you can also run the model on a cloud-hosted Qualcomm® device. This script does the following:
- Performance check on-device on a cloud-hosted device
- Downloads compiled assets that can be deployed on-device for Android.
- Accuracy check between PyTorch and on-device outputs.
python -m qai_hub_models.models.sam.export
Profiling Results
------------------------------------------------------------
SAMDecoder
Device : Samsung Galaxy S23 (13)
Runtime : TFLITE
Estimated inference time (ms) : 7.4
Estimated peak memory usage (MB): [0, 29]
Total # Ops : 845
Compute Unit(s) : NPU (845 ops)
------------------------------------------------------------
SAMEncoderPart1
Device : Samsung Galaxy S23 (13)
Runtime : TFLITE
Estimated inference time (ms) : 248.7
Estimated peak memory usage (MB): [12, 110]
Total # Ops : 584
Compute Unit(s) : NPU (584 ops)
------------------------------------------------------------
SAMEncoderPart2
Device : Samsung Galaxy S23 (13)
Runtime : TFLITE
Estimated inference time (ms) : 680.3
Estimated peak memory usage (MB): [0, 89]
Total # Ops : 572
Compute Unit(s) : NPU (572 ops)
------------------------------------------------------------
SAMEncoderPart3
Device : Samsung Galaxy S23 (13)
Runtime : TFLITE
Estimated inference time (ms) : 672.8
Estimated peak memory usage (MB): [12, 93]
Total # Ops : 572
Compute Unit(s) : NPU (572 ops)
------------------------------------------------------------
SAMEncoderPart4
Device : Samsung Galaxy S23 (13)
Runtime : TFLITE
Estimated inference time (ms) : 669.9
Estimated peak memory usage (MB): [0, 87]
Total # Ops : 572
Compute Unit(s) : NPU (572 ops)
------------------------------------------------------------
SAMEncoderPart5
Device : Samsung Galaxy S23 (13)
Runtime : TFLITE
Estimated inference time (ms) : 673.8
Estimated peak memory usage (MB): [0, 88]
Total # Ops : 572
Compute Unit(s) : NPU (572 ops)
------------------------------------------------------------
SAMEncoderPart6
Device : Samsung Galaxy S23 (13)
Runtime : TFLITE
Estimated inference time (ms) : 672.8
Estimated peak memory usage (MB): [0, 89]
Total # Ops : 573
Compute Unit(s) : NPU (573 ops)
How does this work?
This export script leverages Qualcomm® AI Hub to optimize, validate, and deploy this model on-device. Lets go through each step below in detail:
Step 1: Compile model for on-device deployment
To compile a PyTorch model for on-device deployment, we first trace the model
in memory using the jit.trace
and then call the submit_compile_job
API.
import torch
import qai_hub as hub
from qai_hub_models.models.sam import Model
# Load the model
model = Model.from_pretrained()
decoder_model = model.decoder
encoder_splits[0]_model = model.encoder_splits[0]
encoder_splits[1]_model = model.encoder_splits[1]
encoder_splits[2]_model = model.encoder_splits[2]
encoder_splits[3]_model = model.encoder_splits[3]
encoder_splits[4]_model = model.encoder_splits[4]
encoder_splits[5]_model = model.encoder_splits[5]
# Device
device = hub.Device("Samsung Galaxy S23")
# Trace model
decoder_input_shape = decoder_model.get_input_spec()
decoder_sample_inputs = decoder_model.sample_inputs()
traced_decoder_model = torch.jit.trace(decoder_model, [torch.tensor(data[0]) for _, data in decoder_sample_inputs.items()])
# Compile model on a specific device
decoder_compile_job = hub.submit_compile_job(
model=traced_decoder_model ,
device=device,
input_specs=decoder_model.get_input_spec(),
)
# Get target model to run on-device
decoder_target_model = decoder_compile_job.get_target_model()
# Trace model
encoder_splits[0]_input_shape = encoder_splits[0]_model.get_input_spec()
encoder_splits[0]_sample_inputs = encoder_splits[0]_model.sample_inputs()
traced_encoder_splits[0]_model = torch.jit.trace(encoder_splits[0]_model, [torch.tensor(data[0]) for _, data in encoder_splits[0]_sample_inputs.items()])
# Compile model on a specific device
encoder_splits[0]_compile_job = hub.submit_compile_job(
model=traced_encoder_splits[0]_model ,
device=device,
input_specs=encoder_splits[0]_model.get_input_spec(),
)
# Get target model to run on-device
encoder_splits[0]_target_model = encoder_splits[0]_compile_job.get_target_model()
# Trace model
encoder_splits[1]_input_shape = encoder_splits[1]_model.get_input_spec()
encoder_splits[1]_sample_inputs = encoder_splits[1]_model.sample_inputs()
traced_encoder_splits[1]_model = torch.jit.trace(encoder_splits[1]_model, [torch.tensor(data[0]) for _, data in encoder_splits[1]_sample_inputs.items()])
# Compile model on a specific device
encoder_splits[1]_compile_job = hub.submit_compile_job(
model=traced_encoder_splits[1]_model ,
device=device,
input_specs=encoder_splits[1]_model.get_input_spec(),
)
# Get target model to run on-device
encoder_splits[1]_target_model = encoder_splits[1]_compile_job.get_target_model()
# Trace model
encoder_splits[2]_input_shape = encoder_splits[2]_model.get_input_spec()
encoder_splits[2]_sample_inputs = encoder_splits[2]_model.sample_inputs()
traced_encoder_splits[2]_model = torch.jit.trace(encoder_splits[2]_model, [torch.tensor(data[0]) for _, data in encoder_splits[2]_sample_inputs.items()])
# Compile model on a specific device
encoder_splits[2]_compile_job = hub.submit_compile_job(
model=traced_encoder_splits[2]_model ,
device=device,
input_specs=encoder_splits[2]_model.get_input_spec(),
)
# Get target model to run on-device
encoder_splits[2]_target_model = encoder_splits[2]_compile_job.get_target_model()
# Trace model
encoder_splits[3]_input_shape = encoder_splits[3]_model.get_input_spec()
encoder_splits[3]_sample_inputs = encoder_splits[3]_model.sample_inputs()
traced_encoder_splits[3]_model = torch.jit.trace(encoder_splits[3]_model, [torch.tensor(data[0]) for _, data in encoder_splits[3]_sample_inputs.items()])
# Compile model on a specific device
encoder_splits[3]_compile_job = hub.submit_compile_job(
model=traced_encoder_splits[3]_model ,
device=device,
input_specs=encoder_splits[3]_model.get_input_spec(),
)
# Get target model to run on-device
encoder_splits[3]_target_model = encoder_splits[3]_compile_job.get_target_model()
# Trace model
encoder_splits[4]_input_shape = encoder_splits[4]_model.get_input_spec()
encoder_splits[4]_sample_inputs = encoder_splits[4]_model.sample_inputs()
traced_encoder_splits[4]_model = torch.jit.trace(encoder_splits[4]_model, [torch.tensor(data[0]) for _, data in encoder_splits[4]_sample_inputs.items()])
# Compile model on a specific device
encoder_splits[4]_compile_job = hub.submit_compile_job(
model=traced_encoder_splits[4]_model ,
device=device,
input_specs=encoder_splits[4]_model.get_input_spec(),
)
# Get target model to run on-device
encoder_splits[4]_target_model = encoder_splits[4]_compile_job.get_target_model()
# Trace model
encoder_splits[5]_input_shape = encoder_splits[5]_model.get_input_spec()
encoder_splits[5]_sample_inputs = encoder_splits[5]_model.sample_inputs()
traced_encoder_splits[5]_model = torch.jit.trace(encoder_splits[5]_model, [torch.tensor(data[0]) for _, data in encoder_splits[5]_sample_inputs.items()])
# Compile model on a specific device
encoder_splits[5]_compile_job = hub.submit_compile_job(
model=traced_encoder_splits[5]_model ,
device=device,
input_specs=encoder_splits[5]_model.get_input_spec(),
)
# Get target model to run on-device
encoder_splits[5]_target_model = encoder_splits[5]_compile_job.get_target_model()
Step 2: Performance profiling on cloud-hosted device
After compiling models from step 1. Models can be profiled model on-device using the
target_model
. Note that this scripts runs the model on a device automatically
provisioned in the cloud. Once the job is submitted, you can navigate to a
provided job URL to view a variety of on-device performance metrics.
decoder_profile_job = hub.submit_profile_job(
model=decoder_target_model,
device=device,
)
encoder_splits[0]_profile_job = hub.submit_profile_job(
model=encoder_splits[0]_target_model,
device=device,
)
encoder_splits[1]_profile_job = hub.submit_profile_job(
model=encoder_splits[1]_target_model,
device=device,
)
encoder_splits[2]_profile_job = hub.submit_profile_job(
model=encoder_splits[2]_target_model,
device=device,
)
encoder_splits[3]_profile_job = hub.submit_profile_job(
model=encoder_splits[3]_target_model,
device=device,
)
encoder_splits[4]_profile_job = hub.submit_profile_job(
model=encoder_splits[4]_target_model,
device=device,
)
encoder_splits[5]_profile_job = hub.submit_profile_job(
model=encoder_splits[5]_target_model,
device=device,
)
Step 3: Verify on-device accuracy
To verify the accuracy of the model on-device, you can run on-device inference on sample input data on the same cloud hosted device.
decoder_input_data = decoder_model.sample_inputs()
decoder_inference_job = hub.submit_inference_job(
model=decoder_target_model,
device=device,
inputs=decoder_input_data,
)
decoder_inference_job.download_output_data()
encoder_splits[0]_input_data = encoder_splits[0]_model.sample_inputs()
encoder_splits[0]_inference_job = hub.submit_inference_job(
model=encoder_splits[0]_target_model,
device=device,
inputs=encoder_splits[0]_input_data,
)
encoder_splits[0]_inference_job.download_output_data()
encoder_splits[1]_input_data = encoder_splits[1]_model.sample_inputs()
encoder_splits[1]_inference_job = hub.submit_inference_job(
model=encoder_splits[1]_target_model,
device=device,
inputs=encoder_splits[1]_input_data,
)
encoder_splits[1]_inference_job.download_output_data()
encoder_splits[2]_input_data = encoder_splits[2]_model.sample_inputs()
encoder_splits[2]_inference_job = hub.submit_inference_job(
model=encoder_splits[2]_target_model,
device=device,
inputs=encoder_splits[2]_input_data,
)
encoder_splits[2]_inference_job.download_output_data()
encoder_splits[3]_input_data = encoder_splits[3]_model.sample_inputs()
encoder_splits[3]_inference_job = hub.submit_inference_job(
model=encoder_splits[3]_target_model,
device=device,
inputs=encoder_splits[3]_input_data,
)
encoder_splits[3]_inference_job.download_output_data()
encoder_splits[4]_input_data = encoder_splits[4]_model.sample_inputs()
encoder_splits[4]_inference_job = hub.submit_inference_job(
model=encoder_splits[4]_target_model,
device=device,
inputs=encoder_splits[4]_input_data,
)
encoder_splits[4]_inference_job.download_output_data()
encoder_splits[5]_input_data = encoder_splits[5]_model.sample_inputs()
encoder_splits[5]_inference_job = hub.submit_inference_job(
model=encoder_splits[5]_target_model,
device=device,
inputs=encoder_splits[5]_input_data,
)
encoder_splits[5]_inference_job.download_output_data()
With the output of the model, you can compute like PSNR, relative errors or spot check the output with expected output.
Note: This on-device profiling and inference requires access to Qualcomm® AI Hub. Sign up for access.
Run demo on a cloud-hosted device
You can also run the demo on-device.
python -m qai_hub_models.models.sam.demo --on-device
NOTE: If you want running in a Jupyter Notebook or Google Colab like environment, please add the following to your cell (instead of the above).
%run -m qai_hub_models.models.sam.demo -- --on-device
Deploying compiled model to Android
The models can be deployed using multiple runtimes:
TensorFlow Lite (
.tflite
export): This tutorial provides a guide to deploy the .tflite model in an Android application.QNN (
.so
export ): This sample app provides instructions on how to use the.so
shared library in an Android application.
View on Qualcomm® AI Hub
Get more details on Segment-Anything-Model's performance across various devices here. Explore all available models on Qualcomm® AI Hub
License
- The license for the original implementation of Segment-Anything-Model can be found here.
- The license for the compiled assets for on-device deployment can be found here
References
Community
- Join our AI Hub Slack community to collaborate, post questions and learn more about on-device AI.
- For questions or feedback please reach out to us.