⇨ La primera parte⇨ Tercera parteHola de nuevo
Como puede ver, las vacaciones han paralizado la línea de tiempo de los artículos.
Creo que muchos durante este tiempo lograron, si no entrenaron completamente su modelo, al menos experimentaron con diferentes conjuntos de datos.
1. Pon la distribución
2. Descargando fotos
3. ???
4. Beneficio!
Si no estaba a la altura de estas de nuestras redes neuronales, o si comienza a leer este artículo, entonces, como dicen, no hay tiempo para explicarlo, tomamos el kit de distribución, descargamos las imágenes necesarias y ¡vamos!
Las instrucciones detalladas se encuentran
en el artículo anterior de la serie .
El primer panqueque es grumoso
Cuando
entrené el modelo para
@ photo2comicsbot por primera vez, sin más preámbulos, simplemente metí alrededor de 1000 páginas de cómics en un conjunto de datos.
Sí, junto con portadas, anuncios y otros rellenos.
En la entrada se veía así:

El resultado es correspondiente:



El modelo transmite perfectamente las diferencias generales entre cómics y fotos:
- Graduación de color típica
- Selección de esquema
- Bloqueo
- Nube de texto
En principio, esta opción puede ser suficiente para la producción.
Pero me preguntaba qué resultados se pueden obtener en un conjunto de datos más "limpio".
Toma dos
Para el siguiente experimento, dejé las páginas con un bloque, y del resto corté las piezas más grandes, que consisten en un bloque, para eliminar las líneas divisorias verticales y horizontales en el modelo final.
Si realiza cambios en su conjunto de datos, por ejemplo, elimina o agrega fotos, no olvide guardar la versión anterior. Tendrá un lugar para regresar si algo sale mal.
El segundo conjunto de datos se veía así:

El resultado, como dicen, es obvio:



Las líneas divisorias desaparecieron, pero con ellas la expresividad quedó en las nubes con el texto: comenzaron a encontrarse con mucha menos frecuencia en el conjunto de datos y dejaron de ser la característica principal.
El espacio vacío que solía estar lleno de texto ahora está lleno de ruido psicodélico.
La tercera es la vencida
Decidí deshacerme del texto por completo, dejando solo aquellas partes de los cómics donde no está. Nadie sobrevivió: sin nubes, sin titulares o nombres de series.
Conjunto de datos después del "genocidio lingüístico":

El resultado final:



Por un lado, hay menos artefactos, por otro, la expresividad se ha ido. Como en la capacitación GAN la calidad del resultado está determinada en gran medida por usted y por mí, no existe una receta única para un buen modelo.
La belleza está en el ojo del espectador, así que no tengas miedo de experimentar y elegir lo que más te guste.
¡Al arma!
Bueno, ya hemos hablado sobre las principales trampas y métodos para lidiar con ellas, es hora de poner manos a la obra.
Vaya a la carpeta donde descargamos la distribución. Déjame recordarte que se llamaba
pytorch-CycleGAN-and-pix2pixComo tenemos instrucciones para tontos, no tocaremos el código de distribución, ya que todos los parámetros necesarios se pueden configurar desde la línea de comandos.
En esta distribución, el entrenamiento predeterminado se lleva a cabo en más de doscientas eras, con una atenuación lineal de la tasa de aprendizaje después de la centésima época.
La resolución máxima que mi tarjeta de ocho gigabytes pudo dominar fue de 400x400. El entrenamiento completo me llevó unas 33 horas, por lo que utilizaremos un pequeño truco de vida. Primero, entrenaremos a la modelo en imágenes de 128x128, luego 256x256, y solo en la etapa final le mostraremos nuestra hermosa 400x400.
La primera etapa durará 100 eras, la segunda y la tercera, 50 cada una, lo que nos permitirá reducir el tiempo de entrenamiento a casi la mitad.
Como muestra la práctica, el resultado con este enfoque no es peor, y a veces mejor, que cuando se entrena inmediatamente a la máxima resolución.
Quizás suficiente teoría, es hora de pasar a la práctica.
En el símbolo del sistema, ingrese.
Etapa uno
python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 128 --load_size 180 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 4
No olvides reemplazar las llaves con tus propios valores.
Analizaremos algunos parámetros con más detalle:
--batch_size {number}
Este parámetro es responsable del número de imágenes procesadas por ciclo, afectando positivamente la velocidad y negativamente en la glotonería del modelo.
En cada etapa, seleccione el máximo posible --batch_size, que no causa errores debido a la falta de memoria de la GPU.
-- dataroot {dataset root folder}
- carpeta con nuestro conjunto de datos. En su interior deben estar las carpetas trainA, trainB, testA, testB, como se describe en el artículo anterior.
--name {model name}
- El nombre de tu proyecto. Puede ser arbitrario, pero recomiendo incluir la arquitectura del modelo, la resolución máxima y el nombre del conjunto de datos en el nombre.
Por ejemplo: "resnet9_128to400_comics8"
Entonces puede distinguir entre experimentos con varios parámetros y datos.
La primera etapa del entrenamiento se puede detener en la centésima era.
Puede observar el progreso desde el navegador:
localhost : 8097 /
(u otro enlace que será visible en la consola)
Etapa dos
python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 256 --load_size 290 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 2 --epoch 100 --epoch_count 0 --continue_train
Es importante indicar la época en que terminamos nuestros estudios en la primera etapa.
“--Epoch 100” significa que cargaremos el modelo desde el punto de control de la centésima era
"--Epoch_count 0" significa que comenzaremos a entrenar desde cero, con la máxima velocidad de aprendizaje.
La segunda etapa del entrenamiento se puede detener en la era 50.
Etapa tres
python train.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --crop_size 400 --load_size 430 --init_type kaiming --netG resnet_9blocks --no_dropout --batch_size 1 --epoch 50 --epoch_count 0 --continue_train
La tercera etapa del entrenamiento se puede detener en la era 50, pero esto es cuestión de gustos. Puede terminar hasta el final y elegir el resultado intermedio que desee. Es importante recordar que el resultado en la era 200 puede ser peor que en la 150.
Ahora sal y mira lo que has hecho
Durante el entrenamiento, el modelo y los resultados intermedios se guardarán en una carpeta
/ pytorch-CycleGAN-and-pix2pix / checkpoints / {nombre del modelo}
Para probar el modelo, simplemente ingrese la línea de comando:
python test.py --dataroot {dataset root folder} --name {model name} --model cycle_gan --netG resnet_9blocks --crop_size 512 --load_size 580 --epoch {epoch name}
Puede ver el resultado en un conjunto de datos de prueba para cualquier punto de control, solo especifíquelo como {nombre de época}. Si no se especifica {nombre de época}, se tomará el último punto de control.
El resultado se guardará en la carpeta:
/pytorch-CycleGAN-and-pix2pix/results/{model name}/test_{epoch name}
Para no confundirse qué modelo en qué conjunto de datos da qué resultado,
Comience a llevar un pequeño diario. Registre datos de referencia y resultados de aprendizaje.
Por ejemplo, la línea de comando y la era a la que ha llegado. Estos datos son suficientes para guardar los parámetros de entrenamiento y el conjunto de datos en el que entrenamos.
Después de todo, ¿cuál es la diferencia entre un experimento científico y perder el tiempo? ¡El hecho de que todo está documentado con nosotros!
¡Eso es todo por hoy! En el próximo artículo, aprenderemos cómo exportar un modelo terminado y alojarlo en la nube.
No tengas miedo de experimentar. ¡Asegúrese de probar varios conjuntos de datos diferentes, compare los resultados y compártalos en los comentarios!
Hasta pronto!
⇨ Siguiente parte