YoloDetectionNetwork

Yolo detection network node is very similar to NeuralNetwork (in fact it extends it). The only difference is that this node is specifically for the (tiny) Yolo V3/V4 NN and it decodes the result of the NN on device. This means that Out of this node is not a NNData (a byte array) but a ImgDetections that can easily be used in your code.

How to place it

pipeline = dai.Pipeline()
yoloDet = pipeline.createYoloDetectionNetwork()
dai::Pipeline pipeline;
auto yoloDet = pipeline.create<dai::node::YoloDetectionNetwork>();

Inputs and Outputs

            ┌───────────────────┐
            │                   │       out
            │                   ├───────────►
            │     Yolo          │
            │     Detection     │
input       │     Network       │ passthrough
───────────►│-------------------├───────────►
            │                   │
            └───────────────────┘

Message types

Usage

pipeline = dai.Pipeline()
yoloDet = pipeline.createYoloDetectionNetwork()
yoloDet.setBlobPath(nnBlobPath)

# Yolo specific parameters
yoloDet.setConfidenceThreshold(0.5)
yoloDet.setNumClasses(80)
yoloDet.setCoordinateSize(4)
yoloDet.setAnchors(np.array([10,14, 23,27, 37,58, 81,82, 135,169, 344,319]))
yoloDet.setAnchorMasks({"side26": np.array([1, 2, 3]), "side13": np.array([3, 4, 5])})
yoloDet.setIouThreshold(0.5)
dai::Pipeline pipeline;
auto yoloDet = pipeline.create<dai::node::YoloDetectionNetwork>();
yoloDet->setBlobPath(nnBlobPath);

// yolo specific parameters
yoloDet->setConfidenceThreshold(0.5f);
yoloDet->setNumClasses(80);
yoloDet->setCoordinateSize(4);
yoloDet->setAnchors({10, 14, 23, 27, 37, 58, 81, 82, 135, 169, 344, 319});
yoloDet->setAnchorMasks({{"side13", {3, 4, 5}}, {"side26", {1, 2, 3}}});
yoloDet->setIouThreshold(0.5f);

Reference

class depthai.YoloDetectionNetwork

YoloDetectionNetwork node. Parses Yolo results

class Connection

Connection between an Input and Output

class Id

Node identificator. Unique for every node on a single Pipeline

Properties

alias of depthai.DetectionNetworkProperties

getAssets(self: depthai.Node) → List[depthai.Asset]

Retrieves all nodes assets

getInputs(self: depthai.Node) → List[dai::Node::Input]

Retrieves all nodes inputs

getName(self: depthai.Node)str

Retrieves nodes name

getNumInferenceThreads(self: depthai.NeuralNetwork)int

How many inference threads will be used to run the network

Returns

Number of threads, 0, 1 or 2. Zero means AUTO

getOutputs(self: depthai.Node) → List[dai::Node::Output]

Retrieves all nodes outputs

property id

Id of node

property input

Input message with data to be infered upon Default queue is blocking with size 5

property out

Outputs ImgDetections message that carries parsed detection results.

property passthrough

Passthrough message on which the inference was performed.

Suitable for when input queue is set to non-blocking behavior.

setAnchorMasks(self: depthai.YoloDetectionNetwork, anchorMasks: Dict[str, List[int]])None

Set anchor masks

setAnchors(self: depthai.YoloDetectionNetwork, anchors: List[float])None

Set anchors

setBlobPath(self: depthai.NeuralNetwork, path: str)None

Load network blob into assets and use once pipeline is started.

Throws if file doesn’t exist or isn’t a valid network blob.

Parameter path:

Path to network blob

setConfidenceThreshold(self: depthai.DetectionNetwork, thresh: float)None

Specifies confidence threshold at which to filter the rest of the detections.

Parameter thresh:

Detection confidence must be greater than specified threshold to be added to the list

setCoordinateSize(self: depthai.YoloDetectionNetwork, coordinates: int)None

Set coordianate size

setIouThreshold(self: depthai.YoloDetectionNetwork, thresh: float)None

Set Iou threshold

setNumClasses(self: depthai.YoloDetectionNetwork, numClasses: int)None

Set num classes

setNumInferenceThreads(self: depthai.NeuralNetwork, numThreads: int)None

How many threads should the node use to run the network.

Parameter numThreads:

Number of threads to dedicate to this node

setNumNCEPerInferenceThread(self: depthai.NeuralNetwork, numNCEPerThread: int)None

How many Neural Compute Engines should a single thread use for inference

Parameter numNCEPerThread:

Number of NCE per thread

setNumPoolFrames(self: depthai.NeuralNetwork, numFrames: int)None

Specifies how many frames will be avilable in the pool

Parameter numFrames:

How many frames will pool have

class dai::node::YoloDetectionNetwork : public dai::node::DetectionNetwork

YoloDetectionNetwork node. Parses Yolo results.

Public Functions

YoloDetectionNetwork(const std::shared_ptr<PipelineImpl> &par, int64_t nodeId)
void setNumClasses(const int numClasses)

Set num classes.

void setCoordinateSize(const int coordinates)

Set coordianate size.

void setAnchors(std::vector<float> anchors)

Set anchors.

void setAnchorMasks(std::map<std::string, std::vector<int>> anchorMasks)

Set anchor masks.

void setIouThreshold(float thresh)

Set Iou threshold.

Got questions?

We’re always happy to help with code or other questions you might have.