Este proyecto tiene como objetivo simplificar el proceso de creación de un modelo de profundidad profunda personalizada mediante el uso de modelos de googlenet de petróleo y conjuntos de datos de imágenes personalizados.
Aquí hay algunas visualizaciones de ejemplo creadas con modelos personalizados de DeepDream entrenados en imágenes temáticas de verano:
Dependencias:
Puede encontrar instrucciones de instalación detalladas para Ubuntu y Windows en la guía de instalación.
Después de asegurarse de que Pytorch esté instalado, puede descargar opcionalmente los modelos PLACES365 GOOGLENET e Inception5H (InceptionV1) Pretrados con el siguiente comando:
python models/download_models.py
Si solo desea crear profundos con los modelos previos a la aparición o descargó un modelo previo alado hecho por otra persona con el creador de sueños, entonces puede pasar por delante a la visualización de modelos.
Crea y prepara tu conjunto de datos
Recopilar imágenes
Ordene las imágenes en el formato requerido.
Eliminar cualquier imagen corrupta.
Asegúrese de que se elimine los duplicados si aún no lo ha hecho
Cambie el tamaño del conjunto de datos para acelerar el entrenamiento.
Calcule la media y la desviación estándar de su conjunto de datos.
Entrenar a un modelo de googlenet
Visualizar los resultados
Si los resultados no son excelentes, es posible que tenga que volver al paso 1-2 y hacer algunos cambios con qué imágenes, categorías y parámetros de entrenamiento se utilizan.
Puede tomar tan solo 5 épocas para crear visualizaciones que se parezcan a sus datos de entrenamiento utilizando la capa principal de FC/Logits. Para acelerar el entrenamiento y crear resultados de mejor aspecto, el modelo BVLC previamente pracricado utilizado está parcialmente congelado para proteger las capas inferiores del cambio.
Para capacitar a un modelo de profundidad profunda personalizada, deberá crear un conjunto de datos compuesto por imágenes que desea usar para capacitación. Hay una variedad de formas en que puede adquirir imágenes para su conjunto de datos, y necesitará al menos un par de cientos de imágenes para cada categoría/clase.
DeepDream se realiza con mayor frecuencia con modelos de clasificación de imágenes entrenados en conjuntos de datos de imágenes que están compuestos de diferentes categorías/clases. Los modelos de clasificación de imágenes intentan aprender la diferencia entre diferentes clases de imagen y al hacerlo, las neuronas obtienen la capacidad de crear alucinaciones similares a los sueños. Las imágenes que elija, las diferencias entre ellas, las diferencias entre las clases elegidas y el número de imágenes utilizadas afectarán en gran medida las visualizaciones que se pueden producir.
Los conjuntos de datos de imágenes de Pytorch deben estructurarse donde el directorio/carpeta principal contiene subcarpetas/directorios para cada categoría/clase. A continuación se muestra un ejemplo de la estructura del conjunto de datos requerida:
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
Una vez que haya creado su conjunto de datos en el formato adecuado, asegúrese de eliminar cualquier imagen duplicada si aún no lo ha hecho. Hay una variedad de herramientas que puede usar para esta tarea, incluido el software gratuito y de código abierto.
Si aún no lo ha hecho, es posible que desee crear una copia de copia de seguridad de su conjunto de datos.
A continuación, deberá verificar que ninguna de las imágenes esté corrupta de tal manera que evite que Pytorch las cargue. Para eliminar automáticamente cualquier imagen corrupta de su conjunto de datos, use el siguiente comando:
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
A continuación, es probable que desee cambiar el tamaño de su conjunto de datos para estar más cerca del tamaño de la imagen de entrenamiento para acelerar el entrenamiento. Restablecer su conjunto de datos no le impedirá crear imágenes más grandes de profundidad con el modelo resultante. El script de cambio de tamaño incluido solo modificará imágenes que van por encima del tamaño de la imagen especificado con su altura o ancho.
Para cambiar el tamaño de las imágenes en su conjunto de datos, use el siguiente comando:
python data_tools/resize_data.py -data_path <training_data> -max_size 500
Ahora con su conjunto de datos recién redimensionados, puede calcular la desviación media y estándar de su conjunto de datos para su uso en capacitación y profundidad. Asegúrese de recalcular la desviación media y estándar nuevamente si modifica el conjunto de datos agregando o eliminando imágenes.
Para calcular la media y la desviación estándar de su conjunto de datos, use el siguiente comando y guarde la salida para el siguiente paso:
python data_tools/calc_ms.py -data_path <training_data>
Ahora puede comenzar a entrenar a su modelo DeepDream ejecutando el guión de entrenamiento de Googlenet. Se recomienda que guarde el modelo cada 5-10 épocas para monitorear la calidad de las visualizaciones.
Después de entrenar a sus modelos, puede agregarles una matriz de correlación de color para la decorrelación de color con el siguiente comando:
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
Comando de entrenamiento básico:
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
Opciones de entrada:
-data_path
: ruta al directorio/carpeta del conjunto de datos que desea usar.-data_mean
: su lista precalculada de valores medios para su conjunto de datos elegido.-data_sd
: su lista precalculada de valores de desviación estándar para su conjunto de datos elegido.Opciones de entrenamiento:
-num_epochs
: el número de épocas de entrenamiento para usar. El valor predeterminado es 120
.-batch_size
: el número de imágenes de entrenamiento y validación para poner a través de la red al mismo tiempo. El valor predeterminado es 32
.-learning_rate
: tasa de aprendizaje para usar con el optimizador Adam o SGD. El valor predeterminado es 1e-2
.-optimizer
: el algoritmo de optimización para usar; ya sea sgd
o adam
; El valor predeterminado es sgd
.-train_workers
: cuántos trabajadores usar para capacitación. El valor predeterminado es 0
.-val_workers
: cuántos trabajadores usar para la validación. El valor predeterminado es 0
.-balance_classes
: habilitar esta bandera equilibrará la capacitación para cada clase en función del tamaño de la clase.Opciones de modelo:
-model_file
: ruta al archivo del modelo .pth
para usar para el modelo inicial. El valor predeterminado es el modelo BVLC Googlenet.-freeze_to
: a qué capa congelar el modelo; Uno de none
, conv1
, conv2
, conv3
, mixed3a
, mixed3b
, mixed4a
, mixed4b
, mixed4c
, mixed4d
, mixed4e
, mixed5a
o mixed5b
. El valor predeterminado es mixed3b
.-freeze_aux1_to
: a qué capa congelar la primera rama auxiliar hasta; uno de none
, loss_conv
, loss_fc
o loss_classifier
. El valor predeterminado es none
.-freeze_aux2_to
: a qué capa congelar la segunda rama auxiliar hasta; uno de none
, loss_conv
, loss_fc
o loss_classifier
. El valor predeterminado es none
.-delete_branches
: si este indicador está habilitado, no se utilizarán ramas auxiliares en el modelo.Opciones de salida:
-save_epoch
: guarde el modelo cada épocas save_epoch
. El valor predeterminado es 10
. Establecer en 0
para deshabilitar los modelos intermedios de ahorro.-output_name
: nombre del modelo de salida. El valor predeterminado es bvlc_out.pth
.-individual_acc
: habilitar este indicador imprimirá la precisión individual de cada clase.-save_csv
: habilitar este indicador guardará datos de pérdida y precisión en archivos txt.-csv_dir
: dónde guardar archivos CSV. El valor predeterminado se establece en el directorio de trabajo actual.Otras opciones:
-use_device
: ID de índice cero de la GPU para usar más cuda:
. El valor predeterminado es cuda:0
.-seed
: un valor entero que puede especificar para obtener resultados repetibles. Por defecto, este valor es aleatorio para cada ejecución.Opciones de conjunto de datos:
-val_percent
: el porcentaje de imágenes de cada clase a usar para la validación. El valor predeterminado es 0.2
.Después de entrenar un nuevo modelo DeepDream, deberá probar sus visualizaciones. Las mejores visualizaciones se encuentran en la capa principal de FC también conocida como la capa de 'logits'. Este script le ayuda a visualizar rápida y fácilmente todos los canales de una capa especificada en un modelo particular para una época de modelo particular, generando una imagen separada para cada canal.
Opciones de entrada:
-model_file
: ruta al modelo de googlenet previamente alado que desea usar.-learning_rate
: tasa de aprendizaje para usar con el optimizador Adam o L-BFGS. El valor predeterminado es 1.5
.-optimizer
: el algoritmo de optimización para usar; ya sea lbfgs
o adam
; El valor predeterminado es adam
.-num_iterations
: el valor predeterminado es 500
.-layer
: la capa específica que desea usar. El valor predeterminado se establece en fc
.-extract_neuron
: si este indicador está habilitado, la neurona central se extraerá de cada canal.-image_size
: una lista separada por comas de <height>,<width>
para usar para la imagen de salida. El valor predeterminado se establece en 224,224
.-jitter
: la cantidad de jitter de imagen para usar para el preprocesamiento. El valor predeterminado es 16
.-fft_decorrelation
: si utilizar o no la decorrelación espacial FFT. Si está habilitado, se debe usar una tasa de aprendizaje más baja.-color_decorrelation
: si usar o no la decorrelación de color. Opcionalmente, proporcione una lista de valores separada por comas para la matriz de correlación de color. Si no se proporcionan valores, se realizará un intento de cargar una matriz de correlación de color desde el archivo del modelo antes de incorporar a la matriz de correlación de color ImageNet.-random_scale
: si usar o no escala aleatoria. Opcionalmente, proporcione una lista de valores separada por comas para que las escalas se seleccionen aleatoriamente. Si no se proporcionan valores, entonces las escalas se seleccionarán aleatoriamente de la siguiente lista: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: si utilizar o no rotaciones aleatorias. Opcionalmente, proporcione una lista separada por comas de valores de grado para que las rotaciones se seleccionen aleatoriamente de o un valor único para usar para seleccionar aleatoriamente grados de [-value, value]
. Si no se proporcionan valores, entonces se utilizará un rango de [-5, 5]
.-padding
: la cantidad de relleno para usar antes de la escala aleatoria y las rotaciones aleatorias para evitar artefactos de borde. El relleno se retira después de las transformaciones. El valor predeterminado se establece en 0
para deshabilitarlo.Opciones de procesamiento:
-batch_size
: cuántas imágenes de visualización de canales crear en cada lote. El valor predeterminado es 10
.-start_channel
: qué canal comenzar a crear imágenes de visualización en. El valor predeterminado es 0
.-end_channel
: qué canal dejar de crear imágenes de visualización en. El valor predeterminado se establece en -1
para todos los canales.Solo se requiere si el modelo no los contiene, opciones :
-model_epoch
: la época de entrenamiento de la que se guardó el modelo para usar para los nombres de imágenes de salida. El valor predeterminado es 120
.-data_mean
: su lista precalculada de valores medios que se utilizó para entrenar el modelo, si no se guardaban dentro del modelo.-num_classes
: el número de clases en las que el modelo fue entrenado. El valor predeterminado es 120
.Opciones de salida :
-output_dir
: dónde guardar las imágenes de salida. El valor predeterminado se establece en el directorio de trabajo actual.-print_iter
: imprima progreso cada iteración print_iter
. Establecer en 0
para deshabilitar la impresión.-save_iter
: guarde las imágenes cada iteraciones save_iter
. El valor predeterminado es a 0
para deshabilitar el ahorro de resultados intermedios.Otras opciones:
-use_device
: ID de índice cero de la GPU para usar más cuda:
. El valor predeterminado es cuda:0
.-seed
: un valor entero que puede especificar para obtener resultados repetibles. Por defecto, este valor es aleatorio para cada ejecución.Visualización básica de la capa FC (logits):
python vis_multi.py -model_file <bvlc_out120>.pth
Visualización avanzada de la capa FC (logits):
python vis_multi.py -model_file <bvlc_out120>.pth -layer fc -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -output_dir <output_dir> -padding 16 -jitter 16,8
Este guión le permite crear alucinaciones profundas con modelos entrenados de Googlenet.
Opciones de entrada:
-model_file
: ruta al modelo de googlenet previamente alado que desea usar.-learning_rate
: tasa de aprendizaje para usar con el optimizador Adam o L-BFGS. El valor predeterminado es 1.5
.-optimizer
: el algoritmo de optimización para usar; ya sea lbfgs
o adam
; El valor predeterminado es adam
.-num_iterations
: el valor predeterminado es 500
.-content_image
: ruta a su imagen de entrada. Si no se especifica una imagen de entrada, se usa ruido aleatorio.-layer
: la capa específica que desea usar. El valor predeterminado se establece en mixed5a
.-channel
: el canal de capa específico que desea usar. El valor predeterminado se establece en -1
para deshabilitar la selección específica del canal.-extract_neuron
: si este indicador está habilitado, la neurona central se extraerá del canal seleccionado por el parámetro -channel
.-image_size
: una lista separada por comas de <height>,<width>
para usar para la imagen de salida. Si se proporciona un valor único para la longitud lateral máxima junto con una imagen de contenido, la longitud del lado mínimo se calculará automáticamente. El valor predeterminado se establece en 224,224
.-jitter
: la cantidad de jitter de imagen para usar para el preprocesamiento. El valor predeterminado es 16
.-fft_decorrelation
: si utilizar o no la decorrelación espacial FFT. Si está habilitado, se debe usar una tasa de aprendizaje más baja.-color_decorrelation
: si usar o no la decorrelación de color. Opcionalmente, proporcione una lista de valores separada por comas para la matriz de correlación de color. Si no se proporcionan valores, se realizará un intento de cargar una matriz de correlación de color desde el archivo del modelo antes de incorporar a la matriz de correlación de color ImageNet.-random_scale
: si usar o no escala aleatoria. Opcionalmente, proporcione una lista de valores separada por comas para que las escalas se seleccionen aleatoriamente. Si no se proporcionan valores, entonces las escalas se seleccionarán aleatoriamente de la siguiente lista: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: si utilizar o no rotaciones aleatorias. Opcionalmente, proporcione una lista separada por comas de valores de grado para que las rotaciones se seleccionen aleatoriamente de o un valor único para usar para seleccionar aleatoriamente grados de [-value, value]
. Si no se proporcionan valores, entonces se utilizará un rango de [-5, 5]
.-padding
: la cantidad de relleno para usar antes de la escala aleatoria y las rotaciones aleatorias para evitar artefactos de borde. El relleno se retira después de las transformaciones. El valor predeterminado se establece en 0
para deshabilitarlo.-layer_vis
: si se debe usar la visualización de profundidad o la dirección al no visualizar canales de capa específicos. Uno de deepdream
o direction
; El valor predeterminado es deepdream
.Solo se requiere si el modelo no los contiene, opciones :
-data_mean
: su lista precalculada de valores medios que se utilizó para entrenar el modelo, si no se guardaban dentro del modelo.-num_classes
: el número de clases en las que el modelo estaba entrenado, si no se guardaba dentro del modelo.Opciones de salida :
-output_image
: nombre de la imagen de salida. El valor predeterminado es out.png
.-print_iter
: imprima progreso cada iteración print_iter
. Establecer en 0
para deshabilitar la impresión.-save_iter
: guarde las imágenes cada iteraciones save_iter
. El valor predeterminado es a 0
para deshabilitar el ahorro de resultados intermedios.Opciones de mosaico:
-tile_size
: el tamaño del mosaico deseado para usar. Ya sea una lista separada por comas de <height>,<width>
o un valor único para usar tanto para la altura como para el ancho. El valor predeterminado se establece en 0
para deshabilitar el mosaico.-tile_overlap
: el porcentaje de superposición para usar para los mosaicos. El valor predeterminado es 25
para 25% de superposición. Los porcentajes de superposición de más del 50% darán lugar a problemas.-tile_iter
: el valor predeterminado es 50
.Otras opciones:
-use_device
: ID de índice cero de la GPU para usar más cuda:
. El valor predeterminado es cuda:0
.-seed
: un valor entero que puede especificar para obtener resultados repetibles. Por defecto, este valor es aleatorio para cada ejecución.Deepdream básico:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
Deepdream avanzado:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a/conv_5x5_relu -channel 9 -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -padding 16 -jitter 16,8
Consulte aquí para obtener más información sobre todos los scripts/herramientas incluidos relacionados con la creación, limpieza y preparación del conjunto de datos.