Hola, me las arreglé usando la demostración de openvino c ++, se ejecuta alrededor de 15 fps en la CPU. que no es lo suficientemente rápido.
¿Hay algún plan para admitir una demostración de libtorch c ++? Quiero implementar uno si no, hay algunos problemas para mí:
Espero que respondas pronto.
Hola, no tengo esos planes. Y no estoy seguro de que la demostración de libtorch c ++ sea más rápida que nuestra demostración de c ++ con OpenVINO. El tamaño de entrada de la red se puede ajustar para un mejor rendimiento, por ejemplo, establezca el lado más corto en 192, se puede hacer aquí , establezca el último parámetro en 192. Puede ser suficiente para un caso específico. Respondiendo a las preguntas:
Y, por favor, contribuya con la demostración de C++ con PyTorch si decide hacerlo.
@Daniil-Osokin gracias por su respuesta, ya migré los códigos necesarios de openvino a la demostración de libtorch cpp. Después de tener éxito, enviaré un PR.
El uso de libtorch puede no ser más rápido que openvino, pero no puedo ver una gran ganancia de rendimiento de openvino, pero libtorch puede activar el soporte de GPU opcional.
Ahora hay otro problema a mi alrededor... Esos modelos que usan mapas de calor siempre necesitan mucha memoria para funcionar, incluso usando Mobilenet como columna vertebral. Este modelo funciona a unos 79 fps en mi gtx1080 pero muestra mis recuerdos de 1.7G. Casi un monstruo devorador de memoria. ¿Tiene algún modelo de optimización en términos de reducir el tamaño de la memoria?
OK..... Se encontraron algunos problemas......... El programa se ejecuta pero el resultado no es correcto:
Verifiqué el consumo de memoria en PyTorch (ejecutando demo.py
), muestra ~800 MB. Con OpenVINO el consumo es de unos 100 MB.
Python toma 800M? ¿Menos el uso de su escritorio? El mío casi token 1.2G al menos
@Daniil-Osokin Hola, Danill, ¿viste algún lugar en el que openvino c ++ hiciera una normalización en la imagen de entrada? (que es menos 128 y divide 256) No encontré ningún código haciendo esto. Después de la depuración, creo que me perdí algunos pasos de preprocesamiento en la demostración de libtorch_cpp...
Buena pregunta. De forma predeterminada, todos los modelos tienen procesamiento previo (si es necesario) dentro de sus archivos .xml como una capa separada justo después de la capa de datos, por ejemplo:
<layer id="0" name="data" precision="FP32" type="Input">
<output>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>256</dim>
<dim>456</dim>
</port>
</output>
</layer>
<layer id="1" name="Mul_/Fused_Mul_/FusedScaleShift_" precision="FP32" type="ScaleShift">
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>256</dim>
<dim>456</dim>
</port>
</input>
<output>
<port id="3">
<dim>1</dim>
<dim>3</dim>
<dim>256</dim>
<dim>456</dim>
</port>
</output>
<blobs>
<weights offset="0" size="12"/>
<biases offset="12" size="12"/>
</blobs>
</layer>
Así que creo que la normalización desde arriba debería ayudar (menos 128 y divide 256).
Y para el consumo de memoria, sí, es solo la memoria, que tomó Python.
@Daniil-Osokin gracias Danill. Agregué un preproceso a la demostración de libtorch pero no obtuve ningún resultado, el resultado aún no es correcto.
¿Me ayudaría a revisar algunos pasos de preprocesamiento en C++? Ahora estoy fuera de dirección para averiguar qué paso se ha perdido. Deseando su ayuda..
Tomé los códigos necesarios de openvino y los integré con libtorch. Lo muevo a un repositorio separado aquí Solo necesita editar una ruta de libtorch y luego se puede construir, el modelo pt c ++ rastreado ya está allí (concateno la última salida a un solo tensor cuando rastrea el modelo ya que libtorch tiene algún problema con tupla ).
Puede compilar y ejecutarse, pero no puedo averiguar dónde falla la lógica...
Si puedes ayudar puedes echarle un vistazo cuando tengas tiempo.
Creo que el problema es que OpenCV lee la imagen en formato intercalado (HxWxC), y el tensor espera una entrada planar (orden CxHxW), hizo un problema en su repositorio.
@jinfagang ¿Esto ayudó?
@Daniil-Osokin gracias Danill, ¡funciona después de editar el orden de los canales! Cerraré este problema y enviaré un PR después de limpiar algunos códigos.
@jinfagang hola, tu repositorio (https://github.com/jinfagang/light_human_pose_libtorch) ya no puede visitarse.
y ¿puede decirme cómo obtener el modelo pt c++ rastreado?
Lo siento, actualmente estoy desarrollando algunas otras funcionalidades y las mantengo privadas por un tiempo.
Puede rastrearlo directamente como dice el tutorial de pytorch. Puede rastrear fácilmente
@jinfagang Gracias.
Hola @jinfagang ,
¿Has terminado con tu libtorch? ¿Podrías compartirlo para todos?
¡Cordial saludo!
Hola @jinfagang ,
¿Has terminado con tu libtorch? ¿Podrías compartirlo para todos?
¡Cordial saludo!
Soy capaz de crear una versión en c++ con libtorch y opencv, es un proyecto comercial, aunque los códigos me pertenecen, pero los clientes no querrían que lo publique. La buena noticia es que la mayoría de las operaciones numéricas son compatibles con libtorch, puede implementarlas gradualmente, verificar la salida de los scripts de python y c ++ coinciden entre sí o no. Tomó horas hacerlo, pero no fue difícil.
@stereomatchingkiss gracias por responder. También creé con éxito la versión C ++ que sigue la estimación de pose humana de la muestra openvino también.
@tucachmo2202 ¿Puedes compartirlo por favor?)
Comentario más útil
@stereomatchingkiss gracias por responder. También creé con éxito la versión C ++ que sigue la estimación de pose humana de la muestra openvino también.