From a7b08c786ea1eb476f0dac38da36884b0caba4bf Mon Sep 17 00:00:00 2001 From: yoiannis Date: Sat, 1 Mar 2025 18:30:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=9A=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E5=AD=A6=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - train.py | 13 +- ultralytics/assets/bus.jpg | Bin 0 -> 137419 bytes ultralytics/assets/zidane.jpg | Bin 0 -> 50427 bytes ultralytics/cfg/__init__.py | 4 +- ultralytics/cfg/models/v8/yolov8-mtlcls.yaml | 29 ++++ ultralytics/data/__init__.py | 2 + ultralytics/data/dataset.py | 160 +++++++++++++++++- ultralytics/data/utils.py | 25 +++ ultralytics/engine/trainer.py | 18 +- ultralytics/engine/validator.py | 15 +- ultralytics/models/yolo/MTL/__init__.py | 7 + ultralytics/models/yolo/MTL/predict.py | 61 +++++++ ultralytics/models/yolo/MTL/train.py | 168 +++++++++++++++++++ ultralytics/models/yolo/MTL/val.py | 133 +++++++++++++++ ultralytics/models/yolo/__init__.py | 4 +- ultralytics/models/yolo/model.py | 8 +- ultralytics/nn/modules/head.py | 56 ++++++- ultralytics/nn/tasks.py | 66 +++++++- ultralytics/utils/loss.py | 17 ++ ultralytics/utils/metrics.py | 79 +++++++++ ultralytics/utils/torch_utils.py | 8 +- utils/tobacco_label.py | 74 ++++++++ 23 files changed, 918 insertions(+), 30 deletions(-) create mode 100644 ultralytics/assets/bus.jpg create mode 100644 ultralytics/assets/zidane.jpg create mode 100644 ultralytics/cfg/models/v8/yolov8-mtlcls.yaml create mode 100644 ultralytics/models/yolo/MTL/__init__.py create mode 100644 ultralytics/models/yolo/MTL/predict.py create mode 100644 ultralytics/models/yolo/MTL/train.py create mode 100644 ultralytics/models/yolo/MTL/val.py create mode 100644 utils/tobacco_label.py diff --git a/.gitignore b/.gitignore index 7d419a7..085500a 100644 --- a/.gitignore +++ b/.gitignore @@ -163,7 +163,6 @@ weights/ pnnx* # Autogenerated files for tests -/ultralytics/assets/ # dataset cache *.cache diff --git a/train.py b/train.py index cb55960..5910681 100644 --- a/train.py +++ b/train.py @@ -6,13 +6,14 @@ warnings.filterwarnings('ignore') from ultralytics import YOLO if __name__ == '__main__': - model = YOLO('ultralytics/cfg/models/v8/yolov8n-cls.yaml') - # model.load('yolov8n.pt') # loading pretrain weights - model.train(data='G:/skin-cancer-detection', + # model = YOLO('ultralytics/cfg/models/v8/yolov8n-cls.yaml') # 单任务学习 + # model.train(data='G:/dataset/split', + model = YOLO('ultralytics/cfg/models/v8/yolov8-mtlcls.yaml',task='MTL') # 多任务学习 + model.train(data='G:/dataset/test/ml.yaml', cache=False, - imgsz=640, - epochs=300, - batch=32, + imgsz=224, + epochs=2, + batch=64, close_mosaic=0, workers=8, # Windows下出现莫名其妙卡主的情况可以尝试把workers设置为0 optimizer='SGD', # using SGD diff --git a/ultralytics/assets/bus.jpg b/ultralytics/assets/bus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40eaaf5c330d0c498fbe1dcacf9bb8bf566797fe GIT binary patch literal 137419 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

Yf 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 literal 0 HcmV?d00001 diff --git a/ultralytics/assets/zidane.jpg b/ultralytics/assets/zidane.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eeab1cdcb282b0e026a57c5bf85df36024b4e1f6 GIT binary patch literal 50427 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 int: + """Return the total number of samples in the dataset.""" + return len(self.samples) + + def verify_images(self): + """Verify all images in dataset.""" + + desc = f"{self.prefix}Scanning {self.root}..." + path = Path(self.root).with_suffix(".cache") # *.cache file path + + with contextlib.suppress(FileNotFoundError, AssertionError, AttributeError): + cache = load_dataset_cache_file(path) # attempt to load a *.cache file + assert cache["version"] == DATASET_CACHE_VERSION # matches current version + assert cache["hash"] == get_hash([x[0] for x in self.samples]) # identical hash + nf, nc, n, samples = cache.pop("results") # found, missing, empty, corrupt, total + if LOCAL_RANK in {-1, 0}: + d = f"{desc} {nf} images, {nc} corrupt" + TQDM(None, desc=d, total=n, initial=n) + if cache["msgs"]: + LOGGER.info("\n".join(cache["msgs"])) # display warnings + return samples + + # Run scan if *.cache retrieval failed + nf, nc, msgs, samples, x = 0, 0, [], [], {} + with ThreadPool(NUM_THREADS) as pool: + results = pool.imap(func=verify_image, iterable=zip(self.samples, repeat(self.prefix))) + pbar = TQDM(results, desc=desc, total=len(self.samples)) + for sample, nf_f, nc_f, msg in pbar: + if nf_f: + samples.append(sample) + if msg: + msgs.append(msg) + nf += nf_f + nc += nc_f + pbar.desc = f"{desc} {nf} images, {nc} corrupt" + pbar.close() + if msgs: + LOGGER.info("\n".join(msgs)) + x["hash"] = get_hash([x[0] for x in self.samples]) + x["results"] = nf, nc, len(samples), samples + x["msgs"] = msgs # warnings + save_dataset_cache_file(self.prefix, path, x, DATASET_CACHE_VERSION) + return samples \ No newline at end of file diff --git a/ultralytics/data/utils.py b/ultralytics/data/utils.py index fa9bfbb..823bf49 100644 --- a/ultralytics/data/utils.py +++ b/ultralytics/data/utils.py @@ -423,6 +423,31 @@ def check_cls_dataset(dataset, split=""): return {"train": train_set, "val": val_set, "test": test_set, "nc": nc, "names": names} +def check_mtlcls_dataset(file, split=""): + # Read YAML + data = yaml_load(file, append_filename=True) # dictionary + + # Checks + for k in "train", "val": + if k not in data: + if k != "val" or "validation" not in data: + raise SyntaxError( + emojis(f"{dataset} '{k}:' key missing ❌.\n'train' and 'val' are required in all data YAMLs.") + ) + LOGGER.info("WARNING ⚠️ renaming data YAML 'validation' key to 'val' to match YOLO format.") + data["val"] = data.pop("validation") # replace 'validation' key with 'val' key + if "tasks" not in data : + raise SyntaxError(emojis(f"{dataset} key missing ❌.\n either 'names' or 'nc' are required in all data YAMLs.")) + + names = [] + nc = [] + for i in range(len(data["tasks"])): + nc.append(len(data["tasks"][i])) + names.append(check_class_names(data["tasks"][i])) + + + return {"train": data["train"], "val": data["val"], "test": data["test"], "nc": nc, "names": names} + class HUBDatasetStats: """ A class for generating HUB dataset JSON and `-hub` dataset directory. diff --git a/ultralytics/engine/trainer.py b/ultralytics/engine/trainer.py index 85dbc4c..a557013 100644 --- a/ultralytics/engine/trainer.py +++ b/ultralytics/engine/trainer.py @@ -22,7 +22,7 @@ from torch import distributed as dist from torch import nn, optim from ultralytics.cfg import get_cfg, get_save_dir -from ultralytics.data.utils import check_cls_dataset, check_det_dataset +from ultralytics.data.utils import check_cls_dataset, check_det_dataset, check_mtlcls_dataset from ultralytics.nn.tasks import attempt_load_one_weight, attempt_load_weights from ultralytics.utils import ( DEFAULT_CFG, @@ -413,10 +413,16 @@ class BaseTrainer: loss_len = self.tloss.shape[0] if len(self.tloss.shape) else 1 losses = self.tloss if loss_len > 1 else torch.unsqueeze(self.tloss, 0) if RANK in {-1, 0}: - pbar.set_description( - ("%11s" * 2 + "%11.4g" * (2 + loss_len)) - % (f"{epoch + 1}/{self.epochs}", mem, *losses, batch["cls"].shape[0], batch["img"].shape[-1]) - ) + if self.args.task == "MTL": + pbar.set_description( + ("%11s" * 2 + "%11.4g" * (2 + loss_len)) + % (f"{epoch + 1}/{self.epochs}", mem, *losses, batch["cls"][0].shape[0], batch["img"].shape[-1]) + ) + else: + pbar.set_description( + ("%11s" * 2 + "%11.4g" * (2 + loss_len)) + % (f"{epoch + 1}/{self.epochs}", mem, *losses, batch["cls"].shape[0], batch["img"].shape[-1]) + ) self.run_callbacks("on_batch_end") if self.args.plots and ni in self.plot_idx: self.plot_training_samples(batch, ni) @@ -542,6 +548,8 @@ class BaseTrainer: try: if self.args.task == "classify": data = check_cls_dataset(self.args.data) + elif self.args.task == "MTL": + data = check_mtlcls_dataset(self.args.data) elif self.args.data.split(".")[-1] in {"yaml", "yml"} or self.args.task in { "detect", "segment", diff --git a/ultralytics/engine/validator.py b/ultralytics/engine/validator.py index e2fbfff..63f844e 100644 --- a/ultralytics/engine/validator.py +++ b/ultralytics/engine/validator.py @@ -28,7 +28,7 @@ import numpy as np import torch from ultralytics.cfg import get_cfg, get_save_dir -from ultralytics.data.utils import check_cls_dataset, check_det_dataset +from ultralytics.data.utils import check_cls_dataset, check_det_dataset, check_mtlcls_dataset from ultralytics.nn.autobackend import AutoBackend from ultralytics.utils import LOGGER, TQDM, callbacks, colorstr, emojis from ultralytics.utils.checks import check_imgsz @@ -101,7 +101,12 @@ class BaseValidator: self.plots = {} self.callbacks = _callbacks or callbacks.get_default_callbacks() - + def mean_if_list(self,lst): + if isinstance(lst, list) and lst: # 确保lst是列表且不为空 + return round(sum(lst) / len(self.names), 5) + else: + return lst # 如果不是列表或列表为空,直接返回v(可能已经是数字) + @smart_inference_mode() def __call__(self, trainer=None, model=None): """Supports validation of a pre-trained model if passed or a model being trained if trainer is passed (trainer @@ -140,7 +145,9 @@ class BaseValidator: self.args.batch = 1 # export.py models default to batch-size 1 LOGGER.info(f"Forcing batch=1 square inference (1,3,{imgsz},{imgsz}) for non-PyTorch models") - if str(self.args.data).split(".")[-1] in {"yaml", "yml"}: + if self.args.task == "MTL": + self.data = check_mtlcls_dataset(self.args.data, split=self.args.split) + elif str(self.args.data).split(".")[-1] in {"yaml", "yml"}: self.data = check_det_dataset(self.args.data) elif self.args.task == "classify": self.data = check_cls_dataset(self.args.data, split=self.args.split) @@ -202,7 +209,7 @@ class BaseValidator: if self.training: model.float() results = {**stats, **trainer.label_loss_items(self.loss.cpu() / len(self.dataloader), prefix="val")} - return {k: round(float(v), 5) for k, v in results.items()} # return results as 5 decimal place floats + return {k: round(float(v) if not isinstance(v, list) else self.mean_if_list(v), 5) for k, v in results.items()} # return results as 5 decimal place floats else: LOGGER.info( "Speed: %.1fms preprocess, %.1fms inference, %.1fms loss, %.1fms postprocess per image" diff --git a/ultralytics/models/yolo/MTL/__init__.py b/ultralytics/models/yolo/MTL/__init__.py new file mode 100644 index 0000000..29cd0ae --- /dev/null +++ b/ultralytics/models/yolo/MTL/__init__.py @@ -0,0 +1,7 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license + +from ultralytics.models.yolo.MTL.predict import ClassificationPredictor +from ultralytics.models.yolo.MTL.train import ClassificationTrainer +from ultralytics.models.yolo.MTL.val import ClassificationValidator + +__all__ = "ClassificationPredictor", "ClassificationTrainer", "ClassificationValidator" \ No newline at end of file diff --git a/ultralytics/models/yolo/MTL/predict.py b/ultralytics/models/yolo/MTL/predict.py new file mode 100644 index 0000000..998196e --- /dev/null +++ b/ultralytics/models/yolo/MTL/predict.py @@ -0,0 +1,61 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license + +import cv2 +import torch +from PIL import Image + +from ultralytics.engine.predictor import BasePredictor +from ultralytics.engine.results import Results +from ultralytics.utils import DEFAULT_CFG, ops + + +class ClassificationPredictor(BasePredictor): + """ + A class extending the BasePredictor class for prediction based on a classification model. + + Notes: + - Torchvision classification models can also be passed to the 'model' argument, i.e. model='resnet18'. + + Example: + ```python + from ultralytics.utils import ASSETS + from ultralytics.models.yolo.classify import ClassificationPredictor + + args = dict(model='yolov8n-cls.pt', source=ASSETS) + predictor = ClassificationPredictor(overrides=args) + predictor.predict_cli() + ``` + """ + + def __init__(self, cfg=DEFAULT_CFG, overrides=None, _callbacks=None): + """Initializes ClassificationPredictor setting the task to 'classify'.""" + super().__init__(cfg, overrides, _callbacks) + self.args.task = "classify" + self._legacy_transform_name = "ultralytics.yolo.data.augment.ToTensor" + + def preprocess(self, img): + """Converts input image to model-compatible data type.""" + if not isinstance(img, torch.Tensor): + is_legacy_transform = any( + self._legacy_transform_name in str(transform) for transform in self.transforms.transforms + ) + if is_legacy_transform: # to handle legacy transforms + img = torch.stack([self.transforms(im) for im in img], dim=0) + else: + img = torch.stack( + [self.transforms(Image.fromarray(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))) for im in img], dim=0 + ) + img = (img if isinstance(img, torch.Tensor) else torch.from_numpy(img)).to(self.model.device) + return img.half() if self.model.fp16 else img.float() # uint8 to fp16/32 + + def postprocess(self, preds, img, orig_imgs): + """Post-processes predictions to return Results objects.""" + if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list + orig_imgs = ops.convert_torch2numpy_batch(orig_imgs) + + results = [] + for i, pred in enumerate(preds): + orig_img = orig_imgs[i] + img_path = self.batch[0][i] + results.append(Results(orig_img, path=img_path, names=self.model.names, probs=pred)) + return results \ No newline at end of file diff --git a/ultralytics/models/yolo/MTL/train.py b/ultralytics/models/yolo/MTL/train.py new file mode 100644 index 0000000..75e2de3 --- /dev/null +++ b/ultralytics/models/yolo/MTL/train.py @@ -0,0 +1,168 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license + +import gc +from math import dist +import math +import time +import warnings +import numpy as np + +import torch +import torchvision + +from ultralytics.data import MTLDataset, build_dataloader +from ultralytics.engine.trainer import BaseTrainer +from ultralytics.models import yolo +from ultralytics.nn.tasks import ClassificationModel,MTLClassificationModel, attempt_load_one_weight +from ultralytics.utils import DEFAULT_CFG, LOGGER, RANK, TQDM, colorstr, yaml_load +from ultralytics.utils.plotting import plot_images, plot_results +from ultralytics.utils.torch_utils import is_parallel, strip_optimizer, torch_distributed_zero_first + + +class ClassificationTrainer(BaseTrainer): + """ + A class extending the BaseTrainer class for training based on a classification model. + + Notes: + - Torchvision classification models can also be passed to the 'model' argument, i.e. model='resnet18'. + + Example: + ```python + from ultralytics.models.yolo.classify import ClassificationTrainer + + args = dict(model='yolov8n-cls.pt', data='imagenet10', epochs=3) + trainer = ClassificationTrainer(overrides=args) + trainer.train() + ``` + """ + + def __init__(self, cfg=DEFAULT_CFG, overrides=None, _callbacks=None): + """Initialize a ClassificationTrainer object with optional configuration overrides and callbacks.""" + if overrides is None: + overrides = {} + overrides["task"] = "MTL" + if overrides.get("imgsz") is None: + overrides["imgsz"] = 224 + super().__init__(cfg, overrides, _callbacks) + + def set_model_attributes(self): + """Set the YOLO model's class names from the loaded dataset.""" + self.model.names = self.data["names"] + + def get_model(self, cfg=None, weights=None, verbose=True): + """Returns a modified PyTorch model configured for training YOLO.""" + model = MTLClassificationModel(cfg, nc=self.data["nc"], verbose=verbose and RANK == -1) + if weights: + model.load(weights) + + for m in model.modules(): + if not self.args.pretrained and hasattr(m, "reset_parameters"): + m.reset_parameters() + if isinstance(m, torch.nn.Dropout) and self.args.dropout: + m.p = self.args.dropout # set dropout + for p in model.parameters(): + p.requires_grad = True # for training + return model + + def setup_model(self): + """Load, create or download model for any task.""" + if isinstance(self.model, torch.nn.Module): # if model is loaded beforehand. No setup needed + return + + model, ckpt = str(self.model), None + # Load a YOLO model locally, from torchvision, or from Ultralytics assets + if model.endswith(".pt"): + self.model, ckpt = attempt_load_one_weight(model, device="cpu") + for p in self.model.parameters(): + p.requires_grad = True # for training + elif model.split(".")[-1] in {"yaml", "yml"}: + self.model = self.get_model(cfg=model) + elif model in torchvision.models.__dict__: + self.model = torchvision.models.__dict__[model](weights="IMAGENET1K_V1" if self.args.pretrained else None) + else: + raise FileNotFoundError(f"ERROR: model={model} not found locally or online. Please check model name.") + ClassificationModel.reshape_outputs(self.model, self.data["nc"]) + + return ckpt + + def build_dataset(self, img_path, mode="train", batch=None): + """Creates a ClassificationDataset instance given an image path, and mode (train/test etc.).""" + return MTLDataset(data=img_path, args=self.args, augment=mode == "train") + + def get_dataloader(self, dataset_path, batch_size=16, rank=0, mode="train"): + """Returns PyTorch DataLoader with transforms to preprocess images for inference.""" + with torch_distributed_zero_first(rank): # init dataset *.cache only once if DDP + dataset = self.build_dataset(dataset_path, mode) + + loader = build_dataloader(dataset, batch_size, self.args.workers, rank=rank) + # Attach inference transforms + if mode != "train": + if is_parallel(self.model): + self.model.module.transforms = loader.dataset.torch_transforms + else: + self.model.transforms = loader.dataset.torch_transforms + return loader + + def preprocess_batch(self, batch): + """Preprocesses a batch of images and classes.""" + batch["img"] = batch["img"].to(self.device) + for i in range(len(batch["cls"])): + batch["cls"][i] = batch["cls"][i].to(self.device) + return batch + + + def progress_string(self): + """Returns a formatted string showing training progress.""" + return ("\n" + "%11s" * (4 + len(self.loss_names))) % ( + "Epoch", + "GPU_mem", + *self.loss_names, + "Instances", + "Size", + ) + + def get_validator(self): + """Returns an instance of ClassificationValidator for validation.""" + cfg = yaml_load(self.args.data) # model dict + self.loss_names = ["loss"] + [pair.split(':')[1] for pair in cfg["tasks_name"].split()] + return yolo.MTL.ClassificationValidator(self.test_loader, self.save_dir, _callbacks=self.callbacks) + + def label_loss_items(self, loss_items=None, prefix="train"): + """ + Returns a loss dict with labelled training loss items tensor. + + Not needed for classification but necessary for segmentation & detection + """ + keys = [f"{prefix}/{x}" for x in self.loss_names] + if loss_items is None: + return keys + loss_items = [float(item) for item in loss_items] + return dict(zip(keys, loss_items)) + + def plot_metrics(self): + """Plots metrics from a CSV file.""" + plot_results(file=self.csv, classify=True, on_plot=self.on_plot) # save results.png + + def final_eval(self): + """Evaluate trained model and save validation results.""" + for f in self.last, self.best: + if f.exists(): + strip_optimizer(f) # strip optimizers + if f is self.best: + LOGGER.info(f"\nValidating {f}...") + self.validator.args.data = self.args.data + self.validator.args.plots = self.args.plots + self.metrics = self.validator(model=f) + self.metrics.pop("fitness", None) + self.run_callbacks("on_fit_epoch_end") + LOGGER.info(f"Results saved to {colorstr('bold', self.save_dir)}") + + def plot_training_samples(self, batch, ni): + """Plots training samples with their annotations.""" + plot_images( + images=batch["img"], + batch_idx=torch.arange(len(batch["img"])), + cls=batch["cls"][0].view(-1), # warning: use .view(), not .squeeze() for Classify models + fname=self.save_dir / f"train_batch{ni}.jpg", + on_plot=self.on_plot, + ) \ No newline at end of file diff --git a/ultralytics/models/yolo/MTL/val.py b/ultralytics/models/yolo/MTL/val.py new file mode 100644 index 0000000..738fbc1 --- /dev/null +++ b/ultralytics/models/yolo/MTL/val.py @@ -0,0 +1,133 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license + +import torch +import json + +from ultralytics.data import ClassificationDataset, build_dataloader +from ultralytics.engine.validator import BaseValidator +from ultralytics.utils import LOGGER +from ultralytics.utils.metrics import ClassifyMetrics, ConfusionMatrix, MTLClassifyMetrics +from ultralytics.utils.plotting import plot_images + + +class ClassificationValidator(BaseValidator): + """ + A class extending the BaseValidator class for validation based on a classification model. + + Notes: + - Torchvision classification models can also be passed to the 'model' argument, i.e. model='resnet18'. + + Example: + ```python + from ultralytics.models.yolo.classify import ClassificationValidator + + args = dict(model='yolov8n-cls.pt', data='imagenet10') + validator = ClassificationValidator(args=args) + validator() + ``` + """ + + def __init__(self, dataloader=None, save_dir=None, pbar=None, args=None, _callbacks=None): + """Initializes ClassificationValidator instance with args, dataloader, save_dir, and progress bar.""" + super().__init__(dataloader, save_dir, pbar, args, _callbacks) + self.targets = None + self.pred = None + self.args.task = "MTL" + self.metrics = MTLClassifyMetrics() + + def get_desc(self): + """Returns a formatted string summarizing classification metrics.""" + return ("%22s" + "%11s" * 2) % ("classes", "top1_acc", "top5_acc") + + def init_metrics(self, model): + """Initialize confusion matrix, class names, and top-1 and top-5 accuracy.""" + if isinstance(model.names[0],str): + for i in range(len(model.names)): + inner_s = model.names[i][1:-1] + pairs = inner_s.split(', ') + d = {} + for pair in pairs: + key, value = pair.split(': ') + d[int(key)] = value.strip("'") # 移除值两侧的单引号 + model.names[i] = d + self.names = model.names + self.nc = [ ] + for i in range(len(model.names)): + self.nc.append(len(model.names[i])) + self.confusion_matrix = [ ConfusionMatrix(nc=item, conf=self.args.conf, task="classify") for item in self.nc ] + self.pred = [] + self.targets = [] + + def preprocess(self, batch): + """Preprocesses input batch and returns it.""" + batch["img"] = batch["img"].to(self.device, non_blocking=True) + batch["img"] = batch["img"].half() if self.args.half else batch["img"].float() + for i in range(len(batch["cls"])): + batch["cls"][i] = batch["cls"][i].to(self.device) + return batch + + def update_metrics(self, preds, batch): + """Updates running metrics with model predictions and batch targets.""" + lpred = [] + ltarget = [] + for i in range(len(self.names)): + n5 = min(len(self.names[i]), 5) + lpred.append(preds[i].argsort(1, descending=True)[:, :n5]) + self.pred.append(lpred) + ltarget.append(batch["cls"][i]) + self.targets.append(ltarget) + + def finalize_metrics(self, *args, **kwargs): + """Finalizes metrics of the model such as confusion_matrix and speed.""" + for i in range(len(self.names)): + self.confusion_matrix[i].process_cls_preds([sublist[i] for sublist in self.pred], [sublist[i] for sublist in self.targets]) + if self.args.plots: + for normalize in True, False: + self.confusion_matrix[i].plot( + save_dir=self.save_dir, names=self.names[i].values(), normalize=normalize, on_plot=self.on_plot + ) + self.metrics.speed = self.speed + self.metrics.confusion_matrix = self.confusion_matrix + self.metrics.save_dir = self.save_dir + + def get_stats(self): + """Returns a dictionary of metrics obtained by processing targets and predictions.""" + self.metrics.process(self.targets, self.pred) + return self.metrics.results_dict + + def build_dataset(self, img_path): + """Creates and returns a ClassificationDataset instance using given image path and preprocessing parameters.""" + return ClassificationDataset(root=img_path, args=self.args, augment=False, prefix=self.args.split) + + def get_dataloader(self, dataset_path, batch_size): + """Builds and returns a data loader for classification tasks with given parameters.""" + dataset = self.build_dataset(dataset_path) + return build_dataloader(dataset, batch_size, self.args.workers, rank=-1) + + def print_results(self): + """Prints evaluation metrics for YOLO object detection model.""" + pf = "%22s" + "%11.3g" * len(self.metrics.srckeys) # print format + for i in range(len(self.names)): + LOGGER.info(pf % ("all", self.metrics.top1[i], self.metrics.top5[i])) + + def plot_val_samples(self, batch, ni): + """Plot validation image samples.""" + # plot_images( + # images=batch["img"], + # batch_idx=torch.arange(len(batch["img"])), + # cls=batch["cls"].view(-1), # warning: use .view(), not .squeeze() for Classify models + # fname=self.save_dir / f"val_batch{ni}_labels.jpg", + # names=self.names, + # on_plot=self.on_plot, + # ) + + def plot_predictions(self, batch, preds, ni): + """Plots predicted bounding boxes on input images and saves the result.""" + # plot_images( + # batch["img"], + # batch_idx=torch.arange(len(batch["img"])), + # cls=torch.argmax(preds, dim=1), + # fname=self.save_dir / f"val_batch{ni}_pred.jpg", + # names=self.names, + # on_plot=self.on_plot, + # ) # pred diff --git a/ultralytics/models/yolo/__init__.py b/ultralytics/models/yolo/__init__.py index 8d9aedf..61265ea 100644 --- a/ultralytics/models/yolo/__init__.py +++ b/ultralytics/models/yolo/__init__.py @@ -1,7 +1,7 @@ # Ultralytics YOLO 🚀, AGPL-3.0 license -from ultralytics.models.yolo import classify, detect, obb, pose, segment, world +from ultralytics.models.yolo import classify, MTL, detect, obb, pose, segment, world from .model import YOLO, YOLOWorld -__all__ = "classify", "segment", "detect", "pose", "obb", "world", "YOLO", "YOLOWorld" +__all__ = "classify", "MTL" ,"segment", "detect", "pose", "obb", "world", "YOLO", "YOLOWorld" diff --git a/ultralytics/models/yolo/model.py b/ultralytics/models/yolo/model.py index d540322..5b008ef 100644 --- a/ultralytics/models/yolo/model.py +++ b/ultralytics/models/yolo/model.py @@ -4,7 +4,7 @@ from pathlib import Path from ultralytics.engine.model import Model from ultralytics.models import yolo -from ultralytics.nn.tasks import ClassificationModel, DetectionModel, OBBModel, PoseModel, SegmentationModel, WorldModel +from ultralytics.nn.tasks import ClassificationModel,MTLClassificationModel, DetectionModel, OBBModel, PoseModel, SegmentationModel, WorldModel from ultralytics.utils import ROOT, yaml_load @@ -31,6 +31,12 @@ class YOLO(Model): "trainer": yolo.classify.ClassificationTrainer, "validator": yolo.classify.ClassificationValidator, "predictor": yolo.classify.ClassificationPredictor, + }, + "MTL": { + "model": MTLClassificationModel, + "trainer": yolo.MTL.ClassificationTrainer, + "validator": yolo.MTL.ClassificationValidator, + "predictor": yolo.MTL.ClassificationPredictor, }, "detect": { "model": DetectionModel, diff --git a/ultralytics/nn/modules/head.py b/ultralytics/nn/modules/head.py index 95fa825..c38d2ae 100644 --- a/ultralytics/nn/modules/head.py +++ b/ultralytics/nn/modules/head.py @@ -15,7 +15,7 @@ from .conv import Conv from .transformer import MLP, DeformableTransformerDecoder, DeformableTransformerDecoderLayer from .utils import bias_init_with_prob, linear_init -__all__ = "Detect", "Segment", "Pose", "Classify", "OBB", "RTDETRDecoder", "v10Detect" +__all__ = "Detect", "Segment", "Pose", "Classify", "OBB", "RTDETRDecoder", "v10Detect", "MTLClassify" class Detect(nn.Module): @@ -600,4 +600,56 @@ class v10Detect(Detect): self.one2one_cv3 = copy.deepcopy(self.cv3) def switch_to_deploy(self): - del self.cv2, self.cv3 \ No newline at end of file + del self.cv2, self.cv3 + + +class MTLClassify(nn.Module): + """YOLOv8 classification head, i.e. x(b,c1,20,20) to x(b,c2).""" + + def __init__(self, c1, c2, k=1, s=1, p=None, g=1): + """Initializes YOLOv8 classification head with specified input and output channels, kernel size, stride, + padding, and groups. + """ + super().__init__() + if isinstance(c2, list): + self.n_task = len(c2) + else: + self.n_task = 1 + c_ = 1280 # efficientnet_b0 size + self.conv = Conv(c1, c_, k, s, p, g) + self.pool = nn.AdaptiveAvgPool2d(1) # to x(b,c_,1,1) + self.drop = nn.Dropout(p=0.0, inplace=True) + self.linearpool = [] + if isinstance(c2, list): + for i in range(self.n_task): + self.linearpool.append(nn.Linear(c_, c2[i])) # to x(b,c2) + else: + self.linearpool.append(nn.Linear(c_, c2)) + + def forward(self, x): + """Performs a forward pass of the YOLO model on input image data.""" + temp = x + if isinstance(x, list): + x = torch.cat(x, 1) + out = [] + for i in range(self.n_task): + temp = self.conv(x) + temp = self.pool(temp).flatten(1) + temp = self.drop(temp) + + if self.n_task != 1: + if temp.dtype == torch.float16: + temp = self.linearpool[i].to('cuda').to(torch.float16)(temp.to('cuda')) + else: + temp = self.linearpool[i].to('cuda').to(torch.float32)(temp.to('cuda')) + if self.training: + out.append(temp.softmax(1)) + else: + out.append(temp) + else: + temp = self.linearpool[i](temp) + if self.training: + out = (temp.softmax(1)) + else: + out = temp + return out diff --git a/ultralytics/nn/tasks.py b/ultralytics/nn/tasks.py index 258ab74..75f4576 100644 --- a/ultralytics/nn/tasks.py +++ b/ultralytics/nn/tasks.py @@ -61,11 +61,13 @@ from ultralytics.nn.modules import ( v10Detect, ) from ultralytics.nn.extra_modules import * +from ultralytics.nn.modules.head import MTLClassify from ultralytics.utils import DEFAULT_CFG_DICT, DEFAULT_CFG_KEYS, LOGGER, colorstr, emojis, yaml_load from ultralytics.utils.checks import check_requirements, check_suffix, check_yaml from ultralytics.utils.loss import ( E2EDetectLoss, v8ClassificationLoss, + v8MTLClassificationLoss, v8DetectionLoss, v8OBBLoss, v8PoseLoss, @@ -538,7 +540,12 @@ class ClassificationModel(BaseModel): raise ValueError("nc not specified. Must specify nc in model.yaml or function arguments.") self.model, self.save = parse_model(deepcopy(self.yaml), ch=ch, verbose=verbose) # model, savelist self.stride = torch.Tensor([1]) # no stride constraints - self.names = {i: f"{i}" for i in range(self.yaml["nc"])} # default names dict + if isinstance(self.yaml["nc"], list): + self.names = [] + for i in range(len(self.yaml["nc"])): + self.names.append({i: f"{j}" for j in range(self.yaml["nc"][i])}) # default names dict) + else: + self.names = {i: f"{i}" for i in range(self.yaml["nc"])} # default names dict self.info() @staticmethod @@ -566,7 +573,60 @@ class ClassificationModel(BaseModel): """Initialize the loss criterion for the ClassificationModel.""" return v8ClassificationLoss() +class MTLClassificationModel(BaseModel): + """YOLOv8 classification model.""" + def __init__(self, cfg="yolov8n-cls.yaml", ch=3, nc=None, verbose=True): + """Init ClassificationModel with YAML, channels, number of classes, verbose flag.""" + super().__init__() + self._from_yaml(cfg, ch, nc, verbose) + + def _from_yaml(self, cfg, ch, nc, verbose): + """Set YOLOv8 model configurations and define the model architecture.""" + self.yaml = cfg if isinstance(cfg, dict) else yaml_model_load(cfg) # cfg dict + + # Define model + ch = self.yaml["ch"] = self.yaml.get("ch", ch) # input channels + if nc and nc != self.yaml["nc"]: + LOGGER.info(f"Overriding model.yaml nc={self.yaml['nc']} with nc={nc}") + self.yaml["nc"] = nc # override YAML value + elif not nc and not self.yaml.get("nc", None): + raise ValueError("nc not specified. Must specify nc in model.yaml or function arguments.") + self.model, self.save = parse_model(deepcopy(self.yaml), ch=ch, verbose=verbose) # model, savelist + self.stride = torch.Tensor([1]) # no stride constraints + if isinstance(self.yaml["nc"], list): + self.names = [] + for i in range(len(self.yaml["nc"])): + self.names.append({i: f"{j}" for j in range(self.yaml["nc"][i])}) # default names dict) + else: + self.names = {i: f"{i}" for i in range(self.yaml["nc"])} # default names dict + self.info() + + @staticmethod + def reshape_outputs(model, nc): + """Update a TorchVision classification model to class count 'n' if required.""" + name, m = list((model.model if hasattr(model, "model") else model).named_children())[-1] # last module + if isinstance(m, Classify): # YOLO Classify() head + if m.linear.out_features != nc: + m.linear = nn.Linear(m.linear.in_features, nc) + elif isinstance(m, nn.Linear): # ResNet, EfficientNet + if m.out_features != nc: + setattr(model, name, nn.Linear(m.in_features, nc)) + elif isinstance(m, nn.Sequential): + types = [type(x) for x in m] + if nn.Linear in types: + i = len(types) - 1 - types[::-1].index(nn.Linear) # last nn.Linear index + if m[i].out_features != nc: + m[i] = nn.Linear(m[i].in_features, nc) + elif nn.Conv2d in types: + i = len(types) - 1 - types[::-1].index(nn.Conv2d) # last nn.Conv2d index + if m[i].out_channels != nc: + m[i] = nn.Conv2d(m[i].in_channels, nc, m[i].kernel_size, m[i].stride, bias=m[i].bias is not None) + + def init_criterion(self): + """Initialize the loss criterion for the ClassificationModel.""" + return v8MTLClassificationLoss(self) + class RTDETRDetectionModel(DetectionModel): """ RTDETR (Real-time DEtection and Tracking using Transformers) Detection Model class. @@ -1018,7 +1078,7 @@ def parse_model(d, ch, verbose=True, warehouse_manager=None): # model_dict, inp args[j] = a n = n_ = max(round(n * depth), 1) if n > 1 else n # depth gain if m in { - Classify, Conv, ConvTranspose, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, Focus, BottleneckCSP, C1, C2, C2f, ELAN1, AConv, SPPELAN, C2fAttn, C3, C3TR, + Classify, MTLClassify, Conv, ConvTranspose, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, Focus, BottleneckCSP, C1, C2, C2f, ELAN1, AConv, SPPELAN, C2fAttn, C3, C3TR, C3Ghost, nn.Conv2d, nn.ConvTranspose2d, DWConvTranspose2d, C3x, RepC3, PSA, SCDown, C2fCIB, C2f_Faster, C2f_ODConv, C2f_Faster_EMA, C2f_DBB, GSConv, GSConvns, VoVGSCSP, VoVGSCSPns, VoVGSCSPC, C2f_CloAtt, C3_CloAtt, SCConv, C2f_SCConv, C3_SCConv, C2f_ScConv, C3_ScConv, C3_EMSC, C3_EMSCP, C2f_EMSC, C2f_EMSCP, RCSOSA, KWConv, C2f_KW, C3_KW, DySnakeConv, C2f_DySnakeConv, C3_DySnakeConv, @@ -1301,7 +1361,7 @@ def parse_model(d, ch, verbose=True, warehouse_manager=None): # model_dict, inp else: c2 = ch[f] - if isinstance(c2, list) and m not in {ChannelTransformer, PyramidContextExtraction, CrossLayerChannelAttention, CrossLayerSpatialAttention, MutilScaleEdgeInfoGenetator}: + if isinstance(c2, list) and m not in {MTLClassify,ChannelTransformer, PyramidContextExtraction, CrossLayerChannelAttention, CrossLayerSpatialAttention, MutilScaleEdgeInfoGenetator}: is_backbone = True m_ = m m_.backbone = True diff --git a/ultralytics/utils/loss.py b/ultralytics/utils/loss.py index b1af2e6..9251049 100644 --- a/ultralytics/utils/loss.py +++ b/ultralytics/utils/loss.py @@ -984,6 +984,23 @@ class v8ClassificationLoss: loss_items = loss.detach() return loss, loss_items +class v8MTLClassificationLoss: + """Criterion class for computing training losses.""" + def __init__(self,model): + self.device = next(model.parameters()).device # get model device + + def __call__(self, preds, batch): + """Compute the classification loss between predictions and true labels.""" + loss = torch.zeros(len(preds) + 1, device=self.device) + if isinstance(preds, list): + for i in range(len(preds)): + loss[i + 1] = torch.nn.functional.cross_entropy(preds[i], batch["cls"][i], reduction="mean") + loss[0] = loss.sum() + return loss.sum(), loss.detach() # loss(box, cls, dfl) + else: + loss = (torch.nn.functional.cross_entropy(preds, batch["cls"], reduction="mean")) + loss_items = loss.detach() + return loss, loss_items class v8OBBLoss(v8DetectionLoss): def __init__(self, model): diff --git a/ultralytics/utils/metrics.py b/ultralytics/utils/metrics.py index 97991e9..626c88f 100644 --- a/ultralytics/utils/metrics.py +++ b/ultralytics/utils/metrics.py @@ -1830,6 +1830,85 @@ class ClassifyMetrics(SimpleClass): return [] +class MTLClassifyMetrics(SimpleClass): + """ + Class for computing classification metrics including top-1 and top-5 accuracy. + + Attributes: + top1 (float): The top-1 accuracy. + top5 (float): The top-5 accuracy. + speed (Dict[str, float]): A dictionary containing the time taken for each step in the pipeline. + + Properties: + fitness (float): The fitness of the model, which is equal to top-5 accuracy. + results_dict (Dict[str, Union[float, str]]): A dictionary containing the classification metrics and fitness. + keys (List[str]): A list of keys for the results_dict. + + Methods: + process(targets, pred): Processes the targets and predictions to compute classification metrics. + """ + + def __init__(self) -> None: + """Initialize a ClassifyMetrics instance.""" + self.top1 = [0,0,0,0] + self.top5 = [0,0,0,0] + self.speed = {"preprocess": 0.0, "inference": 0.0, "loss": 0.0, "postprocess": 0.0} + self.task = "MTL" + + def process(self, targets, pred): + """Target classes and predicted classes.""" + # 多标签处理 + gpred = [] + gtargets = [] + gcorrect = [] + gacc = [] + + for i in range(len(targets[0])): + gpred.append( torch.cat([sublist[i] for sublist in pred])) + gtargets.append(torch.cat([sublist[i] for sublist in targets])) + gcorrect.append((gtargets[i][:, None] == gpred[i]).float()) + gacc.append(torch.stack((gcorrect[i][:, 0], gcorrect[i].max(1).values), dim=1)) # (top1, top5) accuracy + self.top1[i], self.top5[i] = gacc[i].mean(0).tolist() + + @property + def fitness(self): + """Returns mean of top-1 and top-5 accuracies as fitness score.""" + return sum((self.top1 + self.top5)) / 2 + + @property + def results_dict(self): + """返回一个包含模型性能指标和适应度得分的字典。""" + results = {} + # 将 top1 和 top5 的值分别填入字典 + for i in range(len(self.top1)): + results[f"metrics/accuracy_top1_{i}"] = self.top1[i] + results[f"metrics/accuracy_top5_{i}"] = self.top5[i] + # 添加 fitness 值 + results["fitness"] = self.fitness + return results + + @property + def keys(self): + metrics = [] + """Returns a list of keys for the results_dict property.""" + for i in range(len(self.top1)): + metrics.append("metrics/accuracy_top1_"+str(i)) + metrics.append("metrics/accuracy_top5_"+str(i)) + return metrics + @property + def srckeys(self): + return ["metrics/accuracy_top1", "metrics/accuracy_top5"] + + @property + def curves(self): + """Returns a list of curves for accessing specific metrics curves.""" + return [] + + @property + def curves_results(self): + """Returns a list of curves for accessing specific metrics curves.""" + return [] + class OBBMetrics(SimpleClass): def __init__(self, save_dir=Path("."), plot=False, on_plot=None, names=()) -> None: """Initialize an OBBMetrics instance with directory, plotting, callback, and class names.""" diff --git a/ultralytics/utils/torch_utils.py b/ultralytics/utils/torch_utils.py index e6b1b4f..67c5d90 100644 --- a/ultralytics/utils/torch_utils.py +++ b/ultralytics/utils/torch_utils.py @@ -328,12 +328,12 @@ def get_flops(model, imgsz=640): # Use stride size for input tensor # stride = max(int(model.stride.max()), 32) if hasattr(model, "stride") else 32 # max stride stride = 640 - im = torch.empty((1, 3, stride, stride), device=p.device) # input image in BCHW format + im = torch.zeros((1, 3, stride, stride), device=p.device) # input image in BCHW format flops = thop.profile(deepcopy(model), inputs=[im], verbose=False)[0] / 1e9 * 2 # stride GFLOPs return flops * imgsz[0] / stride * imgsz[1] / stride # imgsz GFLOPs except Exception: # Use actual image size for input tensor (i.e. required for RTDETR models) - im = torch.empty((1, 3, *imgsz), device=p.device) # input image in BCHW format + im = torch.zeros((1, 3, *imgsz), device=p.device) # input image in BCHW format return thop.profile(deepcopy(model), inputs=[im], verbose=False)[0] / 1e9 * 2 # imgsz GFLOPs except Exception: return 0.0 @@ -350,14 +350,14 @@ def get_flops_with_torch_profiler(model, imgsz=640): try: # Use stride size for input tensor stride = (max(int(model.stride.max()), 32) if hasattr(model, "stride") else 32) * 2 # max stride - im = torch.empty((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format + im = torch.zeros((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format with torch.profiler.profile(with_flops=True) as prof: model(im) flops = sum(x.flops for x in prof.key_averages()) / 1e9 flops = flops * imgsz[0] / stride * imgsz[1] / stride # 640x640 GFLOPs except Exception: # Use actual image size for input tensor (i.e. required for RTDETR models) - im = torch.empty((1, p.shape[1], *imgsz), device=p.device) # input image in BCHW format + im = torch.zeros((1, p.shape[1], *imgsz), device=p.device) # input image in BCHW format with torch.profiler.profile(with_flops=True) as prof: model(im) flops = sum(x.flops for x in prof.key_averages()) / 1e9 diff --git a/utils/tobacco_label.py b/utils/tobacco_label.py new file mode 100644 index 0000000..9946053 --- /dev/null +++ b/utils/tobacco_label.py @@ -0,0 +1,74 @@ +# 输入数据集路径,划分完成训练集与测试集 +# 配置文件里面进行路径拼接 + +from pathlib import Path +# import splitfolders +import os + +# 读取,设置标签 +def find_images_in_dir(directory, extensions=('.jpg', '.png', '.jpeg')): + for root, dirs, files in os.walk(directory): + for file in files: + if any(file.lower().endswith(ext) for ext in extensions): + yield os.path.join(root, file) + +def path_subtract(full_path, base_path): + # 将两个路径都转换为绝对路径,以确保它们是可比较的 + full_path = os.path.abspath(full_path) + base_path = os.path.abspath(base_path) + + # 检查base_path是否是full_path的前缀 + if full_path.startswith(base_path): + # 使用relpath函数获取相对于base_path的子路径 + relative_path = os.path.relpath(full_path, base_path) + return relative_path + else: + # 如果base_path不是full_path的前缀,则不能相减(或者说结果无意义) + return None + +def getlabel(root): + train_set = [] + val_set = [] + test_set = [] + for image_path in find_images_in_dir(root): + # 处理每一个文件,训练集 + subpath = path_subtract(image_path,root) + Parts = (Path(subpath)).parts[1] + + if 'train' in subpath: + train_set.append([subpath,',',Parts.replace('_', ',') ]) + if 'val' in subpath: + val_set.append([subpath,',',Parts.replace('_', ',') ]) + if 'test' in subpath: + test_set.append([subpath,',',Parts.replace('_', ',') ]) + + if not os.path.exists(os.path.join(root,'label')): + # 如果文件夹不存在,则创建它 + os.makedirs(os.path.join(root,'label')) + + # 输出到txt + if len(train_set) > 0: + with open(os.path.join(root,'label','train.txt'), 'w', encoding='utf-8') as file: + # 使用循环将列表中的每一项写入文件,并在每项后面加上换行符 + for item in train_set: + for sub in item: + file.write(sub) + file.write('\n') + if len(val_set) > 0: + with open(os.path.join(root,'label','val.txt'), 'w', encoding='utf-8') as file: + # 使用循环将列表中的每一项写入文件,并在每项后面加上换行符 + for item in val_set: + for sub in item: + file.write(sub) + file.write('\n') + if len(test_set) > 0: + with open(os.path.join(root,'label','test.txt'), 'w', encoding='utf-8') as file: + # 使用循环将列表中的每一项写入文件,并在每项后面加上换行符 + for item in test_set: + for sub in item: + file.write(sub) + file.write('\n') + +if __name__ == '__main__': + # train:validation:test=8:1:1 + getlabel('G:/dataset/test/split') \ No newline at end of file