FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with
Transcript of FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with
![Page 1: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/1.jpg)
AI image search with Go & Tensorflow
FOSDEM, FEB 2 2019
Gildas Chabot
Leboncoin
gildasch
![Page 2: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/2.jpg)
02
AI is about computers doing magic
01. AI, Tensorflow & Go
![Page 3: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/3.jpg)
02
01. AI, Tensorflow & Go
![Page 4: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/4.jpg)
Today’s (glorious) blather.
AI, Tensorflow & Go 01
Image classification
Face recognition
Search
02
03
04
Conclusion 05
![Page 5: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/5.jpg)
AI, Tensorflow & Go
SECTION ONE
![Page 6: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/6.jpg)
Google, Facebook, Microsoft, Baidu in the AI Race
01. AI, Tensorflow & Go
![Page 7: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/7.jpg)
As many frameworks...
01. AI, Tensorflow & Go
![Page 8: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/8.jpg)
… and models too!
01. AI, Tensorflow & Go
![Page 9: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/9.jpg)
Neural networks
01. AI, Tensorflow & Go
0.01293
0.45398
0.10070
0.00129
0.02753
o t = φ(bi + Σwi * ini )
φ
![Page 10: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/10.jpg)
Neural networks
01. AI, Tensorflow & Go
![Page 11: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/11.jpg)
Neural networks
01. AI, Tensorflow & Go
Tha ’s a Bo v e s Fla r !
![Page 12: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/12.jpg)
Neural networks
01. AI, Tensorflow & Go
Pre y t a ’s a Cho te co e
![Page 13: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/13.jpg)
Neural networks
01. AI, Tensorflow & Go
Ad
1
Sna ja t
![Page 14: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/14.jpg)
Neural networks
01. AI, Tensorflow & Go
Dud t a ’s g o s!
![Page 15: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/15.jpg)
A few definitions
01. AI, Tensorflow & Go
Architecture
Model o t = φ(bi + Σwi * ini )Pre-trained model
Saved model
![Page 16: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/16.jpg)
{Tensorflow
A framework for creating, training, predicting, exporting & importing neural networks
01. AI, Tensorflow & Go
![Page 17: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/17.jpg)
Tensorflow
01. AI, Tensorflow & Go
Tensorflow C++ Core via C API
Python bindings Go API
Creating
Training
Exporting
Importing PredictionBinary model
![Page 18: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/18.jpg)
Tensorflow
01. AI, Tensorflow & Go
Tensorflow C++ Core via C API
Python bindings Go API
Creating
Training
Exporting
Importing PredictionBinary model
![Page 19: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/19.jpg)
Running a model using Tensorflow
02. AI, Tensorflow & Go
Load the model from a saved model,create the input
… and that’s all for our interaction with Tensorflow!
output, err := model.Session.Run(map[tf.Output]*tf.Tensor{model.Graph.Operation("input_1").Output(0): input,
}, []tf.Output{model.Graph.Operation("predictions/Softmax").Output(0),
},nil)
Run the session giving the feed(s) and fetche(s)
model, err := tf.LoadSavedModel("myModel", []string{"myTag"}, nil)
// handle errordefer model.Session.Close()
input, err := tf.NewTensor([1][][][3]float32{...})// handle error
![Page 20: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/20.jpg)
Running a model using Tensorflow
02. AI, Tensorflow & Go
output, err := model.Session.Run(map[tf.Output]*tf.Tensor{model.Graph.Operation("input_1").Output(0): input,
}, []tf.Output{model.Graph.Operation("predictions/Softmax").Output(0),
},nil)
model, err := tf.LoadSavedModel("myModel", []string{"myTag"}, nil)
// handle errordefer model.Session.Close()
input, err := tf.NewTensor([1][][][3]float32{...})// handle error
1. Get a model and load it the model
![Page 21: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/21.jpg)
Running a model using Tensorflow
02. AI, Tensorflow & Go
output, err := model.Session.Run(map[tf.Output]*tf.Tensor{model.Graph.Operation("input_1").Output(0): input,
}, []tf.Output{model.Graph.Operation("predictions/Softmax").Output(0),
},nil)
model, err := tf.LoadSavedModel("myModel", []string{"myTag"}, nil)
// handle errordefer model.Session.Close()
input, err := tf.NewTensor([1][][][3]float32{...})// handle error
2. Formate and feed the input
![Page 22: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/22.jpg)
Running a model using Tensorflow
02. AI, Tensorflow & Go
output, err := model.Session.Run(map[tf.Output]*tf.Tensor{model.Graph.Operation("input_1").Output(0): input,
}, []tf.Output{model.Graph.Operation("predictions/Softmax").Output(0),
},nil)
model, err := tf.LoadSavedModel("myModel", []string{"myTag"}, nil)
// handle errordefer model.Session.Close()
input, err := tf.NewTensor([1][][][3]float32{...})// handle error
3. Fetch and interpret the output
![Page 23: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/23.jpg)
Image classification
SECTION TWO
![Page 24: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/24.jpg)
Image classification
02. Image classification
∙ Siamese_cat: 0.90478283∙ lynx: 0.0020401527∙ Egyptian_cat: 0.0016850991∙ Norwegian_elkhound: 0.0015874814∙ pug: 0.0009104196∙ jay: 0.00069217954∙ hamper: 0.0006849118∙ malinois: 0.00066736544∙ window_screen: 0.0006443651∙ radiator: 0.0006424375
![Page 25: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/25.jpg)
Image classification
02. Image classification
1. Find
ing th
e mod
el
2. Run
it in
Python
3. Sav
e the
mod
el
4. Form
at the
inpu
t
5. Int
erpret
the o
utput
![Page 26: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/26.jpg)
Finding a model
02. Image classification
ModelDepot.io
Github.com
arXiv.org
![Page 27: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/27.jpg)
Image classification
02. Image classification
![Page 28: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/28.jpg)
Run in Python...
02. Image classification
import kerasfrom keras.applications.nasnet import NASNetMobilefrom keras.preprocessing import imagefrom keras.applications.xception import preprocess_input, decode_predictionsimport numpy as np
![Page 29: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/29.jpg)
Run in Python...
02. Image classification
model = NASNetMobile(weights="NASNet-mobile.h5")img = image.load_img('cat.jpg', target_size=(224,224))img_arr = np.expand_dims(image.img_to_array(img), axis=0)
x = preprocess_input(img_arr)
preds = model.predict(x)print('Predicted:', decode_predictions(preds, top=3)[0])
Most models come with Python code. Here, Keras makes it very simple.
![Page 30: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/30.jpg)
Image classification
02. Image classification
$ python run_prediction.pyPredicted: [('n02123597', 'Siamese_cat', 0.8996405), ('n02127052', 'lynx', 0.0022755866), ('n02124075', 'Egyptian_cat', 0.0021423753)]
![Page 31: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/31.jpg)
… and save the model
02. Image classification
import tensorflow as tffrom keras import backend as K
I am using Tensorflow 1.12.0
![Page 32: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/32.jpg)
… and save the model
02. Image classification
sess = tf.Session()K.set_session(sess)model = NASNetMobile(weights="NASNet-mobile.h5")img = image.load_img('cat.jpg', target_size=(224,224))img_arr = np.expand_dims(image.img_to_array(img), axis=0)
x = preprocess_input(img_arr)
preds = model.predict(x)print('Predicted:', decode_predictions(preds, top=3)[0])
builder = tf.saved_model.builder.SavedModelBuilder("myModel")builder.add_meta_graph_and_variables(sess, ["myTag"])builder.save()sess.close()
Just add a few lines around the execution to save the model.
![Page 33: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/33.jpg)
Image classification
02. Image classification
$ ls -R myModel/myModel/:saved_model.pb variables
myModel/variables:variables.data-00000-of-00001 variables.index
![Page 34: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/34.jpg)
Finding out the input & output layer names
02. Image classification
# If Keras model, in Pythonprint('input layer: ', model.input)print('output layer: ', model.output)
# Print all layer namesfor op in graph.get_operations(): print(op.name)
input_1stem_conv1/truncated_normal/shapestem_conv1/truncated_normal/meanstem_conv1/truncated_normal/stddevstem_conv1/truncated_normal/TruncatedNormalstem_conv1/truncated_normal/mulstem_conv1/truncated_normalstem_conv1/kernelstem_conv1/kernel/Assignstem_conv1/kernel/readstem_conv1/convolution/dilation_ratestem_conv1/convolutionstem_bn1/Conststem_bn1/gammastem_bn1/gamma/Assignstem_bn1/gamma/readstem_bn1/Const_1stem_bn1/betastem_bn1/beta/Assignstem_bn1/beta/readstem_bn1/Const_2stem_bn1/moving_meanstem_bn1/moving_mean/Assignstem_bn1/moving_mean/readstem_bn1/Const_3stem_bn1/moving_variancestem_bn1/moving_variance/Assignstem_bn1/moving_variance/readstem_bn1/IsVariableInitializedstem_bn1/IsVariableInitialized_1stem_bn1/IsVariableInitialized_2stem_bn1/IsVariableInitialized_3stem_bn1/IsVariableInitialized_4stem_bn1/init...
… or debug the Python code
input layer: Tensor("input_1:0", shape=(?, 224, 224, 3), dtype=float32)output layer: Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32)
![Page 35: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/35.jpg)
R: -0.3255 ; G: -0.1843 ; B: 0.3020
Formatting the input image
02. Image classification
R: 86 ; G: 104 ; B: 166
f(x) = (x - 127.5) / 127.5
[0,255] ⇒ [-1,1]
input layer: Tensor("input_1:0", shape=(?, 224, 224, 3), dtype=float32)
![Page 36: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/36.jpg)
Formatting the input image
02. Image classification
func imageToTensor(img image.Image) (*tf.Tensor, error) {var image [1][224][224][3]float32for i := 0; i < 224; i++ {
for j := 0; j < 224; j++ {r, g, b, _ := img.At(i, j).RGBA()image[0][j][i][0] = convertColor(r)image[0][j][i][1] = convertColor(g)image[0][j][i][2] = convertColor(b)
}}return tf.NewTensor(image)
}func convertColor(value uint32) float32 {
return (float32(value>>8) - float32(127.5)) / float32(127.5)}
Note that you’ll likely need to perform some scaling to have a 224*224 image.
![Page 37: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/37.jpg)
Image classification
02. Image classification
tf.NewTensor([1][224][224][3]float32{[224][224][3]float32{[224][3]float32{
[3]float32{-0.003921569, -0.03529412, -0.105882354},[3]float32{-0.105882354, -0.14509805, -0.19215687},[3]float32{-0.09019608, -0.13725491, -0.13725491},[3]float32{-0.08235294, -0.12941177, -0.06666667},...
})
![Page 38: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/38.jpg)
Interpreting the output
02. Image classification
output layer: Tensor("predictions/Softmax:0", shape=(?, 1000), dtype=float32)
"tench": 0.0001,"goldfish": 0.0012,"great_white_shark": 0.0009,"tiger_shark": 0.0002,"hammerhead": 0.0000,"electric_ray": 0.0000,"stingray": 0.0001,"cock": 0.0201,"hen": 0.0002,"ostrich": 0.0001,"brambling": 0.0000,"goldfinch": 0.0000,"house_finch": 0.0026,...
Keep the 10 best scores
![Page 39: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/39.jpg)
Image classification
02. Image classification
[10]Prediction{{Class: “Siamese_cat”, Score: 0.8996405},{Class: “lynx”, Score: 0.0022755866},{Class: “Egyptian_cat”, Score: 0.0021423753},...
}
![Page 40: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/40.jpg)
Image classification
02. Image classification
![Page 41: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/41.jpg)
Face recognition
SECTION THREE
![Page 42: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/42.jpg)
Detection
03. Face recognition
Input shape: [1][?][?][3]uint8
Output shapes:- Boxes: [1][n][4]float32- Scores: [1][n]float32
n: number of detections
![Page 43: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/43.jpg)
Landmarks
03. Face recognition
Input shape: [1][112][112][3]uint8
Output shapes: [1][68]float32
![Page 44: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/44.jpg)
Descriptors
03. Face recognition
Input shape: [1][150][150][3]uint8
Output shapes: [1][128]float32
[-0.126126890.1180478860.02671108-0.07834958-0.14790918-0.022446968-0.026294671-0.0458436830.14365208-0.05760830.2268444-0.01782807-0.25747967-0.123187020.033195040.16775846-0.14766541-0.103011996-0.17960805-0.0653507...-0.089735490.0487363860.0029452406]
![Page 45: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/45.jpg)
Euclidean distance in this 128-dims space
03. Face recognition
0.490.83
The 128-dims vector is✓ Lightweight✓ Fast✓ Good for search
[-0.126126890.1180478860.02671108-0.07834958...]
[-0.026294671-0.0458436830.14365208-0.0576083...]
[0.033195040.16775846-0.14766541-0.103011996...]
di n = √( Σi ∊[0,127](fa 1i - fa 2i )2 )
![Page 46: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/46.jpg)
face-api.js - github.com/justadudewhohacks/face-api.js
03. Face recognition
![Page 47: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/47.jpg)
face-api.js
03. Face recognition
const out1 = tf.relu( isFirstLayer ? tf.add( tf.conv2d(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias ) : depthwiseSeparableConv(x, denseBlockParams.conv0, [2, 2]))
const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1])...
if isFirstLayer: out1 = tf.math.add( tf.nn.conv2d(inp, dense["conv0"]["filters"], [1,2,2,1], 'SAME'), dense["conv0"]["bias"]) else: out1 = tf.math.add( tf.nn.separable_conv2d( inp, dense["conv0"]["depthwise_filter"], dense["conv0"]["pointwise_filter"], [1,2,2,1], 'SAME'), dense["conv0"]["bias"])
out1 = tf.nn.relu(out1)
out2 = tf.math.add( tf.nn.separable_conv2d(...
![Page 48: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/48.jpg)
SearchSECTION FOUR
![Page 49: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/49.jpg)
01
Search is left as an exercise to the reader
04. Search
![Page 50: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/50.jpg)
Search by keyword
04. Search
Old_English_sheepdogWest_Highland_white_terrier
restaurantdinning_table
German_shepherdEskimo_dogfur_coat
crateIrish_wolfhoundBorder_terrier
kimonotoaster
mazecoilzebra
Great_Pyreneeskuvasz
book_jacketpacket
car_mirrorcabschool_bus
digital_clockradioPolaroid_camera
filedeskrestaurant
fur_coatwool
timber_wolfred_wolfcoyote
jeepcabcar_wheel
Norwich_terrierIrish_terrierAustralian_terrier
![Page 51: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/51.jpg)
Search by keyword
04. Search
Old_English_sheepdogWest_Highland_white_terrier
restaurantdinning_table
German_shepherdEskimo_dogfur_coat
crateIrish_wolfhoundBorder_terrier
kimonotoaster
mazecoilzebra
Great_Pyreneeskuvasz
book_jacketpacket
car_mirrorcabschool_bus
digital_clockradioPolaroid_camera
filedeskrestaurant
fur_coatwool
timber_wolfred_wolfcoyote
jeepcabcar_wheel
Norwich_terrierIrish_terrierAustralian_terrier
“dog”
![Page 52: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/52.jpg)
Search by keyword
04. Search
Old_English_sheepdogWest_Highland_white_terrier
restaurantdinning_table
German_shepherdEskimo_dogfur_coat
crateIrish_wolfhoundBorder_terrier
kimonotoaster
mazecoilzebra
Great_Pyreneeskuvasz
book_jacketpacket
car_mirrorcabschool_bus
digital_clockradioPolaroid_camera
filedeskrestaurant
fur_coatwool
timber_wolfred_wolfcoyote
jeepcabcar_wheel
Norwich_terrierIrish_terrierAustralian_terrier
“car”
![Page 53: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/53.jpg)
Search by keyword
04. Search
Old_English_sheepdogWest_Highland_white_terrier
restaurantdinning_table
German_shepherdEskimo_dogfur_coat
crateIrish_wolfhoundBorder_terrier
kimonotoaster
mazecoilzebra
Great_Pyreneeskuvasz
book_jacketpacket
car_mirrorcabschool_bus
digital_clockradioPolaroid_camera
filedeskrestaurant
fur_coatwool
timber_wolfred_wolfcoyote
jeepcabcar_wheel
Norwich_terrierIrish_terrierAustralian_terrier
“restaurant”
![Page 54: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/54.jpg)
Search by face
04. Search
0.43
0.84
0.49
0.73
0.71
0.83
![Page 55: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/55.jpg)
Conclusion
![Page 56: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/56.jpg)
All the models I have talked about are (hopefully) ready to use on my repo
github.com/gildasch/gildas-ai
![Page 57: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/57.jpg)
$ docker run -p 8080:8080 gildasch/gildas-ai
Run the demo
![Page 58: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/58.jpg)
Try it as a lib too!
02. Image classification
// import "github.com/gildasch/gildas-ai/imagenet"
model, close, err := imagenet.NewNasnet("models/")// handle errordefer close()
preds, err := model.Classify(img)// handle error
fmt.Println(preds.Best(10))
![Page 59: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/59.jpg)
Keras and Tensorflow models work great
The others will require conversion which is still experimental
![Page 60: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/60.jpg)
Remember the 5 step to use a new model
1. Find
ing th
e mod
el
2. Run
it in
Python
3. Sav
e the
mod
el
4. Form
at the
inpu
t
5. Int
erpret
the o
utput
![Page 61: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/61.jpg)
Thank you
![Page 62: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/62.jpg)
Closing notes
● All the models I have talked about are (hopefully) ready to use on my repo github.com/gildasch/gildas-ai
● Keras and Tensorflow models work great● The others will require conversion which is
still experimental
![Page 63: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/63.jpg)
Name Author License Link Framework
Keras Xception harshsikka MIT https://modeldepot.io/harshsikka/keras-xception Keras
Keras ResNet50 tonyshih MIT https://modeldepot.io/tonyshih/keras-resnet50 Keras
NASNet Mobile jbrandowski Apache License 2.0 https://modeldepot.io/jbrandowski/nasnet-mobile Keras
Imagenet (ILSVRC-2012-CLS) classification with PNASNet-5 (large)
Google Creative Commons Attribution 3.0
https://tfhub.dev/google/imagenet/pnasnet_large/classification/2
Tensorflow Hub
Mask R-CNN dani MIT https://modeldepot.io/dani/mask-r-cnn Keras
face-api.jst justadudewhohacks MIT https://github.com/justadudewhohacks/face-api.js Tensorflow
InsightFace (ArcFace)
Jia Guo and Jiankang Deng
MIT https://github.com/deepinsight/insightface MXNet Converted following https://github.com/Microsoft/MMdnn/issues/85
Models
![Page 64: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/64.jpg)
Go’s Values
● Thoughtful● Simple● Efficient● Reliable● Productive● Friendly
![Page 65: FOSDEM, FEB 2 2019 Go & Tensorflow AI image search with](https://reader030.fdocuments.in/reader030/viewer/2022021610/620a9661216ee814bd76ae85/html5/thumbnails/65.jpg)
TYPES & METHODS
02. A SIMPLE TYPE SYSTEM
type MyFloat float64 func (m MyFloat) Abs() float64 { f := float64(m) if f < 0 { return -f } return f } f := MyFloat(-42) f.Abs() // == 42.0
You can define methods on any type:
Each language feature should be easy to understand.