简要介绍:
DNN模块是OpenCV中专门用来实现DNN模块相关功能,其作用是载入别的深度学习框架(如TensorFlow、Caffe、Torch等)中已经训练好的模型,然后利用该模型完成预测等工作。
OpenCV中DNN模块不支持网络训练,只是用来加载和运行网络模型。
在使用过程中原格式无需考虑会被转换成统一内部模型。
四行语句:
net = cv2.dnn.readNet(model, config)
blob = cv2.dnn.blobFromImage(image)
net.setInput(blob)
detections = net.forward()
第一行:模型导入
net = cv2.dnn.readNet(model [, config [, framework]])
- net:返回值,返回网络模型对象
- model:模型权重文件(模型参数文件)路径,二进制,文件较大
- config:模型配置文件(网络结构文件)路径,文本文件,文件较小
- framework:DNN框架(省略),自动配置
第二行:图像预处理
blob = cv2.blobFromImage(image [, scalefactor[, size [, mean [,swapRB
[, crop [, ddepth]]]]]])
- blob:预处理(缩放、裁剪、减均值)后得到的符合人工神经网络输入的数据。四维数据,通常为N(每次输入图像数量)、C(图像通道数)、H(图像高度)、W(图像宽度)
- image:输入图像
- scalefactor:比例因子
- size:控制blob的宽度、高度
- mean:从每个通道减去的均值
- swapRB:是否交换R、B通道,默认False
- crop:image与size尺寸不一致时,对image进行调整,True(1.宽高比一致,直接缩放;2.宽高比不一致,缩放后从中心剪裁),False(直接缩放、保留纵横比)
- ddepth:控制输出格式
第三行:设置网格输入函数setInput
net.setInput(blob [, name [, scalefactor [, mean]]])
- blob:blobFromImage返回值
- name:输出层名称
- scalefactor:缩放因子
- mean:均值
第四行:网格计算函数forward
result = net.forward()