Algoritmos de detección de objetos (R-CNN, R-CNN rápido, R-CNN rápido, yolo, SSD, yoloV2, yoloV3).
El algoritmo R-CNN se propuso en 2014, que básicamente sentó las bases para la aplicación del método de dos etapas en el campo de la detección de objetivos. La estructura de su algoritmo es la siguiente.
Los pasos del algoritmo son los siguientes:
En comparación con los algoritmos tradicionales de detección de objetivos, R-CNN logra una mejora del rendimiento del 50%. Cuando se utiliza el modelo VGG-16 como modelo de reconocimiento de objetos, se puede lograr una precisión del 66% en el conjunto de datos voc2007, lo cual no está nada mal. Su mayor problema es que es muy lento y ocupa mucha memoria. Hay dos razones principales.
En respuesta a algunos problemas de R-CNN, Microsoft propuso un algoritmo R-CNN rápido en 2015, que optimiza principalmente dos problemas.
R-CNN y R-CNN rápido tienen un problema: los cuadros candidatos se generan mediante búsqueda selectiva y son muy lentos. Además, los 2000 fotogramas candidatos generados por R-CNN deben pasar por la red neuronal convolucional una vez, lo que significa que deben pasar por la red CNN unas 2000 veces, lo que lleva mucho tiempo (se ha mejorado el R-CNN rápido, y la imagen completa sólo necesita pasar por la red CNN una vez). Esta es también la razón principal por la que la velocidad de detección de estos dos algoritmos es lenta.
Para resolver este problema, Fast R-CNN propone la red RPN para obtener cuadros candidatos, lo que elimina el algoritmo de búsqueda selectiva y solo requiere una operación de capa convolucional, lo que mejora en gran medida la velocidad de reconocimiento. Este algoritmo es complejo y lo analizaremos en detalle. Su estructura básica es la siguiente.
Se divide principalmente en cuatro pasos:
La estructura de la red adopta el modelo convolucional VGG-16;
La capa convolucional adopta el modelo VGG-16. Primero, la imagen original de PxQ se escala y se recorta en una imagen MxN, y luego se pasa a través de 13 capas conv-Lelu, que se intercalan con cuatro capas de agrupación máxima. Todos los núcleos de convolución son 3 × 3, el relleno es 1 y la zancada es 1. El núcleo de la capa de agrupación es 2x2, el relleno es 0 y la zancada es 2.
La imagen MxN, después de pasar por la capa convolucional, se convierte en un mapa de características (M/16) x (N/16).
Faster R-CNN abandona el método de búsqueda selectiva en R-CNN y utiliza la capa RPN para generar cuadros candidatos, lo que puede aumentar en gran medida la velocidad de generación de cuadros candidatos. La capa RPN primero realiza una convolución de 3 × 3 y luego se divide en dos rutas. Todo el camino se utiliza para determinar si el cuadro candidato es el primer plano o el fondo. Primero lo transforma en un vector unidimensional, luego softmax determina si está en primer plano o en segundo plano y luego lo transforma en un mapa de características bidimensional. La otra ruta se utiliza para determinar la ubicación del cuadro candidato, implementada mediante la regresión del cuadro delimitador, que se analizará en detalle más adelante. Después del cálculo bidireccional, se selecciona el marco candidato de primer plano (porque el objeto está en primer plano) y la posición calculada del marco candidato se utiliza para obtener la propuesta de subgrafo de características que nos interesa.
La capa convolucional extrae la información de la imagen original y obtiene 256 mapas de características. Después de una convolución 3 × 3 de la capa RPN, todavía quedan 256 mapas de características. Pero cada punto incorpora la información espacial de 3x3 circundante. Para un punto en cada mapa de características, se generan k anclajes (k (k por defecto es 9)). El anclaje se divide en primer plano y fondo (ya sea un avión o un automóvil, solo necesitamos distinguir si es un primer plano). o un fondo). Hay cuatro desplazamientos de coordenadas de anclaje [x, y, w, h], donde xey representan las coordenadas del punto central, w y h representan el ancho y el alto. el mapa de características, se obtiene un mapa de características con diferentes tamaños y formas. K áreas de selección
Para el ancla generada, primero debemos determinar si es el primer plano o el fondo. en primer plano, podemos abandonar la mayoría de los puntos de anclaje del fondo. Los puntos pertenecen al fondo, por lo que este paso puede filtrar muchos puntos de anclaje inútiles, reduciendo así la cantidad de cálculo de la capa completamente conectada
256. Los mapas de características obtenidos después de la convolución 3 × 3 se procesan mediante convolución 1x1 y se transforman en 18 mapas de características. Luego, la remodelación es un vector unidimensional y softmax determina si es el primer plano o el fondo. datos disponibles para el cálculo de softmax.
Luego genere los puntos de anclaje de primer plano identificados.
Se utiliza otra ruta para determinar la posición del cuadro candidato, es decir, los valores de coordenadas [x, y, w, h] del punto de anclaje. Como se muestra en la imagen a continuación, el rojo representa nuestro distrito electoral actual y el verde representa el distrito electoral real. Aunque nuestra selección actual puede seleccionar aproximadamente un plano, todavía hay una gran brecha con respecto a la verdadera posición y forma del green, por lo que los puntos de anclaje generados deben ajustarse. Este proceso se llama regresión del cuadro delimitador.
Suponiendo que las coordenadas del cuadro rojo son [x, y, w, h] y las coordenadas del cuadro verde, es decir, las coordenadas del cuadro objetivo son [Gx, Gy, Gw, Gh], necesitamos crear una transformación, para que [x, y, w, h] pueda convertirse en [Gx, Gy, Gw, Gh]. La idea más sencilla es trasladar primero para acercar el punto central y luego escalar para acercar W y H. Como se muestra a continuación:
Lo que queremos aprender son las cuatro transformaciones de dx dy dw dh. Debido a que es una transformación lineal, se puede modelar mediante regresión lineal. Después de configurar el método de pérdida y optimización, puede utilizar el aprendizaje profundo para entrenar y obtener el modelo. Para la pérdida de posición espacial, generalmente usamos el algoritmo de error cuadrático medio en lugar de entropía cruzada (la predicción de clasificación usa entropía cruzada). El método de optimización puede utilizar el algoritmo de descenso de gradiente adaptativo Adam.
Después de obtener los puntos de anclaje de primer plano y determinar sus posiciones y formas, podemos generar sugerencias de subgrafos de características para el primer plano. Los pasos son los siguientes:
1. Obtenga el punto de anclaje de primer plano y sus coordenadas [x y w h].
2. Según las diferentes probabilidades de que los puntos de anclaje estén en primer plano, seleccione los primeros puntos de anclaje pre_nms_topN en orden descendente, como los primeros 6000.
3. Excluir anclajes muy pequeños.
4. Encuentre anclajes con alta credibilidad mediante supresión no máxima de NMS. Esto es principalmente para resolver el problema de las selecciones superpuestas. Primero calcule el área de cada selección y luego ordénelas en softmax según su puntuación (es decir, la probabilidad de que sea un primer plano). La selección con la puntuación más alta se coloca en la cola. A continuación, calcule el pagaré de las selecciones restantes y la selección actual con puntuación máxima (el pagaré es el área de intersección de los dos cuadros dividida por el área de unión de los dos cuadros, midiendo el grado de superposición de los dos cuadros) . Elimine selecciones con pagarés superiores al umbral establecido. Esto resuelve el problema de las selecciones superpuestas.
5. Seleccione el primer resultado post_nms_topN como sugerencia de selección final para la salida, por ejemplo 300.
Después de este paso, el posicionamiento del objeto debería haber terminado básicamente y el resto es el reconocimiento del objeto.
Similar al rápido R-CNN, esta capa resuelve principalmente el problema de que las propuestas obtenidas previamente son de diferentes tamaños y formas y no se pueden conectar completamente. Los cálculos totalmente conectados solo pueden operar en determinadas formas, por lo que las propuestas deben tener el mismo tamaño y forma. Este problema se puede resolver recortando y escalando, pero provocará pérdida de información y distorsión de la imagen. Podemos resolver este problema de manera efectiva mediante el uso de la agrupación de ROI.
En la agrupación de ROI, si la salida objetivo es MxN, las sugerencias de entrada se dividen en partes MxN en las direcciones horizontal y vertical, y cada parte toma el valor máximo para obtener el mapa de características de salida de MxN.
El mapa de características detrás de la capa ROI Pooling se puede calcular conectando completamente la capa con softmax, como personas, perros y aviones, y se puede obtener el vector de probabilidad cls_prob. Al mismo tiempo, la regresión del cuadro delimitador se usa nuevamente para ajustar la posición propuesta y obtener bbox_pred, que se usa para devolver cuadros de detección de objetivos más precisos.
Esto completa todo el proceso de R-CNN más rápido. El algoritmo es bastante complejo y es necesario comprender cada detalle repetidamente. El R-CNN más rápido utiliza el modelo resNet101 como capa convolucional y la precisión puede alcanzar el 83,8% en el conjunto de datos voc2012, superando a yolo ssd y yoloV2. Su mayor problema es su baja velocidad. Sólo puede procesar 5 fotogramas por segundo, lo que no puede cumplir con los requisitos de tiempo real.
Yolo propone creativamente una etapa para superar las deficiencias comunes del algoritmo de detección de objetivos de dos etapas. Es decir, la clasificación y el posicionamiento de objetos se completan en un solo paso. Yolo devuelve directamente la posición y categoría del cuadro delimitador en la capa de salida, lográndolo en un solo paso. De esta forma, yolo puede alcanzar una velocidad de cálculo de 45 fotogramas por segundo, que puede cumplir plenamente con los requisitos en tiempo real (cuando alcanza los 24 fotogramas por segundo, el ojo humano lo considera continuo).
Su estructura de red es la siguiente:
Se divide principalmente en tres partes: capa convolucional, capa de detección de objetivos y capa de protección NMS.
Utilizando la red Google inceptionV1, correspondiente a la primera etapa en la figura anterior, hasta la capa 20. Esta capa realiza principalmente la extracción de características para mejorar la capacidad de generalización del modelo. Sin embargo, el autor modificó inicioV1. No utilizó la estructura del módulo inicial, sino que la reemplazó con convolución 1x1 y convolución 3x3 en paralelo. (Puede considerar usar solo una rama del módulo inicial, probablemente para simplificar la estructura de la red).
Después de cuatro capas convolucionales y dos capas completamente conectadas, finalmente se genera una salida de 7x7x30. El propósito de pasar primero por cuatro capas convolucionales es mejorar la capacidad de generalización del modelo. Yolo divide una imagen original de 448x448 en una cuadrícula de 7 × 7. Cada cuadrícula necesita predecir las coordenadas (x, y, w, h) de dos cuadros delimitadores, así como la confianza de los objetos contenidos en el cuadro y la probabilidad. que un objeto pertenece a cada una de las 20 categorías (los datos de entrenamiento de yolo son voc2012, que es un conjunto de datos que contiene 20 categorías). Entonces los parámetros correspondientes a una cuadrícula son (4x2+2+20) = 30. Como se muestra a continuación
Entre ellos, el elemento anterior indica si hay objetos marcados manualmente que caen en la cuadrícula. Si es así, es 1; de lo contrario, es 0. El segundo término representa la superposición entre el cuadro delimitador y el cuadro marcador verdadero. Es igual a la intersección de las áreas de los dos cuadros dividida por la suma de las áreas. Cuanto mayor sea el valor, más cerca estará el cuadro de su verdadera posición.
Información de clasificación: el conjunto de entrenamiento de objetivos de yolo es voc2012, que es un conjunto de datos de detección de objetivos de 20 categorías. Los conjuntos de datos de detección de objetivos más utilizados son los siguientes:
| Nombre | # Imágenes(trainval)| # Clases |Última actualización|
| / p>
| ImagenNet | 2014 |
|Cacao |
p >Hospital de mascotas Oxford-IIIT | 7K | 37 |
| KITTI Vision |
Cada cuadrícula también debe predecir a qué 20 pertenece a la probabilidad de una categoría. La información de clasificación es para cada cuadrícula, no para el cuadro delimitador. Entonces sólo necesitamos 20, no 40. El nivel de confianza es para el cuadro delimitador, que solo indica si hay un objeto en el cuadro. No es necesario predecir cuál de las 20 categorías es el objeto, por lo que solo se necesitan dos parámetros. Aunque la información de clasificación y la confianza son probabilidades, sus significados son completamente diferentes.
El propósito de la capa de filtrado es filtrar los más adecuados de múltiples resultados (múltiples cuadros delimitadores). Este método es básicamente el mismo que el de Faster R-CNN. Primero, los cuadros con puntuaciones inferiores al umbral se filtran y los cuadros restantes se someten a una supresión no máxima de NMS para eliminar los cuadros con una gran superposición (el algoritmo NMS específico se puede revisar en la sección Faster R-CNN anterior). De esta forma finalmente se obtiene la caja más adecuada y su categoría.
La función de pérdida de Yolo incluye tres partes: error de posición, error de confianza y error de clasificación. La fórmula específica es la siguiente:
El algoritmo de error cuadrático medio se utiliza para todos los errores. De hecho, creo que el error de posición debería utilizar el algoritmo de error cuadrático medio y el error de clasificación debería utilizar la entropía cruzada. Debido a que la posición del objeto solo tiene 4 parámetros y la categoría tiene 20 parámetros, sus sumas acumuladas son diferentes. Dar el mismo peso es claramente irrazonable. Entonces, el peso del error de posición en yolo es 5 y el peso del error de categoría es 1. Como no nos importan especialmente los cuadros delimitadores que no contienen objetos, le damos al error de confianza un peso de 0,5 para los cuadros delimitadores que no contienen objetos y un peso de 1 para los cuadros delimitadores que contienen objetos.
El R-CNN más rápido tiene mayor precisión de mapa y menor recuperación, pero es más lento. Aunque Yolo es rápido, su precisión y tasa de detección fallida no son satisfactorias. SSD combina sus ventajas y desventajas. Para una imagen de entrada de 300x300, puede alcanzar 58 cuadros por segundo (GPU Titan X) y 72,1% de mAP en la prueba de datos voc2007.
La estructura de red de la unidad de estado sólido es la siguiente:
Al igual que yolo, se divide en tres partes: capa de convolución, capa de detección de objetivos y capa de protección NMS.
El documento SSD utiliza la red básica de VGG16, que en realidad es un método común para casi todas las redes neuronales de detección de objetivos. Primero, se utiliza la red CNN para extraer características y luego se realiza el posterior posicionamiento del objetivo y reconocimiento de clasificación del objetivo.
Esta capa consta de cinco capas convolucionales y una capa de agrupación promedio. Se elimina la última capa completamente conectada. SSD cree que los objetos en la detección de objetivos solo están relacionados con la información circundante y sus campos receptivos no son globales, por lo que son innecesarios y no deben estar completamente conectados. Las características de las unidades de estado sólido son las siguientes.
Cada capa convolucional generará mapas de características con diferentes campos receptivos. Entrenar y predecir posiciones y categorías de objetivos en estos mapas de características de diferentes escalas puede lograr el propósito de la detección de múltiples escalas y superar el problema de la baja precisión de yolo en la identificación de objetos con relaciones de aspecto anormales. En yolo, solo se utiliza la última capa convolucional para entrenar y predecir la ubicación y categoría de destino. Este es un punto clave en el que SSD puede mejorar la precisión en comparación con yolo.
Como se muestra en la figura anterior, la detección y clasificación de objetivos se realizará en cada capa convolucional y, finalmente, el resultado final se filtrará por NMS y se generará. La detección de objetivos en mapas de características de múltiples escalas equivale a agregar muchos cuadros delimitadores de relación de aspecto, lo que puede mejorar en gran medida las capacidades de generalización.
Al igual que el R-CNN más rápido, SSD también propone el concepto de ancla. En el mapa de características generado por convolución, cada punto corresponde al punto central de una región de la imagen original. Tomando este punto como centro, construya seis puntos de anclaje con diferentes relaciones de aspecto y diferentes tamaños (llamados cuadros predeterminados en SSD). Cada ancla corresponde a cuatro parámetros de posición (x, y, w, h) y 21 probabilidades de clasificación (el conjunto de entrenamiento voc es un problema de 20 clasificaciones, más si el ancla es un fondo, ***21 clasificaciones). Como se muestra en la siguiente figura:
Además, durante la fase de entrenamiento, SSD posiciona la proporción de muestras positivas y negativas en 1:3. Dada una imagen de entrada del conjunto de entrenamiento y la región de verdad fundamental (cuadro de verdad fundamental) de cada objeto, se selecciona como muestra positiva la más cercana entre el cuadro predeterminado y el cuadro de verdad fundamental. Luego seleccione cualquiera de los cuadros predeterminados restantes con un pagaré superior a 0,5, y el pagaré del cuadro real es una muestra positiva. mientras que otros sirven como muestras negativas. Debido a que la mayoría de las cajas son muestras negativas, lo que provocará un desequilibrio positivo y negativo, la proporción positiva y negativa se mantendrá en 1:3 según la probabilidad de cada categoría de caja. SSD cree que esta estrategia mejora la precisión en un 4%.
Además, SSD utiliza mejora de datos. Genere parches con un pagaré de 0.1.30.50.70.9 entre ellos y el cuadro real del objeto objetivo, seleccione aleatoriamente estos parches para participar en el entrenamiento y gírelos aleatoriamente horizontalmente. SSD cree que esta estrategia mejoró la precisión en un 8,8%.
Es básicamente lo mismo que la capa protectora de yolo. De manera similar, los cuadros predeterminados con probabilidades de clase inferiores al umbral se filtran primero y luego se utiliza la supresión no máxima de NMS para filtrar los cuadros con mayor superposición. Es solo que SSD sintetiza el cuadro predeterminado de la salida de detección de objetivos en diferentes mapas de características.
SSD básicamente puede satisfacer las necesidades de detección de objetos en tiempo real en nuestros teléfonos móviles. Modelo oficial de detección de objetivos de TensorFlow SSD _ mobilenet _ v 1 _ Android _ export. Pb se implementa mediante el algoritmo SSD. Su red convolucional básica es mobileNet, que es adecuada para implementación y ejecución en terminales.
Para abordar los problemas de baja precisión de yolo, fácil detección fallida y pobre efecto en objetos con relaciones de aspecto anormales, se propuso yoloV2 basándose en las características de SSD. Adopta principalmente la estructura de red de yolo y realiza algunas optimizaciones y mejoras sobre esta base, de la siguiente manera.
La red utiliza Darknet-19: 19 capas, incluida una gran cantidad de convoluciones de 3×3. Al mismo tiempo, inceptionV1 agrega una capa de agrupación promedio global de núcleo de convolución 1x1 como referencia. Su estructura es la siguiente
Yolo y yoloV2 solo pueden reconocer 20 tipos de objetos. Para optimizar este problema, se propuso yolo9000, que puede reconocer 9000 tipos de objetos. Basado en yoloV2, se llevó a cabo una capacitación conjunta de imageNet y coco. Este método aprovecha al máximo el hecho de que imageNet puede reconocer 1000 objetos y coco puede detectar la ubicación del objetivo.
Cuando se entrena con imageNet, solo se actualizan los parámetros relacionados con la clasificación de objetos. Cuando se usa coco, todos los parámetros se actualizan.
Se puede decir que YOLOv3 cuelga directamente todos los algoritmos de detección de imágenes. En comparación con DSSD (Deconvolution SSD) y FPN (Feature Pyramid Network) del mismo período, la precisión es mayor o similar y la velocidad es 1/3.
Los cambios en YOLOv3 incluyen principalmente los siguientes puntos:
Pero si se necesita un marco de predicción más preciso y se utiliza COCO AP como estándar de evaluación, el rendimiento de precisión de YOLO3 es más débil. Como se muestra a continuación.
En la actualidad existen infinidad de algoritmos para modelos de detección de objetivos. En el campo de las dos etapas, Facebook propuso enmascarar R-CNN en 2017. CMU también propuso el algoritmo A-Fast-RCNN, que introduce el aprendizaje adversario en el campo de la detección de objetivos. Face ++ también propuso el R-CNN calvo, que analiza principalmente cómo R-CNN equilibra la precisión y la velocidad en la detección de objetos.
El sector de las estaciones de primer nivel también está en auge. En 2017, la Universidad Nacional de Seúl propuso el algoritmo R-SSD, que resuelve principalmente el problema de la mala detección de objetos de pequeño tamaño. El algoritmo RON propuesto por la Universidad de Tsinghua combina las ventajas de la nomenclatura de dos etapas y el método de una etapa, y presta más atención al posicionamiento de objetos a múltiples escalas y la extracción de muestras de espacio negativo.
Los algoritmos de aprendizaje profundo en el campo de la detección de objetivos requieren posicionamiento del objetivo y reconocimiento de objetos, y los algoritmos son relativamente complejos. En la actualidad, están surgiendo varios algoritmos nuevos uno tras otro, pero existe una fuerte continuidad entre los modelos. La mayoría de los algoritmos modelo se basan en ideas previas y se apoyan en los hombros de gigantes. Necesitamos conocer las características del modelo clásico, qué problemas se utilizan para resolver estos trucos y por qué deberían solucionarse. De esta manera podemos hacer inferencias y nunca cambiaremos nuestra religión. En resumen, las principales dificultades en el campo de la detección de objetivos son las siguientes:
Comprender los algoritmos de IA para la detección de objetivos: R-CNN, R-CNN más rápido, yolo, SSD, yoloV2.
Evolución de YOLOv1 a v3
Análisis súper detallado 1 de SSD-Tensorflow: ¿Cargando imágenes de prueba del modelo? /darknet/yolo/? /pjreddie/darknet
Referencia del proyecto C#:/alturosdestinations/alturos yolo
Publica una imagen de la práctica del proyecto.