[Lectura del artículo] MARS: Simulador realista, modular y consciente de instancias para la conducción autónoma

Insertar descripción de la imagen aquí
código de papel

Abstracto

Ahora que los vehículos autónomos pueden conducir sin problemas en situaciones normales, se reconoce ampliamente que las simulaciones realistas de sensores desempeñarán un papel clave en la resolución de los casos extremos restantes mediante la simulación . Para ello proponemos un simulador de conducción autónoma basado en Campos de Radiación Neural (NeRF). En comparación con los trabajos existentes, nuestro trabajo tiene tres características distintivas:
(1) Conciencia de instancia. Nuestro simulador modela instancias en primer plano y entornos en segundo plano por separado utilizando redes separadas para que las propiedades estáticas (por ejemplo, tamaño y apariencia) y dinámicas (por ejemplo, trayectoria) de las instancias se puedan controlar de forma independiente.
(2) Modularización. Nuestro simulador permite un cambio flexible entre diferentes redes troncales modernas relacionadas con NeRF, estrategias de muestreo, modos de entrada, etc. Esperamos que este diseño modular pueda promover el avance académico y el despliegue industrial de simulaciones de conducción autónoma basadas en NeRF.
(3) Autenticidad. Teniendo en cuenta la mejor selección de módulos, nuestro simulador está configurado con nuevos resultados fotorrealistas de última generación. Nuestro emulador será de código abierto, mientras que la mayoría de emuladores similares no lo son. Página del proyecto: https://open-air-sun.github.io/mars/ .

1. Introducción

Se puede decir que la conducción autónoma [11, 13, 33, 16, 24, 14] es la aplicación más importante de la tecnología moderna de comprensión de escenas 3D [5, 25]. Ahora, Robotaxis puede operar en grandes ciudades con los últimos mapas de alta definición, manejando sin problemas los escenarios de conducción diarios. Sin embargo, una vez que se produce inesperadamente en la carretera una situación extrema más allá de la distribución del algoritmo de conducción autónoma, las vidas de los pasajeros se verán amenazadas. El dilema es que, si bien necesitamos más datos de capacitación sobre casos extremos, recopilarlos en el mundo real a menudo significa peligro y altos costos. Por este motivo, la comunidad cree que la simulación fotorrealista [17, 6, 29, 10] es un camino tecnológico con gran potencial. Si el algoritmo puede experimentar una gran cantidad de situaciones extremas en el simulador y la brecha entre la simulación y la realidad es pequeña, entonces se puede resolver el cuello de botella en el rendimiento de los algoritmos de conducción autónoma actuales.

Los métodos de simulación de conducción autónoma existentes tienen sus propias limitaciones. CARLA [8] es un simulador de sensores ampliamente utilizado basado en motores gráficos tradicionales, cuyo realismo está limitado por la calidad del modelado y renderizado de activos. AADS [17] también aprovecha los motores gráficos tradicionales pero demuestra un fotorrealismo impresionante utilizando recursos cuidadosamente seleccionados. GeoSim [6], por otro lado, introduce un esquema basado en datos para una simulación realista mediante el aprendizaje de una red de aumento de imágenes. Se puede lograr una generación y representación de recursos flexibles mediante la composición de imágenes con buena geometría y apariencia realista.

En este artículo, utilizamos las capacidades de renderizado realista de NeRF para la simulación de conducción autónoma. Los datos de entrenamiento capturados en entornos de la vida real garantizan una pequeña brecha entre la simulación y la realidad. Algunos trabajos también utilizan NeRF para simular automóviles en entornos exteriores [20] y fondos estáticos [10]. Sin embargo, la incapacidad de modelar escenas dinámicas complejas que consisten en objetos en movimiento y entornos estáticos limita su aplicación práctica en simulaciones de sensores del mundo real. Recientemente, Neural Scene Graph (NSG) [21] descompone escenas dinámicas en gráficos de escenas de aprendizaje y aprende representaciones latentes de objetos a nivel de categoría. Sin embargo, su representación de modelado de fondo basada en múltiples planos no puede sintetizar imágenes bajo grandes cambios de punto de vista.

Específicamente, nuestra contribución principal es el primer marco modular de código abierto basado en NeRF para simulaciones realistas de conducción autónoma. La canalización propuesta modela instancias en primer plano y entornos en segundo plano de forma descompuesta. Se combinan diferentes arquitecturas troncales de NeRF y métodos de muestreo de manera unificada y admiten entradas multimodales. La combinación óptima de módulos del marco propuesto logra un rendimiento de representación de última generación en puntos de referencia públicos con grandes márgenes, lo que demuestra resultados de simulación realistas.

2 método

Insertar descripción de la imagen aquí
Figura 1. Tubería. Izquierda: Primero calculamos el rayo de consulta r y todos los cuadros delimitadores de instancias visibles { B ij } \{\mathcal{B}_{ij}\}{ Byo} intersección de caja de rayos. Para los nodos de fondo, utilizamos directamente el modelo de representación de escena seleccionado y el muestreador seleccionado para inferir propiedades puntuales, como en el NeRF tradicional. Para los nodos de primer plano, los rayos se convierten primero en marcos de instanciaro r_oroy luego procesado a través de la representación de nodos en primer plano (Sección 2.1). Derecha: todas las muestras se combinan y representan en imágenes RGB, mapas de profundidad y semántica (Sección 2.2).

Descripción general:
Como se muestra en la Figura 1, nuestro objetivo es proporcionar un marco modular para construir campos de radiación neuronal combinados donde se puedan realizar simulaciones realistas de sensores para escenarios de conducción al aire libre. Considere un entorno exterior grande e ilimitado con una gran cantidad de objetos dinámicos.

La entrada al sistema incluye un conjunto de imágenes RGB { L i } N \{\mathcal{L}_i\}^N{ Lyo}N (capturado por sensores del lado del vehículo o de la carretera), actitud del sensor{ T i } N \{\mathcal{T}_i\}^N{ Tyo}N (calculado utilizando señales IMU/GPS) y cuadro de trayectoria del objeto (incluido el límite 3D){ B ij } N × M \{\mathcal{B}_{ij}\}^{N \times M}{ Byo}N × M、类别{ tipoij } N × M \{tipo_{ij}\}^{N \times M}{ tipo y p eyo}N × M e ID de instancia{ idxij } N × M \{idx_{ij}\}^{N \times M}{ yo d xyo}N × M ). N es el número de fotogramas de entrada, M es la instancia de seguimiento { O i } M \{\mathcal{O}_i\}^Men toda la secuencia{ Oyo}El número de m. También se puede utilizar un conjunto opcional de mapas de profundidad{ D i } N \{\mathcal{D}_i\}^N{ Dyo}N y máscara de segmentación semántica{ S i } N \{\mathcal{S}_i\}^N{ Syo}N sirve como señal de supervisión adicional. Al construir campos neuronales combinados, el marco propuesto puede simular señales de detección de sensores reales (incluidas imágenes RGB, mapas de profundidad, máscaras de segmentación semántica, etc.) bajo una postura de sensor determinada. También se admite la edición de instancias de trayectorias y apariencias de objetos.

Tubería.

Nuestro marco modela cada instancia de primer plano y nodo de fondo combinados. Como se muestra en la Figura 1, al consultar las propiedades (RGB, profundidad, semántica, etc.) de un rayo r determinado, primero calculamos su intersección con los cuadros delimitadores 3D de todos los objetos visibles para obtener las distancias de entrada y salida [tin, todo ] [t_in}, t_in_salida][ ten,to u t] . Luego, se consultan el nodo de fondo (arriba a la izquierda en la Figura 1) y el nodo de objeto de primer plano (abajo a la izquierda en la Figura 1), donde cada nodo toma muestras de un conjunto de puntos 3D y utiliza su red de representación neuronal específica para obtener atributos de puntos (RGB, densidad, semántica espera). Específicamente, para consultar los nodos de primer plano, transformamos el origen y la dirección del rayo desde el espacio mundial a marcos de instancia basados ​​en las trayectorias de los objetos. Finalmente, todas las muestras de rayos de los nodos de fondo y de primer plano se combinan y se renderizan en volumen para producir un resultado de renderizado píxel por píxel (lado derecho de la Figura 1, Sección 2.2).

Observamos que los nodos de fondo (a menudo escenas ilimitadas a gran escala) tienen propiedades diferentes a los nodos de primer plano centrados en objetos, mientras que el trabajo actual en simulación de sensores [15, 21] utiliza un modelo NeRF unificado. Nuestro marco proporciona un marco flexible de código abierto que admite diferentes opciones de diseño para la representación de escenas de nodos en primer plano y en segundo plano y puede combinar fácilmente nuevos métodos de última generación para la reconstrucción de escenas estáticas y la reconstrucción centrada en objetos.

2.1 Representación de escena

Descomponemos la escena en un NeRF ilimitado a gran escala (como nodos de fondo) y múltiples NeRF centrados en objetos (como nodos de primer plano independientes). Tradicionalmente, el campo de radiación neuronal asigna una coordenada de punto 3D dada x = (x, y, z) y una dirección de visión 2D d a su radiancia c y densidad de volumen σ, como se muestra en la ecuación 1. 1. A partir de esta representación pionera, se propusieron muchas variaciones para diferentes propósitos, por lo que adoptamos un diseño modular.

Insertar descripción de la imagen aquí
El desafío del modelado realista de escenas de fondo ilimitadas es representar con precisión la región lejana, por lo que utilizamos la deformación de escena ilimitada [2] para reducir la región lejana. Para los nodos de primer plano, admitimos la representación condicional de código f (x, d, z) = (c, σ) (z representa código latente a nivel de instancia) y la representación tradicional, que se explica a continuación.

Arquitecturas.

En nuestro marco modular, admitimos varias redes troncales de NeRF, que se pueden dividir aproximadamente en dos superclases: métodos basados ​​en MLP [18, 1, 2] o métodos basados ​​en cuadrículas, que utilizan HashNets en su Almacenar vértices de características que varían espacialmente en una red vóxeles [19,23]. Aunque estas arquitecturas difieren entre sí en detalles, siguen la misma formulación de alto nivel1 y están encapsuladas en módulos bajo una interfaz unificada en MARS.

Aunque la representación basada en MLP es matemáticamente simple, damos una elaboración formal del enfoque basado en cuadrícula. Cuadrícula de funciones de resolución múltiple { G θ l } l = 1 L \{\mathcal{G}_{\theta}^{l}\}^{L}_{l=1}{ GRAMOiyo}l = 1LLa implementación específica de tiene resolución capa por capa R l : = ⌊ R min ⋅ bl ⌋ , b = exp ( ln R max − ln R min L − 1 ) R_l := ⌊R_{min} · b^l⌋ , b = exp(\frac{ln R_{max} − ln R_{min}}{ L−1})Ryo:=⌊R _minbl⌋ ,_b=e x p (L - 1l norte rmáx _l norte Rmin) , entre los cualesR min , R max R_{min}, R_{max}RminRmáx _son las resoluciones más gruesas y mejores [31,19]. La coordenada x primero se escala a cada resolución y luego se procesa mediante operaciones hacia arriba y hacia abajo como x Ryox Ryo y hash para obtener el índice de la tabla [19]. Los vectores de características extraídos luego se interpolan trilinealmente y se decodifican mediante MLP superficial.

Insertar descripción de la imagen aquí
Muestreo:
Apoyamos varias estrategias de muestreo, incluida la red recientemente propuesta [2], que extrae campos de densidad de modelos NeRF libres de radiación para generar muestras de rayos, así como otros esquemas de muestreo como el muestreo de grueso a fino [18] o uniforme. muestreo [9].

Nodos de primer plano.

Para representar instancias de primer plano, primero transformamos los rayos proyectados en el espacio de coordenadas de cada instancia y luego inferimos el NeRF centrado en el objeto en el espacio canónico de cada instancia. La configuración predeterminada de nuestro marco utiliza un modelo de código condicional que utiliza códigos latentes para codificar características de instancia y un decodificador de nivel de clase compartido para codificar clases anteriores, lo que permite modelar muchas trayectorias largas con un uso de memoria compacto. Al mismo tiempo, nuestro marco también admite condiciones tradicionales sin código. Detallamos la representación modificada en primer plano (denominada “Nuestra” en la Sección 3) en el material complementario.

Insertar descripción de la imagen aquí
Figura 2. Representación de la composición. Algunos vehículos estáticos en el área distante se tratan como objetos de fondo.

2.2 Representación composicional

La Figura 2 muestra los resultados del renderizado compuesto. Para tomar una pose de cámara determinada T i \mathcal{T}_{i}tyoPara renderizar la imagen, proyectamos un rayo r = o + tdr = o + td en cada píxel renderizado.r=oh+td . _ Para cada rayo r, primero calculamos la relación con todos los nodos visibles en primer planoO ij \mathcal{O}_{ij}ohyoEl intervalo de intersección [tin, tout] [t_{in}, t_{out}][ ten,to u t] (Figura 3) y compare la muestra{ P kobj − j } \{\mathcal{P}_{k}^{obj-j}\}{ PAGko bj j} Transformar a lo largo de los rayos desde el espacio mundial al espacio normativo por primer plano. También tomamos muestras de un conjunto de puntos 3D{ P kgb } \{\mathcal{P}_{k}^{gb}\}{ PAGkgb _} como muestra de fondo. Las muestras de todos los nodos se pasan primero a través de sus redes correspondientes para obtener colores puntuales{ ckbg , obj } \{c_{k}^{bg,obj}\}{ ckb g , o bj} y establece{ σ kbg , obj } \{σ_{k}^{bg,obj}\}{ pagkb g , o bj} y lógica semántica de primer plano{ skbg } \{s_{k}^{bg}\}{ skbg _} . Teniendo en cuenta que las propiedades semánticas de las muestras de primer plano son en realidad sus etiquetas de clase, creamos un vector único:

Insertar descripción de la imagen aquí
Para agregar propiedades puntuales, clasificamos todas las muestras por distancia de rayo en el espacio mundial y representamos las propiedades de píxeles utilizando un pase de renderizado de volumen estándar:
Insertar descripción de la imagen aquí

2.3 Hacia una renderización realista

Modelado del cielo.
En nuestro marco, apoyamos el uso de modelos del cielo para manejar la apariencia a distancias infinitas, donde se utilizan mapas de entorno esféricos basados ​​en MLP [22] para modelar regiones infinitas que nunca se cruzan con superficies opacas: sin embargo, asignar ingenuamente el color del
Insertar descripción de la imagen aquí
cielo csky c_{cielo}Csk y _La combinación con la renderización de fondo y primer plano (Ecuación 4) genera posibles inconsistencias. Por lo tanto, introducimos la regularización semántica BCE para aliviar este problema:

Insertar descripción de la imagen aquí
Muestras de resolución de conflictos
Insertar descripción de la imagen aquí
Figura 3. Demostración visual de nuestro proceso de muestreo libre de conflictos. Ilustramos el uso de muestreo uniforme en todos los nodos.

Resolución de muestras de conflictos:
Dado que nuestro muestreo de fondo y de primer plano se realiza de forma independiente, es posible que la muestra de fondo se encuentre dentro del cuadro delimitador de primer plano (Figura 3, muestra de truncamiento de fondo). La representación sintética puede clasificar incorrectamente muestras de primer plano como fondo (más adelante denominada ambigüedad de fondo-primer plano). Por lo tanto, después de eliminar la instancia de primer plano, aparecerán artefactos en el área de fondo (Figura 4). Idealmente, con suficientes señales de supervisión de múltiples vistas, el sistema puede aprender automáticamente a distinguir entre el primer plano y el fondo durante el entrenamiento. Sin embargo, para los simuladores basados ​​en datos, obtener imágenes múltiples ricas y de alta calidad a medida que los vehículos se mueven rápidamente por la carretera es un desafío para los usuarios. Esta ambigüedad no se observa en NSG [21] porque NSG solo toma muestras de unos pocos puntos en las intersecciones de planos de rayos y es poco probable que tenga demasiadas muestras de truncamiento de fondo.

Insertar descripción de la imagen aquí
Figura 4. Mostramos que sin regularización, las muestras truncadas del fondo pueden provocar que el fondo y el primer plano se vean borrosos.

Para resolver este problema, diseñamos un término de regularización que minimiza la suma de densidades de muestras truncadas de fondo para minimizar su impacto en el proceso de renderizado:

Insertar descripción de la imagen aquí
Entre ellos { P i ( tr ) } \{P^{(tr)}_ i \}{ PAGi( tr ) _} representa la muestra truncada en segundo plano.

2.4 Optimización

Para optimizar nuestro sistema, minimizamos la siguiente función objetivo:
Insertar descripción de la imagen aquí
donde λ 1 − 5 λ_{1−5}yo1-5 _ _es el parámetro de ponderación. L cielo L_ {cielo}lsk y _luna cc u mSe explica en la Ec. 7 y 8.

Pérdida de color:

Usamos pérdida MSE estándar para minimizar el error fotométrico:
Insertar descripción de la imagen aquí
Pérdida de profundidad:

Introducimos una pérdida de profundidad para tener en cuenta las regiones sin textura y las regiones observadas desde puntos de vista dispersos. Ideamos dos estrategias para supervisar formas geométricas. Dados los datos de profundidad, explotamos la pérdida de distribución de luz derivada de [7]. Por otro lado, si no hay datos de profundidad disponibles, utilizamos una red de profundidad única y aplicamos la siguiente pérdida de profundidad única de [31].

Insertar descripción de la imagen aquí
Pérdidas semánticas:
seguimos SemanticNeRF [34] y utilizamos pérdidas semánticas de entropía cruzadaInsertar descripción de la imagen aquí

3 experimentos

En esta sección, proporcionamos amplios resultados experimentales para demostrar el simulador realista, modular y con reconocimiento de instancias propuesto para la conducción autónoma. Evaluamos nuestro método en los escenarios del conjunto de datos KITTI [11] y el conjunto de datos Virtual KITTI-2 (V-KITTI) [3]. A continuación, usamos "nuestra configuración predeterminada" para representar NeRF basado en cuadrícula con un muestreador de propuesta para los nodos de fondo, y nuestra representación modificada a nivel de clase con un muestreador de grueso a fino para los nodos de primer plano.

Insertar descripción de la imagen aquí
Tabla 1. Resultados cuantitativos de la tarea de reconstrucción de imágenes y comparación de la configuración con los métodos de referencia. El conjunto de datos utilizado para la evaluación es KITTI.

3.1 Representación fotorrealista

Validamos el rendimiento de representación fotorrealista del simulador evaluando la reconstrucción de imágenes y la síntesis de nueva vista (NVS) [21, 26].

Insertar descripción de la imagen aquí
Tabla 2. Resultados cuantitativos de la síntesis de nuevas vistas

Líneas de base:
Realizamos comparaciones cualitativas y cuantitativas con otros métodos de última generación: NeRF [18], NeRF con entrada con marca de tiempo (denotado NeRF+Time), NSG [21], PNF [15] y SUDS [26]. Tenga en cuenta que ninguno de ellos satisface simultáneamente los tres criterios mencionados en la Tabla 1.

Detalles de implementación
Nuestro modelo utiliza RAdam como optimizador y está entrenado para 200.000 iteraciones con 4096 rayos por lote. La tasa de aprendizaje del nodo en segundo plano se especifica como 1 ∗ 1 0 − 3 1 * 10^{−3}11 03 , decayendo a1 ∗ 1 0 − 5 1 * 10^{−5}11 05 , mientras que la tasa de aprendizaje del nodo objeto se asigna a5 ∗ 1 0 − 3 5 * 10^{−3}51 03 , decayendo a1 ∗ 1 0 − 5 1 * 10^{−5}11 05

Insertar descripción de la imagen aquí
Figura 5. Resultados de reconstrucción de imágenes cualitativas en el conjunto de datos KITTI.

Configuración del experimento.

Los conjuntos de imágenes de entrenamiento y de prueba en la configuración de reconstrucción de imágenes son idénticos, mientras que en la tarea NVS renderizamos fotogramas que no están incluidos en los datos de entrenamiento. En concreto, entrenamos cada 4º, 2º y 4º fotograma, y ​​solo 1 de cada 4º fotograma, es decir, el 25%, el 50% y el 75%.

Seguimos protocolos de evaluación estándar en síntesis de imágenes e informamos evaluaciones cuantitativas de las configuraciones predeterminadas para la relación pico señal-ruido (PSNR), similitud estructural (SSIM) y aprendizaje de similitud de parche de imagen perceptual (LPIPS) [32]. Los resultados de la reconstrucción de imágenes se muestran en la Tabla 1 y los resultados de NVS se muestran en la Tabla 2, lo que muestra que nuestro método supera al método de referencia en ambos entornos. Podemos lograr 29,79 PSNR en V-KITTI utilizando el 75% de los datos de entrenamiento, mientras que el mejor resultado publicado anteriormente es 23,87.

Insertar descripción de la imagen aquíFigura 6. Galería de diferentes pases de renderizado.

3.2 Edición por instancias

Nuestro marco modela los nodos de fondo y de primer plano por separado, lo que nos permite editar escenas teniendo en cuenta las instancias. Demostramos cualitativamente la capacidad de eliminar instancias, agregar nuevas instancias y editar trayectorias de vehículos. En la Figura 7 mostramos algunos ejemplos de edición de rotación y traslación del vehículo, pero se pueden encontrar más resultados en nuestro videoclip.

Insertar descripción de la imagen aquí

3.3 La bendición del diseño de módulos

Realizamos evaluaciones utilizando diferentes combinaciones de nodos de fondo y de primer plano, muestreadores y señales de supervisión, gracias a nuestro diseño modular.

Tenga en cuenta que algunos métodos de referencia en la literatura en realidad corresponden a las entradas de ablación en esta tabla. Por ejemplo, PNF [15] utiliza NeRF como representación del nodo de fondo y NeRF instanciado como representación del nodo de primer plano con pérdida semántica. NSG [21] utiliza NeRF como representación de nodo de fondo y NeRF a nivel de categoría como representación de primer plano, pero adopta una estrategia de muestreo de múltiples planos. Nuestra configuración predeterminada utiliza la representación de nodos de fondo basada en cuadrículas y nuestro enfoque de nivel de clase propuesto para la representación de nodos de primer plano.

3.4 Resultados de la ablación

En esta sección, analizamos diferentes configuraciones experimentales y verificamos la necesidad de nuestro diseño. Revelamos el impacto de diferentes opciones de diseño en la representación de los nodos de fondo, la representación de los nodos de primer plano, etc. Específicamente, mostramos todos los experimentos para 50.000 iteraciones. A diferencia de trabajos anteriores [26, 15, 21] que evaluaron sus métodos en secuencias cortas de 90 imágenes, utilizamos la secuencia completa en el conjunto de datos para todas las evaluaciones. Dado que no son de código abierto y se desconoce su secuencia de evaluación exacta, esperamos que nuestros nuevos puntos de referencia puedan estandarizar esta importante área. La evaluación cuantitativa se muestra en la Tabla 3.

Para los nodos de fondo y de primer plano, reemplazamos el modelo predeterminado (ID 1 en la Tabla 3) con modelos basados ​​en MLP y en cuadrícula y enumeramos sus métricas en la fila 2, filas 7-12. En las líneas 3 a 6, mostramos la efectividad de los componentes del modelo. Para modelos y muestreadores, los módulos seleccionados para los nodos de fondo y primer plano se anotan antes y después de la barra, respectivamente.

Insertar descripción de la imagen aquí

4. Conclusión

En este artículo, proponemos un marco modular para una simulación realista de conducción autónoma basada en NeRF. Nuestro marco de código abierto consta de un nodo de fondo y múltiples nodos de primer plano y puede modelar escenas dinámicas complejas. Demostramos la eficacia de nuestro marco a través de extensos experimentos. El oleoducto propuesto logra un rendimiento de representación de última generación en puntos de referencia públicos. También admitimos diferentes opciones de diseño para la representación de escenas y estrategias de muestreo, brindando flexibilidad y versatilidad durante las simulaciones.
Limitaciones
Nuestro método requiere horas de capacitación y no se puede renderizar en tiempo real. Además, nuestro enfoque no tiene en cuenta los efectos de reflexión especular dinámica sobre el vidrio u otros materiales reflectantes, lo que puede provocar artefactos en la imagen renderizada. Mejorar la eficiencia de la simulación y los efectos relacionados con la vista será nuestro trabajo futuro.


Lanzar ladrillos:

  1. La aplicación eficaz de NeRF en el campo de la conducción autónoma tiene grandes resultados.
  2. Esta modularidad es muy buena: puede combinar libremente varios módulos pequeños y puede cambiar fácilmente los módulos y optimizarlos para diferentes escenarios.
  3. Este trabajo combina las ventajas de NeRF en la dirección de renderizado. Parece que hay pocas aplicaciones relevantes en la dirección de reconstrucción de NeRF debido a la eficiencia y otras razones. En la actualidad, NeRF puede tener más ventajas en la reconstrucción o el posprocesamiento (como la reconstrucción). escenas callejeras?).

Supongo que te gusta

Origin blog.csdn.net/m0_50910915/article/details/132099274
Recomendado
Clasificación