Desafio Detecção Deepfake de R



Desafio Detecção Deepfake de R

Introdução

Trabalhar com conjuntos de dados de vídeo, particularmente no que diz respeito à detecção de objetos falsos baseados em IA, é muito desafiador devido à seleção adequada do quadro e à detecção de rosto. Para abordar esse desafio de r, pode -se usar os recursos oferecidos pelo OpenCV, magicke keras.

Nossa abordagem consiste nas seguintes etapas consequentes:

  • Leia todos os vídeos
  • capturar e extrair imagens dos vídeos
  • detectar rostos das imagens extraídas
  • Corte os rostos
  • Construa um modelo de classificação de imagem com Keras

Vamos introduzir rapidamente as bibliotecas de aprendizado sem profundidade que estamos usando. OpenCV é uma biblioteca de visão computacional que inclui:

Por outro lado, magick é a biblioteca de processamento de imagens de código aberto que ajudará a ler e extrair recursos úteis dos conjuntos de dados de vídeo:

  • Leia os arquivos de vídeo
  • Extraia imagens por segundo do vídeo
  • Corte os rostos das imagens

Antes de entrarmos em uma explicação detalhada, os leitores devem saber que não há necessidade de copiar pedaços de código-colas. Porque no closing da postagem, é possível encontrar um hyperlink para o Google Colab com a aceleração da GPU. Esse kernel permite que todos executem e reproduzam os mesmos resultados.

Exploração de dados

O conjunto de dados O fato de analisarmos a AWS, o Fb, a Microsoft, a parceria do comitê de direção de integridade da mídia da IA ​​e vários acadêmicos.

Ele contém vídeos falsos reais e gerados pela IA. O tamanho complete é superior a 470 GB. No entanto, o conjunto de dados da amostra de 4 GB está disponível separadamente.

Os vídeos nas pastas estão no formato de MP4 e tem vários comprimentos. Nossa tarefa é determinar o número de imagens para capturar por segundo de um vídeo. Normalmente, levamos de 1 a 3 fps para cada vídeo.

NOTA: Defina FPS como NULL se desejar extrair todos os quadros.

video = magick::image_read_video("aagfhgtpmv.mp4",fps = 2)
vid_1 = video((1))
vid_1 = magick::image_read(vid_1) %>% image_resize('1000x1000')

Vimos apenas o primeiro quadro. E quanto ao resto deles?

Olhando para o GIF, pode -se observar que algumas falsificações são muito fáceis de diferenciar, mas uma pequena fração parece bastante realista. Este é outro desafio durante a preparação dos dados.

Detecção de rosto

A princípio, os locais do rosto precisam ser determinados através de caixas delimitadoras, usando o OpenCV. Então, a Magick é usada para extraí -las automaticamente de todas as imagens.

# get face location and calculate bounding field
library(opencv)
unconf <- ocv_read('frame_1.jpg')
faces <- ocv_face(unconf)
facemask <- ocv_facemask(unconf)
df = attr(facemask, 'faces')
rectX = (df$x - df$radius) 
rectY = (df$y - df$radius)
x = (df$x + df$radius) 
y = (df$y + df$radius)

# draw with pink dashed line the field
imh  = image_draw(image_read('frame_1.jpg'))
rect(rectX, rectY, x, y, border = "pink", 
     lty = "dashed", lwd = 2)
dev.off()

Se os locais do rosto forem encontrados, é muito fácil extrair todos eles.

edited = image_crop(imh, "49x49+66+34")
edited = image_crop(imh, paste(x-rectX+1,'x',x-rectX+1,'+',rectX, '+',rectY,sep = ''))
edited

Modelo de aprendizado profundo

Após a preparação do conjunto de dados, é hora de construir um modelo de aprendizado profundo com as Keras. Podemos colocar rapidamente todas as imagens em pastas e, usando geradores de imagens, alimentar faces para um modelo de Keras pré-treinado.

train_dir = 'fakes_reals'
width = 150L
top = 150L
epochs = 10

train_datagen = image_data_generator(
  rescale = 1/255,
  rotation_range = 40,
  width_shift_range = 0.2,
  height_shift_range = 0.2,
  shear_range = 0.2,
  zoom_range = 0.2,
  horizontal_flip = TRUE,
  fill_mode = "nearest",
  validation_split=0.2
)


train_generator <- flow_images_from_directory(
  train_dir,                  
  train_datagen,             
  target_size = c(width,top), 
  batch_size = 10,
  class_mode = "binary"
)

# Construct the mannequin ---------------------------------------------------------

conv_base <- application_vgg16(
  weights = "imagenet",
  include_top = FALSE,
  input_shape = c(width, top, 3)
)

mannequin <- keras_model_sequential() %>% 
  conv_base %>% 
  layer_flatten() %>% 
  layer_dense(models = 256, activation = "relu") %>% 
  layer_dense(models = 1, activation = "sigmoid")

mannequin %>% compile(
  loss = "binary_crossentropy",
  optimizer = optimizer_rmsprop(lr = 2e-5),
  metrics = c("accuracy")
)

historical past <- mannequin %>% fit_generator(
  train_generator,
  steps_per_epoch = ceiling(train_generator$samples/train_generator$batch_size),
  epochs = 10
)

Reproduzir em um Caderno

Conclusão

Esta postagem mostra como fazer a classificação de vídeo de R. As etapas foram:

  • Leia vídeos e extraia imagens do conjunto de dados
  • Aplique OpenCV para detectar rostos
  • Extrair rostos através de caixas delimitadoras
  • Construir um modelo de aprendizado profundo

No entanto, os leitores devem saber que a implementação das etapas a seguir pode melhorar drasticamente o desempenho do modelo:

  • Extraia todos os quadros dos arquivos de vídeo
  • Carregue pesos pré-treinados diferentes ou use modelos pré-treinados diferentes
  • Use outra tecnologia para detectar rostos – por exemplo, “Detector de face do MTCNN”

Sinta -se à vontade para experimentar essas opções no DeepFake Detection Problem e compartilhar seus resultados na seção de comentários!

Obrigado pela leitura!

Correções

Se você vê erros ou deseja sugerir alterações, por favor criar um problema no repositório de origem.

Reutilizar

Texto e números são licenciados sob atribuição do Inventive Commons CC por 4.0. O código -fonte está disponível em https://github.com/henry090/deepfake-from-rsalvo indicação em contrário. Os números que foram reutilizados de outras fontes não se enquadram nesta licença e podem ser reconhecidos por uma nota em sua legenda: “Figura de …”.

Citação

Para atribuição, cite este trabalho como

Abdullayev (2020, Aug. 18). Posit AI Weblog: Deepfake detection problem from R. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2020-08-18-deepfake/

Citação Bibtex

@misc{abdullayev2020deepfake,
  creator = {Abdullayev, Turgut},
  title = {Posit AI Weblog: Deepfake detection problem from R},
  url = {https://blogs.rstudio.com/tensorflow/posts/2020-08-18-deepfake/},
  12 months = {2020}
}

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *