DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.

本页目录

  • 如何放置
  • 输入和输出
  • Passthrough 机制
  • 使用
  • 功能示例
  • 参考

NeuralNetwork

该节点在输入数据上运行神经网络推理。只要 VPU 支持所有层,任何 OpenVINO 神经网络都可以通过该节点运行。 这使您可以从 Open Model ZooDepthAI Model Zoo 中选择 200多种预训练模型 并直接在 OAK 设备上运行。神经网络必须为 .blob 格式才能与 VPU 兼容。关于如何将神经网络(NN)编译为 .blob 的说明,请参见此处

如何放置

Python

Python
1pipeline = dai.Pipeline()
2nn = pipeline.create(dai.node.NeuralNetwork)

C++

C++
1dai::Pipeline pipeline;
2auto nn = pipeline.create<dai::node::NeuralNetwork>();

输入和输出

Passthrough 机制

Passthrough 机制非常有用,当节点的输入被指定为非阻塞时,消息可能会被覆盖。 此时我们无法知道节点对哪条消息执行了操作(例如 NN,是对第 25 帧进行推理,还是跳过了第 25 帧而对第 26 帧进行了推理)。 同时,这意味着:如果 xlink 和主机输入队列是阻塞的,并且我们同时收到 passthrough 和输出,我们可以对这两个队列进行阻塞获取,从而确保总是得到匹配的帧。它们可能不会同时到达, 但两者都会到达,并且会在队列中的正确位置,以便一起取出。

使用

Python

Python
1pipeline = dai.Pipeline()
2nn = pipeline.create(dai.node.NeuralNetwork)
3nn.setBlobPath(bbBlobPath)
4cam.out.link(nn.input)
5
6# Send NN out to the host via XLink
7nnXout = pipeline.create(dai.node.XLinkOut)
8nnXout.setStreamName("nn")
9nn.out.link(nnXout.input)
10
11with dai.Device(pipeline) as device:
12  qNn = device.getOutputQueue("nn")
13
14  nnData = qNn.get() # Blocking
15
16  # NN can output from multiple layers. Print all layer names:
17  print(nnData.getAllLayerNames())
18
19  # Get layer named "Layer1_FP16" as FP16
20  layer1Data = nnData.getLayerFp16("Layer1_FP16")
21
22  # You can now decode the output of your NN

C++

C++
1dai::Pipeline pipeline;
2auto nn = pipeline.create<dai::node::NeuralNetwork>();
3nn->setBlobPath(bbBlobPath);
4cam->out.link(nn->input);
5
6// Send NN out to the host via XLink
7auto nnXout = pipeline.create<dai::node::XLinkOut>();
8nnXout->setStreamName("nn");
9nn->out.link(nnXout->input);
10
11dai::Device device(pipeline);
12// Start the pipeline
13device.startPipeline();
14
15auto qNn = device.getOutputQueue("nn");
16
17auto nnData = qNn->get<dai::NNData>(); // Blocking
18
19// NN can output from multiple layers. Print all layer names:
20cout << nnData->getAllLayerNames();
21
22// Get layer named "Layer1_FP16" as FP16
23auto layer1Data = nnData->getLayerFp16("Layer1_FP16");
24
25// You can now decode the output of your NN

功能示例

参考

class

depthai.node.NeuralNetwork(depthai.Node)

method
getNumInferenceThreads(self) -> int: int
How many inference threads will be used to run the network  Returns:     Number of threads, 0, 1 or 2. Zero means AUTO
method
method
setBlobPath(self, path: Path)
Load network blob into assets and use once pipeline is started.  Throws:     Error if file doesn't exist or isn't a valid network blob.  Parameter ``path``:     Path to network blob
method
setNumInferenceThreads(self, numThreads: typing.SupportsInt)
How many threads should the node use to run the network.  Parameter ``numThreads``:     Number of threads to dedicate to this node
method
setNumNCEPerInferenceThread(self, numNCEPerThread: typing.SupportsInt)
How many Neural Compute Engines should a single thread use for inference  Parameter ``numNCEPerThread``:     Number of NCE per thread
method
setNumPoolFrames(self, numFrames: typing.SupportsInt)
Specifies how many frames will be available in the pool  Parameter ``numFrames``:     How many frames will pool have
property
input
Input message with data to be inferred upon Default queue is blocking with size 5
property
inputs
Inputs mapped to network inputs. Useful for inferring from separate data sources Default input is non-blocking with queue size 1 and waits for messages
property
out
Outputs NNData message that carries inference results
property
passthrough
Passthrough message on which the inference was performed.  Suitable for when input queue is set to non-blocking behavior.
property
passthroughs
Passthroughs which correspond to specified input

需要帮助?

请前往 OAKChina 官网 获取技术支持或解答您的任何疑问。