Severstal

Heitor Victor

2019-11-12

Este relatório mostra como foi feita a manipulação e treinamento de uma rede neural convolucional para dados de imagens referente a disciplina de redes neurais para graduação do departamento de estatística da UFPE. O dataset utilizado para esta aplicação encontra-se no Kaggle e está relacionado a competição Severstal: Steel Defect Detection. O problema desta competição é: Detectar se uma barra de aço possui algum defeito, e caso seja encontrado, identificar qual defeito é esse.

Por conta do volume de dados ser muito grande e consequentemente a necessidade de um hardware mais potente, o relatório irá se ater a manipulação das imagens e a parte de treinamento do modelo será somente ilustrativa e para a primeira etapa de modelagem que é identificar se a imagem possui defeito.

Carregando os dados

## Parsed with column specification:
## cols(
##   ImageId_ClassId = col_character(),
##   EncodedPixels = col_character()
## )
## # A tibble: 6 x 2
##   ImageId_ClassId EncodedPixels                                            
##   <chr>           <chr>                                                    
## 1 0002cc93b.jpg_1 29102 12 29346 24 29602 24 29858 24 30114 24 30370 24 30…
## 2 0002cc93b.jpg_2 <NA>                                                     
## 3 0002cc93b.jpg_3 <NA>                                                     
## 4 0002cc93b.jpg_4 <NA>                                                     
## 5 00031f466.jpg_1 <NA>                                                     
## 6 00031f466.jpg_2 <NA>
## [1] "/opt/datasets/steel/train_images_dir/0002cc93b.jpg"
## [2] "/opt/datasets/steel/train_images_dir/00031f466.jpg"
## [3] "/opt/datasets/steel/train_images_dir/000418bfc.jpg"
## [4] "/opt/datasets/steel/train_images_dir/000789191.jpg"
## [5] "/opt/datasets/steel/train_images_dir/0007a71bf.jpg"
## [6] "/opt/datasets/steel/train_images_dir/000a4bcdd.jpg"
## Image. Width: 1600 pix Height: 256 pix Depth: 1 Colour channels: 3

Veja que a imagem carregada tem resolucao 256x1600. Isso é importante na hora de treinar o modelo para implementar o array.

Criando a mascará que identifica o erro na imagem

Agora, vamos carregar os dados que se referem as máscaras que indicam, caso haja defeito em alguma imagem, onde este defeito se encontra. Vamos fazer um exemplo com uma imagem primeiro.

## Warning: `as_tibble.matrix()` requires a matrix with column names or a `.name_repair` argument. Using compatibility `.name_repair`.
## This warning is displayed once per session.

Agora, vamos automatizar o processo. Vale frizar que existem imagens com 1 ou mais erros. A função a ser criada possui como entrada o id da imagem que se quer plotar. A função a seguir também utiliza um objeto global, ou seja, você deve ter executado o script até aqui para que funcione corretamente. Além disso, a função possui um argumento chamado only.mask, caso seja TRUE, ele irá plotar somente a(s) máscara(s). Por default, only.mask = TRUE.

Agora vamos criar a função para plotar os defeitos. (A hora da verdade !)

## -------------
##    Legend
## -------------
##   Colour Target
## 1 Orange      3
## 2   Blue      4
## -------------

Preparação dos dados para modelagem

Agora vamos preparar o banco de dados para modelagem. Antes, uma singela tabela de frequências com o número de defeitos de cada espécies contidas no banco.

## # A tibble: 4 x 3
##   tg        n      p
##   <chr> <int>  <dbl>
## 1 3      5150 0.410 
## 2 1       897 0.0714
## 3 4       801 0.0637
## 4 2       247 0.0197

Para criar o banco de dados, precisamos transformar os dados de cada imagem em uma matriz, sendo que, na base de dados, cada foto será uma linha, e o número de colunas para cada imagem será de 256x1600.

Note que ao selecionarmos o vetor com os labels, os mesmos não serão os correspondetes as imagens de forma correta. Será feito então uma manipulação para corrigir este problema.

Agora, vamos treinar o modelo.

testando o modelo.

## $loss
## [1] 0.6932695
## 
## $accuracy
## [1] 0.4933333