Nous introduisons un grand ensemble de données d'images HaGRIDv2 ( HA nd G esture Re cognition I mage D ataset) pour les systèmes de reconnaissance des gestes de la main (HGR). Vous pouvez l'utiliser pour des tâches de classification d'images ou de détection d'images. L'ensemble de données proposé permet de construire des systèmes HGR, qui peuvent être utilisés dans les services de vidéoconférence (Zoom, Skype, Discord, Jazz, etc.), les systèmes domotiques, le secteur automobile, etc.
La taille de HaGRIDv2 est de 1,5T et l'ensemble de données contient 1 086 158 images RVB FullHD divisées en 33 classes de gestes et une nouvelle classe distincte « no_gesture », contenant des postures naturelles des mains spécifiques à un domaine. De plus, certaines images ont la classe no_gesture
s'il y a une deuxième main sans geste dans le cadre. Cette classe supplémentaire contient 2 164 échantillons. Les données ont été réparties en ensembles de formation 76 %, 9 % de validation et 15 % de tests par sujet user_id
, avec 821 458 images pour le train, 99 200 images pour la validation et 165 500 pour le test.
L'ensemble de données contient 65 977 personnes uniques et au moins ce nombre de scènes uniques. Les sujets sont des personnes de plus de 18 ans. L'ensemble de données a été collecté principalement à l'intérieur avec des variations considérables d'éclairage, y compris la lumière artificielle et naturelle. En outre, l’ensemble de données comprend des images prises dans des conditions extrêmes telles que face et dos à une fenêtre. De plus, les sujets devaient montrer des gestes à une distance de 0,5 à 4 mètres de la caméra.
Exemple d'échantillon et son annotation :
Pour plus d’informations, consultez notre article arxiv à déterminer.
2024/09/24
: Nous publions HaGRIDv2. ?
L'ensemble de données HaGRID a été étendu avec 15 nouvelles classes de gestes, y compris les gestes à deux mains
Une nouvelle classe "no_gesture" avec des postures naturelles des mains spécifiques à un domaine a été ajoutée ( 2 164 échantillons, divisés par train/val/test contenant respectivement 1 464, 200 et 500 images)
La classe supplémentaire no_gesture
contient 200 390 cadres de délimitation
Ajout de nouveaux modèles pour la détection des gestes, la détection des mains et la classification plein format
La taille de l'ensemble de données est de 1,5 T
1 086 158 images RVB FullHD
Répartition train/val/test : (821 458) 76 % / (99 200) 9 % / (165 500) 15 % par sujet user_id
65 977 personnes uniques
2023/09/21
: Nous publions HaGRID 2.0. ✌️
Tous les fichiers pour la formation et les tests sont regroupés dans un seul répertoire
Les données ont été effacées et de nouvelles ont été ajoutées
Formation et tests multi-GPU
Ajout de nouveaux modèles pour la détection et la classification plein format
La taille de l'ensemble de données est de 723 Go
554 800 images FullHD RVB (classes nettoyées et mises à jour, diversité ajoutée par race)
La classe supplémentaire no_gesture
contient 120 105 échantillons
Répartition train/val/test : (410 800) 74 % / (54 000) 10 % / (90 000) 16 % par sujet user_id
37 583 personnes uniques
2022/06/16
: HaGRID (ensemble de données initial) ?
La taille de l'ensemble de données est de 716 Go
552 992 images FullHD RVB réparties en 18 classes
La classe supplémentaire no_gesture
contient 123 589 échantillons
Répartition train/test : (509 323) 92 % / (43 669) 8 % par sujet user_id
34 730 personnes uniques de 18 à 65 ans
La distance est de 0,5 à 4 mètres de la caméra
Clonez et installez les packages Python requis :
git clone https://github.com/hukenovs/hagrid.git# ou lien miroir:cd hagrid# Créer un environnement virtuel par conda ou venvconda create -n gestes python=3.11 -y conda activer les gestes# Installer les exigencespip install -r conditions.txt
Nous avons divisé l'ensemble de données du train en 34 archives par gestes en raison de la grande taille des données. Téléchargez-les et décompressez-les à partir des liens suivants :
Geste | Taille | Geste | Taille | Geste | Taille |
---|---|---|---|---|---|
call | 37,2 Go | peace | 41,4 Go | grabbing | 48,7 Go |
dislike | 40,9 Go | peace_inverted | 40,5 Go | grip | 48,6 Go |
fist | 42,3 Go | rock | 41,7 Go | hand_heart | 39,6 Go |
four | 43,1 Go | stop | 41,8 Go | hand_heart2 | 42,6 Go |
like | 42,2 Go | stop_inverted | 41,4 Go | holy | 52,7 Go |
mute | 43,2 Go | three | 42,2 Go | little_finger | 48,6 Go |
ok | 42,5 Go | three2 | 40,2 Go | middle_finger | 50,5 Go |
one | 42,7 Go | two_up | 41,8 Go | point | 50,4 Go |
palm | 43,0 Go | two_up_inverted | 40,9 Go | take_picture | 37,3 Go |
three3 | 54 Go | three_gun | 50,1 Go | thumb_index | 62,8 Go |
thumb_index2 | 24,8 Go | timeout | 39,5 Go | xsign | 51,3 Go |
no_gesture | 493,9 Mo |
annotations dataset
: annotations
HaGRIDv2 512px - version allégée de l'ensemble de données complet avec min_side = 512p
119.4 GB
ou en utilisant un script python
python download.py --save_path--annotations --ensemble de données
Exécutez la commande suivante avec la clé --dataset
pour télécharger l'ensemble de données avec des images. Téléchargez les annotations pour l'étape sélectionnée par la touche --annotations
.
utilisation : download.py [-h] [-a] [-d] [-t TARGETS [TARGETS ...]] [-p SAVE_PATH] Télécharger l'ensemble de données... arguments facultatifs : -h, --help afficher ce message d'aide et quitter -a, --annotations Télécharger les annotations -d, --dataset Télécharger l'ensemble de données -t TARGETS [TARGETS ...], --targets TARGETS [TARGETS ... ] Cible(s) de téléchargement de la rame -p SAVE_PATH, --save_path SAVE_PATH Enregistrer le chemin
Après le téléchargement, vous pouvez décompresser l'archive en exécutant la commande suivante :
décompressez-d
La structure de l'ensemble de données est la suivante :
├── hagrid_dataset│ ├── call │ │ ├── 00000000.jpg │ │ ├── 00000001.jpg │ │ ├── ... ├── hagrid_annotations │ ├── train │ │ ├── call.json │ │ ├── ... │ ├── val │ │ ├── call.json │ │ ├── ... │ ├── test │ │ ├── call.json │ │ ├── ...
Nous fournissons certains modèles pré-entraînés sur HaGRIDv2 comme base de référence avec les architectures de base classiques pour la classification des gestes, la détection des gestes et la détection des mains.
Détecteurs de gestes | carte |
---|---|
YOLOv10x | 89,4 |
YOLOv10n | 88,2 |
SSDLiteMobileNetV3Grand | 72,7 |
De plus, si vous avez besoin de détecter des mains, vous pouvez utiliser les modèles de détection YOLO, pré-entraînés sur HaGRIDv2.
Détecteurs de mains | carte |
---|---|
YOLOv10x | 88,8 |
YOLOv10n | 87,9 |
Cependant, si vous avez besoin d'un seul geste, vous pouvez utiliser des classificateurs plein format pré-entraînés au lieu de détecteurs. Pour utiliser des modèles plein format, supprimez la classe no_gesture
Classificateurs plein format | Gestes F1 |
---|---|
MobileNetV3_small | 86,7 |
MobileNetV3_large | 93,4 |
VitB16 | 91,7 |
ResNet18 | 98,3 |
ResNet152 | 98,6 |
Base ConvNeXt | 96,4 |
Vous pouvez utiliser des modèles entraînés téléchargés, sinon sélectionnez des paramètres pour l'entraînement dans le dossier configs
. Pour entraîner le modèle, exécutez la commande suivante :
GPU unique :
python run.py -c train -p configs/
Multi-GPU :
bash ddp_run.sh -g 0,1,2,3 -c train -p configs/
which -g est une liste d'identifiants GPU.
À chaque étape, la perte actuelle, le taux d'apprentissage et d'autres valeurs sont enregistrées dans Tensorboard . Consultez toutes les métriques et paramètres enregistrés en ouvrant une ligne de commande (cela ouvrira une page Web à localhost:6006
) :
tensorboard --logdir=
Testez votre modèle en exécutant la commande suivante :
GPU unique :
python run.py -c test -p configs/
Multi-GPU :
bash ddp_run.sh -g 0,1,2,3 -c test -p configs/
which -g est une liste d'identifiants GPU.
python demo.py -p--landmarks
python demo_ff.py -p
Les annotations sont constituées de cadres de délimitation des mains et des gestes au format COCO [top left X position, top left Y position, width, height]
avec des étiquettes de gestes. Nous fournissons le champ user_id
qui vous permettra de diviser vous-même l'ensemble de données train/val/test, ainsi qu'une méta-informations contenant l'âge, le sexe et la race automatiquement annotés.
"04c49801-1101-4b4e-82d0-d4607cd01df0": { "bboxes": [ [0,0694444444, 0,3104166667, 0,2666666667, 0,2640625], [0,5993055556, 0,2875, 0,2569444444, 0,2760416667] ], "étiquettes": [ "thumb_index2", "thumb_index2" ], "united_bbox": [ [0,0694444444, 0,2875, 0,7868055556, 0,2869791667] ], "united_label": [ "thumb_index2" ], "user_id": "2fe6a9156ff8ca27fbce8ada318c592b", "hand_landmarks": [ [ [0,37233507701702123, 0,5935673528948108], [0.3997604810145188, 0.5925499847441514], ... ], [ [0,37388438145820907, 0,47547576284667353], [0.39460467775730607, 0.4698847093520443], ... ] ] "méta": { "âge": [24.41], "genre": ["femelle"], "race": ["Blanc"] }
Clé - nom de l'image sans extension
Bboxes - liste des bbox normalisées pour chaque main [top left X pos, top left Y pos, width, height]
Étiquettes - liste des étiquettes de classe pour chaque main, par exemple like
, stop
, no_gesture
United_bbox - combinaison unie de deux boîtes à main dans le cas de gestes à deux mains ("hand_heart", "hand_heart2", "thumb_index2", "timeout", "holy", "take_picture", "xsign") et 'null' dans le cas des gestes à une main
United_label - une étiquette de classe pour united_bbox en cas de gestes à deux mains et 'null' dans le cas de gestes à une main
ID utilisateur - identifiant du sujet (utile pour diviser les données afin d'entraîner/valoriser des sous-ensembles).
Hand_landmarks - annoté automatiquement avec des repères MediaPipe pour chaque main.
Méta - automatiquement annotées avec les méta-informations des réseaux neuronaux FairFace et MiVOLO contenant l'âge, le sexe et la race
Objet | Former | Val | Test | Total |
---|---|---|---|---|
geste | 980 924 | 120 003 | 200 006 | 1 300 933 |
aucun geste | 154 403 | 19 411 | 29 386 | 203 200 |
total des cartons | 1 135 327 | 139 414 | 229 392 | 1 504 133 |
Objet | Former | Val | Test | Total |
---|---|---|---|---|
Mains totales avec repères | 983 991 | 123 230 | 201 131 | 1 308 352 |
Nous fournissons un script pour convertir les annotations au format YOLO. Pour convertir des annotations, exécutez la commande suivante :
python -m converters.hagrid_to_yolo --cfg--mode <'mains' ou 'gestes'>
après la conversion, vous devez modifier la définition originale img2labels en :
def img2label_paths(img_paths): img_paths = list(img_paths) # Définir les chemins d'étiquettes en fonction des chemins d'images si "train" dans img_paths[0] : return [x.replace("train", "train_labels").replace(" .jpg", ".txt") pour x dans img_paths] elif "test" dans img_paths[0] : return [x.replace("test", "test_labels").replace(".jpg", ".txt" ) pour x dans img_paths] elif "val" dans img_paths[0] : return [x.replace("val", "val_labels").replace(".jpg", ".txt") pour x dans img_paths]
Nous fournissons également un script pour convertir les annotations au format Coco. Pour convertir des annotations, exécutez la commande suivante :
python -m converters.hagrid_to_coco --cfg--mode <'mains' ou 'gestes'>
Ce travail est sous licence internationale Creative Commons Attribution-ShareAlike 4.0.
Veuillez consulter la licence spécifique.
Alexandre Kapitanov
Andreï Makhlyarchuk
Karina Kvanchiani
Alexandre Nagaev
Romain Kraïnov
Anton Nujdin
GitHub
arXiv
Vous pouvez citer l'article en utilisant l'entrée BibTeX suivante :
@InProceedings{Kapitanov_2024_WACV, author = {Kapitanov, Alexander and Kvanchiani, Karina and Nagaev, Alexander and Kraynov, Roman and Makhliarchuk, Andrei}, title = {HaGRID -- HAnd Gesture Recognition Image Dataset}, booktitle = {Proceedings of the IEEE/CVF Winter Conference on Applications of Computer Vision (WACV)}, month = {January}, year = {2024}, pages = {4572-4581} }