Coucou !
Merci pour la revue, ça me fera ma lecture du jour.
Actuellement,(je débute en ML depuis 8 semaines) je n’ai encore rien lu sur la détection d’avant-plan ou la segmentation, donc je devrai prendre un peu de temps pour me renseigner dessus. Est-ce que ces prétraitements dont tu parles incluent de la détection d’objet pour isoler les mains ? je pense au module Object Detector de ml5.js mais je ne sais pas si ce modèle a été entraîner à identifier des mains, où si il les ignores pour ce concentrer sur l’objet tenu.
J’ai essayé d’entraîner directement sur les pixels (vidéo en niveaux de gris.) Le résultat a été un modèle avec une précision de 48% avec 172*172*5 = 147920 paramètres (pixels hauteur largeur nombre de frames) : tellement complexe qu’il était inutilisable et impossible à exporter.
Du coup j’ai changé d’approche. Je garde la vidéo en niveau de gris, mais j’ai fait de l’extraction de caractéristique. La première cible les formes (utilisation d’un filtre de Sobel pour voir les différents angles et construire un histogramme) ce qui génère la sensibilité aux motifs sur les vêtements, comme les rayures ou les carreaux. La seconde cible le mouvement (moyenne des différences d’intensité de pixels entre 2 frames sur toute la surface de l’image.) Ca me donne un modèle à 24 paramètres. Il a 90% de précision, mais uniquement sur des échantillons "parfaits" : bien découpés, même fringues… mais sa robustesse est ridicule, je ne peux même pas la quantifier.
Update
J’ai continué un peu ma réflexion, histoire de ne pas attendre que la réponse tombe du ciel.
Si on pense de manière mathématique, je comprends que je ne peux pas définir "le reste". C’est le reste de quoi ?
Si je prends l’ensemble R, et dans cet ensemble je prends l’ensemble {1, 2}. "le reste" ici, c’est R{1, 2}, donc "le reste" est infini. Dans mon cas c’est pareil, "le reste", tout ce qui n’est pas "geste 1 ou geste 2", c’est infini, donc je ne peux pas le définir pour mon modèle, donc je dois abandonner cette notion.
Je viens de découvrir un concept en fouillant la doc SciKitLearn : les seuils de décision. Je peux dire "en dessous de ce niveau de certitude, le résultat est faux". Si le résultat est faux pour mes 2 classes, alors ce n’est ni mon geste 1, ni mon geste 2. Je ne peux pas faire ça, car mon modèle est entraîné en python, et exporté avec m2cgen vers JavaScript. Ca me génère simplement une fonction linéaire définie sur un espace à 24 dimensions (le nombre de paramètres après l’extraction des caractéristiques) à valeur dans R. Et encore, les valeurs fournies sont systématiquement négatives. je peux mettre des seuils sur ces valeurs, mais comme je disais, impossible d’être précis avec ces seuils : ma tête est le geste 1, parfois le geste 1 devient le geste 2 et inversement.
Si je cherche un peu du côté de l’extraction de premier plan, ça me donne des solutions à base d’entraînement de CNN. Interdit pour moi, je suis en stage et mon sujet me contraint de rester dans l’apprentissage supervisé et les SVM. C’est embêtant mais bon vu comment je galère déjà, aller jouer avec l’apprentissage profond me paraît prématuré.
J’ai fini par tomber sur les travaux de Victor Dibia qui permet d’isoler les mains dans un quadrilatère. Il est possible d’extraire mes caractéristiques uniquement à l’intérieur de ces régions : d’une part ça me donne un résultat seulement s’il y a des mains, donc adieu ma tête. Et ensuite, ça réduit fortement la région où j’extraie mes caractéristiques. Je vais négocier avec mon tuteur pour utiliser ça : Ca utilise TensorFlow, que je suis incapable d’utiliser pour l’instant, donc je vais avoir besoin d’aide. Est-ce que vous pensez que ça aura les effets auxquels je pense, ou je réfléchit mal ? Est-ce que ça peut me créer d’autres problèmes ?