Main Content

classify

Classify image as normal or anomalous

Since R2022b

    Description

    isAnomaly = classify(detector,I) predicts whether test image I is anomalous or normal, given an anomaly detector with an anomaly threshold.

    Note

    This functionality requires Deep Learning Toolbox™ and the Automated Visual Inspection Library for Computer Vision Toolbox™. You can install the Automated Visual Inspection Library for Computer Vision Toolbox from Add-On Explorer. For more information about installing add-ons, see Get and Manage Add-Ons.

    example

    isAnomaly = classify(detector,I,Name=Value) specifies options using one or more name-value arguments. For example, classify(detector,I,MiniBatchSize=32) limits the batch size to 32.

    Examples

    collapse all

    Load test images and corresponding labels, then create a datastore that reads the test data. The data set consists of grayscale images of handwritten digits 0–9.

    [Xtest,gtLabels] = digitTest4DArrayData;
    dsTest = arrayDatastore(Xtest,IterationDimension=4);

    Load a pretrained FCDD anomaly detector. This detector has been trained to classify the digit 8 as normal and all other digits as anomalies. Therefore, specify the set of anomaly labels as the set of digits between 0 and 9, excluding 8.

    load("digit8AnomalyDetector.mat");
    anomalyLabels = setdiff(string(0:9),"8");

    Classify each test image as normal or anomalous.

    predLabels = classify(detector,dsTest);

    Calculate metrics for the anomaly detection results.

    metrics = evaluateAnomalyDetection(predLabels,gtLabels,anomalyLabels)
    Evaluating anomaly detection results
    ------------------------------------
    * Finalizing... Done.
    * Data set metrics:
    
        GlobalAccuracy    MeanAccuracy    Precision    Recall    Specificity    F1Score    FalsePositiveRate    FalseNegativeRate
        ______________    ____________    _________    ______    ___________    _______    _________________    _________________
    
            0.7662           0.839         0.98971     0.748        0.93        0.85204          0.07                 0.252      
    
    metrics = 
      anomalyDetectionMetrics with properties:
    
                  ConfusionMatrix: [2x2 table]
        NormalizedConfusionMatrix: [2x2 table]
                   DataSetMetrics: [1x8 table]
                     ClassMetrics: [2x2 table]
    
    

    Display the confusion matrix.

    cm = metrics.ConfusionMatrix
    cm=2×2 table
                   Normal    Anomaly
                   ______    _______
    
        Normal       465        35  
        Anomaly     1134      3366  
    
    

    Input Arguments

    collapse all

    Anomaly detector, specified as an efficientADAnomalyDetector object, an fcddAnomalyDetector object, a fastFlowAnomalyDetector object, or a patchCoreAnomalyDetector object. You must set the Threshold property of the detector before calling this function.

    Test image, specified in one of these formats:

    FormatSupported Detectors

    M-by-N-by-3 numeric array representing a truecolor image.

    EfficientAD, FCDD, FastFlow, PatchCore

    M-by-N-by-3-by-B numeric array representing a batch of B truecolor images.

    EfficientAD, FCDD, FastFlow, PatchCore

    Datastore that reads and returns truecolor images. The images must all have the same size.

    EfficientAD, FCDD, FastFlow, PatchCore

    Formatted dlarray (Deep Learning Toolbox) object with two spatial dimensions and one channel dimension. You can specify multiple test images by including a batch dimension.

    EfficientAD, FCDD, FastFlow

    FCDD anomaly detectors also support grayscale test images, with one color channel instead of three.

    Name-Value Arguments

    Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

    Example: isAnomaly = classify(detector,I,MiniBatchSize=32) limits the batch size to 32.

    Size of batches for calculating predictions, specified as a positive integer. Larger batch sizes lead to faster processing but take up more memory.

    Function for computing a scalar score from an anomaly map when detector is an efficientADAnomalyDetector object, an fcddAnomalyDetector object, or a fastFlowAnomalyDetector object, specified as a function handle. The function handle ScoreFunction must represent a function that accepts the input data I and returns an output in the form of a numeric scalar. I must be 2-D numeric image data, dlarray data with two spatial dimensions, or a datastore. The default value of ScoreFunction depends on the type of detector specified:

    Detector Specified in detector ArgumentDefault ScoreFunction Value
    FastFlow

    @(I)max(I,[],[1 2])

    EfficientAD

    @(I)max(I,[],[1 2 3])

    FCDD

    @(I)mean(I,[1 2])

    PatchCore

    Not supported

    Hardware resource on which to run the detector, specified as "auto", "gpu", or "cpu". The table shows the valid hardware resource values.

    Resource Action
    "auto"Use a GPU if it is available. Otherwise, use the CPU.
    "gpu"Use the GPU. To use a GPU, you must have Parallel Computing Toolbox™ and a CUDA® enabled NVIDIA® GPU. If a suitable GPU is not available, the function returns an error. For information about the supported compute capabilities, see GPU Computing Requirements (Parallel Computing Toolbox).
    "cpu"Use the CPU.

    Output Arguments

    collapse all

    Test image is anomaly, returned as an N-element logical vector, where N is the number of test images in I. The value true indicates an anomaly (positive detection). The value false indicates normality (negative detection).

    Data Types: logical

    Extended Capabilities

    Version History

    Introduced in R2022b

    expand all