Precisão média na detecção de objetos

8

Estou bastante confuso sobre como posso calcular os valores de AP ou mAP, pois parece haver alguns métodos diferentes. Eu quero especificamente obter os valores de AP / mAP para detecção de objetos.

Tudo o que tenho certeza é:

Rechamada = TP / (TP + FN), Precisão = TP / (TP + FP)

Por exemplo, se eu tiver apenas 1 turma para avaliar e digitar 500 imagens de teste. Cada imagem de teste pode ter um número diferente de previsões (propostas de caixa delimitadora), mas cada imagem possui apenas uma caixa delimitadora de base.

Imagem 1: [classe, probabilidade, x1, y1, x2, y2], [classe, probabilidade, x3, y3, x4, y4], [classe, probabilidade, x5, y5, x6, y6], [classe, probabilidade, x7, y7, x8, y8], ...

Imagem 2: [classe, probabilidade, x1, y1, x2, y2], [classe, probabilidade, x3, y3, x4, y4], ...

. . . (e assim por diante)

* apenas um exemplo, eu inventei isso

Eu sei que para obter TP, teríamos que encontrar as IOUs de cada previsão e contar as acima de um limite selecionado como 0,5 (se tivermos várias previsões com IOUs acima do limite, contamos apenas uma vez e tratamos as outras como FP?).

É aqui que me intriga:

  1. O TP + FP = número de previsões feitas para cada imagem?

  2. Como todas as imagens de teste não têm negativos, TP + FN = 500?

  3. É calculado por imagem ou por classe?

  4. Alguém poderia me informar um guia passo a passo para obter o AP / mAP com base no meu exemplo? Acho que a parte mais ambígua é se fazemos por imagem ou por classe (ou seja, 500 imagens de uma só vez).

A maioria dos guias / documentos que encontrei são muito direcionados à recuperação de informações. Gostaria de receber alguma ajuda nisso.

* Nota: estou testando-o em alguns conjuntos de dados personalizados. Sei que o PASCAL VOC tem algum código para fazê-lo, mas quero escrever o código pessoalmente, personalizado para meus próprios dados.

Usuário1915
fonte
Meu repositório do github tem uma explicação de IOU, Precisão, Rechamada, Precisão Média e mAP. Ele também possui um código que avalia quaisquer detectores de objetos.
Rafael Padilla

Respostas:

7

Eu acho que a resposta aceita direciona o caminho errado para calcular o mAP. Porque, mesmo para cada classe, o AP é o produto médio. Na minha resposta, ainda incluirei a interpretação de IOU, para que os iniciantes não tenham dureza de entendê-la.

umaobpbt

umao=UMAreuma(bpbt)UMAreuma(bpbt)

MM

Índice de Objeto, Confiança, verdade fundamental

Caixa delimitadora 1, 0,8, 1

Caixa delimitadora 1, 0,7, 1

Caixa delimitadora 2, 0,1, 0

Caixa delimitadora 3, 0,9, 1

E então, você precisa classificá-los pela confiança de alto a baixo. Depois, você só precisa calcular a curva PR como de costume e descobrir 11 resultados de precisão interpolados nesses 11 pontos de recuperação iguais a [0, 0,1, ..., 1]. (Os métodos calculados detalhados estão aqui ) para múltiplas detecções de uma única caixa delimitadora, por exemplo, a caixa delimitadora 1 no meu exemplo, nós o contaremos no máximo como correto uma vez e todos os outros como Falso. Em seguida, você percorre 20 classes e calcula a média delas. Então você obtém seu mapa.

E também, por enquanto, torcemos um pouco esse método para encontrar nosso mAP. Em vez de usar 10 pontos de interrupção de recall, usaremos o número verdadeiro K de classe específica e calcularemos o precisão interpolado. ou seja [0,1 / K, 2 / K ...]

Li haonan
fonte
que grande explicação simples
Amitai
6

É assim que o PASCOL-VOC 2012 e o MS-COCO calculam o mAP, pseudo-código, conforme a seguir:

For each single class of object,

iterate through entire list of predictions for all images

TP = [0] * number of predictions
NP = [0] * number of predictions

for i, prediction in enumerate(predictions): # sorted by prediction confidence, descended

    try to find the ground truth with same class and largest IoU:

        if IoU > threshold(0.5 in PASCOL VOC 2012)

            if ground truth has not been assigned yet:

                assign this ground truth to the prediction
                TP[i] = 1      

        else: # corresponding ground truth has been assigned or IoU < threshold
            FP[i] = 1

    not find:
        FP[i] = 1

then calculate FN = number of unassigned ground truth

Precision = TP/(TP+FP)
Recall = TP/(TP+FN)

Para obter AP, primeiro suavize a curva PR e depois calcule a área sob a curva. Para obter o mAP, repita as etapas acima para todas as classes e faça a média delas.

Referência:

Versão em Python da Métrica de Avaliação PASCOL VOC 2012: https://github.com/Cartucho/mAP

Kit de ferramentas original do PASCOL VOC 2012 (em MATLAB): https://github.com/Cartucho/mAP

MSCOCO original: http://cocodataset.org/#detection-eval

Usuário1915
fonte
e se a caixa prevista sobrepuser dois objetos de verdade, para qual objeto você testa sobreposição?
Curioso
1
AP = TP/(TP+FP)está incorreto. Em vez disso Precision = TP/(TP+FP).
Franck Dernoncourt 23/06
Isto é completamente falso. A precisão média é calculada desta maneira: medium.com/@jonathan_hui/…
Curioso
3

A palestra "Avaliação 12: precisão média média" de Victor Lavrenko contém um slide que explica muito claramente o que é Precisão Média (AP) e Precisão Média Média (mAP) para o caso de recuperação de documentos:

insira a descrição da imagem aqui

Para aplicar o slide à detecção de objeto: documento relevante = caixa delimitadora prevista cuja IoU é igual ou acima de algum limite (normalmente 0,5).

IoU = Intersecção sobre União, veja a imagem abaixo para uma definição visual:

insira a descrição da imagem aqui

Exemplo de cálculo de IoU em uma imagem real:

insira a descrição da imagem aqui

( fonte da imagem )

FYI: Precisão Média Média vs Classificação Recíproca Média

Franck Dernoncourt
fonte
0

Embora o @ User1915 tenha encontrado a resposta sozinho, gostaria de deixar algo para os interessados.

Aqui está a minha resposta para as perguntas acima:

Q1: o TP + FP = número de previsões feitas para cada imagem?

Sim. ( Como o número de TP é limitado, quanto mais previsões você fizer, menor será a precisão. )

P2: Como todas as imagens de teste não têm negativos, TP + FN = 500?

Sim. ( Uma vez que existe apenas uma caixa verificada de base por imagem )

Q3: é calculado por imagem ou por classe?

Por turma.

Q4: Alguém poderia me informar um guia passo a passo para obter o AP / mAP com base no meu exemplo? Acho que a parte mais ambígua é se fazemos por imagem ou por classe (ou seja, 500 imagens de uma só vez).

Veja a publicação de @ User1915 acima.

Response777
fonte