PDI+VC · Exercício de Programação

EP06_01 — 🟢 Avaliação de Segmentação por IoU ( Intersection over Union )

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

  1. Dimensões: Ler os inteiros \(L\) (número de linhas) e \(C\) (número de colunas).
  2. Máscara de referência: Ler os \(L \times C\) elementos binários (0 ou 1) da matriz ref.
  3. Máscara predita: Ler os \(L \times C\) elementos binários (0 ou 1) da matriz pred.
  4. Interseção: Contar o número de posições \((i,j)\) para as quais ref[i][j] = 1 e pred[i][j] = 1.
  5. União: Contar o número de posições \((i,j)\) para as quais ref[i][j] = 1 ou pred[i][j] = 1.
  6. Caso degenerado: Se a união for igual a \(0\), definir \(\mathrm{IoU}=1{,}0\), pois ambas as máscaras são vazias.
  7. Cálculo: Caso a união seja maior que zero, calcular

\[ \mathrm{IoU}= \frac{|\mathrm{Intersecao}|} {|\mathrm{Uniao}|}. \]

  1. Classificação: Determinar a classificação qualitativa utilizando o valor de IoU antes do arredondamento.
  2. Arredondamento: Exibir a IoU com quatro casas decimais.
  3. 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\).
🎮 Simulador EP06_01: IoU (Intersection over Union) IoU = |A ∩ B| / |A ∪ B|
0
0
6
Desloque e redimensione a máscara predita para avaliar o alinhamento.
Referência (A)
Predita (B)
Sobreposição (A ∩ B)
–
Figura 6.21: Simulador EP06_01: IoU entre máscara de referência e máscara predita
%%writefile EP06_01.py
# Código Python
Writing 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.