From c51b8cdc9feb1aa4a0b5d98aa8988296741a661a Mon Sep 17 00:00:00 2001 From: Joachim Date: Thu, 25 Apr 2024 09:57:27 +0200 Subject: [PATCH] chore: Added some descriptions --- README.md | 30 ++++++++++++++++++++++++++++-- convert_pb_to_onnx.sh | 26 ++++++++++++++++++++++++++ docker/Dockerfile | 7 ++++++- start-seg-training.sh | 12 ++++++++++-- start-training.sh | 6 ++++-- 5 files changed, 74 insertions(+), 7 deletions(-) create mode 100755 convert_pb_to_onnx.sh diff --git a/README.md b/README.md index 1094661..793346a 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Package to train object detection model for biological problems ## Start the training 1) Go to `projects//data.yaml` and enter the labels of your training data. -2) Execute `start-training.sh` +2) Execute `start-training.sh`or `start-seg-training.sh` # Faster training with GPU @@ -53,7 +53,7 @@ sudo systemctl restart docker ``` - When starting the docker container add `--gpus=all` argument -- Add the argument `--device 0` to the `start-training.sh` +- Add the argument `--device 0` to the `start-training.sh` and `start-seg-training.sh` Use `nvtop` to show gpu usage @@ -68,3 +68,29 @@ https://blog.paperspace.com/train-yolov5-custom-data/ https://github.com/ultralytics/yolov5/issues/475 + + +## Metrics + + +Klassenbezogene Metriken +Einer der Abschnitte der Ausgabe ist die klassenweise Aufschlüsselung der Leistungsmetriken. Diese detaillierten Informationen sind nützlich, wenn du herausfinden willst, wie gut das Modell für jede einzelne Klasse abschneidet, vor allem in Datensätzen mit einer Vielzahl von Objektkategorien. Für jede Klasse im Datensatz wird Folgendes angegeben: + +Klasse: Dies bezeichnet den Namen der Objektklasse, z. B. "Person", "Auto" oder "Hund". + +Bilder: Diese Metrik zeigt dir die Anzahl der Bilder im Validierungsset, die die Objektklasse enthalten. + +Instanzen: Hier wird gezählt, wie oft die Klasse in allen Bildern des Validierungssatzes vorkommt. + +Box(P, R, mAP50, mAP50-95): Diese Metrik gibt Aufschluss über die Leistung des Modells bei der Erkennung von Objekten: + +P (Präzision): Die Genauigkeit der erkannten Objekte, die angibt, wie viele Erkennungen richtig waren. + +R (Recall): Die Fähigkeit des Modells, alle Instanzen von Objekten in den Bildern zu identifizieren. + +mAP50: Mittlere durchschnittliche Genauigkeit, berechnet bei einem Schwellenwert von 0,50 für die Überschneidung über die Vereinigung (IoU). Er ist ein Maß für die Genauigkeit des Modells, das nur die "einfachen" Erkennungen berücksichtigt. + +mAP50-95: Der Durchschnitt der durchschnittlichen Genauigkeit, die bei verschiedenen IoU-Schwellenwerten zwischen 0,50 und 0,95 berechnet wurde. Er gibt einen umfassenden Überblick über die Leistung des Modells bei verschiedenen Schwierigkeitsgraden. + + +https://docs.ultralytics.com/de/guides/yolo-performance-metrics/#how-to-calculate-metrics-for-yolov8-model \ No newline at end of file diff --git a/convert_pb_to_onnx.sh b/convert_pb_to_onnx.sh new file mode 100755 index 0000000..58e2142 --- /dev/null +++ b/convert_pb_to_onnx.sh @@ -0,0 +1,26 @@ + + +#python -m tf2onnx.convert --input `pwd`/projects/bio_zoo/nucleus/saved_model.pb --output bio_zoo_nucleus.onnx --opset 12 + +#saved_model_cli show --dir `pwd`/projects/bio_zoo/nucleus/TF_SavedModel/ --all +# Look for signature_def inputs/outputs +# --inputs X:0[1,28,28,3] + +python -m tf2onnx.convert --saved-model ./TF_SavedModel --opset 12 --output model.onnx --inputs input:0 +#python -m onnxruntime.tools.make_dynamic_shape_fixed -h 640 + +# OpenCV just supports fixed shape models +# https://onnxruntime.ai/docs/tutorials/mobile/helpers/make-dynamic-shape-fixed.html + + + + +python -m onnxruntime.tools.make_dynamic_shape_fixed --dim_param batch --dim_value 3 model.onnx model.fixed.onnx + + +#python -m onnxruntime.tools.make_dynamic_shape_fixed --input_name input --input_shape 1,3,640,640 model.onnx model.fixed.onnx + + + + +python -m onnxruntime.tools.make_dynamic_shape_fixed --input_name input:0 --input_shape 1,3,640,640 model.onnx model.fixed.onnx \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile index 90cf2db..8b9343d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -18,4 +18,9 @@ RUN pip install --upgrade pip RUN ln -s /usr/bin/python3 /usr/bin/python RUN git clone -b v1.0.0-alpha01 https://github.com/joda01/yolov5.git &&\ cd yolov5/ &&\ - pip install -r requirements.txt \ No newline at end of file + pip install -r requirements.txt + +#RUN pip install tensorflow +#RUN pip install tf2onnx +#RUN pip install onnxruntime + diff --git a/start-seg-training.sh b/start-seg-training.sh index 7aeb610..25cfb9d 100755 --- a/start-seg-training.sh +++ b/start-seg-training.sh @@ -21,9 +21,17 @@ cd /workspaces/open-bio-image-trainer #python /yolov5/segment/train.py --model yolov5m-seg.pt --data coco128-seg.yaml --epochs 5 --img 640 -python /yolov5/segment/train.py --img 640 --batch 1 --epochs 256 --data `pwd`/projects/$projectname/data.yaml --weights yolov5m-seg.pt --cfg yolov5m-seg.yaml --device cpu --workers 1 --project `pwd`/projects/$projectname --name result --device 0 +python /yolov5/segment/train.py --img 640 --batch 1 --epochs 256 --data `pwd`/projects/$projectname/data.yaml --weights yolov5m-seg.pt --cfg yolov5m-seg.yaml --device 0 --workers 1 --project `pwd`/projects/$projectname --name result # # Convert to ONNX # -#python /yolov5/export.py --weights `pwd`/projects/nucleus02/result2/weights/best.pt --include torchscript onnx --opset 12 \ No newline at end of file +#python /yolov5/export.py --weights `pwd`/projects/nucleus02/result2/weights/best.pt --include torchscript onnx --opset 12 + +#python /yolov5/export.py --weights `pwd`/projects/cell_detection/result5/weights/best.pt --include torchscript onnx --opset 12 + + +#python /yolov5/export.py --weights `pwd`/projects/cell-brightfield-01/result3/weights/best.pt --include torchscript onnx --opset 12 + +#python /yolov5/export.py --weights `pwd`/projects/cell-brightfield-02/result4/weights/best.pt --include torchscript onnx --opset 12 +#python /yolov5/export.py --weights `pwd`/projects/cell-brightfield-02/result5/weights/best.pt --include torchscript onnx --opset 12 \ No newline at end of file diff --git a/start-training.sh b/start-training.sh index c3d8841..a813634 100755 --- a/start-training.sh +++ b/start-training.sh @@ -18,11 +18,13 @@ cd /yolov5 export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim cd /workspaces/open-bio-image-trainer -python /yolov5/train.py --img 640 --batch 16 --epochs 256 --data `pwd`/projects/$projectname/data.yaml --weights yolov5m.pt --cfg yolov5m.yaml --device cpu --workers 1 --project `pwd`/projects/$projectname --name result --device 0 +python /yolov5/train.py --img 640 --batch 8 --epochs 256 --data `pwd`/projects/$projectname/data.yaml --weights yolov5m.pt --cfg yolov5m.yaml --device cpu --workers 1 --project `pwd`/projects/$projectname --name result --device 0 # # Convert to ONNX # -#python /yolov5/export.py --weights `pwd`/projects/nucleus02/result2/weights/best.pt --include torchscript onnx --opset 12 \ No newline at end of file +#python /yolov5/export.py --weights `pwd`/projects/nucleus02/result2/weights/best.pt --include torchscript onnx --opset 12 + +#python /yolov5/export.py --weights `pwd`/projects/cell-brightfield-02/result3/weights/best.pt --include torchscript onnx --opset 12 \ No newline at end of file