如何在OAK-D上运行输入尺寸大于其1920×1080分辨率的Model Zoo模型
OAK-D运行输入尺寸大于原生传感器分辨率模型的解决方案
报错背景
部署OpenVINO Model Zoo中的fastseg-small、icnet-camvid-ava-sparse-60-0001、semantic-segmentation-adas-0001等模型到OAK-D设备时,执行命令python depthai_demo.py -cnn semantic-segmentation-adas-0001触发了如下报错:
Using depthai module from: /media/winstonfan/Workspace/Learning/Github/depthai/myvenv/lib/python3.8/site-packages/depthai.cpython-38-x86_64-linux-gnu.so Depthai version installed: 2.8.0.0 Available devices: [0] 14442C10013762D700 [X_LINK_UNBOOTED] Traceback (most recent call last): File "depthai_demo.py", line 180, in <module> device.startPipeline(pm.p) RuntimeError: , LRT: 'ColorCamera(4) - 'preview' width or height (2048, 1024) bigger than sensor resolution (1920, 1080)'
报错根因为模型要求的输入分辨率大于当前DepthAI库给彩色传感器配置的1920×1080输出上限,可通过以下任意方法解决:
解决方法
- 方法1:升级DepthAI库版本
当前使用的2.8.0.0属于非常老旧的版本,默认只给彩色传感器配置了1080P输出上限。升级到最新正式版后,可调用OAK-D彩色传感器最高4K(4056×3040)的输出能力,2048×1024的模型输入尺寸不会超过该上限,即可正常运行。 - 方法2:使用官方demo自带的resize参数
不需要修改代码,直接在运行命令中添加输入resize参数即可,修改后的命令为:python depthai_demo.py -cnn semantic-segmentation-adas-0001 --resize_input
demo会自动将摄像头输出的1080P帧缩放至模型需要的输入尺寸后再送入推理节点。 - 方法3:自定义Pipeline新增ImageManip节点做缩放
如果是自己写Pipeline代码,可以在彩色摄像头节点和神经网络节点之间新增一个ImageManip节点,把摄像头输出的1080P帧手动缩放至模型要求的2048×1024尺寸后再送入推理,核心代码示例如下:
import depthai as dai pipeline = dai.Pipeline() # 定义彩色摄像头节点 cam = pipeline.createColorCamera() cam.setResolution(dai.ColorCameraProperties.SensorResolution.THE_1080_P) # 定义ImageManip缩放节点 manip = pipeline.createImageManip() manip.initialConfig.setResize(2048, 1024) cam.preview.link(manip.inputImage) # 定义神经网络节点 nn = pipeline.createNeuralNetwork() manip.out.link(nn.input)
- 方法4:调整模型输入尺寸重新转换
如果不想做输入缩放影响推理精度,可以用OpenVINO Model Optimizer重新转换模型,指定输入尺寸为1920×1080或者更小的、不超过传感器输出上限的尺寸,生成适配的IR文件后再转换成DepthAI支持的blob格式即可直接运行。
内容的提问来源于stack exchange,提问作者Franva
相关产品推荐
相关产品推荐

