Implementación personalizada de la red U en Pytorch para el desafío de enmascaramiento de imágenes de Carvana de Kaggle a partir de imágenes de alta definición.
Instalar CUDA
Instale Pytorch 1.13 o posterior
Instalar dependencias
pip install -r requirements.txtbash scripts/download_data.sh
python train.py --ampcurl https://get.docker.com | sh && sudo systemctl --now enable dockerdistribution= $( . /etc/os-release ; echo $ID$VERSION_ID )
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
&& curl -s -L https://nvidia.github.io/nvidia-docker/ $distribution /nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart dockersudo docker run --rm --shm-size=8g --ulimit memlock=-1 --gpus all -it milesial/unetbash scripts/download_data.sh
python train.py --ampEste modelo fue entrenado desde cero con imágenes de 5k y obtuvo un coeficiente de dados de 0.988423 en más de 100k imágenes de prueba.
Se puede usar fácilmente para la segmentación multiclase, segmentación de retratos, segmentación médica, ...
Nota: Use Python 3.6 o más nuevo
Una imagen de Docker que contiene el código y las dependencias está disponible en DockerHub. Puede descargar y saltar en el contenedor con (Docker> = 19.03):
docker run -it --rm --shm-size=8g --ulimit memlock=-1 --gpus all milesial/unet> python train.py -h
usage: train.py [-h] [--epochs E] [--batch-size B] [--learning-rate LR]
[--load LOAD] [--scale SCALE] [--validation VAL] [--amp]
Train the UNet on images and target masks
optional arguments:
-h, --help show this help message and exit
--epochs E, -e E Number of epochs
--batch-size B, -b B Batch size
--learning-rate LR, -l LR
Learning rate
--load LOAD, -f LOAD Load model from a .pth file
--scale SCALE, -s SCALE
Downscaling factor of the images
--validation VAL, -v VAL
Percent of the data that is used as validation (0-100)
--amp Use mixed precision De manera predeterminada, la scale es 0.5, por lo que si desea obtener mejores resultados (pero use más memoria), configela en 1.
La precisión mixta automática también está disponible con la bandera --amp . La precisión mixta permite que el modelo use menos memoria y sea más rápido en las GPU recientes mediante el uso de la aritmética FP16. Se recomienda habilitar un amplificador.
Después de entrenar a su modelo y guardarlo en MODEL.pth , puede probar fácilmente las máscaras de salida en sus imágenes a través de la CLI.
Para predecir una sola imagen y guardarla:
python predict.py -i image.jpg -o output.jpg
Para predecir un múltiples imágenes y mostrarlas sin guardarlas:
python predict.py -i image1.jpg image2.jpg --viz --no-save
> python predict.py -h
usage: predict.py [-h] [--model FILE] --input INPUT [INPUT ...]
[--output INPUT [INPUT ...]] [--viz] [--no-save]
[--mask-threshold MASK_THRESHOLD] [--scale SCALE]
Predict masks from input images
optional arguments:
-h, --help show this help message and exit
--model FILE, -m FILE
Specify the file in which the model is stored
--input INPUT [INPUT ...], -i INPUT [INPUT ...]
Filenames of input images
--output INPUT [INPUT ...], -o INPUT [INPUT ...]
Filenames of output images
--viz, -v Visualize the images as they are processed
--no-save, -n Do not save the output masks
--mask-threshold MASK_THRESHOLD, -t MASK_THRESHOLD
Minimum probability value to consider a mask pixel white
--scale SCALE, -s SCALE
Scale factor for the input images Puede especificar qué archivo de modelo usar con --model MODEL.pth .
El progreso del entrenamiento se puede visualizar en tiempo real utilizando pesas y prejuicios. Las curvas de pérdida, las curvas de validación, los pesos y los histogramas de gradiente, así como las máscaras predichas se registran en la plataforma.
Al lanzar una capacitación, se imprimirá un enlace en la consola. Haga clic en él para ir a su tablero. Si tiene una cuenta W&B existente, puede vincularla configurando la variable de entorno WANDB_API_KEY . Si no, creará una ejecución anónima que se elimina automáticamente después de 7 días.
Un modelo previo al estado previo está disponible para el conjunto de datos Carvana. También se puede cargar desde Torch.Hub:
net = torch . hub . load ( 'milesial/Pytorch-UNet' , 'unet_carvana' , pretrained = True , scale = 0.5 )Las escalas disponibles son 0.5 y 1.0.
Los datos de Carvana están disponibles en el sitio web de Kaggle.
También puede descargarlo usando el script de ayuda:
bash scripts/download_data.sh
Las imágenes de entrada y las máscaras de destino deben estar en las carpetas data/imgs y data/masks , respectivamente (tenga en cuenta que la carpeta imgs y masks no debe contener ningún subcarporto ni ningún otro archivo, debido al cargador de datos codicioso). Para el carvana, las imágenes son RGB y las máscaras son en blanco y negro.
Puede usar su propio conjunto de datos siempre que se asegure de que se cargue correctamente en utils/data_loading.py .
Documento original de Olaf Ronneberger, Philipp Fischer, Thomas Brox:
U-NET: redes convolucionales para la segmentación de imágenes biomédicas