{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