सामग्री पर जाएं

के लिए संदर्भ ultralytics/models/yolo/classify/val.py

नोट

यह फ़ाइल यहाँ उपलब्ध है https://github.com/ultralytics/ultralytics/बूँद/मुख्य/ultralytics/मॉडल/yolo/classify/val.py का उपयोग करें। यदि आप कोई समस्या देखते हैं तो कृपया पुल अनुरोध का योगदान करके इसे ठीक करने में मदद करें 🛠️। 🙏 धन्यवाद !



ultralytics.models.yolo.classify.val.ClassificationValidator

का रूप: BaseValidator

वर्गीकरण मॉडल के आधार पर सत्यापन के लिए BaseValidator वर्ग का विस्तार करने वाला वर्ग।

नोट्स
  • टॉर्चविजन वर्गीकरण मॉडल को 'मॉडल' तर्क में भी पारित किया जा सकता है, यानी मॉडल = 'रेसनेट18'।
उदाहरण
from ultralytics.models.yolo.classify import ClassificationValidator

args = dict(model='yolov8n-cls.pt', data='imagenet10')
validator = ClassificationValidator(args=args)
validator()
में स्रोत कोड ultralytics/models/yolo/classify/val.py
 12 बांग्लादेश 12 बांग्लादेश 14 15 16 17 18  19 20 21 22 23 24 25 26 27 28 29 30 31 32 33  34 35 36  37  38        39 40   41 42    43 44   45        46   47 48 49 50 51 52 53 54 55 56 57 58  59 60 61 62 63 64 65 66 67 68          69 70   71 72  73 74 75  76 77          78  79 80 81 82 83 84 85 86 87 88  89 90 91 92   93 94 95 96 97  98    99  100  101  102  103  104  105  106  107108 109 110 111 112113
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 = "classify"
        self.metrics = ClassifyMetrics()

    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."""
        self.names = model.names
        self.nc = len(model.names)
        self.confusion_matrix = ConfusionMatrix(nc=self.nc, conf=self.args.conf, task="classify")
        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()
        batch["cls"] = batch["cls"].to(self.device)
        return batch

    def update_metrics(self, preds, batch):
        """Updates running metrics with model predictions and batch targets."""
        n5 = min(len(self.names), 5)
        self.pred.append(preds.argsort(1, descending=True)[:, :n5])
        self.targets.append(batch["cls"])

    def finalize_metrics(self, *args, **kwargs):
        """Finalizes metrics of the model such as confusion_matrix and speed."""
        self.confusion_matrix.process_cls_preds(self.pred, self.targets)
        if self.args.plots:
            for normalize in True, False:
                self.confusion_matrix.plot(
                    save_dir=self.save_dir, names=self.names.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.keys)  # print format
        LOGGER.info(pf % ("all", self.metrics.top1, self.metrics.top5))

    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

__init__(dataloader=None, save_dir=None, pbar=None, args=None, _callbacks=None)

args, dataloader, save_dir और प्रगति पट्टी के साथ ClassificationValidator उदाहरण प्रारंभ करता है।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
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 = "classify"
    self.metrics = ClassifyMetrics()

build_dataset(img_path)

दिए गए छवि पथ और प्रीप्रोसेसिंग पैरामीटर का उपयोग करके एक वर्गीकरणडेटासेट आवृत्ति बनाता है और लौटाता है।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
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)

finalize_metrics(*args, **kwargs)

मॉडल के मैट्रिक्स को अंतिम रूप देता है जैसे confusion_matrix और गति।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
def finalize_metrics(self, *args, **kwargs):
    """Finalizes metrics of the model such as confusion_matrix and speed."""
    self.confusion_matrix.process_cls_preds(self.pred, self.targets)
    if self.args.plots:
        for normalize in True, False:
            self.confusion_matrix.plot(
                save_dir=self.save_dir, names=self.names.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

get_dataloader(dataset_path, batch_size)

दिए गए मापदंडों के साथ वर्गीकरण कार्यों के लिए डेटा लोडर बनाता है और लौटाता है।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
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)

get_desc()

वर्गीकरण मीट्रिक सारांशित करने वाली स्वरूपित स्ट्रिंग लौटाता है.

में स्रोत कोड ultralytics/models/yolo/classify/val.py
def get_desc(self):
    """Returns a formatted string summarizing classification metrics."""
    return ("%22s" + "%11s" * 2) % ("classes", "top1_acc", "top5_acc")

get_stats()

लक्ष्य और पूर्वानुमानों को संसाधित करके प्राप्त मीट्रिक का एक शब्दकोश देता है.

में स्रोत कोड ultralytics/models/yolo/classify/val.py
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

init_metrics(model)

भ्रम मैट्रिक्स, वर्ग के नाम और शीर्ष -1 और शीर्ष -5 सटीकता को प्रारंभ करें।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
def init_metrics(self, model):
    """Initialize confusion matrix, class names, and top-1 and top-5 accuracy."""
    self.names = model.names
    self.nc = len(model.names)
    self.confusion_matrix = ConfusionMatrix(nc=self.nc, conf=self.args.conf, task="classify")
    self.pred = []
    self.targets = []

plot_predictions(batch, preds, ni)

भूखंडों ने इनपुट छवियों पर बाउंडिंग बॉक्स की भविष्यवाणी की और परिणाम को बचाता है।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
104 105 106 107 108 109 110 111 112 113
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

plot_val_samples(batch, ni)

प्लॉट सत्यापन छवि नमूने।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
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,
    )

preprocess(batch)

इनपुट बैच को प्रीप्रोसेस करता है और इसे लौटाता है।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
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()
    batch["cls"] = batch["cls"].to(self.device)
    return batch

print_results()

प्रिंट मूल्यांकन मेट्रिक्स के लिए YOLO वस्तु का पता लगाने का मॉडल।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
def print_results(self):
    """Prints evaluation metrics for YOLO object detection model."""
    pf = "%22s" + "%11.3g" * len(self.metrics.keys)  # print format
    LOGGER.info(pf % ("all", self.metrics.top1, self.metrics.top5))

update_metrics(preds, batch)

मॉडल पूर्वानुमानों और बैच लक्ष्यों के साथ चल रहे मीट्रिक अपडेट।

में स्रोत कोड ultralytics/models/yolo/classify/val.py
def update_metrics(self, preds, batch):
    """Updates running metrics with model predictions and batch targets."""
    n5 = min(len(self.names), 5)
    self.pred.append(preds.argsort(1, descending=True)[:, :n5])
    self.targets.append(batch["cls"])





2023-11-12 बनाया गया, अपडेट किया गया 2023-11-25
लेखक: ग्लेन-जोचर (3)