Presentamos un gran conjunto de datos de imágenes HaGRIDv2 ( HA nd G esture R ecognition I mage D ataset) para sistemas de reconocimiento de gestos con las manos (HGR). Puede utilizarlo para tareas de clasificación o detección de imágenes. El conjunto de datos propuesto permite construir sistemas HGR, que se pueden utilizar en servicios de videoconferencia (Zoom, Skype, Discord, Jazz, etc.), sistemas de domótica, el sector automotriz, etc.
El tamaño de HaGRIDv2 es 1,5T y el conjunto de datos contiene 1.086.158 imágenes RGB FullHD divididas en 33 clases de gestos y una nueva clase separada "no_gesture", que contiene posturas naturales de las manos específicas del dominio. Además, algunas imágenes tienen la clase no_gesture
si hay una segunda mano libre de gestos en el marco. Esta clase adicional contiene 2164 muestras. Los datos se dividieron en conjuntos de entrenamiento 76%, 9% validación y prueba 15% por sujeto user_id
, con 821,458 imágenes para entrenamiento, 99,200 imágenes para validación y 165,500 para prueba.
El conjunto de datos contiene 65.977 personas únicas y al menos esta cantidad de escenas únicas. Los sujetos son personas mayores de 18 años. El conjunto de datos se recopiló principalmente en interiores con una variación considerable en la iluminación, incluida la luz artificial y natural. Además, el conjunto de datos incluye imágenes tomadas en condiciones extremas, como de cara y de espaldas a una ventana. Además, los sujetos debían realizar gestos a una distancia de 0,5 a 4 metros de la cámara.
Ejemplo de muestra y su anotación:
Para obtener más información, consulte nuestro artículo arxiv por confirmar.
2024/09/24
: Lanzamos HaGRIDv2. ?
El conjunto de datos HaGRID se ha ampliado con 15 nuevas clases de gestos, incluidos gestos con dos manos.
Se agregó una nueva clase "no_gesture" con posturas naturales de las manos específicas del dominio ( 2164 muestras, divididas por train/val/test que contienen 1464, 200, 500 imágenes, respectivamente)
La clase adicional no_gesture
contiene 200,390 cuadros delimitadores
Se agregaron nuevos modelos para detección de gestos, detección de manos y clasificación de fotograma completo.
El tamaño del conjunto de datos es 1,5T
1.086.158 imágenes FullHD RGB
División de tren/valor/prueba: (821 458) 76 % / (99 200) 9 % / (165 500) 15 % por sujeto user_id
65.977 personas únicas
2023/09/21
: Lanzamos HaGRID 2.0. ✌️
Todos los archivos para capacitación y pruebas se combinan en un directorio
Los datos se borraron aún más y se agregaron otros nuevos.
Entrenamiento y pruebas de múltiples gpu
Se agregaron nuevos modelos para detección y clasificación de fotograma completo.
El tamaño del conjunto de datos es 723 GB
554.800 imágenes FullHD RGB (clases limpiadas y actualizadas, diversidad añadida por raza)
La clase adicional no_gesture
contiene 120,105 muestras
División tren/val/prueba: (410 800) 74 % / (54 000) 10 % / (90 000) 16 % por sujeto user_id
37.583 personas únicas
2022/06/16
: ¿HaGRID (conjunto de datos inicial)?
El tamaño del conjunto de datos es 716 GB
552.992 imágenes FullHD RGB divididas en 18 clases
La clase adicional no_gesture
contiene 123,589 muestras
División de entrenamiento/prueba: (509,323) 92% / (43,669) 8% por sujeto user_id
34.730 personas únicas de 18 a 65 años
La distancia es de 0,5 a 4 metros desde la cámara.
Clona e instala los paquetes de Python necesarios:
git clone https://github.com/hukenovs/hagrid.git# o enlace espejo:cd hagrid# Crear entorno virtual mediante conda o venvconda create -n gestos python=3.11 -y conda activar gestos# Instalar requisitospip install -r requisitos.txt
Dividimos el conjunto de datos del tren en 34 archivos mediante gestos debido al gran tamaño de los datos. Descárgalos y descomprímelos desde los siguientes enlaces:
Gesto | Tamaño | Gesto | Tamaño | Gesto | Tamaño |
---|---|---|---|---|---|
call | 37,2GB | peace | 41,4GB | grabbing | 48,7GB |
dislike | 40,9GB | peace_inverted | 40,5GB | grip | 48,6GB |
fist | 42,3GB | rock | 41,7GB | hand_heart | 39,6GB |
four | 43,1GB | stop | 41,8GB | hand_heart2 | 42,6GB |
like | 42,2GB | stop_inverted | 41,4GB | holy | 52,7GB |
mute | 43,2GB | three | 42,2GB | little_finger | 48,6GB |
ok | 42,5GB | three2 | 40,2GB | middle_finger | 50,5 GB |
one | 42,7GB | two_up | 41,8GB | point | 50,4GB |
palm | 43,0GB | two_up_inverted | 40,9GB | take_picture | 37,3GB |
three3 | 54GB | three_gun | 50,1GB | thumb_index | 62,8GB |
thumb_index2 | 24,8GB | timeout | 39,5GB | xsign | 51,3GB |
no_gesture | 493,9MB |
anotaciones dataset
: annotations
HaGRIDv2 512px: versión ligera del conjunto de datos completo con min_side = 512p
119.4 GB
o mediante el uso de script en Python
python download.py --save_path--anotaciones --conjunto de datos
Ejecute el siguiente comando con la clave --dataset
para descargar el conjunto de datos con imágenes. Descargue anotaciones para la etapa seleccionada mediante la clave --annotations
.
uso: download.py [-h] [-a] [-d] [-t OBJETIVOS [OBJETIVOS...]] [-p SAVE_PATH] Descargar conjunto de datos... argumentos opcionales: -h, --help muestra este mensaje de ayuda y sale -a, --annotations Descargar anotaciones -d, --dataset Descargar conjunto de datos -t OBJETIVOS [OBJETIVOS...], --targets OBJETIVOS [OBJETIVOS... ] Destino(s) para descargar el conjunto de trenes -p SAVE_PATH, --save_path SAVE_PATH Guardar ruta
Después de la descarga, puede descomprimir el archivo ejecutando el siguiente comando:
descomprimir-d
La estructura del conjunto de datos es la siguiente:
├── hagrid_dataset│ ├── call │ │ ├── 00000000.jpg │ │ ├── 00000001.jpg │ │ ├── ... ├── hagrid_annotations │ ├── train │ │ ├── call.json │ │ ├── ... │ ├── val │ │ ├── call.json │ │ ├── ... │ ├── test │ │ ├── call.json │ │ ├── ...
Proporcionamos algunos modelos previamente entrenados en HaGRIDv2 como base con las arquitecturas troncales clásicas para clasificación de gestos, detección de gestos y detección de manos.
Detectores de gestos | mapa |
---|---|
YOLOv10x | 89,4 |
YOLOv10n | 88.2 |
SSDLiteMobileNetV3Grande | 72,7 |
Además, si necesita detectar manos, puede utilizar los modelos de detección YOLO, previamente entrenados en HaGRIDv2.
Detectores de mano | mapa |
---|---|
YOLOv10x | 88,8 |
YOLOv10n | 87,9 |
Sin embargo, si necesita un solo gesto, puede utilizar clasificadores de fotograma completo previamente entrenados en lugar de detectores. Para utilizar modelos de fotograma completo, elimine la clase no_gesture
Clasificadores de fotograma completo | Gestos F1 |
---|---|
MóvilNetV3_small | 86,7 |
MóvilNetV3_large | 93,4 |
VitB16 | 91,7 |
ResNet18 | 98,3 |
ResNet152 | 98,6 |
Base ConvNeXt | 96,4 |
Puede utilizar modelos entrenados descargados; de lo contrario, seleccione parámetros para el entrenamiento en la carpeta configs
. Para entrenar el modelo, ejecute el siguiente comando:
GPU única:
python run.py -c tren -p configs/
Múltiples GPU:
bash ddp_run.sh -g 0,1,2,3 -c tren -p configs/
cual -g es una lista de identificadores de GPU.
Cada paso, la pérdida actual, la tasa de aprendizaje y otros valores se registran en Tensorboard . Vea todas las métricas y parámetros guardados abriendo una línea de comando (esto abrirá una página web en localhost:6006
):
tensorboard --logdir=
Pruebe su modelo ejecutando el siguiente comando:
GPU única:
python run.py -c prueba -p configs/
Múltiples GPU:
bash ddp_run.sh -g 0,1,2,3 -c prueba -p configs/
cual -g es una lista de identificadores de GPU.
python demo.py -p--landmarks
python demo_ff.py -p
Las anotaciones consisten en cuadros delimitadores de manos y gestos en formato COCO [top left X position, top left Y position, width, height]
con etiquetas de gestos. Proporcionamos el campo user_id
que le permitirá dividir el conjunto de datos de tren/val/prueba usted mismo, así como una metainformación que contiene edad, sexo y raza anotados automáticamente.
"04c49801-1101-4b4e-82d0-d4607cd01df0": { "bboxes": [ [0,0694444444, 0,3104166667, 0,2666666667, 0,2640625], [0,5993055556, 0,2875, 0,2569444444, 0,2760416667] ], "etiquetas": [ "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], ... ] ] "meta": { "edad": [24.41], "género": ["femenino"], "raza": ["Blanco"] }
Clave: nombre de la imagen sin extensión
Bboxes: lista de bboxes normalizados para cada mano [top left X pos, top left Y pos, width, height]
Etiquetas: lista de etiquetas de clase para cada mano, por ejemplo, like
, stop
, no_gesture
United_bbox: combinación unida de dos cuadros de mano en el caso de gestos con las dos manos ("hand_heart", "hand_heart2", "thumb_index2", "timeout", "holy", "take_picture", "xsign") y 'null' en el caso de los gestos con una sola mano
United_label: una etiqueta de clase para united_bbox en el caso de gestos con dos manos y 'nulo' en el caso de gestos con una sola mano.
ID de usuario: ID del sujeto (útil para dividir datos en subconjuntos de entrenamiento/val).
Hand_landmarks: anotado automáticamente con puntos de referencia de MediaPipe para cada mano.
Meta: anotada automáticamente con la metainformación de las redes neuronales FairFace y MiVOLO que contiene edad, sexo y raza.
Objeto | Tren | vale | Prueba | Total |
---|---|---|---|---|
gesto | 980 924 | 120 003 | 200 006 | 1 300 933 |
ningún gesto | 154 403 | 19 411 | 29 386 | 203 200 |
cajas totales | 1 135 327 | 139 414 | 229 392 | 1 504 133 |
Objeto | Tren | vale | Prueba | Total |
---|---|---|---|---|
Manos totales con puntos de referencia. | 983 991 | 123 230 | 201 131 | 1 308 352 |
Proporcionamos un script para convertir anotaciones al formato YOLO. Para convertir anotaciones, ejecute el siguiente comando:
python -m convertidores.hagrid_to_yolo --cfg--mode <'manos' o 'gestos'>
Después de la conversión, necesita cambiar la definición original de img2labels a:
def img2label_paths(img_paths): img_paths = list(img_paths) # Definir rutas de etiquetas como una función de rutas de imágenes si "train" en img_paths[0]: return [x.replace("train", "train_labels").replace(" .jpg", ".txt") para x en img_paths] elif "prueba" en img_paths[0]: devuelve [x.replace("test", "test_labels").replace(".jpg", ".txt" ) para x en img_paths] elif "val" en img_paths[0]: devuelve [x.replace("val", "val_labels").replace(".jpg", ".txt") para x en img_paths]
Además, proporcionamos un script para convertir anotaciones al formato Coco. Para convertir anotaciones, ejecute el siguiente comando:
python -m convertidores.hagrid_to_coco --cfg--mode <'manos' o 'gestos'>
Este trabajo tiene una variante de la licencia internacional Creative Commons Attribution-ShareAlike 4.0.
Consulte la licencia específica.
Alexander Kapitanov
Andrey Makhlyarchuk
Karina Kvanchiani
Aleksandr Nagaev
Roman Kraynov
Antón Nuzhdin
GitHub
arXiv
Puede citar el artículo utilizando la siguiente entrada BibTeX:
@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} }