在Colab中使用cv2 dnn_superres超分图像速度极慢,求问题排查
错误使用upsample方法的目标尺寸参数
你的EDSR模型是固定3倍放大的(sr.setModel("edsr", 3)),但调用sr.upsample(image, (1080, 1920))时强制指定了目标尺寸。这种情况下,模型会先按3倍放大原图,再额外做一次插值缩放来匹配指定尺寸,大幅增加计算量,尤其是当原图尺寸和目标尺寸的比例远不是3倍时。
修复:去掉目标尺寸参数,让模型按自身倍率放大:result = sr.upsample(image)如果最终需要(1080,1920)的尺寸,建议先按3倍放大后,再用
cv2.resize单独处理,选择高效的插值方法(比如cv2.INTER_LINEAR),避免让超分辨率模型承担额外缩放工作。确认Colab是否启用GPU加速
虽然代码里设置了DNN_BACKEND_CUDA和DNN_TARGET_CUDA,但Colab默认运行时是CPU。需手动切换:点击顶部菜单栏「Runtime」→「Change runtime type」,在「Hardware accelerator」里选择「GPU」,重启运行时即可。没开GPU的话,用CPU跑EDSR这类大模型必然极慢。检查模型加载是否正常
确保EDSR_x3.pb是正确的预训练模型,无损坏或路径错误。如果模型加载失败,OpenCV会自动 fallback到CPU运行,导致速度骤降。可以加一行代码验证:print("Backend:", cv2.dnn.getPreferableBackend(sr.getNet())) print("Target:", cv2.dnn.getPreferableTarget(sr.getNet()))如果输出不是CUDA相关,说明模型加载或后端设置有问题。
图像尺寸优化
从你提供的图像来看,原图是低分辨率小图,若原图尺寸和3倍放大后的尺寸差异过大,强制缩放会增加不必要的计算开销。建议先确认原图尺寸,再决定是否需要额外缩放,避免无意义的计算。
内容的提问来源于stack exchange,提问作者Yadnesh Salvi

