Convert FLIR formatted annotations to YOLO training format + Additional Directory tree formatting guide.
- Converts FLIR json annotation file provided in the dataset,
index.json, to YOLO labels for each image. - Creates a
.txtfile with all image names extracted from JSON file and appends your specified directory to thier names. - Previews Images with labels drawn with class names while converting for the user to visually check data validity.
-
Download and extract FLIR dataset (https://www.flir.eu/oem/adas/adas-dataset-form/)
-
Paste
flir2yolo.pyscript inside a FLIR dataset folder ex: "images_thermal_train". -
Run the script with the directory of the dataset in the YOLO folder added as an argument
python3 flir2yolo.py "data/thermal/train_flir_images/"
-
Redo the previous steps for all datasets that you need to convert.
-
Copy and rename the generated files to YOLO directory.
-
A folder called labels will be created where the script resides inside the FLIR dataset folder. Which contiains the label txt files named by the same image names provided by FLIR ex:
video-2Af3dwvs6YPfwSSf6-frame-000000-imW24bapJsHpTahce.txt. Each .txt file will contain the YOLO formated bounding boxes and classesclass bx by bw bhex:2 0.603906 0.488281 0.323437 0.171875 -
A .txt file called
all_image_names.txtwhich will contain all images in the dataset file with the inputed directory appended to thier names ex:data/thermal/train_flir_images/video-2Af3dwvs6YPfwSSf6-frame-000000-imW24bapJsHpTahce.txt
This might help you with how the data should be prepared for training.
I have also included my .yaml config file which you may use or edit according to your naming.
├── YOLO
├── data
├── thermal
│ ├── images
│ │ ├── trian_flir_images #contains all train images
│ │ ├── test_flir_images #contains all test images
│ │ └── val_flir_images #contains all val images
│ ├── labels
│ │ ├── trian_flir_images #contains all generated train txt labels
│ │ ├── test_flir_images #contains all generated test txt labels
│ │ └── val_flir_images #contains all generated val txt labels
│ ├── trian_flir_images.txt #this is the all_image_names.txt generated file renamed
│ ├── test_flir_images.txt #this is the all_image_names.txt generated file renamed
│ └── val_flir_images.txt #this is the all_image_names.txt generated file renamed
└── thermal.yaml
- I use
opencvto display the labeled images, you may comment lines6,42,61,63,64if you dont want to display images - I only needed 11 classes in my work, thus you will find a line that filters and only converts these classes. If you need more classes, just add them to the
labelsvariable in the script.
28 labels = ['person','bike','car','motor','bus','train','truck','light','dog','scooter','other vehicle']
- The classes are numbered according to thier position in the list.
- This script is better than other scripts since this converts the orginial FLIR generated
index.jsonfile. The othercoco.jsonfile contains wrong labeling which will result in your training loosing hope. - After the script ends, it will print the ammount of images dicovered and labeled. You will notice that in some datasets there will be way less displayed count than the number of images available. This is due to FLIR not labeling these images and not including them in the JSON file. Dont panic..
- Please talk encouraging words and bring cookies to your GPU while training for optimal performance.ʕっ•ᴥ•ʔっ