uDepth: detección de profundidad 3D en tiempo real en el Pixel 4



La capacidad de determinar información 3D sobre la escena, llamada detección de profundidad , es una herramienta valiosa para desarrolladores y usuarios por igual. La detección de profundidad es un área muy activa de la investigación de la visión por computadora con innovaciones recientes que van desde aplicaciones como el modo retrato y AR hasta innovaciones fundamentales de detección como la detección de objetos transparentes . Las técnicas típicas de detección de profundidad estéreo basadas en RGB pueden ser computacionalmente caras, sufrir en regiones con baja textura y fallar completamente en condiciones de poca luz extrema.

Debido a que la función de desbloqueo facial en Pixel 4 debe funcionar a alta velocidad y en la oscuridad, requirió un enfoque diferente. Con este fin, la parte frontal del Pixel 4 contiene un sensor de profundidad estéreo activo infrarrojo (IR) en tiempo real, llamado uDepth. Una capacidad clave de visión por computadora en el Pixel 4, esta tecnología ayuda al sistema de autenticación a identificar al usuario y al mismo tiempo protege contra ataques de suplantación de identidad. También admite una serie de capacidades novedosas, como el retoque fotográfico posterior al hecho, la segmentación basada en la profundidad de una escena, el desenfoque del fondo, los efectos de retrato y las fotos en 3D.

Recientemente, proporcionamos acceso a uDepth como API en Camera2 , utilizando Pixel Neural Core, dos cámaras IR y un proyector de patrones IR para proporcionar marcos de profundidad sincronizados en el tiempo (en DEPTH16 ) a 30Hz. La aplicación Google Camera utiliza esta API para brindar capacidades de profundidad mejoradas a las selfies tomadas en Pixel 4. En esta publicación, explicamos ampliamente cómo funciona uDepth, elaboramos los algoritmos subyacentes y discutimos aplicaciones con resultados de ejemplo para Pixel 4.

Descripción general de la detección de profundidad estéreo
Todos los sistemas de cámaras estéreo reconstruyen la profundidad utilizando paralaje . Para observar este efecto, mire un objeto, cierre un ojo, luego cambie qué ojo está cerrado. La posición aparente del objeto cambiará, y los objetos más cercanos parecerán moverse más. uDepth es parte de la familia de técnicas densas de coincidencia estéreo local , que calculan el paralaje computacionalmente para cada píxel. Estas técnicas evalúan una región que rodea cada píxel en la imagen formada por una cámara, y tratan de encontrar una región similar en la imagen correspondiente de la segunda cámara. Cuando se calibra adecuadamente, las reconstrucciones generadas son métricas , lo que significa que expresan distancias físicas reales.
Configuración del sensor frontal Pixel 4, un ejemplo de un sistema estéreo activo.
Para lidiar con regiones sin textura y hacer frente a condiciones de poca luz, utilizamos una configuración de "estéreo activo", que proyecta un patrón IR en la escena que es detectado por las cámaras IR estéreo. Este enfoque hace que las regiones de baja textura sean más fáciles de identificar, mejorando los resultados y reduciendo los requisitos computacionales del sistema.

¿Qué hace que uDepth sea distinto?
Los sistemas de detección estéreo pueden ser extremadamente computacionalmente intensivos, y es fundamental que un sensor que funciona a 30Hz tenga poca potencia y, al mismo tiempo, sea de alta calidad. uDepth aprovecha una serie de ideas clave para lograr esto.

Una de esas ideas es que, dado un par de regiones que son similares entre sí, la mayoría de los subconjuntos correspondientes de esas regiones también son similares. Por ejemplo, dados dos parches de píxeles de 8x8 que son similares, es muy probable que la subregión 4x4 superior izquierda de cada miembro del par también sea similar. Esto informa el procedimiento de inicialización de la tubería uDepth, que construye una pirámide de propuestas de profundidad en comparación de mosaicos no superpuestos en cada imagen y seleccionando los más similares. Este proceso comienza con mosaicos 1x1, y acumula soporte jerárquicamente hasta que se genera un mapa de profundidad inicial de baja resolución.

Después de la inicialización, aplicamos una técnica novedosa para el refinamiento de la profundidad neural para soportar el iluminador de patrón de cuadrícula regular en el Pixel 4. Los sistemas estéreo activos típicos proyectan un patrón de cuadrícula pseudoaleatorio para ayudar a desambiguar coincidencias en la escena, pero uDepth es capaz de soportar la repetición patrones de cuadrícula también. La estructura repetitiva en dichos patrones produce regiones que se ven similares en pares estéreo, lo que puede conducir a coincidencias incorrectas. Atenuamos este problema utilizando una arquitectura convolucional liviana (parámetro de 75k), utilizando brillo IR e información vecina para ajustar coincidencias incorrectas, en menos de 1.5ms por cuadro.
Arquitectura de refinamiento de profundidad neural.
Después del refinamiento de la profundidad neural, las buenas estimaciones de profundidad se propagan iterativamente desde los mosaicos vecinos. Este y los siguientes pasos de la tubería aprovechan otra clave de conocimiento para el éxito de uDepth: las escenas naturales suelen ser localmente planas con solo pequeñas desviaciones no planas. Esto nos permite encontrar mosaicos planos que cubren la escena, y solo más tarde refinar profundidades individuales para cada píxel en un mosaico, reduciendo en gran medida la carga computacional.

Finalmente, se selecciona la mejor coincidencia entre las hipótesis del plano vecino, con refinamiento e invalidación de subpíxeles si no se puede encontrar una buena coincidencia.
Arquitectura de profundidad simplificada. Los componentes verdes se ejecutan en la GPU, el amarillo en la CPU y el azul en el núcleo neuronal Pixel.
Cuando un teléfono experimenta una caída severa, puede provocar que la calibración de fábrica de las cámaras estéreo se desvíe de la posición real de las cámaras. Para garantizar resultados de alta calidad durante el uso en el mundo real, el sistema uDepth se autocalibra. Una rutina de puntaje evalúa cada imagen de profundidad en busca de signos de mala calibración y genera confianza en el estado del dispositivo. Si se detecta una mala calibración, los parámetros de calibración se regeneran a partir de la escena actual. Esto sigue una tubería que consiste en la detección y correspondencia de características, refinamiento de subpíxeles (aprovechando el perfil de puntos) y el ajuste de paquete.
Izquierda: profundidad estéreo con calibración imprecisa. Derecha: después de la autocalibración.
Para obtener más detalles, consulte Slanted O (1) Stereo , en el que se basa uDepth.

Profundidad para fotografía computacional
Los datos sin procesar del sensor uDepth están diseñados para ser precisos y métricos, lo cual es un requisito fundamental para el desbloqueo facial. Las aplicaciones de fotografía computacional como el modo retrato y las fotos 3D tienen necesidades muy diferentes. En estos casos de uso, no es crítico lograr velocidades de cuadros de video, pero la profundidad debe ser suave, alineada con los bordes y completa en todo el campo de visión de la cámara a color.
De izquierda a derecha: resultado de detección de profundidad bruta, profundidad pronosticada, foto 3D. Observe la rotación suave de la pared, demostrando un gradiente continuo de profundidad en lugar de un solo plano focal.
Para lograr esto, hemos entrenado una arquitectura de aprendizaje profundo de extremo a extremo que mejora los datos de profundidad en bruto, inferiendo un mapa de profundidad 3D completo y denso. Utilizamos una combinación de imágenes RGB, segmentación de personas y profundidad bruta, con un esquema de abandono que obliga a utilizar la información para cada una de las entradas.
Arquitectura para la mejora de la profundidad de la fotografía computacional.
Para adquirir la verdad sobre el terreno, aprovechamos un sistema de captura volumétrica que puede producir modelos casi fotorrealistas de personas que utilizan una esfera geodésica equipada con 331 luces LED de color personalizadas, una serie de cámaras de alta resolución y un conjunto de sensores de profundidad personalizados de alta resolución. . Agregamos teléfonos Pixel 4 a la configuración y los sincronizamos con el resto del hardware (luces y cámaras). Los datos de entrenamiento generados consisten en una combinación de imágenes reales, así como representaciones sintéticas desde el punto de vista de la cámara Pixel 4.
Resumen de adquisición de datos.
Poniendolo todo junto
Con todos estos componentes en su lugar, uDepth produce un flujo de profundidad a 30Hz (expuesto a través de Camera2), y mapas de profundidad suaves y postprocesados para fotografía (expuesto a través de la aplicación de cámara de Google cuando toma una selfie con profundidad habilitada). La profundidad suave, densa y por píxel que produce nuestro sistema está disponible en cada selfie Pixel 4 con funciones de profundidad de medios sociales habilitadas, y se puede usar para efectos posteriores a la captura, como bokeh y fotos 3D para redes sociales.
Ejemplos de aplicaciones. Observe los múltiples planos focales en la foto 3D a la derecha.
Finalmente, nos complace proporcionarle una aplicación de demostración para que juegue que visualice una nube de puntos en tiempo real desde uDepth: descárguela aquí (esta aplicación es solo para fines de demostración e investigación y no está destinada para uso comercial; Google no proporcionará cualquier soporte o actualizaciones). Esta aplicación de demostración visualiza nubes de puntos 3D desde su dispositivo Pixel 4. Debido a que los mapas de profundidad están sincronizados en el tiempo y en el mismo sistema de coordenadas que las imágenes RGB, se puede mostrar una vista texturizada de la escena 3D, como en la siguiente visualización de ejemplo:
Ejemplo de nube de puntos RGB de un solo cuadro de uDepth en el Pixel 4.
Agradecimientos
Este trabajo no hubiera sido posible sin las contribuciones de muchas, muchas personas, incluidas, entre otras, Peter Barnum, Cheng Wang, Matthias Kramm, Jack Arendt, Scott Chung, Vaibhav Gupta, Clayton Kimber, Jeremy Swerdlow, Vladimir Tankovich, Christian Haene , Yinda Zhang, Sergio Orts Escolano, Sean Ryan Fanello, Anton Mikhailov, Philippe Bouchilloux, Mirko Schmidt, Ruofei Du, Karen Zhu, Charlie Wang, Jonathan Taylor, Katrina Passarella, Eric Meisner, Vitalii Dziuba, Ed Chang, Phil Davidson, Rohit Pandey , Pavel Podlipensky, David Kim, Jay Busch, Cynthia Socorro Herrera, Matt Whalen, Peter Lincoln, Geoff Harvey, Christoph Rhemann, Zhijie Deng, Daniel Finchelstein, Jing Pu, Chih-Chung Chang, Eddy Hsu, Tian-yi Lin, Sam Chang , Isaac Christensen, Donghui Han, Speth Chang, Zhijun He, Gabriel Nava, Jana Ehmann, Yichang Shih, Chia-Kai Liang, Isaac Reynolds, Dillon Sharlet, Steven Johnson, Zalman Stern, Jiawen Chen, Ricardo Martin Brualla, Supreeth Achar, Mike Mehlman, Brandon Barbello, Chris Breithaupt, Michael Rosenfield, Gopal Parupudi, Steve Goldberg, Tim Knight, Raj Singh, Shahram Izadi, así como muchos otros colegas de Dispositivos y Servicios, Google Research, Android y X.