Донавчання моделей Pose Estimation для кастомних сцен

Донавчання моделей оцінки пози: ViTPose, YOLOv8-pose, MediaPipe

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1302
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

Донавчання моделей оцінки пози: ViTPose, YOLOv8-pose, MediaPipe

Стандартні моделі Pose Estimation — MediaPipe або OpenPose — часто дають збій у нестандартних сценах: специфічна уніформа, незвичні ракурси, часткове перекриття тіла. Наприклад, на виробництві, де робітники виконують нахили та підйоми, COCO-моделі показують до 30% хибних пропусків. Наші інженери вирішують це завдання через кастомне донавчання ViTPose та YOLOv8-pose під вашу онтологію скелета. Ми у насмаємо 5+ років досвіду в комп'ютерному зорі та десятки впроваджень на виробництвах. Пропонуємо послугу «під ключ»: від збору даних до API-розгортання.

Проблеми, які вирішуємо

Низька точність на робочих позах. COCO-моделі навчалися на побутових сценах. Для охорони праці потрібні нахили, присідання, підйом вантажу — інакше до 30% хибних пропусків. Нестача розмічених даних. Підготовка датасету з keypoints — трудомісткий етап. Використовуємо активне навчання та аугментацію, щоб скоротити витрати на розмітку в 2-3 рази. Latency для real-time. На складі 40 камер — потрібен деплой з Triton Server та квантування моделі до INT8 дає економію на GPU-інференсі до 40%.

Як підібрати архітектуру для pose estimation?

Вибір залежить від трьох параметрів: цільова точність (AP), допустима затримка (p99 latency) та платформа. MediaPipe дає <5ms на CPU, але AP ~67.4. YOLOv8l-pose — компроміс: 65.5 AP за 9ms на GPU. ViTPose-H — максимум: 79.1 AP, але 48ms на A100. Ми допомагаємо підібрати оптимум через профілювання на вашому обладнанні.

Чому ViTPose кращий за інші моделі?

ViTPose — трансформерна архітектура, на 12% точніша за CNN-аналоги (ResNet-50). Вона використовує self-attention для врахування глобального контексту, що критично при перекриттях. На COCO benchmark ViTPose-H тримає рекорд AP. При цьому fine-tuning потребує лише 10% розмічених даних від навчання з нуля.

Кастомна онтологія скелета

COCO визначає 17 keypoints. Для промислових завдань додаємо точки хвату, шолома, шиї — до 21-22 keypoints. Приклад онтології для охорони праці:

# Кастомна онтологія для оцінки пози робітника (охорона праці) WORKER_SKELETON = { 'keypoints': [ 'nose', 'left_eye', 'right_eye', 'left_ear', 'right_ear', 'left_shoulder', 'right_shoulder', 'left_elbow', 'right_elbow', 'left_wrist', 'right_wrist', 'left_hip', 'right_hip', 'left_knee', 'right_knee', 'left_ankle', 'right_ankle', # Розширення для промисловості 'left_hand_center', 'right_hand_center', # для детекції хвату 'head_top', # для шолома 'neck' ], 'skeleton': [ [16, 14], [14, 12], [17, 15], [15, 13], [12, 13], [6, 12], [7, 13], [6, 7], [6, 8], [7, 9], [8, 10], [9, 11], [2, 3], [1, 2], [1, 3], [2, 4], [3, 5], [4, 6], [5, 7], [10, 18], [11, 19], [1, 21], [1, 20] # кастомні з'єднання ] } 

Як донавчити ViTPose на кастомному датасеті?

Процес fine-tuning ViTPose включає кілька кроків:

  1. Підготовка датасету — збір зображень, розмітка keypoints у форматі COCO. Використовуємо активне навчання для мінімізації ручної розмітки.
  2. Налаштування конфігурації — зміна кількості keypoints у голові моделі, підбір гіперпараметрів (learning rate, batch size).
  3. Запуск навчання — на GPU з підтримкою mixed precision. Моніторинг loss та метрик AP.
  4. Квантування та оптимізація — конвертація в ONNX з INT8 квантуванням, деплой через Triton Inference Server.

Приклад коду для створення кастомної моделі ViTPose:

import torch import torch.nn as nn from mmpose.apis import init_model, inference_topdown from mmpose.models import build_posenet from mmengine.config import Config def build_vitpose_custom( num_keypoints: int = 21, # кастомна кількість точок pretrained_checkpoint: str = 'vitpose_base_coco.pth' ) -> nn.Module: cfg = Config.fromfile('configs/body_2d_keypoint/topdown_heatmap/' 'vitpose/td-hm_ViTPose-base_8xb64-210e_coco-256x192.py') # Змінюємо голову під нову кількість keypoints cfg.model.head.num_joints = num_keypoints cfg.model.test_cfg.num_joints = num_keypoints model = build_posenet(cfg.model) # Завантажуємо pretrained ваги, виключаючи голову state_dict = torch.load(pretrained_checkpoint)['state_dict'] state_dict_filtered = { k: v for k, v in state_dict.items() if 'keypoint_head' not in k # голову ініціалізуємо заново } model.load_state_dict(state_dict_filtered, strict=False) return model 

Для швидкого старту використовуйте ViTPose офіційний репозиторій.

YOLOv8-pose — швидка альтернатива

Для real-time застосувань (відеоспостереження, спорт) виконуємо кастомізацію YOLOv8-pose:

from ultralytics import YOLO # Fine-tuning YOLOv8-pose на кастомних даних model = YOLO('yolov8m-pose.pt') results = model.train( data='pose_dataset.yaml', # включає keypoint_shape: [17, 3] imgsz=640, batch=16, epochs=100, device='0', kobj=1.0, # вага лоссу keypoint об'єктності kpt_shape=[17, 3] # [num_keypoints, visibility_flag] ) 

Аналіз пози: визначення ергономічних порушень

Кейс з практики: система моніторингу охорони праці на складі. YOLOv8l-pose + класифікатор поз, 40 камер, 12 годин на добу. Вартість робіт розраховується індивідуально під ваш проект.

import numpy as np from typing import Optional class ErgoRiskAnalyzer: """ Оцінка ергономічних ризиків за позою робітника. Метрика: RULA (Rapid Upper Limb Assessment) — стандарт ISO 11228. """ def calculate_trunk_angle( self, left_shoulder: np.ndarray, # [x, y] right_shoulder: np.ndarray, left_hip: np.ndarray, right_hip: np.ndarray ) -> float: """Кут нахилу торса від вертикалі в градусах""" shoulder_mid = (left_shoulder + right_shoulder) / 2 hip_mid = (left_hip + right_hip) / 2 trunk_vec = shoulder_mid - hip_mid vertical_vec = np.array([0, -1]) # вгору в системі координат зображення cos_angle = np.dot(trunk_vec, vertical_vec) / ( np.linalg.norm(trunk_vec) * np.linalg.norm(vertical_vec) + 1e-6 ) return float(np.degrees(np.arccos(np.clip(cos_angle, -1, 1)))) def assess_lifting_risk( self, keypoints: dict, # {'left_shoulder': [x,y], 'right_shoulder': [x,y], ...} confidence_threshold: float = 0.5 ) -> dict: """ RULA-подібна оцінка ризику підйому вантажу. Ризики: пряма спина OK, нахил 20-60° — попередження, >60° — критично. """ required_kpts = ['left_shoulder', 'right_shoulder', 'left_hip', 'right_hip'] if not all( keypoints.get(k) is not None and keypoints[k][2] > confidence_threshold for k in required_kpts ): return {'risk': 'unknown', 'reason': 'low_confidence_keypoints'} trunk_angle = self.calculate_trunk_angle( keypoints['left_shoulder'][:2], keypoints['right_shoulder'][:2], keypoints['left_hip'][:2], keypoints['right_hip'][:2] ) if trunk_angle > 60: risk_level = 'critical' elif trunk_angle > 20: risk_level = 'warning' else: risk_level = 'ok' return { 'risk': risk_level, 'trunk_angle_deg': round(trunk_angle, 1), 'rula_trunk_score': 4 if trunk_angle > 60 else (3 if trunk_angle > 20 else 1) } 

На пілотному проекті (склад, 120 робітників): система виявила 34 випадки систематичного підйому з порушенням протягом зміни. Після корекції робочих місць — зниження скарг на біль у спині на 41% за 3 місяці.

Порівняння методів

Модель AP COCO Latency Пристрій Застосування
MediaPipe Pose 67.4 <5ms CPU/телефон Мобайл, IoT
YOLOv8n-pose 49.0 3ms GPU Real-time відео
YOLOv8l-pose 65.5 9ms GPU Точність+швидкість
ViTPose-B 75.8 18ms GPU Висока точність
ViTPose-H 79.1 48ms GPU Максимум

Що входить в роботу

  • Аналіз вимог: вибір архітектури під latency/точність/платформу
  • Збір та розмітка датасету (аугментація, активне навчання)
  • Fine-tuning моделі (ViTPose/YOLOv8-pose) з підбором гіперпараметрів
  • Квантування (INT8) та оптимізація інференсу (ONNX Runtime, TensorRT)
  • Деплой через REST/gRPC (Triton, SageMaker) + моніторинг
  • Документація, навчання команди, гарантія 3 місяці

Терміни

Задача Термін
Fine-tuning стандартного скелета 2–4 тижні
Кастомна онтологія + навчання 4–8 тижнів
Повна система з аналітикою поз 8–14 тижнів

Отримайте консультацію з вибору архітектури для вашого завдання. Наші інженери допоможуть підібрати модель під ваші latency та точність. Зв'яжіться з нами для оцінки вашого проекту — ми проаналізуємо вимоги та запропонуємо оптимальне рішення.