flutter_pytorch_lite

Last updated:

0 purchases

flutter_pytorch_lite Image
flutter_pytorch_lite Images
Add to Cart

Description:

flutter pytorch lite

Flutter PyTorch Lite #










PyTorch Lite plugin for Flutter.
End-to-end workflow from Training to Deployment for iOS and Android mobile devices.
PyTorch Mobile #
There is a growing need to execute ML models on edge devices to reduce latency, preserve privacy, and enable new interactive use cases.
The PyTorch Mobile runtime beta release allows you to seamlessly go from training a model to deploying it, while staying entirely within the PyTorch ecosystem. It provides an end-to-end workflow that simplifies the research to production environment for mobile devices. In addition, it paves the way for privacy-preserving features via federated learning techniques.
PyTorch Mobile is in beta stage right now, and is already in wide scale production use. It will soon be available as a stable release once the APIs are locked down.
Example #
A simple image classification application that demonstrates how to use the flutter_pytorch_lite plugin.

Getting Started #
Requirements #


Android

minSdkVersion 21



iOS

XCode 11.0 or above
iOS 12.0 or above



Usage instructions #
Install
In the dependency section of pubspec.yaml file, add flutter_pytorch_lite (adjust the version accordingly based on the latest release)
dependencies:
flutter_pytorch_lite: ^0.1.0+1
copied to clipboard
or
dependencies:
flutter_pytorch_lite:
git:
url: https://github.com/winfordguo/flutter_pytorch_lite.git
copied to clipboard
Import
import 'package:flutter_pytorch_lite/flutter_pytorch_lite.dart';
copied to clipboard
Loading
Export


Export PyTorch Module to TorchScript for PyTorch Mobile

Use torch.utils.mobile_optimizer

import torch
from torch.utils.mobile_optimizer import optimize_for_mobile

model = torch.load("your_model.pt", map_location="cpu") # load
model.eval()

ts = torch.jit.trace(model) # TorchScript
optimize_for_mobile(ts)._save_for_lite_interpreter("your_model.ptl")
copied to clipboard
or

Use yolov5 export.py

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
python export.py --weights yolov5s.pt --include torchscript --optimize
mv yolov5s.torchscript yolov5s.ptl
copied to clipboard


Load


From path
Module module = await FlutterPytorchLite.load('/path/to/your_model.ptl');
copied to clipboard


From asset
Place your_model.ptl in assets directory. Make sure to include assets in pubspec.yaml.
final filePath = '${Directory.systemTemp.path}/your_model.ptl';
File(filePath).writeAsBytesSync(await _getBuffer('assets/your_model.ptl'));
Module module = await FlutterPytorchLite.load(filePath);

/// Get byte buffer
static Future<Uint8List> _getBuffer(String assetFileName) async {
ByteData rawAssetFile = await rootBundle.load(assetFileName);
final rawBytes = rawAssetFile.buffer.asUint8List();
return rawBytes;
}
copied to clipboard


Forwarding


For single input and output
Use Module's method Future<IValue> forward(List<IValue> inputs).
// For ex: if input tensor shape [1,5] and type is float32
final inputShape = Int64List.fromList([1, 5]);
var input = [1.23, 6.54, 7.81, 3.21, 2.22];
Tensor inputTensor = Tensor.fromBlobFloat32(input, inputShape);

// forward
IValue input = IValue.from(inputTensor);
IValue output = await module.forward([input]);

Tensor outputTensor = output.toTensor();

// Get output tensor: if output tensor type is float32
final outputShape = outputTensor.shape;
var output = outputTensor.dataAsFloat32List;

// print the output
print(output);
copied to clipboard


For image input
Use Module's method Future<IValue> forward(List<IValue> inputs).
const assetImage = AssetImage('assets/images/image.png');
final image = await TensorImageUtils.imageProviderToImage(assetImage);
// For ex: yolov5.ptl input shape [1, 3, 640, 640]
final inputShape = Int64List.fromList([1, 3, 640, 640]);
// For ex: yolov5-cls.ptl input shape [1, 3, 224, 224]
// final inputShape = Int64List.fromList([1, 3, 224, 224]);
Tensor inputTensor = await TensorImageUtils.imageToFloat32Tensor(
image, // image type is dart:ui.Image
width: inputShape[3],
height: inputShape[2],
);

// forward
IValue input = IValue.from(inputTensor);
IValue output = await module.forward([input]);

Tensor outputTensor = output.toTuple().first.toTensor(); // For ex: yolov5 object detection
// Tensor outputTensor = output.toTensor(); // For ex: yolov5 classification

// Get output tensor as float32 type
final outputShape = outputTensor.shape;
var output = outputTensor.dataAsFloat32List;

// print the output
print(output);
copied to clipboard


Destroying

Destroy the model
await module.destroy();
copied to clipboard


Utils #
TensorImageUtils
ImageToFloat32Tensor

For inputShape [1, 3, 224, 224]
// 1*channels*height*width
Int64List inputShape = Int64List.fromList([1, 3, 224, 224]);
Tensor tensor = await TensorImageUtils.imageToFloat32Tensor(
image, // image type is dart:ui.Image
width: inputShape[3],
height: inputShape[2],
// memoryFormat: MemoryFormat.contiguous, // default
);
copied to clipboard

For inputShape [1, 224, 224, 3]
// 1*height*width*channels
Int64List inputShape = Int64List.fromList([1, 224, 224, 3]);
Tensor tensor = await TensorImageUtils.imageToFloat32Tensor(
image, // image type is dart:ui.Image
width: inputShape[2],
height: inputShape[1],
memoryFormat: MemoryFormat.channelsLast,
);
copied to clipboard


ImageProviderToImage

For AssetImage
const assetImage = AssetImage('assets/images/image.png');
final image = await TensorImageUtils.imageProviderToImage(assetImage);
// print the image width and height
print('width: ${image.width}, height: ${image.height}');
copied to clipboard

For NetworkImage
const networkImage = NetworkImage('https://example.com/image.png');
final image = await TensorImageUtils.imageProviderToImage(networkImage);
// print the image width and height
print('width: ${image.width}, height: ${image.height}');
copied to clipboard


Q&A #
Android #


Q: Execution failed for task ':app:mergeDebugNativeLibs'
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> More than one file was found with OS independent path 'lib/x86/libc++_shared.so'
copied to clipboard
A: add this to your app/build.gradle
android {
// your existing code
packagingOptions {
pickFirst '**/libc++_shared.so'
}
}
copied to clipboard


Q: What is the version of PyTorch Lite?
A:

org.pytorch:pytorch_android_lite:1.13.1
org.pytorch:pytorch_android_torchvision_lite:1.13.1



iOS #


Q: What is the version of PyTorch Lite?
A: 'LibTorch-Lite', '~> 1.13.0.1'

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.