DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.
此页面由 AI 自动翻译。查看英文原版

本页目录

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

NeuralNetwork

此节点对输入数据运行神经网络推理。任何 OpenVINO 神经网络都可以使用此节点运行,前提是 VPU 支持所有层 这使您可以从 Open Model ZooDepthAI Model Zoo200 多个预训练模型中进行选择,并直接在 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 和输出,我们可以对这两个队列执行阻塞式 get,并确保始终获得匹配的帧。它们可能不会同时到达,但它们都会到达,并且在队列中的位置正确,可以一起取出。

用法

Python

Python
1pipeline = dai.Pipeline()
2nn = pipeline.create(dai.node.NeuralNetwork)
3nn.setBlobPath(bbBlobPath)
4cam.out.link(nn.input)
5
6# 通过 XLink 将 NN 发送到主机
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() # 阻塞式
15
16  # NN 可以输出多个层。打印所有层名称:
17  print(nnData.getAllLayerNames())
18
19  # 以 FP16 格式获取名为 "Layer1_FP16" 的层
20  layer1Data = nnData.getLayerFp16("Layer1_FP16")
21
22  # 您现在可以解码您的 NN 的输出了

C++

C++
1dai::Pipeline pipeline;
2auto nn = pipeline.create<dai::node::NeuralNetwork>();
3nn->setBlobPath(bbBlobPath);
4cam->out.link(nn->input);
5
6// 通过 XLink 将 NN 发送到主机
7auto nnXout = pipeline.create<dai::node::XLinkOut>();
8nnXout->setStreamName("nn");
9nn->out.link(nnXout->input);
10
11dai::Device device(pipeline);
12// 启动管道
13device.startPipeline();
14
15auto qNn = device.getOutputQueue("nn");
16
17auto nnData = qNn->get<dai::NNData>(); // 阻塞式
18
19// NN 可以输出多个层。打印所有层名称:
20cout << nnData->getAllLayerNames();
21
22// 以 FP16 格式获取名为 "Layer1_FP16" 的层
23auto layer1Data = nnData->getLayerFp16("Layer1_FP16");
24
25// 您现在可以解码您的 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

需要帮助?

请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。