Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (6.8%) to scientific vocabulary
Repository
Basic Info
- Host: GitHub
- Owner: santipais
- License: apache-2.0
- Language: Python
- Default Branch: master
- Size: 5.61 MB
Statistics
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Introduction
Toolbox MMSegmentation
⚙️ Pasos de instalación
⚠️ Nota
Estos pasos fueron los utilizados para instalar la toolbox MMSegmentation en el siguiente entorno.
Ante cualquier duda o incompatibilidad, se recomienda revisar la guía oficial de instalación de MMSegmentation:
👉 https://mmsegmentation.readthedocs.io/en/latest/get_started.html
🖥️ Entorno utilizado
- Sistema operativo: Windows 10/11 usando WSL 2.0
- Distribución: Ubuntu en WSL
- GPU: NVIDIA GeForce RTX 3060
- CUDA Toolkit: 11.5 (descargar aquí: https://developer.nvidia.com/cuda-11-5-0-download-archive?targetos=Linux&targetarch=x8664&Distribution=WSL-Ubuntu&targetversion=2.0&targettype=deblocal)
🔍 Verificación de GPU
Antes de instalar, verificar que WSL puede acceder a la GPU correctamente:
bash
nvidia-smi
🐍 Instalación de Conda
Instalar Miniconda o Anaconda desde la documentación oficial:
https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html
🧪 Crear y activar un entorno Conda
bash
conda create --name malezas python=3.11 -y
conda activate malezas
🔧 Instalación de PyTorch y dependencias principales
bash
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118
pip install -U openmim
mim install mmengine
mim install "mmcv==2.1.0"
📦 Clonar el repositorio y configurar el entorno
bash
git clone git@github.com:santipais/MAgro.git
cd MAgro
pip install -v -e .
✅ Instalación de dependencias adicionales
Estas ya deberian estar instaladas, pero por las dudas:
bash
pip install ftfy scipy regex
⚠️ Importante: Es posible que algunas versiones de dependencias fallen si no se fuerza la instalación de numpy.
bash
pip install numpy==1.25 --force-reinstall
🚀 Probar que todo funciona
Descargar el checkpoint del modelo3 (lo encontras más abajo) y pegarlo en checkpoints/.
Correr:
bash
python inference.py
🏋️♂️ Entrenamiento del modelo
⚠️ Nota previa
Antes de comenzar, si ocurre algún error relacionado al path de los módulos, ejecutar:
bash
export PYTHONPATH=$(pwd):$PYTHONPATH
Y acordate de estar en el entorno de conda que instalamos!
📁 Preparar los datos
- Descargar las imágenes y etiquetas correspondientes.
Colocar:
- Las imágenes en:
data/images - Las etiquetas en:
data/labels
- Las imágenes en:
Ejecutar el siguiente comando para dividir el dataset:
bash
python tools/dataset_converters/malezas.py --test <porcentaje_test> --val <porcentaje_val> --seed <semilla>
Por ejemplo:
bash
python tools/dataset_converters/malezas.py --test 0.1 --val 0.2 --seed 42
Por default se tiene un valor de test 0.2, val 0.15 (por lo que, 0.65 de train) y semilla 42.
Esto generará las carpetas:
data/malezas/images/
data/malezas/annotatios/
Cada una con sus correspondientes subcarpetas
train/
val/
test/
📥 Descargar checkpoint preentrenado
- Descargar el checkpoint deseado del cual partir para realizar el fine-tuning (por ejemplo, un modelo
SegFormer). Más adelante comentaremos algunos checkpoints obtenidos y de los cual se recomendamos partir. - Guardarlo en el directorio que prefieras.
⚠️ Muy importante: editar el archivo configs/malezas/segformer_mit-b5_malezas.py
Ir a la línea 30 y reemplazar la ruta del checkpoint con la ruta local donde lo guardaste.
🚀 Entrenar el modelo
Ejecutar el siguiente comando:
bash
python tools/train.py configs/malezas/segformer_mit-b5_malezas.py
El entrenamiento creara el archivo work_dirs/segformer_mit-b5_malezas/ donde se almacenara todos los pesos y logs.
ℹ️ Detalles adicionales
El archivo de configuración configs/malezas/segformer_mit-b5_malezas.py está configurado para:
- Entrenar durante 40,000 iteraciones
- Guardar los pesos del modelo cada 5,000 iteraciones
Estos valores se pueden modificar dentro del mismo archivo de configuración según tus necesidades.
👀 Inferencia y Test del modelo.
🧪 Test
Para testear el modelo con un peso obtenido, simplemente ejecutar:
bash
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE}
Donde CONFIGFILE probablemente será `configs/malezas/segformermit-b5malezas.py` y CHEKPOINTFILE será del estilo work_dirs/segformer_mit-b5_malezas/iter_5000.pth
Inferencia
Se crearon dos archivos, inference.py y inference_dir.py para inferar una imagen individual o un directorio de images respectivamente. En ambos casos se va a tener que modificar los archivos para utilizar el archivo config del modelo deseado, los pesos deseados y donde se quieren guardar los resultados. Las lineas a modificar para esto estan marcadas con un comment # Modificar al final
🏷️ Proceso de etiquetado
1. Creación del entorno para etiquetar
El proceso de etiquetado se realizó fuera de WSL, directamente en Windows, creando un nuevo entorno virtual conda y luego instalando la herramienta Labelme:
bash
conda create --name etiquetado python=3.11 -y
conda activate etiquetado
pip install labelme
2. Asistencia por notebooks
Durante el desarrollo, se utilizaron dos notebooks de Google Colab:
- RemapOfClasses: Se convierte las máscaras de los resultados de inferir con el modelo
san-vit-l14_coco-stuff164k-640x640, a las 5 clases deseadas por nosotros. - GrayScaleToLabelMe: convertía esas máscaras grises a formato
JSONcon polígonos, compatibles conLabelme. - LabelMeToGrayScaleAndImageVis: una vez finalizado el proceso de etiquetado con
Labelme, se utilizó otro notebook para convertir las anotaciones en formato de polígonos (JSON) al formato compatible con MMSegmentation (máscaras en escala de grises).
3. Edición final con Labelme
Una vez obtenidas las predicciones en formato JSON por el segundo notebook, se realizaron ajustes y retoques manuales ejecutando Labelme con el siguiente comando:
bash
labelme {directorio_imagenes} --output {directorio_de_etiquetas}
Esto permitió generar las anotaciones finales en formato Labelme, que luego al pasar por el tecer notebook, se tienen las etiquetas listas para ser utilizadas por la toolbox MMSegmentation.
📊 Resultados de Segmentación y Pesos
A continuación se muestran los resultados y pesos obtenidos. Todos fueron entrenados mediante el mismo archivo de configuración, es decir con el mismo modelo, pero se cambio el dataset usado. Cada tabla incluye las métricas por clase (IoU y Accuracy), así como métricas globales como mIoU y aAcc.
🔷 Modelo 1: Dataset formado exclusivamente por imagenes nuestras.
| Class | IoU | Acc | |------------|-------|-------| | road | 96.46 | 99.01 | | vegetation | 93.11 | 96.58 | | sky | 95.54 | 97.25 | | obstacle | 47.66 | 53.92 | | others | 8.24 | 8.62 |
aAcc: 96.94 mIoU: 68.20 mAcc: 71.08 data_time: 0.0079 time: 0.1589
🔷 Modelo 2: Dataset formado por todas nuestras imagenes y las obtenidas con RELLIS-3D
| Class | IoU | Acc | |------------|-------|-------| | road | 87.59 | 95.31 | | vegetation | 86.01 | 91.59 | | sky | 96.23 | 97.55 | | obstacle | 64.58 | 73.08 | | others | 80.33 | 84.71 |
aAcc: 93.95 mIoU: 82.95 mAcc: 88.45 data_time: 0.0032 time: 0.0989
🔷 Modelo 3: Dataset equilibrado. (Todas nuestras imagenes y una selección de 200 de RELLIS-3d)
En este modelo obtuvimos los mejores resultados. Son los pesos que recomendamos seguir la linea.
| Class | IoU | Acc | |------------|-------|-------| | road | 90.32 | 97.85 | | vegetation | 92.26 | 95.51 | | sky | 95.32 | 97.65 | | obstacle | 64.95 | 68.15 | | others | 83.22 | 89.86 |
aAcc: 94.8 mIoU: 85.21 mAcc: 89.80 data_time: 0.0040 time: 0.1190
📖 Citación
Este proyecto usa MMSegmentation. Si lo usas, para citarlo:
```bibtex @misc{mmseg2020, title={{MMSegmentation}: OpenMMLab Semantic Segmentation Toolbox and Benchmark}, author={MMSegmentation Contributors}, howpublished = {\url{https://github.com/open-mmlab/mmsegmentation}}, year={2020} }
Owner
- Login: santipais
- Kind: user
- Repositories: 1
- Profile: https://github.com/santipais
Citation (CITATION.cff)
cff-version: 1.2.0 message: "If you use this software, please cite it as below." authors: - name: "MMSegmentation Contributors" title: "OpenMMLab Semantic Segmentation Toolbox and Benchmark" date-released: 2020-07-10 url: "https://github.com/open-mmlab/mmsegmentation" license: Apache-2.0
GitHub Events
Total
- Member event: 1
- Push event: 8
- Create event: 2
Last Year
- Member event: 1
- Push event: 8
- Create event: 2
Dependencies
- actions/checkout v3 composite
- actions/setup-python v4 composite
- pytorch/pytorch ${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel build
- pytorch/pytorch ${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel build
- pytorch/pytorch ${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel build
- albumentations >=0.3.2
- docutils ==0.16.0
- myst-parser *
- sphinx ==4.0.2
- sphinx_copybutton *
- sphinx_markdown_tables *
- urllib3 <2.0.0
- mmcv >=2.0.0rc4,<2.2.0
- mmengine >=0.5.0,<1.0.0
- ftfy *
- regex *
- cityscapesscripts *
- diffusers *
- einops ==0.3.0
- imageio ==2.9.0
- imageio-ffmpeg ==0.4.2
- invisible-watermark *
- kornia ==0.6
- nibabel *
- omegaconf ==2.1.1
- pudb ==2019.2
- pytorch-lightning ==1.4.2
- streamlit >=0.73.1
- test-tube >=0.7.5
- timm *
- torch-fidelity ==0.3.0
- torchmetrics ==0.6.0
- transformers ==4.19.2
- mmcv >=2.0.0rc1,<2.1.0
- mmengine >=0.4.0,<1.0.0
- prettytable *
- scipy *
- torch *
- torchvision *
- matplotlib *
- numpy *
- packaging *
- prettytable *
- scipy *
- codecov * test
- flake8 * test
- ftfy * test
- interrogate * test
- pytest * test
- regex * test
- xdoctest >=0.10.0 test
- yapf * test