tf
— Tensor Flow¶
tf
模块能够执行量化的TensorFlow Lite模型
在OpenMV Cam上(不支持OpenMV Cam M4)。
您可以阅读更多关于如何创建可以运行在OpenMV Cam上的自己的模型,here. 特别的:
或者,只要遵循谷歌的深度的指南 here. 如果您对谷歌的深度的指南有任何问题,请联系谷歌寻求帮助。
最终的输出``.tflite``模型可以让OpenMV Cam直接加载和运行。 也就是说,模型和模型的要求的初始RAM必须 符合在您的OpenMV Cam上可用的帧缓冲堆栈RAM。
OpenMV Cam M7拥有约384KB帧缓冲内存。 请保证你的模型和它需要的初始RAM小于320KB。
OpenMV Cam H7拥有约496KB帧缓冲内存。 请保证你的模型和它需要的初始RAM小于400KB。
OpenMV Cam H7 Plus拥有约31MB的帧缓冲内存。 也就是说,运行一个接近这个尺寸的模型将会非常慢。
另外,还可以将模型加载到MicroPython堆或OpenMV Cam框架缓冲区中。 然而,这在很大程度上限制了所有OpenMV摄像机的模型大小。
函数¶
- tf.classify(path, img[, roi[, min_scale=1.0[, scale_mul=0.5[, x_overlap=0[, y_overlap=0]]]]])¶
在
`img`
上运行TensorFlow Lite图像分类模型,并返回一个tf_classification
对象列表。 这个方法对图像使用可控滑动方式,执行多次模型(默认算法在整个图像帧上只执行网络一次)。path
是OpenMV Cam的磁盘上的.tflite
模型的路径。 为了节省内存,只通过这一个函数,模型被加载到内存中,执行并释放所有内存。 传递"person_detection"
可以从你的OpenMV Cam的内部FLASH加载内置的人检测模型。roi
是感兴趣区域矩形元组(x, y, w, h)。如果没有指定时,它等于图像的整个大小。 只有在roi
内的像素才被操作。min_scale
控制网络的缩放尺度。在默认值网络不缩放。 当值为0.5时,会允许检测大小为图像roi的50%的目标。scale_mul
控制有多少种不同的缩放尺度可以检测出来。 滑动窗口方法的工作原理是将默认的尺度1乘以scale_mul
同时结果大于min_scale
。scale_mul
的默认值是0.5,测试出每次变化可以减少50%的大小。但是,0.95只会减少5%的尺寸。x_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。y_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。
- tf.segment(path, img[, roi])¶
在img上执行TensorFlow Lite图像分割模型, 返回一个灰度的
image
对象列表,对应每一个分割分类的输出通道。为了节省内存,只通过这一个函数,模型被加载到内存中,执行并释放所有内存。
roi
是感兴趣区域矩形元组(x, y, w, h)。如果没有指定时,它等于图像的整个大小。 只有在roi
内的像素才被操作。
- tf.load(path[, load_to_fb=False])¶
path
要加载的.tflite
模型的路径,默认加载到MicroPython堆的内存中。注意!MicroPython堆在OpenMV Cam M7上只有~ 50KB,在OpenMV Cam H7上只有~ 256KB。
传递
"person_detection"
可以从你的OpenMV Cam的内部FLASH加载内置的人检测模型。 这个内置的模型不使用任何Micropython堆内存。因为所有的权重保存在flash,可以和RAM一样访问。load_to_fb
如果传递为True,将会使用预留部分的OpenMV Cam帧缓冲区,来存储TensorFlow Lite模型。 对于不能存储在Micropython堆栈大模型会得到最有效率执行性能,因为不用每次运行都从磁盘导入。 也就是说,帧缓冲所用到的空间将不能再用于其他算法。返回一个可以操作图像的
tf_model
对象。
class tf_classification – tf 分类 检测结果¶
tf_classification对象由 tf.classify()
或 tf_model.classify()
返回。
构造函数¶
- class tf.tf_classification¶
请调用
tf.classify()
或tf_model.classify()
来创建这个对象。
方法¶
- tf_classification.rect()¶
返回tf_classification的边界框的矩形元组(x, y, w, h), 用于
image
方法,比如image.draw_rectangle()
。
- tf_classification.x()¶
返回tf_classification的边界框x坐标(int)。
在对象上使用
[0]
也可以得到这个值。
- tf_classification.y()¶
返回tf_classification的边界框y坐标(int)。
在对象上使用
[1]
也可以得到这个值。
- tf_classification.w()¶
返回tf_classification的边界框w坐标(int)。
在对象上使用
[2]
也可以得到这个值。
- tf_classification.h()¶
返回tf_classification的边界框h坐标(int)。
在对象上使用
[3]
也可以得到这个值。
- tf_classification.classification_output()¶
返回分类标签得分的列表。这个列表的尺寸由你的模型的输出的通道尺寸决定。 例如, 一个理解1000个分类的mobilenet输出包含1000个分数的列表。 在python中使用
zip
可以组合分类的得分和分类的标签。在对象上使用
[4]
也可以得到这个值。
class tf_model – TensorFlow 模型¶
如果您的模型大小足够小,并且您有足够的堆或帧缓冲区空间, 您可能希望直接将模型加载到内存中,以避免每次执行都从磁盘加载。
构造函数¶
方法¶
- tf_model.height()¶
返回模型的输入高度。您可以使用它来适当地调整输入图像的高度。
- tf_model.width()¶
返回模型的输入高度。您可以使用它来适当地调整输入图像的宽度。
- tf_model.channels()¶
返回模型中颜色通道的数量。 灰度是1,RGB是3。
- tf_model.classify(img[, roi[, min_scale=1.0[, scale_mul=0.5[, x_overlap=0[, y_overlap=0]]]]])¶
在
`img`
上运行TensorFlow Lite图像分类模型,并返回一个tf_classification
对象列表。 这个方法对图像使用可控滑动方式,执行多次模型(默认算法在整个图像帧上只执行网络一次)。roi
是感兴趣区域矩形元组(x, y, w, h)。如果没有指定时,它等于图像的整个大小。 只有在roi
内的像素才被操作。min_scale
控制网络的缩放尺度。在默认值网络不缩放。 当值为0.5时,会允许检测大小为图像roi的50%的目标。scale_mul
控制有多少种不同的缩放尺度可以检测出来。 滑动窗口方法的工作原理是将默认的尺度1乘以scale_mul
同时结果大于min_scale
。scale_mul
的默认值是0.5,测试出每次变化可以减少50%的大小。但是,0.95只会减少5%的尺寸。x_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。y_overlap
控制与下一个滑动窗口的区域检测器重叠的百分比。 值为0意味着没有重叠,0.95意味着95%的重叠。
- tf_model.segment(img[, roi])¶
在img上执行TensorFlow Lite图像分割模型, 返回一个灰度的
image
对象列表,对应每一个分割分类的输出通道。为了节省内存,只通过这一个函数,模型被加载到内存中,执行并释放所有内存。
roi
是感兴趣区域矩形元组(x, y, w, h)。如果没有指定时,它等于图像的整个大小。 只有在roi
内的像素才被操作。