Le salon “IA Paris & Big Data 2024” est le fruit du regroupement entre deux événements phares de la tech française et européenne : Big Data Paris, rendez-vous clé de la scène big data depuis dix ans, et AI Paris, événement dédié aux avancées de l’intelligence artificielle devenu incontournable en cinq éditions. Rapprochés pour la première fois en 2020, ces deux événements sont désormais regroupés en une seule et unique manifestation, tant le développement des marchés du big data et de l’IA sont corrélés. Big Data & AI Paris devient l’événement français de référence de tout l’écosystème big data et IA.
15 et 16 octobre 2024
Stand C14
Porte de Versailles, Paris
Conférence en prévision
“L’IA Générative au service de la relation candidat : automatisation des offres d’emploi chez CRIT”
Découvrez comment CRIT a libéré du temps chez ses conseillers, pour privilégier la relation avec leurs candidats. CRIT a fait appel à Probayes pour développer une solution d’Intelligence Artificielle permettant la rédaction automatique des offres d’emploi
Mardi 15 octobre 2024
13h00 – 13h30
Salle 3
Présentée par
Lydie Lemaire – Product Specialist
Ronan Le Hy – Directeur scientifique
François Duboclard – Business Developper
“L’IA Générative au service de la relation candidat : automatisation des offres d’emploi chez CRIT”
Découvrez comment CRIT a libéré du temps chez ses conseillers, pour privilégier la relation avec leurs candidats. CRIT a fait appel à Probayes pour développer une solution d’Intelligence Artificielle permettant la rédaction automatique des offres d’emploi
Mardi 15 octobre
13h00 – 13h30
Salle 3
Lydie Lemaire – Customer Support – CRIT France
Ronan Le Hy – Directeur Scientifique – Probayes
Alexis est docteur en informatique spécialisé en Vision par Ordinateur et Apprentissage Automatique. Il travaille depuis 2013 chez Probayes en tant qu’ingénieur R&D et chef de projets sur des sujets d’Apprentissage Automatique.
Alexis est aujourd’hui Directeur Scientifique expert en Machine Learning.
François Duboclard – Business developper – Probayes
Julien a rejoint Probayes en 2020 en tant que Directeur du Développement. Ingénieur de formation puis consultant en aide à la décision, il évolue dans l’Intelligence Artificielle et la Data-Science depuis plus de 15 ans.
IA & Optimisation le nouveau tandem pour supply chain et la logistique du futur !
Plus qu’un événement, Supply Chain Event est activateur de transformation numérique présentant des technologies, outils et méthodespour optimiser la chaîne d’approvisionnement des entreprises de l’industrie et de la grande distribution.
Optimisation de réseaux logistiques : retour d’expérience de DPD France sur l’utilisation d’Optimnet
Cette conférence mettra en avant le retour d’expérience de DPD France sur l’intégration et l’utilisation d’Optimnet, un outil d’aide à la décision conçu par Probayes, qui offre la possibilité de visualiser et d’optimiser divers aspects d’un réseau logistique. Grâce à Optimnet, DPD a pu relever les défis complexes liés à la gestion de ses flux logistiques, tout en augmentant la performance globale de son réseau de livraison et en s’inscrivant dans une démarche d’amélioration continue.
L’optimisation du réseau est un enjeu crucial pour un acteur comme DPD, confronté à des volumes en constante augmentation et à des exigences croissantes en matière de rapidité et de qualité de service, notamment pour les livraisons J+1. L’implémentation d’Optimnet a permis non seulement d’anticiper l’évolution des volumes à transporter, mais aussi de simuler l’impact de différentes modifications envisagées pour son réseau, contribuant ainsi à une amélioration continue des processus logistiques.
Mardi 12 novembre
15h00 – 15h45
Présentée par :
Ilyass Guennani
Chef de Projets Etudes Schéma Directeur
Bennaceur Zerhouni
Chef de projet technique – Data Scientist
Aurélie Lasherme
Chef de Projet
Comment faciliter la planification des agents en couvrant au mieux les tâches à accomplir et en respectant de multiples impératifs ?
Le module de Recherche Opérationnelle développé propose des plannings de chargés de clientèle au manager du bureau de poste, afin de satisfaire le flux client et la qualité de vie au travail.
Il est intégré dans l’outil de planification du métier et prend en compte le multi-sites, multi-activités, les impératifs réglementaires, métiers et RH.
Mardi 14 novembre
15h00 – 15h45
Salle / Atelier 3
Elise Dard
Chef de projet Organisation et Planification Opérationnelle du Réseau La Poste
Leslie Leroux
Responsable d'équipe Recherche Opérationnelle et Optimisation Combinatoire
Participez au 19ᵉ congrès français de génie des procédés : innovations, réseautage et découvertes en Normandie !
Du 15 au 17 octobre 2024, plongez dans l’univers captivant du génie des procédés au Centre International de Deauville. Cet événement majeur vous offre une opportunité rare de découvrir les dernières avancées scientifiques et technologiques, de rencontrer des leaders du secteur, et de débattre des défis cruciaux de notre époque. En plus des sessions enrichissantes, vous aurez l’occasion de visiter des sites industriels emblématiques et de profiter des trésors touristiques de la Normandie. Ne manquez pas cette chance unique de vous connecter, d’apprendre et de vous inspirer. Réservez dès aujourd’hui pour un congrès inoubliable !
Au sein de son usine, Orano se doit d’effectuer des mesures laboratoires, c’est pourquoi Probayes a proposé son expertise en modélisation . Ces mesures sont coûteuses en temps et ne sont pas continues. Dans le but de consolider les résultats laboratoires, mais aussi d’avoir une mesure continue du relevé cible, nous avons proposé à Orano une solution mêlant l’information chimique (équation de réaction) et une modélisation probabiliste. A l’aide d’autres mesures capteurs et en propageant des incertitudes sur les relevés laboratoires avec un modèle bayesien, nous avons proposé une solution pertinente et efficace, permettant d’avoir une confiance notable dans les résultats du modèle. Ce projet sera présenté à la société française de la génie des procédés 2024 à Deauville, en compagnie d’Orano. Cette réussite mutuelle donnera également naissance à un document détaillant la méthode. Vous pouvez nous retrouver du 15 au 17 octobre au salon a Deauville!
Programme en cours d’élaboration…
Elise Dard
Chef de projet Organisation et Planification Opérationnelle du Réseau La Poste
Leslie Leroux
Responsable d'équipe Recherche Opérationnelle et Optimisation Combinatoire
L'intelligence artificielle au service de l'optimisation des processus de R&D !
Vous travaillez dans la Recherche et Développement à l’ère de la révolution numérique et des avancées de l’Intelligence Artificielle ?
Face aux défis des secteurs agroalimentaire, cosmétique et des compléments alimentaires, Innov’Alliance, en partenariat avec Vegepolys Valley, organise cet événement gratuit et ouvert à tous. Il comprend un webinaire de présentation et un atelier d’émergence (discussion interactive) centré sur l’optimisation des processus de R&D grâce à l’Intelligence Artificielle.
Venez découvrir le stand de L’Usine Augmentée (Hall 11.0, Stand E65) sur ACHEMA 2024, du 10 au 14 juin, au cœur du Hub Digital !
🔎 Le Hub Digital, c’est un concentré d’innovations technologiques. Situé dans le Hall 11.0, vous y retrouverez toutes les solutions d’avenirs qui feront progresser l’industries des procédés : 🔹 Plateformes numériques 🔹 Cloud et infrastructure 🔹 Logiciels 🔹 Conseil 🔹Outils technologiques
Probayes s’associe à son écosystème de partenaires, Courbon, Inevo, et Optimistik, pour présenter une solution unique vers le digital et la numérisation des procédés.
Come and visit the “The Augmented Plant” stand (Hall 11.0, Booth E65) at ACHEMA 2024, from June 10 to 14, in the heart of the Digital Hub!
🔎 The Digital Hub is a concentration of technological innovations where you can discover all the future solutions that will drive the process industry forward: 🔹 Artificial Intelligence 🔹 Digital platforms 🔹 Cloud and infrastructure 🔹 Software 🔹 Consulting 🔹 Technology tools
Probayes joins its ecosystem of partners, Courbon, Inevo and Optimistik to present solutions covering the entire value chain of the sustainable industry of the future.
Probayes sera présent sur Vivatech et vous présentera plusieurs démos :
– La Poste GPT
– détection de mauvaises postures en temps réel et grâce à l’Intelligence Artificielle
– son avatar doté d’Intelligence Artificielle Générative
Mais comment discuter avec mon Avatar ? C’est simple, à partir d’une photo prise sur place, vous choisissez le style dans lequel votre avatar apparaîtra. Et hop, en quelques secondes, vous voilà sous les traits d’un dessin animé. À présent, c’est à vous de jouer en posant vos questions. Et grâce à l’IA Générative, la magie opère et votre double vous répond sous forme de vidéo.
▶️ Rencontrons-nous, du 22 au 25 mai 2024 à VivaTech
Les filtres de Kalman permettent d’estimer l’état d’un système dynamique pour lequel on connait :
les règles / lois d’évolution
les actions qui lui sont appliquées
une série d’observations / mesures potentiellement incomplètes ou bruitées.
Dans sa version la plus simple, l’ensemble des transformations du système ainsi que les observations réalisées peuvent être modélisées sous forme de transformations linéaires appliquées à l’état du système.
Supposons un système dynamique dont l’état à l’instant est .
À tout moment, l’estimation de l’état est connue avec une certaine incertitude représentée par une matrice de covariance .
Les gaussiennes multivariées
Ce sont des distributions bien connues avec de nombreuses propriétés mathématiques pratiques:
marginalisation
conditionnement
etc.
Pour ce type de formule, vous pouvez par exemple utiliser le “Matrix CookBook”
%matplotlib inline
import numpy as np
from scipy.linalg import eigh
from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
from sklearn.datasets import make_spd_matrix
plt.ion()
def compute_ellipse(cov):
w, u = eigh(cov)
std = np.sqrt(w)
angle = np.arctan2(u[1, 0], u[0, 0])
return 3 * std[0], 3 * std[1], angle * 180. / np.pi
def plot_gaussian(mu, cov):
"""Plot the mean and covariance of a 2D Gaussian distribution.
Parameters
----------
mu : array_like, shape (2,)
Mean vector of the distribution.
cov: array_like, shape (2, 2)
Covariance matrix of the distribution.
"""
# Plot the mean vector.
sc = plt.scatter(mu[0], mu[1], label='Mean')
width, height, angle = compute_ellipse(cov[:2, :2])
# Plot the covariance matrix as an ellipse.
ellipse = Ellipse(xy=mu, width=width, height=height, angle=angle,
alpha=0.2, label='Covariance')
plt.gca().add_artist(ellipse)
return sc, ellipse
C = make_spd_matrix(2, random_state=1)
mu = np.array([1, 2])
X = multivariate_normal(mu, C).rvs(1000)
plt.scatter(*X.T, s=1)
plot_gaussian(mu, C);
Distribution jointe
Décomposons notre état distribuée selon une loi Gaussienne, en deux sous-parties, la distribution jointe des deux sous partie est :
Avec .
Marginalisation
Conditionnement
Si on connait la valeur de alors:
Combinaison linéaire
Si on a deux variable aléatoires indépendantes :
Alors la combinaison linéaire des deux est distribuée comme:
Propagation de la dynamique du système
Les filtres de Kalman modélisent le système en temps discret et l’évolution entre deux pas de temps est donnée par la loi linéaire :
avec : * : L’estimtation de l’état au pas après avoir pris en compte les éventuelles observations * : L’estimation de l’état au pas par propagation de la dynamique du système depuis l’estimation au pas précédent. * : matrice de transition qui représente l’évolution “naturelle” du système (pas nécessairement constante) * : une commande (ou contrôle) appliquée au système * : l’effet de la commande sur le système (pas nécessairement constante) * : le bruit du processus, c’est-à-dire ce qu’on ne modélise pas bien.
Exemple
Point mobile dans le plan
Appliquons cela à un objet ponctuel en mouvement sans frottement dans un plan.
L’état de l’objet à un instant est encodé par sa position et sa vitesse :
Le contrôle sur l’objet se fait par l’intermédiaire de l’équivalent d’une poussée :
On peut donc appliquer les équations du mouvement de Newton pour modéliser l’évolution du mobile entre deux instants proches. Si on considère que l’accélération est constante entre est , la vitesse va être données par:
Soit la vitesse initiale à laquelle on ajoute la variation de vitesse due à la poussée.
Et le déplacement peut se calculer par:
Où l’on retrouve la position à l’instant précédent, plus la variation de poistion due à la vitesse initiale, plus la variation de position liée à la poussée.
Mise en équation de la propagation du filtre de Kalman
Pour se caler dans le formalisme des filtre de Kalman, je suppose que l’état du système, au pas de temps , est donné par sa position et sa vitesse :
On peut ensuite séparer dans les équations de mouvement. Les parties qui dépendent de l’état précédent (position et vitesse ) et les parties qui dépendent du contrôle (ici l’accélération) et on peut ainsi construire les différents termes de l’étape de propagation:
Le contrôle corresond ici à la poussée:
Et l’évolution due au contrôle est donnée par:
Simulons un tel systeme:
delta_t = 0.1
t = np.arange(0, 10., delta_t)
# L'accélération est modifée à 3 reprises pendant 10 pas de temps dans des directions différentes
acceleration = np.zeros((len(t), 2))
acceleration[10: 20] = (0, 0.4)
acceleration[30: 40] = (0, -0.6)
acceleration[50: 60] = (0.1, 0.3)
# Matrice d'évolution de l'état
F = np.identity(4)
F[0, 2] = delta_t
F[1, 3] = delta_t
# Matrice donnant l'effet du contrôle sur système
G = np.zeros((4, 2))
G[0, 0] = G[1, 1] = 0.5 * delta_t**2
G[2, 0] = G[3, 1] = delta_t
# Estimation du bruit lié au processus d'évolution
Q = np.diag([0.001, 0.001, 0.002, 0.002]) ** 2
# Etat initial
state_actual = np.zeros((len(t), 4))
state_actual[0] = (0, 0, 0.1, 0)
state_mean = np.zeros((len(t), 4))
state_mean[0] = (0, 0, 0.1, 0)
# Evolution dans le temps
np.random.seed(0)
for i in range(1, len(t)):
state_actual[i] = multivariate_normal(F @ state_actual[i - 1] + G @ acceleration[i], Q).rvs()
state_mean[i] = F @ state_mean[i - 1] + G @ acceleration[i]
from itertools import chain
from IPython.display import HTML
from matplotlib.animation import FuncAnimation
class AnimResult:
def __init__(self, state_actual, acceleration, state_mean, covariance=None, observations=None):
self.state_actual = state_actual
self.acceleration = acceleration
self.state_mean = state_mean
self.covariance = covariance
self.observations = observations
def plot_init(self):
plt.plot(*state_mean.T[:2], "--", color="tab:blue", label="Trajectoire estimée")
plt.plot(*state_actual.T[:2], "-", color="tab:orange", label="Trajectoire simulée")
if self.observations is not None:
self.plot_observations()
def plot_acceleration(self):
if self.acceleration is None:
self.accel_arrow = None
else:
self.accel_arrow = plt.arrow(
*chain(self.state_mean[0, :2],
0.5 * self.acceleration[0]),
width=0.01,
visible=np.any(self.acceleration[i] != 0)
)
def plot_estimate(self):
self.actual_scatter = plt.scatter(*self.state_actual[[0], :2].T, color="tab:orange", label="Position simulée")
if self.covariance is None:
self.mean_scatter = plt.scatter(*self.state_mean[[0], :2].T, color="tab:blue", label="Position estimée")
self.cov_ellipse = None
else:
self.mean_scatter, self.cov_ellipse = plot_gaussian(self.state_mean[0, :2], self.covariance[0, :2, :2])
def update(self, i):
self.actual_scatter.set_offsets(*self.state_actual[[i], :2])
self.mean_scatter.set_offsets(*self.state_mean[[i], :2])
if self.cov_ellipse is not None:
width, height, angle = compute_ellipse(self.covariance[i, :2, :2])
self.cov_ellipse.set_center(self.state_mean[i, :2])
self.cov_ellipse.set_width(width)
self.cov_ellipse.set_height(height)
self.cov_ellipse.set_angle(angle)
if self.acceleration is not None:
self.accel_arrow.set_data(
x=self.state_mean[i, 0],
y=self.state_mean[i, 1],
dx=0.5 * self.acceleration[i, 0],
dy=0.5 * self.acceleration[i, 1]
)
self.accel_arrow.set_visible(np.any(self.acceleration[i] != 0))
if self.observations is not None:
self.update_observations(i)
def plot_observations(self, i):
pass
def update_observations(self, i):
pass
def animate(self):
self.plot_init()
self.plot_estimate()
plt.legend()
self.plot_acceleration()
ani = FuncAnimation(
plt.gcf(), self.update, frames=np.arange(len(t)), interval=100
)
return HTML(ani.to_html5_video())
Puisque nous n’avons que des lois normales et des transformations linéaires, l’erreur peut également être propagée avec, en notant est l’estimation de la covariance de l’état :
Puisque:
# Etat initial
state_actual = np.zeros((len(t), 4))
state_actual[0] = (0, 0, 0.1, 0)
state_mean = np.zeros((len(t), 4))
state_mean[0] = (0, 0, 0.1, 0)
state_cov = np.zeros((len(t), 4, 4))
state_cov[0] = Q * 5 ** 2
# Evolution dans le temps
np.random.seed(0)
for i in range(1, len(t)):
state_actual[i] = multivariate_normal(F @ state_actual[i - 1] + G @ acceleration[i], Q).rvs()
state_mean[i] = F @ state_mean[i - 1] + G @ acceleration[i]
state_cov[i] = F @ state_cov[i - 1] @ F.T + Q
plt.ioff()
plt.figure()
plt.gca().set_aspect("equal")
AnimResult(state_actual=state_actual, acceleration=acceleration, state_mean=state_mean, covariance=state_cov).animate()
On voit donc ici le mouvement estimé du système connaissant uniquement l’état initial et les contrôles appliqués sur le système. L’incertitude sur l’état (ici, on ne visualise que l’incertitude sur la position) augmente continuellement au cours du temps.
Pour la diminuer, on peut avoir recours à des observations.
Observations
Théorie
Par ailleurs, une observation se modélise par:
avec:
: la mesure issue de l’observation
: la matrice modélisation le processus d’observation
: le bruit d’observation.
Pour calculer l’information gagnée après une observation, on part de la distribution jointe de l’état courant et du résultat de l’observation:
On peut ensuite appliquer les formules associées aux gaussiennes multivariées:
Soit ici, en supposant qu’on a observé :
Simulons ici une observation correspondant à la mesure de la position et de la vitesse selon l’axe uniquement:
cela donne:
from scipy.stats import multivariate_normal
# Etat initial
state_actual = np.zeros((len(t), 4))
state_actual[0] = (0, 0, 0.1, 0)
state_mean = np.zeros((len(t), 4))
state_mean[0] = (0, 0, 0.1, 0)
state_cov = np.zeros((len(t), 4, 4))
state_cov[0] = Q * 5 ** 2
# Transformation leading to the observation
H = np.array([
[1, 0, 0, 0],
[0, 0, 1, 0]
])
# Observation noise
R = (0.01 ** 2, 0.1 ** 2) * np.identity(2)
observation_times = [40, 60]
observation_results = {}
# Evolution dans le temps
np.random.seed(0)
for i in range(1, len(t)):
state_actual[i] = multivariate_normal(F @ state_actual[i - 1] + G @ acceleration[i], Q).rvs()
state_mean[i] = F @ state_mean[i - 1] + G @ acceleration[i]
state_cov[i] = F @ state_cov[i - 1] @ F.T + Q
if i in observation_times:
# Observation process
observation_results[i] = obs_i = multivariate_normal(H @ state_actual[i], R).rvs()
# update the estimates
z_i = H @ state_mean[i]
cov_state_obs = state_cov[i] @ H.T
cov_obs_obs = H @ state_cov[i] @ H.T + R
state_mean[i] += cov_state_obs @ np.linalg.solve(cov_obs_obs, obs_i - z_i)
state_cov[i] -= cov_state_obs @ np.linalg.solve(cov_obs_obs, cov_state_obs.T)
class AnimLinearObs(AnimResult):
def plot_observations(self):
ymin, ymax = plt.ylim()
dx = 3 * np.sqrt(R.flatten())[0]
self.observation_lines = {}
self.observation_fill = {}
for i, obs_i in self.observations.items():
xi = obs_i[0]
self.observation_lines[i] = plt.vlines(xi, ymin, ymax, color="tab:green", linestyle="--", alpha=0.1)
self.observation_fill[i] = plt.fill_between([xi - dx, xi + dx], [ymin, ymin], [ymax, ymax], color="lightgreen", alpha=0.1)
plt.ylim(ymin, ymax)
def update_observations(self, i):
for iobs, line in self.observation_lines.items():
line.set_alpha(0.8 if i == iobs else 0.1)
self.observation_fill[iobs].set_alpha(0.8 if i == iobs else 0.1)
plt.ioff()
plt.figure()
plt.gca().set_aspect("equal")
AnimLinearObs(state_actual, acceleration, state_mean, state_cov, observation_results).animate()
On peut voir la contraction de l’incertitude selon liée à l’observation.
Extended Kalman Filters
Si les lois d’évolution et d’observation ne sont plus linéaires, il est tout de même possible d’appliquer le filtre de Kalman en le linéarisant localement:
Il suffit alors de remplacer les formules de mise à jour des covariances en utilisant la jacobienne des fonctions et :
Ici, on simule une observation, où l’on peut mesurer la distance et l’angle d’observation depuis l’origine du repère:
La loi de mouvement reste inchangée, donc la jacobienne est identique à la matrice donnée plus tôt:
import jax
import jax.numpy as jnp
def movement(state, control):
return F @ state + G @ control
def observation(state):
x, y = state[:2]
r = jnp.sqrt(x ** 2 + y ** 2)
angle = jnp.arctan2(y, x)
return jnp.array([r, angle * 180 / np.pi])
R = (np.identity(2) * (0.025, 0.5)) ** 2
# Etat initial
state_actual = np.zeros((len(t), 4))
state_actual[0] = (0, 0, 0.1, 0)
state_mean = np.zeros((len(t), 4))
state_mean[0] = (0, 0, 0.1, 0)
state_cov = np.zeros((len(t), 4, 4))
state_cov[0] = Q * 5 ** 2
observation_results = {}
# Evolution dans le temps
np.random.seed(0)
for i in range(1, len(t)):
state_actual[i] = multivariate_normal(movement(state_actual[i - 1], acceleration[i]), Q).rvs()
state_mean[i] = movement(state_mean[i - 1], acceleration[i])
F_i = jax.jacobian(movement)(state_mean[i - 1], acceleration[i])
state_cov[i] = F_i @ state_cov[i - 1] @ F_i.T + Q
if i in observation_times:
# Observation process
observation_results[i] = obs_i = multivariate_normal(observation(state_actual[i]), R).rvs()
# update the estimates
z_i = observation(state_mean[i])
H_i = jax.jacobian(observation)(state_mean[i])
cov_state_obs = state_cov[i] @ H_i.T
cov_obs_obs = H_i @ state_cov[i] @ H_i.T + R
state_mean[i] += cov_state_obs @ np.linalg.solve(cov_obs_obs, obs_i - z_i)
state_cov[i] -= cov_state_obs @ np.linalg.solve(cov_obs_obs, cov_state_obs.T)
def draw_polar_section(r, angle, dr, dangle, circle_grid=10):
x0 = r * np.cos(angle / 180. * np.pi)
y0 = r * np.sin(angle / 180. * np.pi)
rs = np.array([ r - dr, r + dr ] + [r + dr ] * circle_grid + [r - dr] + [r - dr] * circle_grid)
angles = np.array(
[angle - dangle, angle - dangle] +
[(angle - dangle) + (i + 1) / circle_grid * 2 * dangle for i in range(circle_grid)] +
[angle + dangle ] +
[(angle + dangle) - (i + 1) / circle_grid * 2 * dangle for i in range(circle_grid)]
)
polygon_xs = rs * np.cos(angles / 180. * np.pi)
polygon_ys = rs * np.sin(angles / 180. * np.pi)
return plt.scatter([x0], [y0], c="tab:green", alpha=0.1), plt.fill(polygon_xs, polygon_ys, alpha=0.1, color="lightgreen")
class AnimNonLinearObs(AnimResult):
def plot_observations(self):
dr, dangle = 3 * np.sqrt(R.diagonal())
self.observation_patches = {
i: draw_polar_section(*obs_i, dr, dangle) for i, obs_i in self.observations.items()
}
def update_observations(self, i):
for iobs, (obs_center, obs_poly) in self.observation_patches.items():
alpha = 0.8 if i == iobs else 0.1
obs_center.set_alpha(alpha)
for p in obs_poly: p.set_alpha(alpha)
plt.ioff()
plt.figure()
plt.gca().set_aspect("equal")
AnimNonLinearObs(state_actual, acceleration, state_mean, state_cov, observation_results).animate()
Filtres de Kalman sans parfum (Unscented Kalman Filter)
La transformation sans parfum
L’idée de cette transformation et d’estimer l’effet de transformations non-linéaires en utilisant des échantillons bien choisis appelés “points sigma”.
On fait passer ces points à travers les transformations d’évolution temporelle et d’observation et on estime ensuite, à partir de ces points, les paramètres de la distribution résultante.
L’idée est de construire un ensemble de paires de points qui pointent dans les directions principales de la distribution Gaussienne. Si on décompose la covariance en :
Alors, on construit les points sigma comme suit :
à chaque point est associé un poids:
où est un paramètre d’échelle.
%matplotlib inline
import numpy as np
from scipy.linalg import eigh
from math import gcd
def sigma_points(mu, sigma, lambda_):
n_dims = len(mu)
w, u = eigh(sigma)
w = np.maximum(w, 0)
L = (u * np.sqrt(w)).T
X = np.vstack(
[ mu ] +
[ mu + np.sqrt(n_dims + lambda_) * L[i] for i in range(n_dims) ] +
[ mu - np.sqrt(n_dims + lambda_) * L[i] for i in range(n_dims) ]
)
w = np.hstack([lambda_ / (n_dims + lambda_)] + [0.5 / (n_dims + lambda_)] * (2 * n_dims))
return X, w
C = np.array([[1.0, 0.8], [0.8, 1]])
mu = np.array([1, 2])
X_sigma, w_sigma = sigma_points(mu, C, lambda_=1)
plt.ion()
plt.figure()
plot_gaussian(mu, C);
plt.scatter(*X_sigma.T, s=10);
Application to the Kalman Filter
On passe ces points à travers la transformation d’évolution temporelle et à travers la fonction d’observation et on estime ensuite les différentes quantité d’intérêt en intégrant les poids:
# Apply on sigma points matrix instead of single vector
def movement(state, control):
return state @ F.T + G @ control
def observation(state):
x, y = state.T[:2]
r = np.sqrt(x ** 2 + y ** 2)
angle = np.arctan2(y, x)
return np.vstack([r, angle * 180 / np.pi]).T
# Etat initial
state_actual = np.zeros((len(t), 4))
state_actual[0] = (0, 0, 0.1, 0)
state_mean = np.zeros((len(t), 4))
state_mean[0] = (0, 0, 0.1, 0)
state_cov = np.zeros((len(t), 4, 4))
state_cov[0] = Q * 5 ** 2
observation_results = {}
lambda_ = 1e-1
# Evolution dans le temps
np.random.seed(0)
for i in range(1, len(t)):
state_actual[i] = multivariate_normal(movement(state_actual[[i - 1]], acceleration[i])[0], Q).rvs()
state_sigma, weight_sigma = sigma_points(state_mean[i - 1], state_cov[i - 1], lambda_)
state_sigma_tr = movement(state_sigma, acceleration[i])
state_mean[i] = np.einsum("ij, i -> j", state_sigma_tr, weight_sigma)
state_diff = state_sigma_tr - state_mean[i]
state_cov[i] = np.einsum("ij, ik, i -> jk", state_diff, state_diff, weight_sigma)
if i in observation_times:
# Observation process
observation_results[i] = obs_i = multivariate_normal(observation(state_actual[[i]])[0], R).rvs()
# update the estimates
z_sigma = observation(state_sigma_tr)
z_i = np.einsum("ij, i -> j", z_sigma, weight_sigma)
z_diff = z_sigma - z_i
cov_state_obs = np.einsum("ij, ik, i -> jk", state_diff, z_diff, weight_sigma)
cov_obs_obs = np.einsum("ij, ik, i -> jk", z_diff, z_diff, weight_sigma)
state_mean[i] += cov_state_obs @ np.linalg.solve(cov_obs_obs, obs_i - z_i)
state_cov[i] -= cov_state_obs @ np.linalg.solve(cov_obs_obs, cov_state_obs.T)
plt.ioff()
plt.figure()
plt.gca().set_aspect("equal")
AnimNonLinearObs(state_actual, acceleration, state_mean, state_cov, observation_results).animate()
Le rendez-vous incontournable des medtech au cœur de l'écosystème santé !
La 12ème édition de Médi’Nov Connection aura lieu les 3 et 4 avril 2024 au sein du Centre de Congrès de Lyon, situé en plein cœur de la Cité Internationale.💡
Le groupe Orano et ses partenaires lancent un projet de développement intitulé #udd@Orano (pour Usines De Demain sur les sites industriels d’Orano) en vue d’accélérer le déploiement de l’usine du futur au cœur des sites industriels du groupe.
Projet MONSOON
Projet visant à mettre en œuvre des techniques d’IA dans l’industrie de procédé – ici, l’aluminium (RIO TINTO – LIBERTY) et le plastique (GLNPlast, Portugal).
Projet ERAMET
Le groupe ERAMET est l’un des principaux producteurs mondiaux de métaux d’alliage. ERAMET produit dans son usine de Kvinesdal, en Norvège, des alliages de silicomanganèse.
PROJET DE QUALITÉ DE PRODUCTION
Projet visant à améliorer la fabrication de dispositifs médicaux
EasymAInt, solution de maintenance prédictive
À partir de capteurs plug&play, non intrusifs, EasymAInt permet de maitriser ses données, suivre ses équipements et réaliser de la maintenance prédictive
PROJET D'OPTIMISATION DE CHAÎNE LOGISTIQUE
Création d’un outil permettant de modifier les données d’entre et d’obtenir très rapidement, la résolution et la visualisation des résultats
Découvrez nos webinaires :
Améliorez votre performance industrielle grâce à l'Intelligence Artificielle
Le numérique est l’un des domaines clé de la performance industrielle. C’est donc un levier d’investissement primordial vers la vague « Industrie du Futur » ou « Industrie 4.0 ».
L'IA dans la boucle : Optimisez un procédé industriel
Retour d’expérience de Lynred sur le projet d’aide à la décision dans un procédé industriel, grâce à l’Intelligence Artificielle.
Retrouvez quelques photo. d'IA Paris & Big Data 2021 !
Probayes est très honoré d'avoir présenté à Mme Sophie Cluzel, secrétaire d'État aux personnes handicapées, Eye Tracking, solution d'interaction avec un système informatique, grâce au suivi oculaire !
▶️ Idéal pour utiliser sans contact, un écran et surtout une interface publique
▶️ Indispensable pour les personnes à mobilité réduite (alitées ou paralysées)
▶️ S’adapte à différents besoins sur les secteurs de la santé, de la finance, du loisir, etc.
En tant que filiale Le Groupe La Poste et tiers de confiance, Probayes s’attache à développer des solutions respectant la souveraineté des données
Comment appréhender le sujet de l'IA, Intelligence Artificielle en entreprise?
Profitez d’une journée originale avec les principaux acteurs en Région, pour vous projeter :
Rejoignez-nous le mardi 2 avril dès 13h30, pour une journée immersive dédiée, à la CCI Nord Isère, à Villefontaine, où vous découvrirez toutes les réponses à vos questions ! 💡
Le groupe Orano et ses partenaires lancent un projet de développement intitulé #udd@Orano (pour Usines De Demain sur les sites industriels d’Orano) en vue d’accélérer le déploiement de l’usine du futur au cœur des sites industriels du groupe.
Projet MONSOON
Projet visant à mettre en œuvre des techniques d’IA dans l’industrie de procédé – ici, l’aluminium (RIO TINTO – LIBERTY) et le plastique (GLNPlast, Portugal).
Projet ERAMET
Le groupe ERAMET est l’un des principaux producteurs mondiaux de métaux d’alliage. ERAMET produit dans son usine de Kvinesdal, en Norvège, des alliages de silicomanganèse.
PROJET DE QUALITÉ DE PRODUCTION
Projet visant à améliorer la fabrication de dispositifs médicaux
EasymAInt, solution de maintenance prédictive
À partir de capteurs plug&play, non intrusifs, EasymAInt permet de maitriser ses données, suivre ses équipements et réaliser de la maintenance prédictive
PROJET D'OPTIMISATION DE CHAÎNE LOGISTIQUE
Création d’un outil permettant de modifier les données d’entre et d’obtenir très rapidement, la résolution et la visualisation des résultats
Découvrez nos webinaires :
Améliorez votre performance industrielle grâce à l'Intelligence Artificielle
Le numérique est l’un des domaines clé de la performance industrielle. C’est donc un levier d’investissement primordial vers la vague « Industrie du Futur » ou « Industrie 4.0 ».
L'IA dans la boucle : Optimisez un procédé industriel
Retour d’expérience de Lynred sur le projet d’aide à la décision dans un procédé industriel, grâce à l’Intelligence Artificielle.
Retrouvez quelques photo. d'IA Paris & Big Data 2021 !
Probayes est très honoré d'avoir présenté à Mme Sophie Cluzel, secrétaire d'État aux personnes handicapées, Eye Tracking, solution d'interaction avec un système informatique, grâce au suivi oculaire !
▶️ Idéal pour utiliser sans contact, un écran et surtout une interface publique
▶️ Indispensable pour les personnes à mobilité réduite (alitées ou paralysées)
▶️ S’adapte à différents besoins sur les secteurs de la santé, de la finance, du loisir, etc.
En tant que filiale Le Groupe La Poste et tiers de confiance, Probayes s’attache à développer des solutions respectant la souveraineté des données
L'intelligence Artificielle au service de l'industrie du futur !
Le numérique et tout particulièrement l’Intelligence Artificielle permettent de créer des ruptures technologiques et d’usage.
Il s’agit là de leviers d’investissement primordiaux pour la performance industrielle et l’avancée vers la vague « Industrie du Futur » ou « Industrie 4.0 ».
Probayes accompagne ainsi de nombreux clients industriels dans leur transformation en développant des outils basés sur l’Intelligence Artificielle pour :
Améliorer la qualité des produits, par exemple par l’identification et l’analyse des facteurs influençant la non-qualité
Améliorer la performance industrielle, par exemple par la détection et l’anticipation des dérives du procédé
Optimiser le procédé, par exemple par la recommandation des meilleurs paramètres à appliquer durant le fonctionnement des équipements
Optimiser les ressources, par exemple le personnel, les machines et outils et les matières premières
Réaliser de la maintenance prédictive en anticipant les pannes éventuelles
Contrôle qualité automatisé par vision & amélioration du procédé de production
Benoît Hardier – Data Scientist et Chef de Projet – Probayes
Benoît est un ingénieur en mathématiques appliquées et data scientist chez Probayes depuis 2020. Son expertise se concentre sur l’application du deep learning dans des domaines tels que la vision par ordinateur (computer vision) et le traitement du langage naturel (NLP).
Dans le cadre de sa collaboration avec la société ITEN, spécialisée dans l’élaboration et la fabrication de micro batteries, Probayes a développé un projet visant à automatiser le contrôle qualité des plaques d’électrodes, ainsi qu’à améliorer la compréhension de la chaîne des procédés de production.
Le projet a consisté à élaborer des méthodes hybrides de vision par ordinateur, combinant des techniques d’apprentissage profond avec des algorithmes classiques, afin de détecter avec précision les défauts sur les plaques d’électrodes. En utilisant des données d’images fournies par des caméras haute-résolution, l’équipe de Probayes, a entraîné des modèles de deep learning pour reconnaître et localiser différents types de défauts aux formes et aux origines variées.
Prédiction des caractéristiques de l'huile chez Total Energies
Alexis Mignon – Directeur Scientifique – Probayes
Alexis est docteur en informatique spécialisé en Vision par Ordinateur et Apprentissage Automatique. Il travaille depuis 2013 chez Probayes en tant qu’ingénieur R&D et chef de projets sur des sujets d’Apprentissage Automatique.
Alexis est aujourd’hui Directeur Scientifique expert en Machine Learning.
TotalEnergies développe des services de monitoring prédictif pour ses clients. L’objectif est de connaître, en temps réel, la santé de leurs équipements : moteur de cogénération ou de bateaux, machines industrielles, éoliennes, etc.
A partir des données des huiles, issues des capteurs, on va déduire la santé des machines, en estimant l’état de vieillissement de ces huiles, et en détectant la présence de contaminants par exemple. Un apprentissage multi-niveaux mené par Probayes permet de convertir les données brutes fournies par les capteurs en des informations interprétables afin d’en déduire des actions de maintenance prédictive.
Et voici l'ensemble des conférences de nos partenaires
Mardi 26 Mars
🔹10:00 vrtice “Retex : 3 ans d’utilisation de Spherik chez EDF Hydro pour préparer les interventions sur site”
🔹10:45 Optimistik “Donnée industrielle : démocratiser son utilisation dans toute l’organisation, plutôt que de la limiter aux experts data”
🔹11:30 GROUPE SPC “Explorez les stratégies de valorisation de vos données pour renforcer la résilience énergétique”
🔹14:00 Courbon Software “Digitalisation de l’industrie : adaptez la solution à votre environnement et gagnez en agilité”
🔹14:45 QUATERNAIRE “Managez la performance de vos usines : engagez vos collaborateurs en digitalisant vos rituels AIC”
🔹15:30 INEVO “Jumeau Numérique Process : comment & pourquoi ?”
🔹16:15 Probayes, “Contrôle qualité automatisé par vision & Amélioration du procédé de production”
Mercredi 27 Mars
🔹10:00 Probayes Prédiction des caractéristiques de l’huile chez Total Energies
🔹10:45 Courbon Software Digitalisation de l’industrie : adaptez la solution à votre environnement et gagnez en agilité
🔹11:30 QUATERNAIRE Structurez et alignez la digitalisation des opérations aux enjeux de votre entreprise : diagnostic, schéma directeur et mise-en-œuvre
🔹14:00 INEVO Jumeau Numérique Process : Comment & pourquoi ?
🔹14:45 GROUPE SPC Exploitez la puissance de vos données industrielles pour gagner en efficacité et en productivité
🔹15:30 Optimistik Maîtrisez vos procédés industriels par la data : améliorez vos KPI qualité, énergie et matières sur le terrain
🔹16:15 vrtice Retex : 3 ans d’utilisation de Spherik chez EDF Hydro pour préparer les interventions sur site
Le groupe Orano et ses partenaires lancent un projet de développement intitulé #udd@Orano (pour Usines De Demain sur les sites industriels d’Orano) en vue d’accélérer le déploiement de l’usine du futur au cœur des sites industriels du groupe.
Projet MONSOON
Projet visant à mettre en œuvre des techniques d’IA dans l’industrie de procédé – ici, l’aluminium (RIO TINTO – LIBERTY) et le plastique (GLNPlast, Portugal).
Projet ERAMET
Le groupe ERAMET est l’un des principaux producteurs mondiaux de métaux d’alliage. ERAMET produit dans son usine de Kvinesdal, en Norvège, des alliages de silicomanganèse.
PROJET DE QUALITÉ DE PRODUCTION
Projet visant à améliorer la fabrication de dispositifs médicaux
EasymAInt, solution de maintenance prédictive
À partir de capteurs plug&play, non intrusifs, EasymAInt permet de maitriser ses données, suivre ses équipements et réaliser de la maintenance prédictive
PROJET D'OPTIMISATION DE CHAÎNE LOGISTIQUE
Création d’un outil permettant de modifier les données d’entre et d’obtenir très rapidement, la résolution et la visualisation des résultats
Découvrez nos webinaires :
Améliorez votre performance industrielle grâce à l'Intelligence Artificielle
Le numérique est l’un des domaines clé de la performance industrielle. C’est donc un levier d’investissement primordial vers la vague « Industrie du Futur » ou « Industrie 4.0 ».
L'IA dans la boucle : Optimisez un procédé industriel
Retour d’expérience de Lynred sur le projet d’aide à la décision dans un procédé industriel, grâce à l’Intelligence Artificielle.
Retrouvez quelques photo. d'IA Paris & Big Data 2021 !
Probayes est très honoré d'avoir présenté à Mme Sophie Cluzel, secrétaire d'État aux personnes handicapées, Eye Tracking, solution d'interaction avec un système informatique, grâce au suivi oculaire !
▶️ Idéal pour utiliser sans contact, un écran et surtout une interface publique
▶️ Indispensable pour les personnes à mobilité réduite (alitées ou paralysées)
▶️ S’adapte à différents besoins sur les secteurs de la santé, de la finance, du loisir, etc.
En tant que filiale Le Groupe La Poste et tiers de confiance, Probayes s’attache à développer des solutions respectant la souveraineté des données