Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
490
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
新卒PdEのリアル
ryu1013
1
490
業務時間外もAIに働いてもらう話
colorful12
3
10k
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
370
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
790
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
410
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
高専キャリア LT 発表内容
crysta1221
6
5.7k
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
110
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
110
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
440
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
We Have a Design System, Now What?
morganepeng
55
8.3k
The Pragmatic Product Professional
lauravandoore
37
7.4k
How to Talk to Developers About Accessibility
jct
2
540
The Curious Case for Waylosing
cassininazir
1
500
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
A Tale of Four Properties
chriscoyier
163
24k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
280
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
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