30.7 C
Colombia
lunes, julio 7, 2025

Desafío de detección de deepfake de R



Desafío de detección de deepfake de R

Introducción

Trabajar con conjuntos de datos de vídeo, particularmente con respecto a la detección de objetos falsos basados ​​en IA, es un gran desafío debido a la selección adecuada de fotogramas y la detección de rostros. Para abordar este desafío desde R, se pueden hacer uso de las capacidades que ofrece OpenCV, magicky keras.

Nuestro enfoque consta de los siguientes pasos consiguientes:

  • lee todos los vídeos
  • capturar y extraer imágenes de los movies
  • detectar rostros a partir de las imágenes extraídas
  • recortar las caras
  • construir un modelo de clasificación de imágenes con Keras

Presentemos rápidamente las bibliotecas que no son de aprendizaje profundo que estamos usando. OpenCV es una biblioteca de visión por computadora que incluye:

Por otro lado, magick es la biblioteca de procesamiento de imágenes de código abierto que ayudará a leer y extraer funciones útiles de conjuntos de datos de vídeo:

  • Leer archivos de vídeo
  • Extrae imágenes por segundo del vídeo.
  • Recorta las caras de las imágenes.

Antes de entrar en una explicación detallada, los lectores deben saber que no es necesario copiar y pegar fragmentos de código. Porque al last del publish se puede encontrar un enlace a Google Colab con aceleración por GPU. Este kernel permite que todos ejecuten y reproduzcan los mismos resultados.

Exploración de datos

El conjunto de datos que vamos a analizar es proporcionado por AWS, Fb, Microsoft, el Comité Directivo de Integridad de los Medios de la Asociación sobre IA y varios académicos.

Contiene vídeos falsos tanto reales como generados por IA. El tamaño whole es de más de 470 GB. Sin embargo, el conjunto de datos de muestra de 4 GB está disponible por separado.

Los movies en las carpetas están en el formato de mp4 y tienen varias longitudes. Nuestra tarea es determinar la cantidad de imágenes a capturar por segundo de un video. Por lo normal, tomamos de 1 a 3 fps para cada video.

Nota: establezca fps en NULL si desea extraer todos los fotogramas.

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

Sólo vimos el primer fotograma. ¿Qué pasa con el resto de ellos?

Al mirar el gif se puede observar que algunas falsificaciones son muy fáciles de diferenciar, pero una pequeña fracción parece bastante realista. Este es otro desafío durante la preparación de datos.

Detección de rostros

Al principio, las ubicaciones de las caras deben determinarse mediante cuadros delimitadores, utilizando OpenCV. Luego, se usa magia para extraerlas automáticamente de todas las imágenes.

# 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 crimson dashed line the field
imh  = image_draw(image_read('frame_1.jpg'))
rect(rectX, rectY, x, y, border = "crimson", 
     lty = "dashed", lwd = 2)
dev.off()

Si se encuentran ubicaciones de caras, es muy fácil extraerlas todas.

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 aprendizaje profundo

Después de la preparación del conjunto de datos, es hora de crear un modelo de aprendizaje profundo con Keras. Podemos colocar rápidamente todas las imágenes en carpetas y, utilizando generadores de imágenes, alimentar caras a un modelo de Keras previamente entrenado.

train_dir = 'fakes_reals'
width = 150L
peak = 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,peak), 
  batch_size = 10,
  class_mode = "binary"
)

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

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

mannequin <- keras_model_sequential() %>% 
  conv_base %>% 
  layer_flatten() %>% 
  layer_dense(items = 256, activation = "relu") %>% 
  layer_dense(items = 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
)

Reproducirse en un Computadora portátil

Conclusión

Esta publicación muestra cómo clasificar movies desde R. Los pasos fueron:

  • Leer movies y extraer imágenes del conjunto de datos.
  • Aplicar OpenCV para detectar rostros
  • Extraer caras mediante cuadros delimitadores
  • Construya un modelo de aprendizaje profundo

Sin embargo, los lectores deben saber que la implementación de los siguientes pasos puede mejorar drásticamente el rendimiento del modelo:

  • extraer todos los fotogramas de los archivos de vídeo
  • cargar diferentes pesos previamente entrenados o usar diferentes modelos previamente entrenados
  • utilizar otra tecnología para detectar rostros (p. ej., “Detector de rostros MTCNN”

¡No dudes en probar estas opciones en el desafío de detección de Deepfake y compartir tus resultados en la sección de comentarios!

¡Gracias por leer!

Correcciones

Si ve errores o desea sugerir cambios, por favor crear un problema en el repositorio de origen.

Reutilizar

El texto y las figuras tienen licencia Artistic Commons Attribution. CC POR 4.0. El código fuente está disponible en https://github.com/henry090/Deepfake-from-Ra menos que se indique lo contrario. Las figuras que han sido reutilizadas de otras fuentes no están cubiertas por esta licencia y pueden reconocerse por una nota en su pie de foto: “Figura de…”.

Citación

Para atribución, cite este trabajo 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 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}
}

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles