Este documento es una guía de cómo configurar el DeepLabCut (DLC) para entrenamiento de
modelos utilizando una o más GPU en Windows 10 u 11 versión 2.3.0.
Páginas oficiales de DLC:
- General: http://www.mackenziemathislab.org/deeplabcut
- Documentación: https://deeplabcut.github.io/DeepLabCut/docs/UseOverviewGuide.html
- Repositorio: https://github.com/DeepLabCut/DeepLabCut
- Artículo de investigación de DLC: https://www.nature.com/articles/s41593-018-0209-y
Fecha de creación 26/Febrero/2023
Autor: Mena
- DLC: 2.3.0
- Tensorflow = 2.10.0
- Tensorflow-gpu = 2.10
- CUDA: 11.2
- cuDNN: 8.1
- Visual Studio Code 1.75.1
- Python = 3.8.16
- Anaconda 2022.10
- Sistema operativo: Windows 11
Hardware:
GPU: NVIDIA GeFore RTX 3060 Ti 8 Gb
Leer documento oficial de instalación
Es importante seguir el orden:
- Anaconda
- Visual Studio Code, active el autoguardado
Ver apartado de OPCIONAL si prefiere trabajar con el entorno de DEEPLABCUT desde su VScode
- Python (verificar que se genere el PATH)
- Git (opcional, si quiere clonar el repositorio sino, sólo con descargar el ZIP)
2.1. Clonar repositorio de DLC en GitHub 2.2. Suponiendo que quiere clonar en escritorio, dar click derecho y click en "Abrir Terminal" 2.3. Escribir: git clone https://github.com/DeepLabCut/DeepLabCut - Abrir el promt de Anaconda como administrador
- Para entrar a carpeta de proyecto, copiar la dirección donde se encuentra nuestro proyecto de DLC, por ejemplo:
cd C:\Users\Name\Desktop\DeepLabCut\conda-environments
6.1. Si es una versión 2.3.3 o superiror, ingrese el siguiente comando:pip install 'deeplabcut[gui,tf]'
que tiene una GUI basada en pyside/napari.
6.2. Para crear el entorno virtual de DEEPLABCUT, pegar:
conda env create -f DEEPLABCUT.yaml
- Instalar Tensorflow dentro de entorno virtual DEEPLABCUT:
pip install tensorflow = 2.10.0
IMPORTANTE Si quiere instalar otra versión de tensorflow, ver compatibilidad - Instalar Tensorflow-gpu
pip install tensorflow-gpu = 2.10.0
- Instalar Drivers de acuerdo a la GPU instalada.
Importante, leer instrucciones de DLC sobre la GPU
Para saber el modelo de GPU
a) Windows + r
b) escribir: dxdiag
c) segunda pestaña, en español "Pantalla"
Si es NVIDIA: https://www.nvidia.com/download/index.aspx - Instalación de CUDA 11.2: https://developer.nvidia.com/cuda-11.2.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
- Para descargar cuDNN 8.1 debe tener cuenta de NVIDIA: https://developer.nvidia.com/rdp/cudnn-archive
- Ver instrucciones para instalar cuDNN en CUDA: https://www.youtube.com/watch?v=C1en3qSs39g&t=38s&ab_channel=CarlosPerales%2CPhD
- Comprobar que CUDA detecta su GPU NVIDIA
Abrir Windows PowerShell y escribir:
nvcc --version
Si aparece la versión 11.2, está del otro lado
Sino, siga estos pasos: https://www.youtube.com/watch?v=keOjesFzwW8&ab_channel=DIEGOLITTLELION
Elimite el CUDA de otra versión desde panel de control y aplicación.
Repetir pasos 8 y 12
Si lo prefiere, puede trabajar el proyecto desde la IDE de VScode, junto con la terminal de Anaconda
Una forma es tener un archivo Python para llevar los siguientes pasos.
Puede abrir cualquier archivo de python dentro de este proyecto
- Para entrar al entorno virtual desde VScode, click en la esquina inferior donde dice Python <<versión de python instalada>>
- Se desplegará en la barra superior los entornos virtuales que tiene
- Seleccione el entorno de DEEPLABCUT con Pyhton 3.8.16
- CTRL + ñ para abrir terminal dentro de VScode
- Observe que al inicio del la ruta dice "(DEEPLABCUT)"
Dentro del promt de Aanconda como administrador
- Entrar al entorno virtual de DEEPLABCUT
activate DEEPLABCUT
ipython
import deeplabcut
deeplabcut.launch_dlc()
para abrir la GUI- New project
- Ingrese datos
- De preferencia, dar click en "Copy videos to project folder"
- Click en "create" Nota: revise la dirección donde se guardó su projecto Si ya tiene un proyecto generado:
- Click en "Load project"
- Seleccionar archivo config.yaml
- Seleccione la pestaña de "Extract frames"
- Configure las variables de acuerdo a la documentación. Consejo, elija k-means
- En Frame cropping seleccione GUI (si necesita recortar para que extraiga un área específica)
- Click en "Extract frames"
- Seleccionar áreas para recorte (si es necesario)
- Puede observar los frames dentro del directorio "labeled-data" por cada video
- Configure dentro del archivo config.yaml los bodyparts y el skeleton de acuerdo a los puntos que quiere etiquetar
- Seleccione "Labels frame"
- Selecionar carpeta por carpeta donde se contienen los frames
- Se abrirá la GUI de Napari para su debido etiquetado
- Se recomienda ir guardando cada cierto tiempo de etiquetado hasta terminar con la última carpeta
File > Save Selected Layer(s)...
ImgAug es muy popular en la comunidad de aprendizaje profundo para el aumento de datos de imágenes y proporciona una amplia variedad de transformaciones de imagen. Además, ImgAug tiene un código eficiente para la creación de mapas de objetivos y soporta lotes de tamaños mayores que 1, lo que permitirá procesar datos de manera más eficiente.
- Dar click en "Create training dataset"
- Configurar los parámentros (Ojo, estos deben coincidir con los datos de entrenamiento)
- Click en "Create training dataset" para crear
NOTA: Si usted quiere hacer más iteraciones
- Abra archivo config.yaml
- Cambie el número de la iteracipon en la opción "iteration"
- Repita el paso del dataset
- Revise si se generó otra carpata llamada iteration <<número de la iteración nueva>> En el caso de este proyecto, si quiere saber más información de las otras iteraciones realizadas, revise los archivos .md dentro del directorio Docs.
Para tener una mejor configuración del entrenamiento, puede regresar a la terminal de Anaconda. En el caso de este proyecto, se configuró dentro del entorno virtual del promt de Anaconda.
- Guarde la ruta de su proyecto en una variable, por ejemplo:
config_path = 'C:\Users\Name\Desktop\Proyecto-Mena-2023-02-26\config.yaml'
- En terminal:
import deeplabcut
deeplabcut.train_network(config_path, shuffle=1, trainingsetindex=0, gputouse=0, max_snapshots_to_keep=200000, autotune=False, displayiters=100, saveiters=100, maxiters=200000, allow_growth=True)
Información de la API https://deeplabcut.github.io/DeepLabCut/docs/standardDeepLabCut_UserGuide.html#g-train-the-network- Al finalizar el entrenamiento se generarán los archivos snapshots.
Si se debe parar el modelo por alguna razón, puede continuar entrenando en el checkpoint donde se quedó configurando en el archivo pose_cfg.yaml
.
init_weights: '<full_path>-snapshot-XXXXX'
Sin ningun tipo de archivo al final.
XXXXX número de la última iteración guardada.
Ejemplo:
init_weights: 'D:\DLC\CV-Mena-2023-02-26\dlc-models\iteration-0\CVFeb26-trainset95shuffle1\train\snapshot-205000'
Para saber cuál fue la mejor iteración se tuvo que investigar el valor de Loss más pequeño dentro del archivo learning_stats.csv
Esta función permite exportar un modelo animal único bien entrenado para aplicaciones en tiempo real, etc. Esta función es parte de Kane et al, 2020 eLife.
deeplabcut.export_model(config_path, iteration=None, shuffle=1, trainingsetindex=0,snapshotindex='all', TFGPUinference=True, overwrite=False, make_tar=True)
Para exportar el modelo con mejor precisión, se eliminaron del valor 2
deeplabcut.export_model(config_path, iteration=0, shuffle=1, trainingsetindex=0, snapshotindex='all', TFGPUinference=True, overwrite=True, make_tar=True)<br>
Información: https://deeplabcut.github.io/DeepLabCut/docs/HelperFunctions.html?highlight=export_model
Los resultados de la evaluación se calculan escribiendo:
Establecer plotting a True
muestra todos los fotogramas de prueba y entrenamiento con las etiquetas manuales y predichas.
Comprobar visualmente las imágenes etiquetadas de prueba (y entrenamiento) que se crean en el directorio 'evaluation-results'.
deeplabcut.evaluate_network(config_path,Shuffles=[1], plotting=True, gputouse=0, trainingsetindex='all')
Información oficial: https://deeplabcut.github.io/DeepLabCut/docs/standardDeepLabCut_UserGuide.html#h-evaluate-the-trained-network
Notas: Tomar en cuenta el almacenamiento, debido a que la función de evaluciación inicia desde el primer snapshot si quieres volver a correr la ejecución checando si existencia de snapshot's. Si detecta existencia, pasa al siguiente snapshot. Sin embargo, todo debe estar dentro de la misma carpeta para porder continuar desde el punto donde se quedó.
La red entrenada puede utilizarse para analizar nuevos vídeos. El usuario debe elegir primero un punto de control con los mejores resultados de evaluación para analizar los vídeos. En este caso, el usuario puede introducir el índice correspondiente del punto de control en la variable snapshotindex del archivo config.yaml. Por defecto, se utiliza el punto de control más reciente (es decir, el último) para analizar el vídeo. Los vídeos nuevos NO tienen que estar en el archivo config. Puede analizar nuevos vídeos en cualquier momento simplemente utilizando la siguiente línea de código:
Si usted quiere analizar videos que están en otro directorio
deeplabcut.analyze_videos(config_path, ['fullpath/analysis/project/videos/reachingvideo1.avi'], save_as_csv=True)
video_path = ['D:\DLC\VideosParaTracking\grupo 2\R4\Grupo2R4S1\Grupo2R4S1.mp4']
El que se utilizó para este proyecto fue:
deeplabcut.analyze_videos(config_path, video_path , videotype='mp4', shuffle=1, trainingsetindex=0, gputouse=0, save_as_csv=True, destfolder=None, dynamic=(True, .5, 10))
Recorte dinámico de vídeos:
Si tiene fotogramas grandes y el animal/objeto ocupa una fracción menor, puede recortar alrededor del animal/objeto para acelerar la velocidad de procesamiento. Por ejemplo, si tiene un experimento de campo abierto grande pero sólo rastrea el ratón, esto acelerará su análisis (también útil para aplicaciones en tiempo real).
Para usar esto simplemente añada dynamic=(True,.5,10)
cuando llame a *analyze_videos.
Más información: https://deeplabcut.github.io/DeepLabCut/docs/standardDeepLabCut_UserGuide.html#i-novel-video-analysis
deeplabcut.filterpredictions(config_path, video_path, shuffle=1, trainingsetindex=0, filtertype='arima', p_bound=0.01, ARdegree=3, MAdegree=1, alpha=0.01)
deeplabcut.plot_trajectories(config_path, video_path, videotype='mp4', shuffle=1)
API: https://deeplabcut.github.io/DeepLabCut/docs/standardDeepLabCut_UserGuide.html?highlight=plot#k-plot-trajectories