PhyCV es la primera biblioteca de visión artificial que utiliza algoritmos derivados directamente de las ecuaciones de la física que rigen los fenómenos físicos. Los algoritmos que aparecen en la primera versión emulan la propagación de la luz a través de un medio físico con propiedades difractivas naturales y diseñadas seguidas de una detección coherente. A diferencia de los algoritmos tradicionales que son una secuencia de reglas empíricas hechas a mano, los algoritmos inspirados en la física aprovechan las leyes físicas de la naturaleza como planos. Además, estos algoritmos pueden, en principio, implementarse en dispositivos físicos reales para un cálculo rápido y eficiente en forma de computación analógica. [1] Actualmente, PhyCV tiene tres algoritmos: Phase-Stretch Transform (PST) , Phase-Stretch Adaptive Gradient-Field Extractor (PAGE) y Vision Enhancement via Virtual diffraction and coherent Detection (VEViD). Todos los algoritmos tienen versiones para CPU y GPU. PhyCV ahora está disponible en GitHub y se puede instalar desde pip.
Los algoritmos de PhyCV están inspirados en la física del estiramiento temporal fotónico [2] [3] (una técnica de hardware para la adquisición de datos ultrarrápida y de un solo disparo). PST es un algoritmo de detección de bordes que se convirtió en código abierto en 2016 y tiene más de 800 estrellas y más de 200 bifurcaciones en GitHub. PAGE es un algoritmo de detección de bordes direccionales que se convirtió en código abierto en febrero de 2022. PhyCV fue desarrollado y convertido en código abierto originalmente por Jalali-Lab @ UCLA en mayo de 2022. En la versión inicial de PhyCV, el código abierto original de PST y PAGE se refactoriza y mejora significativamente para que sea modular, más eficiente, acelerado por GPU y orientado a objetos. VEViD es un algoritmo de mejora del color y de poca luz que se agregó a PhyCV en noviembre de 2022.
La transformada de estiramiento de fase (PST) es un algoritmo de detección de bordes y texturas computacionalmente eficiente con un rendimiento excepcional en imágenes con problemas visuales. [4] [5] [6] El algoritmo transforma la imagen emulando la propagación de la luz a través de un dispositivo con una propiedad difractiva diseñada seguida de una detección coherente. Se ha aplicado para mejorar la resolución de imágenes de resonancia magnética , [7] extraer vasos sanguíneos en imágenes de retina, [8] identificar delfines, [9] y tratar aguas residuales, [10] obtener imágenes biológicas de moléculas individuales, [11] y clasificar vehículos aéreos no tripulados mediante imágenes micro Doppler. [12]
El extractor de campo de gradiente adaptativo de estiramiento de fase (PAGE) es un algoritmo inspirado en la física para detectar bordes y sus orientaciones en imágenes digitales a varias escalas. [13] [14] El algoritmo se basa en las ecuaciones de difracción de la óptica. Metafóricamente hablando, PAGE emula la física de la propagación difractiva birrefringente (dependiente de la orientación) a través de un dispositivo físico con una estructura difractiva específica. La propagación convierte una imagen de valor real en una función compleja. La información relacionada está contenida en los componentes reales e imaginarios de la salida. La salida representa la fase de la función compleja.
Mejora de la visión mediante difracción virtual y detección coherente (VEViD) es un algoritmo eficaz e interpretable de mejora del color y de la poca luz que reimagina una imagen digital como un campo de luz metafórico que varía espacialmente y luego somete el campo a procesos físicos similares a la difracción y la detección coherente. [15] El término “virtual” captura la desviación del mundo físico. El campo de luz se pixela y la propagación imparte una fase con una dependencia arbitraria de la frecuencia que puede ser diferente del comportamiento cuadrático de la difracción física. VEViD se puede acelerar aún más mediante aproximaciones matemáticas que reducen el tiempo de cálculo sin sacrificar apreciablemente la calidad de la imagen. Una aproximación de forma cerrada para VEViD, que llamamos VEViD-lite, puede alcanzar hasta 200 FPS para la mejora de video 4K.
PhyCV, que presenta baja dimensionalidad y alta eficiencia, es ideal para aplicaciones informáticas de borde. En esta sección, demostramos cómo ejecutar PhyCV en NVIDIA Jetson Nano en tiempo real.
NVIDIA Jetson Nano Developer Kit es una plataforma de tamaño pequeño y de bajo consumo de energía para aplicaciones informáticas de borde. Está equipada con una GPU de arquitectura NVIDIA Maxwell con 128 núcleos CUDA , una CPU ARM Cortex-A57 de cuatro núcleos, 4 GB de RAM LPDDR4 de 64 bits y admite codificación y decodificación de video con una resolución de hasta 4K. Jetson Nano también ofrece una variedad de interfaces para conectividad y expansión, lo que lo hace ideal para una amplia gama de aplicaciones de IA e IoT. En nuestra configuración, conectamos una cámara USB a Jetson Nano para adquirir videos y demostrar el uso de PhyCV para procesar los videos en tiempo real.
Utilizamos Jetson Nano (4 GB) con NVIDIA JetPack SDK versión 4.6.1, que viene con Python 3.6, CUDA 10.2 y OpenCV 4.1.1 preinstalados. Además, instalamos PyTorch 1.10 para habilitar PhyCV acelerado por GPU. Demostramos los resultados y las métricas de ejecutar PhyCV en Jetson Nano en tiempo real para tareas de detección de bordes y mejora con poca luz. Para videos de 480p, ambas operaciones alcanzan más de 38 FPS, lo que es suficiente para la mayoría de las cámaras que capturan videos a 30 FPS. Para videos de 720p, la mejora con poca luz de PhyCV puede funcionar a 24 FPS y la detección de bordes de PhyCV puede funcionar a 17 FPS.
El código de PhyCV tiene un diseño modular que sigue fielmente el proceso físico a partir del cual se originó el algoritmo. Tanto los módulos PST como PAGE de la biblioteca PhyCV emulan la propagación de la señal de entrada (imagen digital original) a través de un dispositivo con una propiedad difractiva diseñada seguida de una detección coherente (de fase). La propagación dispersiva aplica un núcleo de fase al dominio de frecuencia de la imagen original. Este proceso tiene tres pasos en general: cargar la imagen, inicializar el núcleo y aplicar el núcleo. En la implementación de PhyCV, cada algoritmo se representa como una clase en Python y cada clase tiene métodos que simulan los pasos descritos anteriormente. La arquitectura del código modular sigue la física detrás del algoritmo. Consulte el código fuente en GitHub para obtener más detalles.
PhyCV admite la aceleración de GPU. Las versiones de GPU de PST y PAGE se basan en PyTorch acelerado por el kit de herramientas CUDA . La aceleración es beneficiosa para aplicar los algoritmos en el procesamiento de imágenes y videos en tiempo real y otras tareas de aprendizaje profundo. A continuación, se muestra el tiempo de ejecución por cuadro de los algoritmos PhyCV en CPU (Intel i9-9900K) y GPU (NVIDIA TITAN RTX) para videos en diferentes resoluciones. Tenga en cuenta que la mejora de poca luz de PhyCV funciona en el espacio de color HSV, por lo que el tiempo de ejecución también incluye la conversión de RGB a HSV. Sin embargo, para todos los tiempos de ejecución que utilizan GPU, ignoramos el tiempo de traslado de datos de CPU a GPU y solo contamos el tiempo de operación del algoritmo.
Consulte el archivo README de GitHub para obtener una documentación técnica detallada.
Cuando se trabaja con transmisiones de video en tiempo real desde cámaras, los fotogramas se capturan y almacenan en búfer en la CPU y deben trasladarse a la GPU para ejecutar los algoritmos PhyCV acelerados por la GPU. Este proceso consume mucho tiempo y es un cuello de botella común para los algoritmos de procesamiento de video en tiempo real.
Actualmente, los parámetros de los algoritmos PhyCV deben ajustarse manualmente para diferentes imágenes. Si bien un conjunto de parámetros preseleccionados funciona relativamente bien para una amplia gama de imágenes, la falta de adaptabilidad de los parámetros para diferentes imágenes sigue siendo una limitación por ahora.