Saltar al contenido principal

Etapa 3 · Capítulo 17 · Teoría y práctica

17. Inferencia en Robot Real, Evaluación e Iteración de Datos

Capítulo 17 del Curso de Introducción a la IA Física de Seeed: flujo de datos de inferencia, preprocesamiento y desnormalización, inicio de la inferencia, ejecución de fragmentos de acción, seguridad, evaluación de la tasa de éxito, pruebas de generalización, análisis de fallos y recopilación de datos impulsada por fallos. collection.

17.1 Flujo de Datos de Inferencia​

Flujo

17.1 Flujo de Datos de Inferencia: Entenderlo en un Solo Diagrama

Inference data flow

17.2 Preprocesamiento y Desnormalización​

Preprocesamiento

17.2 Preprocesamiento y Desnormalización

Durante el entrenamiento el modelo consume datos normalizados; durante la inferencia debes seguir las mismas reglas tanto para la entrada como para la salida:

DirecciónProcesamientoEstadísticas usadas
Hacia el modeloRedimensionado de imagen + media/std de ImageNet; estado menos la media, dividido por la desviación estándar (z-score)meta/stats.json del conjunto de datos de entrenamiento
Fuera del modeloAcción multiplicada por la desviación estándar, más la media; restaurar a ángulos articulares realesIgual que arriba
Preprocessing and de-normalization

17.3 Inicio de la Inferencia en Robot Real​

Inferencia

17.3 Inicio de la Inferencia en Robot Real

Usa lerobot-record para cargar la política; los parámetros del robot y de la cámara son idénticos a los de la recopilación:

Versión RS:

lerobot-record \
--robot.type=seeed_b601_rs_follower \
--robot.port=can0 \
--robot.can_adapter=socketcan \
--robot.cameras='{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"} }' \
--robot.id=follower1 \
--display_data=false \
--dataset.repo_id=seeed/eval_test18 \
--dataset.single_task="Grab the crayfish into the box" \
--dataset.num_episodes=10 \
--dataset.episode_time_s=60 \
--dataset.reset_time_s=10 \
--policy.path=outputs/train/act_rebot_test/checkpoints/last/pretrained_model \
--policy.push_to_hub=false

Versión DM:

lerobot-record \
--robot.type=seeed_b601_dm_follower \
--robot.port=/dev/ttyACM0 \
--robot.can_adapter=damiao \
--robot.cameras='{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"} }' \
--robot.id=follower1 \
--display_data=false \
--dataset.repo_id=seeed/eval_test18 \
--dataset.single_task="Grab the crayfish into the box" \
--dataset.num_episodes=10 \
--dataset.episode_time_s=60 \
--dataset.reset_time_s=10 \
--policy.path=outputs/train/act_rebot_test/checkpoints/last/pretrained_model \
--policy.push_to_hub=false
  • --dataset.num_episodes=10: ejecutar 10 episodios.
  • --dataset.episode_time_s=60: máximo 60 segundos por episodio. Ajústalo según la duración de la tarea; por ejemplo, agarrar un cangrejo de río y meterlo en una caja lleva ~20-30 segundos, así que pon 30-40 para dejar margen. Si quieres probar el modelo sin tener que esperar, ponlo muy largo (por ejemplo, 300), ya que hay un intervalo entre episodios.
  • --dataset.reset_time_s=10: 10 segundos entre episodios para que puedas recolocar los objetos (durante la evaluación, mantén el estado inicial lo más consistente posible).

17.4 Ejecución de Fragmentos de Acción​

Ejecución

17.4 Ejecución de Fragmentos de Acción

  • Una inferencia produce un fragmento de acción de 100 pasos; solo se ejecutan en lazo abierto los primeros n pasos (n_action_steps), luego se vuelve a observar: las predicciones más lejanas son menos fiables.
  • Cuando el ensamblado temporal está activado (temporal_ensemble_coeff), la acción en cada instante es un promedio ponderado de múltiples predicciones, con casi cero vibración.
  • Si el robot real parece "entrecortado", probablemente se deba al hueco de cómputo entre fragmentos: el fragmento antiguo termina y el nuevo aún no se ha calculado. Aumentar n_action_steps puede ayudar, a costa de una menor resistencia a perturbaciones.

17.5 Seguridad: Límites, Límites de Velocidad y Parada de Emergencia​

Seguridad

17.5 Seguridad: Límites, Límites de Velocidad y Parada de Emergencia

  • Usa siempre ESC para detener; no uses Ctrl+C. Antes de detener, deja que el brazo termine el fragmento de acción actual o devuélvelo manualmente a una postura segura para evitar que se detenga en el aire en una posición cargada.
  • Está siempre listo para cortar la alimentación; si el brazo se comporta de forma anómala, es necesaria una desconexión de emergencia.

17.6 Evaluación: Tasa de Éxito y Tiempo de Finalización​

Evaluación

17.6 Evaluación: Tasa de Éxito y Tiempo de Finalización

Fija las condiciones iniciales, ejecuta 20 pruebas consecutivas y registra cada una.

  • Tasa de éxito = éxitos ÷ 20. Para un primer modelo entrenado, >50% es un inicio normal, >80% es excelente.
  • Tiempo de finalización: comprueba la estabilidad: ¿las ejecuciones exitosas tienen duraciones similares? Una velocidad inconsistente significa que la política "duda".
  • En las ejecuciones fallidas — no te limites a anotar una ✗ — registra el tipo de fallo.

17.7 Pruebas de Generalización​

Generalización

17.7 Pruebas de Generalización

Después de probar bajo condiciones estándar, varía las condiciones una por una y observa cuánto cae la tasa de éxito (ACT con 50 episodios no tendrá una gran generalización; recomendamos añadir datos).

PruebaMétodoExpectativa
Generalización de posiciónColoca el bloque fuera de los cinco puntos marcados a lápiz pero dentro de la cobertura de entrenamientoApenas debería caer; si cae, la diversidad de posiciones es insuficiente
Perturbación leveColoca objetos no relacionados sobre la mesaUn modelo entrenado con una escena visualmente limpia no debería verse afectado
Cambio fuerte de distribuciónObjetos totalmente nuevos, superficie reflectante espejadaEl fallo es de esperar; no es necesario corregirlo

El objetivo de las pruebas de generalización no es demostrar lo fuerte que es el modelo, sino delimitar su frontera de capacidad: úsalo libremente dentro de esa frontera; complementa datos y expándela gradualmente más allá.

17.8 Análisis de Tipos de Fallo​

Fallos

17.8 Análisis de Tipos de Fallo

Tipo de falloCausa más probableContramedida
No puede alcanzar: se mueve hacia una posición incorrectaCobertura de datos insuficiente en esa posición (fuera de distribución)Añadir demostraciones suplementarias en esa zona
Agarre inestable: toca pero no sujeta/se le caeEl momento de cierre del efector se aprendió de forma imprecisa; muy pocas demostraciones del momento de agarreAñadir demostraciones de alta calidad del momento de agarre
Movimiento aleatorio en todo momento; las acciones son absurdasEl entrenamiento no convergió en absoluto, o la escena/iluminación cambiaron significativamenteComprobar si la escena y la iluminación de recopilación de datos coinciden con las de inferencia
tip

Descarta primero problemas de configuración y luego sospecha de problemas de datos: el movimiento aleatorio es una enfermedad de configuración; el no-puede-alcanzar es una enfermedad de datos.

17.9 Iteración de Datos: Recopilación de Datos Impulsada por Fallos​

Iteración

17.9 Iteración de Datos: Recopilación de Datos Impulsada por Fallos

El paso final del bucle: convertir los fallos en datos:

  1. Clasificar: identificar el tipo de fallo y la escena correspondiente.
  2. Complementar: registrar de 10 a 20 nuevas demostraciones para la escena de fallo: ¿no puede alcanzar? graba en esa posición; ¿agarre inestable? graba el momento de agarre. Expande conscientemente el límite de agarre de forma gradual; por ejemplo, coloca bloques en puntos de 5-10 cm más allá de la cruz original para ampliar el conjunto de datos.
  3. Reentrenar: vuelve a entrenar con el nuevo conjunto de datos.
Data iteration

Con esto, el bucle cerrado desde el inicio del capítulo queda completamente completo: teleoperación, recopilación, inspección, entrenamiento, inferencia, evaluación, iteración; esta canalización se reutiliza tal cual para cualquier tarea nueva. Ese es el resultado principal de la Etapa 3.

Loading Comments...