{"id":39895,"date":"2021-02-04T11:36:12","date_gmt":"2021-02-04T11:36:12","guid":{"rendered":"https:\/\/keepler.io\/?p=39895"},"modified":"2023-11-27T11:37:10","modified_gmt":"2023-11-27T11:37:10","slug":"algoritmo-deep-learning-deepfakes","status":"publish","type":"post","link":"https:\/\/keepler.io\/es\/2021\/02\/04\/algoritmo-deep-learning-deepfakes\/","title":{"rendered":"El algoritmo de deep learning que genera los deepfakes"},"content":{"rendered":"<p>Cuando me <del>propusieron<\/del> plante\u00e9 escribir un art\u00edculo sobre <i>deepfakes<\/i>, ten\u00eda una idea aproximada de la algoritmia que hay detr\u00e1s, la conversaci\u00f3n global sobre la \u00e9tica (o ausencia de) y los <a href=\"https:\/\/www.kaggle.com\/c\/deepfake-detection-challenge\" target=\"_blank\" rel=\"noopener\">retos de kaggle<\/a> para automatizar su detecci\u00f3n. Y como ejercicio de aprendizaje, mi intenci\u00f3n era montar un proceso completo implementado <i>from scratch<\/i>, algo siempre formativo&#8230;<\/p>\n<p>\u2026 Eso, hasta que fui consciente del tiempo que realmente ten\u00eda disponible para ello y r\u00e1pidamente cambi\u00e9 de discurso para abanderar el <i>no hace falta reinventar la rueda, hombre<\/i>, con herramientas como <a href=\"https:\/\/github.com\/deepfakes\/faceswap\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">faceswap<\/span><\/a>&#8230; \u00c9stas implementan todo un framework y modelos para ello, y son un punto intermedio entre crear algo de 0 y un <i>end-to-end<\/i>. Pero, en cualquier caso, empecemos por el principio.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"38196\" data-permalink=\"https:\/\/keepler.io\/es\/keepler-data-tech-banking-financial-risks-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/11\/keepler-data-tech-banking-financial-risks-4.png?fit=600%2C599&amp;ssl=1\" data-orig-size=\"600,599\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"keepler-data-tech-banking-financial-risks\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/11\/keepler-data-tech-banking-financial-risks-4.png?fit=600%2C599&amp;ssl=1\" class=\"aligncenter size-full wp-image-38196\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2021\/02\/Nicolas-cage-deepfake-1.gif?resize=728%2C408&#038;ssl=1\" alt=\"\" width=\"728\" height=\"408\" \/><\/p>\n<h3><strong>\u00bfQu\u00e9 es un <i>deepfake<\/i>?<\/strong><\/h3>\n<p>Seguro que conoces el video de <a href=\"https:\/\/www.youtube.com\/watch?v=cQ54GDm1eL0\" target=\"_blank\" rel=\"noopener\">Obama dando un extra\u00f1o discurso<\/a>, o quiz\u00e1s a <a href=\"https:\/\/www.youtube.com\/watch?v=BU9YAHigNx8\" target=\"_blank\" rel=\"noopener\">Nicolas Cage en pel\u00edculas que no le corresponden<\/a> (debatible), o incluso uno de mis favoritos: Explicaciones de Trump sobre distintos temas en <a href=\"https:\/\/www.youtube.com\/watch?v=7Gpc_artOYI\" target=\"_blank\" rel=\"noopener\">\u201cA stable genious explains\u201d><\/a>.<\/p>\n<p>En estos videos (y audios) se utilizan t\u00e9cnicas de <i><span style=\"font-weight: 400;\">deep learning<\/i> para generar o modificar videos usando la cara\/voz de otra persona con resultados sorprendentemente realistas.\u00a0<\/p>\n<p>Pese a saltar a la fama con los falsos discursos de Obama, saltaron a la infamia con su uso para generar contenido pornogr\u00e1fico o crear un caos pol\u00edtico con videos de falsos discursos. Con el objetivo de ayudar a combatirlos, en kaggle, plataforma de retos de ciencia de datos, se plante\u00f3 el reto de detectarlos con premios de hasta $500k dolares para el ganador.<\/p>\n<p>Pero no todo es negativo. Tambi\u00e9n hay iniciativas como el nuevo anuncio de <a href=\"https:\/\/www.youtube.com\/watch?v=Yewm6TfLZ3Q\">Cruzcampo \u201cCon mucho acento\u201d<\/a> en el que volvemos a ver a Lola flores explicando que fue su acento el que la hizo entenderse con todo el mundo. O alternativas a la edici\u00f3n digital de video para retirar alg\u00fan que otro bigote de <a href=\"https:\/\/www.youtube.com\/watch?v=VnXonpQdOww\">pel\u00edculas en post-producci\u00f3n<\/a>.<\/p>\n<p>Sea como sea, es una disciplina muy interesante y merece la pena entender c\u00f3mo funciona. As\u00ed que:<\/p>\n<h3>\u00bfC\u00f3mo funciona un deepfake?<\/h3>\n<p>&#8220;<i>En el fondo, todo es compresi\u00f3n con p\u00e9rdidas<\/i>\u201d como dir\u00eda un antiguo compa\u00f1ero. En el centro de todo el proceso para crear un <i>deepfake<\/i>, se encuentra un algoritmo de <i>deep learning<\/i>: Autoencoder.<\/p>\n<p>Estos algoritmos tienen como objetivo tomar el dato de entrada y devolver la versi\u00f3n m\u00e1s parecida posible en la salida, haciendo pasar la informaci\u00f3n por capas de neuronas cada vez m\u00e1s peque\u00f1as, obligando a representar los datos de forma m\u00e1s compacta en lo que se conoce como espacio latente, para luego intentar reconstruir el dato original. La estructura de un <i>autoencoder<\/i>, por tanto, se compone del <i>encoder<\/i> (comprime o simplifica), la representaci\u00f3n (en el espacio latente) y el <i>decoder<\/i> (reconstruye).<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-38203\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2021\/02\/keepler-deepfakes-modelo-encoder-decoder-espacio-latente.png?resize=763%2C369&#038;ssl=1\" alt=\"\" width=\"763\" height=\"369\" \/><\/p>\n<p>Aplicando esta t\u00e9cnica a las im\u00e1genes, es posible quedarse con la informaci\u00f3n realmente importante que aplicada a \u201ccaras\u201d, podr\u00eda traducirse en qu\u00e9 expresi\u00f3n facial tiene o hacia qu\u00e9 direcci\u00f3n mira, y descartar cosas como color de ojos, tono de piel\u2026 <\/p>\n<p>&#8211;<i>\u00bfEspera, eso no es importante?<\/i>&#8211;<\/p>\n<p>Pues en este contexto, no, o no tanto. Recordemos que al usar un <i>autoencoder<\/i>, estamos obligando a la red a simplificar para quedarse con la informaci\u00f3n m\u00e1s cr\u00edtica. En este caso, el color del pelo, ojos o piel, es informaci\u00f3n \u201cest\u00e1tica\u201d, algo que tanto el <i>encoder<\/i> como el <i>decoder<\/i> pueden aprender. Pero la expresi\u00f3n o direcci\u00f3n de la cara es cambiante, y esa es la informaci\u00f3n que necesitamos que pase entre ambos bloques y la que quedar\u00eda recogida en ese espacio latente.<\/p>\n<p>Ahora bien, \u00bfqu\u00e9 hacemos con esto? Con un solo modelo no demasiado, pero en este caso \u00a1vamos a usar dos!<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-38206\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2021\/02\/keepler-deepfakes-2modelos-encoder-decoder-espacio-latente.png?resize=806%2C581&#038;ssl=1\" alt=\"\" width=\"806\" height=\"581\" \/><\/p>\n<p>Una vez tengo ambos modelos entrenados, podemos repasar lo comentado antes. El <i>encoder<\/i> comprime la imagen para quedarse solo con \u201cla expresi\u00f3n de la cara\u201d (simplificando much\u00edsimo la explicaci\u00f3n) en una representaci\u00f3n latente. El <i>decoder<\/i> por otro lado, aprende a reconstruir una cara a partir de una \u201cexpresi\u00f3n\u201d.\u00a0<\/p>\n<p>En este caso, voy a hacer un experimento r\u00e1pido con mi propia cara, a fin de cuentas, <strong>\u00bfqui\u00e9n no ha querido ser Jedi?<\/strong><\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-38211\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2021\/02\/keepler-deepfakes-reconstruir-con-modelos-entrenados.png?resize=825%2C500&#038;ssl=1\" alt=\"\" width=\"825\" height=\"500\" \/><\/p>\n<p>En un primer vistazo se puede ver que la fase de extracci\u00f3n de cara me deja la barba fuera. Algo que seguro no impactar\u00e1 m\u00e1s adelante.<i> &#8211; En absoluto. No. Nada<\/i>. <\/p>\n<p>Despu\u00e9s de todo esto solo queda un paso m\u00e1s. <strong>Cruzarlos.<\/strong><\/p>\n<p>Voy a usar el <i>encoder<\/i> del modelo A con el <i>decoder<\/i> del modelo B. Los <i>decoders<\/span><\/i> son los que han aprendido a reconstruir una cara a partir de la expresi\u00f3n facial del espacio latente, as\u00ed que al cambiarlos, le estoy pidiendo al modelo que explique la expresi\u00f3n que tiene Obi Wan, y la reconstruye con mi cara.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"38215\" data-permalink=\"https:\/\/keepler.io\/es\/keepler-data-tech-banking-user-experience-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/11\/keepler-data-tech-banking-user-experience-1.png?fit=501%2C582&amp;ssl=1\" data-orig-size=\"501,582\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"keepler-data-tech-banking-user-experience\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/11\/keepler-data-tech-banking-user-experience-1.png?fit=501%2C582&amp;ssl=1\" class=\"aligncenter wp-image-38215\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2021\/02\/keepler-deepfakes-cruzar-modelos.png?resize=798%2C583&#038;ssl=1\" alt=\"\" width=\"798\" height=\"583\" \/><\/p>\n<p>Aproximaciones m\u00e1s complejas utilizan un \u00fanico <i>decoder<\/i> inicial, mayor tama\u00f1o de modelo y otras complejidades demasiado t\u00e9cnicas para este art\u00edculo, no obstante, este ser\u00eda el concepto b\u00e1sico de su funcionamiento.<\/p>\n<p>Respecto a mi experimento r\u00e1pido , \u00bfcu\u00e1l fue el resultado? <b>Terrible, obviamente<\/b>.<\/p>\n<div style=\"width: 1080px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-39895-1\" width=\"1080\" height=\"608\" loop autoplay preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/keepler.io\/wp-content\/uploads\/2021\/02\/eye_roll_ramiro.mp4?_=1\" \/><a href=\"https:\/\/keepler.io\/wp-content\/uploads\/2021\/02\/eye_roll_ramiro.mp4\">https:\/\/keepler.io\/wp-content\/uploads\/2021\/02\/eye_roll_ramiro.mp4<\/a><\/video><\/div>\n<p>El tono de piel no acaba de encajar, la generaci\u00f3n de mi cara no se completa por lo que aparece borrosa, y&#8230; \u00bfqu\u00e9 demonios pasa con mi ojo?)<\/p>\n<p>Como lecci\u00f3n que todo cient\u00edfico de datos ha aprendido y ha sentido en sus carnes, <b>los modelos funcionan tan bien como el dato de entrada les permite<\/b>. Y ante sorpresa de nadie, utilizar como referencia un \u00fanico v\u00eddeo grabado con una webcam a toda prisa, <b>no es, evidentemente, ni el mejor tipo de dato a usar<\/b> <b>ni lo suficientemente representativo<\/b>.<\/p>\n<div style=\"width: 1080px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-39895-2\" width=\"1080\" height=\"459\" loop autoplay preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/keepler.io\/wp-content\/uploads\/2021\/02\/ramiro-jedi.mp4?_=2\" \/><a href=\"https:\/\/keepler.io\/wp-content\/uploads\/2021\/02\/ramiro-jedi.mp4\">https:\/\/keepler.io\/wp-content\/uploads\/2021\/02\/ramiro-jedi.mp4<\/a><\/video><\/div>\n<p>No solo eso, sino el pretratamiento del video, la detecci\u00f3n de las caras, tama\u00f1o del enmascarado, tiempo de entrenamiento (con menos de 12h en GPU no conseguir\u00e1s demasiado como pod\u00e9is comprobar)\u2026 No es algo a resolver en <b>dos d\u00edas,<\/b> como quien dice&#8230; Lo cual es un buen indicador del esfuerzo y tiempo dedicados a las aut\u00e9nticas obras de arte que se pueden ver por ah\u00ed.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-38199\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2021\/02\/Nicolas-cage-deepfake-2.gif?resize=313%2C200&#038;ssl=1\" alt=\"\" width=\"313\" height=\"200\" \/><\/p>\n<h3><strong>En conclusi\u00f3n<\/strong><\/h3>\n<p>Los <i>deepfakes<\/i>, como toda tecnolog\u00eda de IA (o tecnolog\u00eda, en general), tienen una complejidad mucho mayor de la que, a priori, se puede percibir. Y en la l\u00ednea del <b><i>Deep Learning<\/i><\/b>, nos deja hacer cosas que antes ni siquiera nos pod\u00edamos plantear.\u00a0<\/p>\n<p>Como todo, el <b>c\u00f3mo lo usemos es y siempre ser\u00e1 el quid de la cuesti\u00f3n<\/b>. En cuanto a <\/span><b>la \u00e9tica, implicaciones y usos, es algo de lo que hablaremos en una segunda parte<\/b> con suficiente profundidad, ya que revisando la longitud de este art\u00edculo creo que ya me he extendido demasiado.\u00a0<\/p>\n<p>Quiz\u00e1s, en esa segunda parte, tenga otros ejemplos propios m\u00e1s decentes que ense\u00f1ar.<\/p>\n<p>Imagen: Rawpixel<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando me propusieron plante\u00e9 escribir un art\u00edculo sobre deepfakes, ten\u00eda una idea aproximada de la algoritmia que hay detr\u00e1s, la conversaci\u00f3n global sobre la \u00e9tica (o ausencia de) y los retos de kaggle para automatizar su detecci\u00f3n. Y como ejercicio de aprendizaje, mi intenci\u00f3n era montar un proceso completo implementado from scratch, algo siempre formativo&#8230; [&hellip;]<\/p>\n","protected":false},"author":134360170,"featured_media":1634,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"El algoritmo de deep learning que genera los deepfakes","_seopress_titles_desc":"Los deepfakes, como toda tecnolog\u00eda de IA, tienen una gran complejidad y, en la l\u00ednea del Deep Learning, nos deja hacer cosas que antes ni siquiera nos pod\u00edamos plantear.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"none","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"","_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","content-type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[],"tags":[334,287,269,283],"class_list":["post-39895","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-deep-learning-es","tag-ia","tag-machine-learning-es","tag-tecnologia"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/p9CeZw-ant","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2021\/02\/keepler-deeplearning-deepfakes.jpg?fit=1280%2C452&ssl=1","_links":{"self":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts\/39895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/users\/134360170"}],"replies":[{"embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/comments?post=39895"}],"version-history":[{"count":13,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts\/39895\/revisions"}],"predecessor-version":[{"id":39919,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts\/39895\/revisions\/39919"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/media\/1634"}],"wp:attachment":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/media?parent=39895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/categories?post=39895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/tags?post=39895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}