Mercurial > repos > bgruening > json2yolosegment
comparison yolov8.py @ 3:97bc82ee2a61 draft
planemo upload for repository https://github.com/bgruening/galaxytools/tree/master/tools commit 743c8acf1ea4e4b1e718743d3772b7e592646611
| author | bgruening |
|---|---|
| date | Mon, 14 Jul 2025 18:28:46 +0000 |
| parents | 158e6ce48345 |
| children | f6990d85161c |
comparison
equal
deleted
inserted
replaced
| 2:158e6ce48345 | 3:97bc82ee2a61 |
|---|---|
| 1 import argparse | 1 import argparse |
| 2 import os | 2 import os |
| 3 import pathlib | 3 import pathlib |
| 4 import shutil | |
| 5 import time | 4 import time |
| 6 from argparse import RawTextHelpFormatter | 5 from argparse import RawTextHelpFormatter |
| 7 from collections import defaultdict | 6 from collections import defaultdict |
| 8 | 7 |
| 9 import cv2 | 8 import cv2 |
| 173 | 172 |
| 174 | 173 |
| 175 # | 174 # |
| 176 # Functions | 175 # Functions |
| 177 # | 176 # |
| 178 | |
| 179 def safe_rmtree(path): | |
| 180 try: | |
| 181 shutil.rmtree(path) | |
| 182 except OSError: | |
| 183 time.sleep(1) | |
| 184 shutil.rmtree(path, ignore_errors=True) | |
| 185 | |
| 186 | |
| 187 # Train a new model on the dataset mentioned in yaml file | 177 # Train a new model on the dataset mentioned in yaml file |
| 188 def trainModel(model_path, model_name, yaml_filepath, **kwargs): | 178 def trainModel(model_path, model_name, yaml_filepath, **kwargs): |
| 189 if "imgsz" in kwargs: | 179 if "imgsz" in kwargs: |
| 190 image_size = kwargs['imgsz'] | 180 image_size = kwargs['imgsz'] |
| 191 else: | 181 else: |
| 269 if "init_lr" in kwargs: | 259 if "init_lr" in kwargs: |
| 270 init_lr = kwargs['init_lr'] | 260 init_lr = kwargs['init_lr'] |
| 271 else: | 261 else: |
| 272 init_lr = 1.0 | 262 init_lr = 1.0 |
| 273 | 263 |
| 274 train_save_path = os.path.expanduser('~/runs/' + args.mode + '/train/') | |
| 275 if os.path.isdir(train_save_path): | |
| 276 safe_rmtree(train_save_path) | |
| 277 # Load a pretrained YOLO model (recommended for training) | 264 # Load a pretrained YOLO model (recommended for training) |
| 278 if args.model_format == 'pt': | 265 if args.model_format == 'pt': |
| 279 model = YOLO(os.path.join(model_path, model_name + "." + args.model_format)) | 266 model = YOLO(os.path.join(model_path, model_name + "." + args.model_format)) |
| 280 else: | 267 else: |
| 281 model = YOLO(model_name + "." + args.model_format) | 268 model = YOLO(model_name + "." + args.model_format) |
| 289 return model | 276 return model |
| 290 | 277 |
| 291 | 278 |
| 292 # Validate the trained model | 279 # Validate the trained model |
| 293 def validateModel(model): | 280 def validateModel(model): |
| 294 # Remove prediction save path if already exists | |
| 295 val_save_path = os.path.expanduser('~/runs/' + args.mode + '/val/') | |
| 296 if os.path.isdir(val_save_path): | |
| 297 safe_rmtree(val_save_path) | |
| 298 # Validate the model | 281 # Validate the model |
| 299 metrics = model.val() # no args needed, dataset & settings remembered | 282 metrics = model.val() # no args needed, dataset & settings remembered |
| 300 metrics.box.map # map50-95 | 283 metrics.box.map # map50-95 |
| 301 metrics.box.map50 # map50 | 284 metrics.box.map50 # map50 |
| 302 metrics.box.map75 # map75 | 285 metrics.box.map75 # map75 |
| 328 if "max_det" in kwargs: | 311 if "max_det" in kwargs: |
| 329 maximum_detections = args.max_det | 312 maximum_detections = args.max_det |
| 330 else: | 313 else: |
| 331 maximum_detections = 300 | 314 maximum_detections = 300 |
| 332 | 315 |
| 333 if "run_dir" in kwargs: | 316 run_save_dir = kwargs['run_dir'] # For Galaxy, run_save_dir is always provided via xml wrapper |
| 334 run_save_dir = kwargs['run_dir'] | |
| 335 else: | |
| 336 # Remove prediction save path if already exists | |
| 337 pred_save_path = os.path.expanduser('~/runs/' + args.mode + '/predict/') | |
| 338 if os.path.isdir(pred_save_path): | |
| 339 safe_rmtree(pred_save_path) | |
| 340 if "foldername" in kwargs: | 317 if "foldername" in kwargs: |
| 341 save_folder_name = kwargs['foldername'] | 318 save_folder_name = kwargs['foldername'] |
| 342 # infer on a local image or directory containing images/videos | 319 # infer on a local image or directory containing images/videos |
| 343 prediction = model.predict(source=source_datapath, save=True, stream=True, | 320 prediction = model.predict(source=source_datapath, save=True, stream=True, |
| 344 conf=confidence, imgsz=image_size, | 321 conf=confidence, imgsz=image_size, |
