6.14.1 EP06_01 🟢 Avaliação de Segmentação por IoU (Intersection over Union)
Ao longo deste capítulo, diversas etapas do pipeline produzem máscaras binárias, como na segmentação de documentos, na localização de QRCodes e na detecção de defeitos. Para avaliar objetivamente a qualidade dessas segmentações, é necessário compará-las com uma máscara de referência (ground truth).
Uma das métricas mais utilizadas para esse fim é a IoU (Intersection over Union, ou Interseção sobre União), definida como a razão entre a área de interseção e a área de união de duas máscaras binárias. Quanto maior o valor da IoU, maior a concordância entre a segmentação produzida pelo algoritmo e a referência.
6.14.1.1 📋 Diretrizes de Implementação
- Dimensões: Ler os inteiros \(L\) (número de linhas) e \(C\) (número de colunas).
- Máscara de referência: Ler os \(L \times C\) elementos binários (0 ou 1) da matriz
ref. - Máscara predita: Ler os \(L \times C\) elementos binários (0 ou 1) da matriz
pred. - Interseção: Contar o número de posições \((i,j)\) para as quais
ref[i][j] = 1epred[i][j] = 1. - União: Contar o número de posições \((i,j)\) para as quais
ref[i][j] = 1oupred[i][j] = 1. - Caso degenerado: Se a união for igual a \(0\), definir \(\mathrm{IoU}=1{,}0\), pois ambas as máscaras são vazias.
- Cálculo: Caso a união seja maior que zero, calcular
\[ \mathrm{IoU}= \frac{|\mathrm{Intersecao}|} {|\mathrm{Uniao}|}. \]
- Classificação: Determinar a classificação qualitativa utilizando o valor de IoU antes do arredondamento.
- Arredondamento: Exibir a IoU com quatro casas decimais.
- Saída: Imprimir, nessa ordem, a interseção, a união, a IoU e a classificação.
6.14.1.2 📌 Restrições Computacionais
- Se a união for igual a \(0\), não deve ser realizada a divisão; a IoU deve ser definida como \(1{,}0\).
- As faixas de classificação utilizam comparações não estritas (\(\geq\)).
- A classificação deve ser realizada utilizando o valor da IoU em precisão completa, antes do arredondamento para exibição.
6.14.1.3 🧠 Fundamentação Teórica
A IoU é definida por
\[ \mathrm{IoU}= \frac{|R\cap P|} {|R\cup P|}, \]
em que:
- \(R\) representa o conjunto de pixels pertencentes à máscara de referência;
- \(P\) representa o conjunto de pixels pertencentes à máscara predita;
- \(|R\cap P|\) corresponde ao número de pixels pertencentes simultaneamente às duas máscaras;
- \(|R\cup P|\) corresponde ao número de pixels pertencentes a pelo menos uma das máscaras.
| Faixa de IoU | Classificação | Interpretação |
|---|---|---|
| \(\mathrm{IoU}\geq0{,}90\) | EXCELENTE |
Concordância muito elevada entre as máscaras. |
| \(0{,}70\leq\mathrm{IoU}<0{,}90\) | BOM |
Pequenas diferenças entre as máscaras. |
| \(0{,}50\leq\mathrm{IoU}<0{,}70\) | ACEITAVEL |
Concordância parcial entre as máscaras. |
| \(\mathrm{IoU}<0{,}50\) | RUIM |
Baixa concordância entre as máscaras. |
A IoU depende apenas da sobreposição entre as máscaras e, portanto, é independente do tamanho da imagem.
6.14.1.4 📦 Especificação de Entrada e Saída (VPL)
Entrada:
- Linha 1: inteiro \(L\).
- Linha 2: inteiro \(C\).
- Próximas \(L\) linhas: elementos binários (0 ou 1) da matriz
ref. - Próximas \(L\) linhas: elementos binários (0 ou 1) da matriz
pred.
Saída:
- Linha 1:
Intersecao: X - Linha 2:
Uniao: Y - Linha 3:
IoU: Z - Linha 4:
Classificacao: NOME
O valor de IoU deve ser impresso com quatro casas decimais.
6.14.1.5 📌 Exemplos
| Entrada | Saída | Observação |
|---|---|---|
| 2 2 1 1 0 0 1 0 0 0 |
Intersecao: 1 Uniao: 2 IoU: 0.5000 Classificacao: ACEITAVEL |
A metade da região de referência foi corretamente segmentada. |
| 2 2 0 0 0 0 0 0 0 0 |
Intersecao: 0 Uniao: 0 IoU: 1.0000 Classificacao: EXCELENTE |
Ambas as máscaras são vazias; por convenção, \(\mathrm{IoU}=1{,}0\). |
%%writefile EP06_01.py
# Código PythonWriting EP06_01.py
TestSuite("EP06_01.py").run()✔️ EP06_01.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP06_01.cases
🔍 Testando Python: EP06_01.py
⚠️ EP06_01.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.