Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Few steps to make your app smarter with TensorF...
Search
Volodia Chornenkyi
January 30, 2019
Programming
89
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Few steps to make your app smarter with TensorFlow Lite
Volodia Chornenkyi
January 30, 2019
More Decks by Volodia Chornenkyi
See All by Volodia Chornenkyi
Android Studio 👀 Flamingo 🦩 Giraffe 🦒
chornenky_volodia
1
480
Let's add AR to your Android app
chornenky_volodia
0
160
Android Architecture Components. Do you really need them?
chornenky_volodia
1
140
Other Decks in Programming
See All in Programming
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.6k
Oxlintのカスタムルールの現況
syumai
6
1.2k
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
180
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
140
Oxcを導入して開発体験が向上した話
yug1224
4
350
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
Lessons from Spec-Driven Development
simas
PRO
0
230
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
130
Performance Engineering for Everyone
elenatanasoiu
0
240
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
15
7.8k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.5k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
4
390
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
77
5.4k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
740
The agentic SEO stack - context over prompts
schlessera
0
830
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Writing Fast Ruby
sferik
630
63k
The browser strikes back
jonoalderson
0
1.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Transcript
Few steps to make your app smarter with TensorFlow Lite
Volodia Chornenkyi Android Software Engineer @TechMagic @GoodCo
What is TFLite? Framework for running machine learning models on
mobile and embedded devices.
What is TFLite? Framework for running machine learning models on
mobile and embedded devices.
Lite Two brothers
• Lightweight • Limited set of op • Custom op
support • Optimized work with models • Hardware acceleration • No Swift support Lite • Training support • Java&Swift APIs are not up to date • Android NDK • Bazel • Higher accuracy
TensorFlow Mobile?
TensorFlow Mobile? https://www.tensorflow.org/lite/tfmobile/
MLKit vs Tensor Flow https://developers.google.com/ml-kit/
How it works inside Architecture of a CNN. — Source: https://www.mathworks.com/videos/introduction-to-deep-learning-wh at-are-convolutional-neural-networks--1489512765771.html
https://society6.com/product/get-shit-done--get-shit-done_print
Step 1. Model cp tf_files/optimized_graph.lite ios/tflite/data/graph.lite cp tf_files/retrained_labels.txt ios/tflite/data/labels.txt cp
tf_files/optimized_graph.lite android/tflite/app/src/main/ass ets/graph.lite cp tf_files/retrained_labels.txt android/tflite/app/src/main/ass ets/labels.txt iOS Android https://www.tensorflow.org/lite/
Step 2.1. Setup platform :ios, '8.0' inhibit_all_warnings! target 'tflite_photos_example' pod
'TensorFlowLite' repositories { maven { url 'https://google.bintray.com/tensorflo w' } } dependencies { implementation 'org.tensorflow:tensorflow-lite:+' } iOS Android https://www.tensorflow.org/lite/
Step 2.2. Setup android { aaptOptions { noCompress "tflite" noCompress
"lite" } } Android https://www.tensorflow.org/lite/
NSString* graph_path = [[NSBundle mainBundle] pathForResource:name ofType:extension]; std::unique_ptr<tflite::FlatBufferModel> model =
tflite::FlatBufferModel::BuildFromFile([graph_path UTF8String]); iOS Android Step 3. Model AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(MODEL_PATH); FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor()); FileChannel fileChannel = inputStream.getChannel(); long startOffset = fileDescriptor.getStartOffset(); long declaredLength = fileDescriptor.getDeclaredLength(); MappedByteBuffer model = fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength); Android https://www.tensorflow.org/lite/
std::vector<std::string> labels; NSString* labels_path = [[NSBundle mainBundle] pathForResource:name ofType:extension]; std::ifstream
t; t.open([labels_path UTF8String]); std::string line; while (t) { std::getline(t, line); if (line.length()){ labels->push_back(line); } } t.close(); Android Step 4. Labels on iOS https://www.tensorflow.org/lite/
Android Step 4. Labels on Android List<String> labelList = new
ArrayList<String>(); BufferedReader reader = new BufferedReader(new InputStreamReader(activity.getAssets().open(LABEL_PATH))); String line; while ((line = reader.readLine()) != null) { labelList.add(line); } reader.close(); https://www.tensorflow.org/lite/
Step 5. Interpreter std::unique_ptr<tflite::Interpreter> interpreter; tflite::InterpreterBuilder(*model, opResolver)(&interpreter); Interpreter tflite =
new Interpreter(model); iOS Android https://www.tensorflow.org/lite/
float* out = interpreter->typed_input_tensor<float>(0); uint8_t* in = image.data.data(); for (int
y = 0; y < wanted_input_height; ++y) { const int in_y = (y * image.height) / wanted_input_height; uint8_t* in_row = in + (in_y * image.width * image.channels); float* out_row = out + (y * wanted_input_width * wanted_input_channels); for (int x = 0; x < wanted_input_width; ++x) { const int in_x = (x * image.width) / wanted_input_width; uint8_t* in_pixel = in_row + (in_x * image.channels); float* out_pixel = out_row + (x * wanted_input_channels); for (int c = 0; c < wanted_input_channels; ++c) { out_pixel[c] = (in_pixel[c] - input_mean) / input_std; } } } Android Step 6. Convert image on iOS https://www.tensorflow.org/lite/
// ByteBuffer imgData bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
int pixel = 0; for (int i = 0; i < DIM_IMG_SIZE_X; ++i) { for (int j = 0; j < DIM_IMG_SIZE_Y; ++j) { final int val = intValues[pixel++]; imgData.putFloat((((val >> 16) & 0xFF)-IMAGE_MEAN)/IMAGE_STD); imgData.putFloat((((val >> 8) & 0xFF)-IMAGE_MEAN)/IMAGE_STD); imgData.putFloat((((val) & 0xFF)-IMAGE_MEAN)/IMAGE_STD); } } Android Step 6. Convert image on Android https://www.tensorflow.org/lite/
Step 7. Run model interpreter->Invoke() float* output = interpreter-> typed_output_tensor<float>(0)
tflite.run(imgData, labelProbArray) iOS Android https://www.tensorflow.org/lite/
Output. Threshold. Results number Step 8. Grand finale
Special slide for QA • unittest.TestCase • Model visualization •
Believe
Use TF Lite if • Weight is important • Limited
set of op is fine • Speed over accuracy • Hardware acceleration as a bonus
None
None
Links General: https://www.tensorflow.org/lite/ https://codelabs.developers.google.com/codelabs/tensorflow-for-poets Android: https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite iOS: https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-ios QA: https://www.linkedin.com/pulse/tensorflow-dont-forget-unit-test-david-o-neill-1/
https://www.tensorflow.org/api_guides/python/test