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
90
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
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
9
5.7k
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
240
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
0
110
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.4k
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.2k
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
140
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
3.6k
数百円から始めるRuby電子工作
tarosay
0
110
Build-to-own AI: Agentic Development for Humans
inesmontani
PRO
0
110
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
250
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
460
5分で問診!Composer セキュリティ健康診断
codmoninc
0
680
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
Why Our Code Smells
bkeepers
PRO
340
58k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Paper Plane
katiecoart
PRO
2
52k
A Soul's Torment
seathinner
6
3.1k
Site-Speed That Sticks
csswizardry
13
1.4k
Evolving SEO for Evolving Search Engines
ryanjones
0
250
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
Side Projects
sachag
455
43k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
sira's awesome portfolio website redesign presentation
elsirapls
0
310
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