[Notas varias] Método NMS y serie R-CNN, SSD, ideas generales de la serie Yolo


Todavía necesito aprender algunos métodos básicos de detección de objetivos.


1. Supresión no máxima (NMS)

Los métodos de detección de objetivos basados ​​en anclas suelen generar cajas de anclas de alguna forma (como la búsqueda selectiva, etc., o de una forma más sencilla):

De una forma sencilla: preestablecemos algunas relaciones de escala (escala, si ∈ ( 0 , 1 ] , m s_i\in(0,1], msyo( 0 ,1 ] ,m ) y algunas relaciones de aspecto (relación de aspecto,ri > 0 , n r_i>0, nryo>0 ,n ) Para evitar una complejidad computacional excesiva,solo consideramos todas las combinaciones de diferentes relaciones de aspecto bajo la misma relación de zoom, y todas las combinaciones de diferentes relaciones de zoom bajo la misma relación de aspecto, por ejemplo:
( s 1 , ri ) i = 1 n y ( si , r 1 ) i = 2 m (s_1,r_i)_{i=1}^n y (s_i,r_1)_{i=2}^{m}( s1,ryo)yo = 1ny ( syo,r1)yo = 2m
Entonces hay hw ( m + n − 1 ) hw(m+n-1)h w ( metro+norte1 ) Ancla, dondeh, wh,wh ,w es la altura y el ancho de la imagen.

), y luego generar categorías predichas y compensaciones para estos cuadros ancla.

Sin embargo, muchos cuadros ancla pueden superponerse y representar el mismo objeto. En este momento, para eliminar esta repetición, introdujimos el método de supresión no máxima (Non-maximum supression).

Los pasos de operación de NMS son los siguientes:

  1. Todos los cuadros delimitadores predichos que no son de fondo se clasifican en orden descendente de confianza, lo que da como resultado una lista LLl _
  2. de LLSeleccione el cuadro ancla B 1 B_1con la confianza más alta en LB1, luego compare todo B_1 con B 1B1El IoU es mayor que un cierto umbral θ \thetaSe eliminan todos los cuadros de anclaje de θ , es decir, se suprimencuadros delimitadoresno máxima.
  3. Seleccione el siguiente cuadro ancla con la segunda confianza más alta B 2 B_2B2, repita los pasos anteriores hasta que se hayan seleccionado todos los cuadros de anclaje, lo que significa que no hay ningún par de cuadros de anclaje cuya similitud sea mayor que el umbral.

Implementación de código: (consulte "Aprendizaje profundo práctico")


```python
import torch 

#定义计算IoU函数
def box_iou(boxes1,boxes2):
    '''
    input:
    boxes1,boxes2:输入的锚框,每个boxes的shape(box_number,4),其中
    4代表:xmin,ymin,xmax,ymax
    output:boxes1和boxes2中两两框的iou torch.Tensor
    注意:两两框的意思是假设boxes1有m个,boxes2有n个,则计算结果应是mn个.
    '''
    #计算每个box的面积
    box_area = lambda boxes : ((boxes[:,2] - boxes[:,0]) * 
                                (boxes[:,3] - boxes[:,1])) #box_area:(box_number,)

    area1 , area2 = box_area(boxes1), box_area(boxes2)

    #计算对应锚框的交集部分
    inter_upleft = torch.max(boxes1[:,None,:2],boxes2[:,:2]) #交集部分左上角坐标,就是比较两个框的(x_min,y_min)的较大者
    #特别注意:None的用法是扩充维度,也就是对每一个boxes1中的框,将所有的boxes2进行比较,下同
    inter_downright = torch.min(boxes1[:,None,2:],boxes2[:,2:]) #同理 比较(x_max,y_max)的较小者
    inters = (inter_downright - inter_upleft).clamp(min=0) #clamp是筛选大于0的值,小于0的输出0

    inter_area = inters[:,:,0] * inters[:,:,1] #交集部分面积 shape(box_number1,box_number2) 下同

    union_area = area1[:,None] + area2 - inter_area #并集面积 None扩充维度,为了维度一直相除

    return inter_area / union_area 


#定义NMS
def NMS(boxes,scores,threshold):
    '''
    input:
    boxes:anchor boxes,shape(number,4)
    scores:置信度 (numbers,)
    threshold:阈值 float
    output:筛选出的anchor box的index
    '''
    #先按置信度大小对所有锚框排序 降序 返回索引值
    B  = torch.argsort(scores,dim=-1,descending=True)

    keep = [] #要保留的box的index

    while B.numel() > 0: #还没筛完
        i = B[0] #选定当前置信度最高的
        keep.append(i) #加入
        
        if B.numel() == 1:
            break #只剩一个就完毕

        iou = box_iou(boxes[i,:].reshape(-1,4),
                        boxes[B[1:],:].reshape(-1,4)).reshape(-1) #计算选定框和剩余框的iou,reshape(-1)相当于flatten

        indexs = torch.nonzero(iou <= threshold).reshape(-1) #iou <= threshold是bool值,
        # 返回的是为True的值得索引,也就是满足小于阈值的索引

        B = B[indexs + 1] # 相当于是B = B[indexs],是筛选,然后将索引都加1,表示移动,删除掉已经计算完的基准框:B = B[indexs + 1]

    return torch.tensor(keep) 

2.R-CNN,RCNN rápido 和RCNN más rápido

2.1 RCNN

El diseño de RCNN combina la búsqueda selectiva y SVM, que se divide aproximadamente en los siguientes pasos:

  1. Usando la búsqueda selectiva en la imagen de entrada, se proponen aproximadamente 2k regiones propuestas.

La idea general de la búsqueda selectiva:
1. Generar conjunto de regiones RRR
2. Calcular la similitud de cada región adyacente en el conjunto de regionesS = { s 1 , . . . } S=\{s_1,...\}S={ s1,. . . }
3. Encuentre las dos áreas con la mayor similitud, combínelas en un nuevo conjunto y agréguelas aRRR
4. EliminarSSSubconjuntos relacionados con el nuevo conjunto en S
5. Repetir 2~4 hastaSSS está vacío ¿
Hay alguna idea de NMS?

  1. Después de una CNN preentrenada, se extraen las características de cada cuadro
  2. Entrene un clasificador SVM desde cero para clasificar las características extraídas
  3. Utilice la regresión lineal para predecir las compensaciones del cuadro delimitador

inserte la descripción de la imagen aquí

2.2 RCNN rápido

Debido a que la eficiencia de RCNN es demasiado baja, debido a que las características se calculan para cada cuadro candidato, es muy redundante. Por lo tanto, Fast RCNN solo extrae características de la imagen completa. Aunque la búsqueda selectiva todavía se usa para seleccionar cuadros candidatos, estos cuadros son Se proyecta en el mapa de características para cálculos posteriores.

Los pasos generales son los siguientes:

  1. Búsqueda selectiva, obtenga alrededor de 2k cajas de candidatos
  2. Use CNN para extraer las características de la imagen, asumiendo que la salida es 1 × c × h 1 × w 1 1\times c \times h_1\times w_11×C×h1×w1
  3. Como se mencionó anteriormente, el marco candidato se escala al mapa de características. Por ejemplo, el tamaño del mapa de características es 0,1 veces mayor que el de la imagen original, y la respuesta de tamaño del marco candidato se reduce a 0,1 veces. Sin embargo, el tamaño del marco candidato es diferente. Con el fin de unificar la salida, para facilitar los cálculos posteriores, agregue ROI Pooling . ROI Pooling agrupa la proyección del área candidata en el mapa de características y genera el mismo tamaño h 2 × w 2 h_2\times w_2h2×w2.Suponga que el área candidata tiene nnn , la salida se convierte enn × c × h 2 × w 2 n\times c \times h_2\times w_2norte×C×h2×w2.
  4. Transforme la forma de salida en n × dn ​​​​\times d a través de una capa completamente conectadanorte×d , donde el hiperparámetroddd depende del diseño del modelo
  5. Prediga la categoría y el tamaño de cada caja candidata por separado Después de dos ramas, una genera n × qn \times qnorte×q ,qqq es el número de categorías, otra salidan × 4 n \times 4norte×4 y 4 se refieren a la posición de bbox respectivamente.

inserte la descripción de la imagen aquí

En cuanto a cómo el ROI Pooling convierte diferentes entradas en la misma salida, se aprenderá en el futuro.

2.3 RCNN más rápido

Todavía hay demasiadas casillas candidatas para la búsqueda selectiva. Por lo tanto, Faster RCNN simplemente usa la red de propuesta de región (RPN) en lugar de la búsqueda selectiva para reducir el número de casillas de anclaje. Por supuesto, RPN realiza capacitación adicional.

inserte la descripción de la imagen aquí

La capa convolucional de la red propuesta de región es una capa convolucional completa, es decir, la capa convolucional se utiliza para reemplazar la capa FC en la red convolucional ordinaria. Los pasos generales de RPN:

  1. La entrada es el mapa de características, el FCN usa un kernel 3x3, el relleno es 1 y se supone que el canal de salida de la capa convolucional del RPN es ccc , entonces cada unidad en el mapa de características tiene una longitud decccaracterísticas de c .
  2. Centre cada píxel del mapa de funciones para generar múltiples cuadros de anclaje de diferentes tamaños y relaciones de aspecto y etiquételos
  3. Use la longitud de la celda del centro del cuadro de anclaje ccLas características de c , respectivamente, predicen la categoría binaria (objetivo o fondo) y el cuadro delimitador del cuadro de anclaje
  4. Con NMS, elimine resultados similares de los cuadros delimitadores predichos para los que la clase predicha es el objetivo

El resto son iguales a Fast RCNN.

3. SSD (detección de fotogramas múltiples de disparo único)

La idea básica de SSD es de una etapa, ya no usa RPN para generar cuadros delimitadores. Usa una estructura piramidal similar a la extracción de mapas de características de diferentes escalas, y usa el método simple de generar anclas mencionado al principio en cada característica. mapa Genere algunos cuadros de anclaje en cada píxel, prediga cada cuadro de anclaje y, finalmente, use NMS y la detección de confianza para determinar el cuadro candidato final.

Naturalmente, un mapa de funciones grande puede detectar objetivos pequeños, y un mapa de funciones pequeño tiene un campo receptivo más grande y puede detectar objetivos grandes.

El bloque de red básico generalmente usa VGG truncado o ResNet.

inserte la descripción de la imagen aquí

4. Serie Yolo

4.1 Yolo v1

1. La idea general
A diferencia del método anterior, yolo v1 no tiene anclas. Divide uniformemente una imagen en S × SS\times SS×Bloque S , si el centro del objetivo de GT aparece en un bloque determinado, entonces este bloque esresponsable dela detección de este objetivo.

Dividir uniformemente una imagen en bloques. El autor cree que esto puede captar mejor la expresión generalizada del objetivo, y debido a que la imagen completa se usa como entrada, se puede aprender la información de contexto de categoría y apariencia.

en S × SS\veces SS×Entre los bloques S , cada bloque prediceBBB bboxes y niveles de confianza, un bbox usa cuatro cantidadesx , y , w , hx,y,w,hx ,y ,w ,h significa, presta atención ax , yx,yx ,y se normalizacon respecto al tamaño del bloque, mientras quew, hw,hw ,h se normalizaen relación con el tamaño de la imagen completa.

La confianza refleja el grado de confianza de que la caja contiene un objetivo (pero no clasifica, no distingue objetivos) , registrado como P r (Objeto) ∗ IOU predtruth Pr(Object)*IOU_{pred}^{truth}P r ( Objeto ) _ _ _ _ _YO TU _antes de _ _ _la verdad _ _ _,其中P r ( O bjeto ) ∈ { 0 , 1 } Pr(Objeto)\in\{0,1\}P r ( Objeto ) _ _ _ _ _{ 0 ,1 } , es 1 cuando contiene un objetivo y es 0 cuando no contiene un objetivoIOU predtruth ∈ [ 0 , 1 ] IOU_{pred}^{truth}\in[0,1]YO TU _antes de _ _ _la verdad _ _ _[ 0 ,1 ] representa la relación de intersección y unión del marco predicho y GT.

Además, cada bloque también predice CCLa probabilidad de las categorías C , es decir,P r ( Classi ∣ O bject ) , i = 1 , 2 , . . . , C Pr(Class_i|Object),i=1,2,...,CP r ( C l a s syoO b j e c t ) ,i=1 ,2 ,. . . ,C (pertenece a la categoría C i C_isi hay un objetivoCyoLa probabilidad).

Por lo tanto, existe C i C_i en cada bloqueCyo类别目标的概率定义为:
P r ( C lassi ∣ O bject ) P r ( O bject ) ∗ IOU predtruth = P r ( C lassi ) ∗ IOU predtruth Pr(Class_i|Object)Pr(Object)*IOU_{pred} ^{verdad}=Pr(Clase_i)*IOU_{pred}^{verdad}P r ( C l a s syoO b j e c t ) P r ( O b j e c t )YO TU _antes de _ _ _la verdad _ _ _=P r ( C l a s syo)YO TU _antes de _ _ _la verdad _ _ _

La forma del mapa del resultado de la predicción final es ( S , S , ( 5 B + C ) ) (S,S,(5B+C))( S ,S ,( 5B _+C ) ) , como se muestra en la siguiente figura:
inserte la descripción de la imagen aquí

2. Estructura de la red

La estructura de la red está tomada de GoogLeNet, diseñada para ImageNet, la entrada es 448 × 448 448\times4484 4 8×4 4 8.
inserte la descripción de la imagen aquí
Tenga en cuenta que la última capa lineal asigna 4096 vectores a7× 7 × 30 7\times7\times307×7×3 0 tensor, es decir, la imagen se divide en 49 bloques, y cada bloque predice 2 bboxes y 20 categorías.

El autor usa las primeras 20 capas convolucionales (más la capa de agrupación promedio y la capa completamente conectada) para realizar un entrenamiento previo en ImageNet, y la entrada para el entrenamiento previo es 224, 224 224,2242 2 4 ,2 2 4 , duplique la longitud y el ancho durante la detección y agregue capas convolucionales y lineales adicionales.

3. Función de pérdida

Reinterpretación de la responsabilidad : esperamos que solo un bbox sea responsable del objetivo predicho. ¿Cómo especificar qué bbox es responsable del objetivo? El responsable es el que tiene el GT IoU más grande. Por lo tanto, al calcular la pérdida, solo consideramos al responsable para el objetivo La diferencia entre el resultado del cálculo de bbox y GT.

La pérdida total toma la forma de pérdida cuadrada:

inserte la descripción de la imagen aquí

En él: I iobj \mathbb I_i^{obj}Iio b jIndica el iiEl bloque i tiene una función indicadora del objetivo,I i , jobj \mathbb I_{i,j}^{obj}Iyo , jo b jIndica el iibloqueopor jjLa función indicadora responsable de j bboxes,λ noobj = 0.5 \lambda_{noobj}=0.5yon o b j _=0.5 es reducir el enfoque en la predicción de clase de fondo.

1. ¿Por qué el cálculo de los errores de largo y ancho debe tener la forma de un signo de raíz
? Porque visualmente, suponiendo que para el mismo desplazamiento de bbox, el error para objetivos pequeños es más obvio y el error para objetivos grandes no lo es tanto obvio Para acercarse a este punto, no es apropiado usar una función proporcional, es decir, tiene un mejor efecto en la detección de objetivos pequeños con un error mayor bajo el mismo desplazamiento, por lo que una función con un se necesita la segunda derivada menor que 0. y = x 1 / 2 y=
x ^{1/2}y=X1 / 2 Para la misma cantidad de cambio, la variable dependiente correspondiente a la variable independiente grande es pequeña.

2. Una pregunta
¿Hay algún problema con el superíndice y el subíndice del signo de sumatoria?Debería ser S 2 − 1 y B − 1 S^2-1 y B-1S21 y B1

4.2 Yolo v2

El diagrama de bloques proviene del maestro superior de la estación B "Thunderbolt Wz"

inserte la descripción de la imagen aquí

En comparación con Yolo v1, Yolo v2 tiene varias mejoras:

1. Norma de lote

Se agregó BN, dado que BN puede desempeñar un papel de regularización, se elimina Dropout.

2. Clasificador de alta resolución

Anteriormente, Yolo v1 realizó un entrenamiento previo de clasificación a media resolución, esta vez directamente a 448 × 448 448 \times 4484 4 8×Pre-entrenamiento en ImageNet a una resolución de 4 4 ​​8 .

3.Conv con anclas

El autor cree que el efecto de predecir las coordenadas centrales y la longitud y el ancho de cada bloque es relativamente pobre, y es mejor usar el ancla para predecir el desplazamiento, y es más fácil de aprender.

4. Grupos de dimensiones

Entonces, ¿cómo obtener anclajes? A diferencia de la serie RCNN anterior (algunos de ellos se preestablecen manualmente, otros se aprenden), Yolo v2 adopta el método de agrupación k-means, que es agrupar en el bbox de GT para obtener conocimiento a priori.

El método tradicional de agrupamiento de k-medias utiliza la distancia euclidiana para medir la distancia. El autor cree que esto conducirá a un mayor error en el cuadro grande. Dado que nos preocupamos por IoU, también podríamos usar IoU para definir la distancia: d ( caja , centroide
) = 1 − I o U ( caja , centroide ) d(caja,centroide)=1-IoU(caja,centroide)d ( caja , _ _c e n t r o i d )=1Yo o U ( caja , _ _c e n t r o i d )

Los experimentos han demostrado que cuantos más grupos, mejor, k = 5 k=5k=5 es una mejor compensación entre precisión y complejidad:

inserte la descripción de la imagen aquí

5. Predicción de ubicación directa

La aplicación directa del ancla provocará la inestabilidad del modelo. Esta inestabilidad proviene de la predicción del punto central del bbox. La razón es que las coordenadas del centro obtenidas en base a la predicción del ancla se calculan de la siguiente manera: x = ( tx ∗
wa ) + xay = ( ty ∗ ha ) + yax=(t_x*w_a)+x_a\\ y=(t_y*h_a)+y_aX=( txwun)+Xuny=( ttuhun)+yun
其中( tx , ty ) (t_x,t_y)( tx,ttu) es el valor de compensación previsto,( wa , ha ) (w_a,h_a)( wun,hun) es el ancho y alto del ancla,( xa , ya ) (x_a,y_a)( Xun,yun) es el centro del ancla.

Esta fórmula no tiene límite de rango de valores, específicamente ( tx , ty ) (t_x,t_y)( tx,ttu) No hay límite, esto hará que el cuadro salte a cualquier lugar de la imagen, así que ten cuidado conttestá restringido.

Específicamente, para un bloque, suponga que su desplazamiento con respecto a la esquina superior izquierda de la imagen completa es cx, cy c_x, c_yCx,Ctu, la altura y el ancho del ancla son pw, ph p_w, p_hpagw,pagh, el valor predicho es ( tx , ty ) (t_x,t_y)( tx,ttu) , entonces el centro de la caja b pronosticada se desplazapor bx, por b_x, b_ybx,btu(tenga en cuenta que sigue siendo un desplazamiento) y alto y ancho bh, bw b_h, b_wbh,bwy confianza bo b_obopara:

inserte la descripción de la imagen aquí

donde σ \sigmaσ es la función sigmoidea.
inserte la descripción de la imagen aquí

6. Características de grano fino

Para detectar objetivos pequeños, se necesitan mapas de características de bajo nivel, por lo que el autor propone PassThrough Layer para fusionar características de bajo nivel y mapas de características de alto nivel.

Específicamente, la red troncal usa DarkNet19, y la dimensión del mapa de características de una determinada capa en el medio es (26, 26, 512). Primero use 1x1conv para reducir la dimensión a (26, 26, 64), y luego remodele en (13, 13, 256)

( H , W , C ) − > ( H / 2 , W / 2 , 4 C ) (H,W,C)->(H/2,W/2,4C)( H ,W ,c ) ->( H / 2 ,con 2 , _4c ) _

Fusión con la salida de alto nivel (13,13,1024) (concat en la dimensión de características) para obtener un mapa de características de (13,13,256+1024).

7. Entrenamiento multiescala

En lugar del tamaño de entrada fijo, el tamaño de entrada cambia aleatoriamente cada 10 épocas y el cambio es un múltiplo de 32 (porque la entrada original es 416, la salida final de la red es 13 y el factor de escala es 32).

¿Por qué se pueden introducir diferentes tamaños?
Al observar el diagrama de bloques, se muestra que Yolo v2 es una red totalmente convolucional, por lo que puede tener cualquier entrada.

4.3 Yolo v3

Reemplace DarkNet19 con DarkNet53. Todavía use el agrupamiento k-means para calcular anclas, la forma de calcular el desplazamiento es la misma que v2

El marco general es el siguiente:

Citado de yolov3

inserte la descripción de la imagen aquí
Predecir uno, dos y tres tienen diferentes tamaños (tenga en cuenta que se han muestreado y fusionado con características de bajo nivel) y pueden detectar objetivos de diferentes escalas.

En cuanto a la función de pérdida, yolo v4, v5, X, llénala cuando tengas tiempo.

Supongo que te gusta

Origin blog.csdn.net/wjpwjpwjp0831/article/details/121906657
Recomendado
Clasificación