Slide 1

Slide 1 text

IA no bolso com TensorFlow e Android Douglas Drumond @douglasdrumond

Slide 2

Slide 2 text

@douglasdrumond Por que IA no telefone? 2

Slide 3

Slide 3 text

@douglasdrumond O que é IA? Separar bolinhas 3

Slide 4

Slide 4 text

@douglasdrumond O que é IA? 4

Slide 5

Slide 5 text

@douglasdrumond O que é IA? Ham vs Spam 5

Slide 6

Slide 6 text

@douglasdrumond Ham vs Spam Gramaticalmente correto? Oferece viagra? Dear sir/madam? Anexos? 6

Slide 7

Slide 7 text

@douglasdrumond DeepBlue 7

Slide 8

Slide 8 text

@douglasdrumond 8

Slide 9

Slide 9 text

@douglasdrumond Go (ғޟ) Impossível 9

Slide 10

Slide 10 text

@douglasdrumond DeepMind 10

Slide 11

Slide 11 text

@douglasdrumond AlphaGo 11

Slide 12

Slide 12 text

@douglasdrumond Vamos aprender IA! 12

Slide 13

Slide 13 text

@douglasdrumond Como eu me sinto Axiomas: • Existe 1 • Existe uma operação s(n) que obtém o sucessor Prove: • Todo número par maior que 2 é soma de dois primos 13

Slide 14

Slide 14 text

@douglasdrumond Coisas de IA Redes Neurais? Modelos?
 Perceptrons? SVM? CNN? WTF? 14

Slide 15

Slide 15 text

@douglasdrumond TensorFlow 15

Slide 16

Slide 16 text

@douglasdrumond O que é? “An open-source software library for Machine Intelligence” – https://www.tensorflow.org/ 16

Slide 17

Slide 17 text

@douglasdrumond Arquiteturas Android iOS Raspberry Pi 17

Slide 18

Slide 18 text

@douglasdrumond Instale Bazel: https://bazel.build/versions/master/docs/install.html Instale TensorFlow: https://www.tensorflow.org/install/install_sources 18

Slide 19

Slide 19 text

@douglasdrumond Usando TensorFlow no Android Studio Configurar bazel no build.gradle: 19 def bazelLocation = '/usr/local/bin/bazel'

Slide 20

Slide 20 text

@douglasdrumond Task do bazel task buildNativeBazel(type: Exec) { workingDir '../../..' commandLine bazelLocation, 'build', '-c', 'opt', \ 'tensorflow/examples/android:tensorflow_native_libs', \ '--crosstool_top=//external:android/crosstool', \ '--cpu=' + cpuType, \ '--host_crosstool_top=@bazel_tools//tools/cpp:toolchain' } 20 Não se preocupe em entender agora, pode copiar dos exemplos

Slide 21

Slide 21 text

@douglasdrumond Opção 2 Baixar do repositório 21

Slide 22

Slide 22 text

@douglasdrumond Diferenças entre esses métodos? Tamanho do APK 22

Slide 23

Slide 23 text

@douglasdrumond NDK Configurar WORKSPACE 23 # Uncomment and update the paths in these entries to build the Android demo. android_sdk_repository( name = "androidsdk", api_level = 23, # Ensure that you have the build_tools_version below installed in the # SDK manager as it updates periodically. build_tools_version = "26.0.1", # Replace with path to Android SDK on your system path = "", )

Slide 24

Slide 24 text

@douglasdrumond NDK Pelo menos versão 14 24 android_ndk_repository( name="androidndk", path="", # This needs to be 14 or higher to compile TensorFlow. # Please specify API level to >= 21 to build for 64-bit # architectures or the Android NDK will automatically select biggest # API level that it supports without notice. # Note that the NDK version is not the API level. api_level=14)

Slide 25

Slide 25 text

@douglasdrumond Live Demo 25

Slide 26

Slide 26 text

@douglasdrumond Inspiração 26

Slide 27

Slide 27 text

@douglasdrumond Live Demo 27

Slide 28

Slide 28 text

@douglasdrumond Linguagens TensorFlow: C++ Apps: Java ou Kotlin WAT? 28

Slide 29

Slide 29 text

@douglasdrumond Android Inference Library Prebuilt binaries at https://ci.tensorflow.org/view/Nightly/job/ nightly-android/ Inference docs at https://github.com/tensorflow/tensorflow/ blob/master/tensorflow/contrib/android/java/org/tensorflow/ contrib/android/TensorFlowInferenceInterface.java Full TensorFlow Java API bridges with C++
 https://github.com/tensorflow/tensorflow/tree/master/java
 29

Slide 30

Slide 30 text

@douglasdrumond Como funciona TensorFlowImageClassifier carrega • MODEL file • LABEL file • TensorFlowInferenceInterface (uma classe que carrega a lib nativa) 30

Slide 31

Slide 31 text

@douglasdrumond Como funciona? List results = classifier.recognizeImage(bitmap); …
 inferenceInterface.feed(inputName, floatValues, 1, inputSize, inputSize, 3); …
 inferenceInterface.run(outputNames, logStats); … inferenceInterface.fetch(outputName, outputs); 31

Slide 32

Slide 32 text

@douglasdrumond Outras preocupações Tamanho do modelo •Inception v3 = 90 MB 32

Slide 33

Slide 33 text

@douglasdrumond Use as ferramentas do TF freeze_graph Graph Transformation Tool •strip_unused_nodes •remove_nodes •fold_batch_norms Quantize weights •75% de melhora no tamanho Memory mapping 33

Slide 34

Slide 34 text

@douglasdrumond Outras preocupações Tamanho do modelo •Inception v3 = 90 MB •Inception v3 quantized = 24 MB •Inception v1 quantized = 7MB 34

Slide 35

Slide 35 text

@douglasdrumond E o apk? Aumento de 12MB antes de tuning com Inception v3 35

Slide 36

Slide 36 text

@douglasdrumond Tuning Inclua apenas as operações necessárias Rode python/tools/ print_selective_registration_header.py 
 Ponha ops_to_register.h na raiz do TensorFlow
 Compile com -DSELECTIVE_REGISTRATION 36

Slide 37

Slide 37 text

@douglasdrumond E o apk? Aumento de 2MB depois do tuning 37

Slide 38

Slide 38 text

@douglasdrumond Ou seja… O que estão esperando? 38

Slide 39

Slide 39 text

@douglasdrumond Onde aprender? • https://codelabs.developers.google.com/codelabs/ tensorflow-for-poets/ • https://github.com/tensorflow/tensorflow/ • https://omid.al/posts/2017-02-20-Tutorial-Build-Your- First-Tensorflow-Android-App.html • https://www.tensorflow.org • Udacity 39

Slide 40

Slide 40 text

Grazie mille! @douglasdrumond