{AI for hackers}
A quick-start guide on how to get started making using AI and ML



Artificial Intelligence
Machine
Learning
Deep
Learning
Supervised
Learning
Unsupervised
Learning
Reinforcement
Learning
Supervised
Learning
Unsupervised
Learning
Reinforcement
Learning
Computer Vision & Natural Language Processing
Audio data is usually doable, but results are less good
Some rules of thumb
Mature tech | Heavy duty (forget RPI) |
Easy to start with | Hard to understand |
Tabular data is most likely classical machine learning
Reinforcement Learning is mainly interesting for games
Some rules of thumb
Unsupervised ML sucks hard for makers
Try to minimize your inputs and outputs
Python is King

C++ is the Workhorse
Google Colab is Queen
Jupyter is the Workhorse

Frameworks

Matlab


Intel OneAPI

ONNX

TensorRT

PyTorch


TensorFlow / Keras
+ Lite!
Scikit
Learn

NVIDIA is the enemy
Ideation


See ML as an advanced SENSOR
Or even replace what a human would manually input
In many cases ML will not be needed, let alone DL
Take any maker project then swap out the sensor / API / human with ML
Do it anyway
¯\_(ツ)_/¯
IF xxxx THEN yyyy
Person is present on the camera feed
Tweet is unfriendly
Audio sample contains dog barks
Build from a cool technology outward
OR
Replace some niche, highly specific code
OR
Let's Make Something!

Problem Statement
Working from home and not working out

Conceptual Solution
Lock PC every hour and force pushups

Conceptual Solution

or proximity sensor?
or weight sensor?
Replace Sensor with ML


The cycle of misery
DATA
MODEL
DEPLOYMENT
DATA
MODEL
DEPLOYMENT
All examples of CV applications




Keypoints




Partial credit: Anthony Sarkis, Standford CS231n
DATA
MODEL
DEPLOYMENT

paperswithcode.com
DATA
MODEL
DEPLOYMENT
DO NOT REINVENT THE WHEEL
Pretrained Models

Transfer Learning

DATA
MODEL
DEPLOYMENT
Pretrained Models

Transfer Learning

🔥Huggingface
🔥Pinto Model Zoo
Tensorflow Hub
TensorFlow Model Garden
OpenVino Model Zoo
Awesome Pytorch List
Awesome TensorFlow Lite
The project itself on Github
DATA
MODEL
DEPLOYMENT
Pretrained Models

Transfer Learning

🔥Huggingface

from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipe = pipe.to('cuda')
prompt = "a photo of an astronaut riding a horse on mars"
with autocast("cuda"):
image = pipe(prompt, guidance_scale=7.5)["sample"][0]
image.save("astronaut_rides_horse.png")

DATA
MODEL
DEPLOYMENT
Pretrained Models

Transfer Learning

DATA
MODEL
DEPLOYMENT
Pretrained Models

Transfer Learning

Reuse pretrained model that's closest to what you want
Retrain only last layers with little data
???
Profit
DATA
MODEL
DEPLOYMENT
Pretrained Models

Transfer Learning

DATA
MODEL
DEPLOYMENT

Found BlazePose on PINTO model zoo
DATA
MODEL
DEPLOYMENT



Monolith
API Server
Hardware
DATA
MODEL
DEPLOYMENT



Monolith
API Server
Hardware
DATA
MODEL
DEPLOYMENT



Monolith
API Server
Hardware
DATA
MODEL
DEPLOYMENT


DATA
MODEL
DEPLOYMENT


DATA
MODEL
DEPLOYMENT


kp1 | kp2 | kp3 | kp4 | kp5 | kp6 | kp7 | kp8 | kp9 | |
---|---|---|---|---|---|---|---|---|---|
x | 2 | 3 | 5 | 7 | 8 | 9 | 0 | -1 | 4 |
y | 6 | 8 | 1 | 3 | 5 | -4 | -2 | 1 | 0 |
Tabular Data in diguise!
>>> from sklearn.svm import SVC
>>> clf = make_pipeline(StandardScaler(), SVC(gamma='auto'))
>>> clf.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler()),
('svc', SVC(gamma='auto'))])
>>> print(clf.predict([[-0.8, -1]]))
[1]
DATA
MODEL
DEPLOYMENT

PUSH UP
PUSH DOWN

Classification Annotation
DATA
MODEL
DEPLOYMENT
Label Studio labelstud.io

DATA
MODEL
DEPLOYMENT
DIY Labeling Tool
DATA
MODEL
DEPLOYMENT
Sound Familiar??


DATA
MODEL
DEPLOYMENT
DATA
MODEL
DEPLOYMENT
Classical ML doesn't need a model server
class Inference:
def __init__(self):
training_task = Task.get_task(task_id='4cbfaf6975df463b89ab28379b00639b')
self.scaler = joblib.load(training_task.artifacts['scaler_remote'].get_local_copy())
self.model = joblib.load(training_task.artifacts['model_remote'].get_local_copy())
def preprocess_landmarks(self, landmarks):
self.scaler.transform(landmarks)
return landmarks
def run_model(self, landmarks):
predicted = self.model.predict(landmarks)
return predicted
def predict(self, landmarks):
scaled_landmarks = self.preprocess_landmarks(landmarks)
predicted = self.run_model(scaled_landmarks)
return predicted
GOOD ENOUGH
The cycle of misery
DATA
MODEL
DEPLOYMENT
Labeling Tool Edition
DATA
MODEL
DEPLOYMENT
Text to speech
DATA
MODEL
DEPLOYMENT
Text to speech
🔥Huggingface

Premade APIs

from transformers import Speech2Text2Processor, SpeechEncoderDecoderModel
model = SpeechEncoderDecoderModel.from_pretrained("facebook/s2t-wav2vec2-large-en-de")
processor = Speech2Text2Processor.from_pretrained("facebook/s2t-wav2vec2-large-en-de")
inputs = processor("hey_newline.wav", sampling_rate=16_000, return_tensors="pt")
generated_ids = model.generate(inputs=inputs["input_values"],
attention_mask=inputs["attention_mask"])
transcription = processor.batch_decode(generated_ids)
DATA
MODEL
DEPLOYMENT
Text to speech
🔥Huggingface

Premade APIs
from transformers import Speech2Text2Processor, SpeechEncoderDecoderModel
model = SpeechEncoderDecoderModel.from_pretrained("facebook/s2t-wav2vec2-large-en-de")
processor = Speech2Text2Processor.from_pretrained("facebook/s2t-wav2vec2-large-en-de")
inputs = processor("hey_newline.wav", sampling_rate=16_000, return_tensors="pt")
generated_ids = model.generate(inputs=inputs["input_values"],
attention_mask=inputs["attention_mask"])
transcription = processor.batch_decode(generated_ids)
DATA
MODEL
DEPLOYMENT
Just build it in
This slide structure is already a dumpster fire
Recap
Recap

+ Voice activated labeling tool
Final Result
+ Voice activated labeling tool

Takeaways
Use pretrained models: check Huggingface
Force ML into your project
Label yourself, you don't need much

victor@projectwhy.be
projectwhy.be
@VictorSonck
Check out ClearML!
It's Open Source
It can help