- Convertir el dataset LIDC-IDRI (imagenes .dicom + anotaciones de segmentacion de 4 radiologos) a formato YOLO, en contreto para yolov8-segmentation.
- Realizar una validación del modelo obtenido de yolov8-segmentation bajo un criterio de intersection over union, IoU, en 3 dimensiones mediante la matriz de confusión.
Revisar el yolodataset.py:
if __name__ =='__main__':
path2newdataset='/path/to/new/dataset_yolo'
path2olddataset = '/path/to/old/LIDC-IDRI_dataset'
create_dataset(path2olddataset, path2newdataset, val=0.2, percent_include=0.2)
Parametros:
val: porcentaje de pacientes que iran a validationpercent_include: porcentaje de las imagenes que no tienen ningun nodulo etiquetado que serán consideradas.
/path/to/new/dataset_yolo debe tener esta pinta:
.
├── train
│ ├── images
│ └── labels
├── train.yaml
└── validation
├── images
└── labels
y /path/to/old/LIDC-IDRI_dataset debe tener esta pinta:
.
├── LIDC-IDRI-0002
├── LIDC-IDRI-0005
├── LIDC-IDRI-0013
├── LIDC-IDRI-0055
:
└── LIDC-IDRI-0129
Ejecutar:
python3 yolodataset.py
Las imagenes son guardads en formato .jpg siendo cada slice de un TC de un paciente una imagen, guardadas en images.
Las etiquetas siguen formato YOLO, es decir, un .txt por cada imagen con el mismo nombre las carpetas labels. Estas siguen el formato:
n_clase x1 y1 x2 y2 x3 y3 x4 y4 x5 y5 ...
Ejemplo: 0 0.324 0.435 0.435 0.5474 0.45754 0.4456 0.45645 0.23462 0.8644 0.23423
-
n_clase = 0 ya que solo hay una clase (yolo es segmentador de instacias)
-
xi yi son puntos que perfilan el nodulo en relativo intervalo de valores.(0,1)
Para el dataset LIDC-IDRI se ha elegido el nombre de cada imagen y label con el siguiente criterio:
id_paciente+n_slice
Ejemplo:
- Slice numero 143 del paciente con id LIDC-IDRI-0957:
LIDC-IDRI-0957_143.pngyLIDC-IDRI-0957_143.txt
.
├── train
│ ├── images
│ └── labels
├── train.yaml
└── validation
├── images
└── labels
El train.yaml incluye:
names:
- nodulo
nc: 1
train: ./train/images/
val: ./validation/images/
Debe ejecutarse el fichero get_metrics_3d.sh:
./get_metrics_3d.sh
Este contiene el comando:
python3 matrix_3d.py --val --model "/path/to/model.pt" --save '/path/to/metrics' --val_path '/path/to/dataset' --threshold 0.3 --iou_threshold 0.2
El script matrix_3d.py calcula la matriz de confusión teniendo en cuenta la IoU con las etiquetas de los radiólogos.
Todo ello se apoya en el software processLIDC (adaptado a yolo) el cual realiza gestión, carga, preprocesado y visualización del dataset original de LIDC.IDRI:



