YoloSpatialDetectionNetwork
YoloSpatialDetectionNetwork
如何放置它
Python
Python
1pipeline = dai.Pipeline()
2yoloSpatial = pipeline.create(dai.node.YoloSpatialDetectionNetwork)输入和输出
配置空间检测

检测网络负责在输入帧中检测对象。它输出一个检测到的对象列表,每个对象由一个边界框、标签和一个置信度分数表示。
深度图与输入帧对齐。这是必需的,因为 DetectionNetwork 在输入帧上运行,而 SpatialLocationCalculator 在深度图上运行。
来自网络的边界框被发送到 SpatialLocationCalculator,并根据
BoundingBoxScaleFactor 进行缩放。这样做是为了确保它包含整个对象。然后,边界框与深度一起用于计算对象的空间坐标。- X 和 Y 坐标取自边界框中心。它们是根据与帧中心和该点的深度的偏移量计算得出的。
- 对于深度(Z),将考虑缩放边界框(ROI)内的每个像素。这将为我们提供一组深度值,然后对这些值进行平均以获得最终的深度值。
平均方法
- 平均值/均值:ROI 的平均值用于计算。
- 最小值:ROI 内的最小值用于计算。
- 最大值:ROI 内的最大值用于计算。
- 众数:ROI 内最频繁的值用于计算。
- 中位数:ROI 内的中位数用于计算。
常见错误
- 细长物体(如杆)的空间坐标可能不准确,因为边界框只有一小部分实际位于检测到的物体上。在这种情况下,最好使用较小的
BoundingBoxScaleFactor(如果可能)。 - 带有孔洞的物体 - 呼啦圈、戒指等。要获得正确的深度,边界框应包含整个物体。与其使用中位数深度,不如使用最小值深度方法来排除计算中的背景。或者,可以在静态环境中设置深度阈值来忽略背景。

用法
Python
Python
1pipeline = dai.Pipeline()
2yoloSpatial = pipeline.create(dai.node.YoloSpatialDetectionNetwork)
3yoloSpatial.setBlobPath(nnBlobPath)
4
5# Spatial detection specific parameters
6yoloSpatial.setConfidenceThreshold(0.5)
7yoloSpatial.input.setBlocking(False)
8yoloSpatial.setBoundingBoxScaleFactor(0.5)
9yoloSpatial.setDepthLowerThreshold(100) # Min 10 centimeters
10yoloSpatial.setDepthUpperThreshold(5000) # Max 5 meters
11
12# Yolo specific parameters
13yoloSpatial.setNumClasses(80)
14yoloSpatial.setCoordinateSize(4)
15yoloSpatial.setAnchors([10,14, 23,27, 37,58, 81,82, 135,169, 344,319])
16yoloSpatial.setAnchorMasks({ "side26": [1,2,3], "side13": [3,4,5] })
17yoloSpatial.setIouThreshold(0.5)功能示例
空间坐标系
参考
class
depthai.node.YoloSpatialDetectionNetwork(depthai.node.SpatialDetectionNetwork)
method
method
getAnchors(self) -> list[float]: list[float]Get anchors
method
getCoordinateSize(self) -> int: intGet coordianate size
method
getIouThreshold(self) -> float: floatGet Iou threshold
method
getNumClasses(self) -> int: intGet num classes
method
setAnchorMasks(self, anchorMasks: collections.abc.Mapping
[
str
,
collections.abc.Sequence
[
typing.SupportsInt
]
])Set anchor masks
method
method
setCoordinateSize(self, coordinates: typing.SupportsInt)Set coordianate size
method
setIouThreshold(self, thresh: typing.SupportsFloat)Set Iou threshold
method
setNumClasses(self, numClasses: typing.SupportsInt)Set num classes
需要帮助?
请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。