【问题标题】:Can anyone help me understand this code ? Tensorflow Lite谁能帮我理解这段代码?张量流精简版
【发布时间】:2019-02-17 11:10:02
【问题描述】:

在thensorflow-Lite Android App中,我们必须将Bitmap转换为字节缓冲区,用于此的代码是:

  for (int i = 0; i < DIM_IMG_SIZE_X; ++i) {
  for (int j = 0; j < DIM_IMG_SIZE_Y; ++j) {
    final int val = intValues[pixel++];
    imgData.putFloat((((val >> 16) & 0xFF)-IMAGE_MEAN)/IMAGE_STD);
    imgData.putFloat((((val >> 8) & 0xFF)-IMAGE_MEAN)/IMAGE_STD);
    imgData.putFloat((((val) & 0xFF)-IMAGE_MEAN)/IMAGE_STD);
  }
}

有人可以解释什么是 Image Mean 和 STD 吗,这些代码行中发生了什么?

【问题讨论】:

  • IMAGE_MEANIMAGE_STD 似乎是变量,在方法或类变量的某处初始化。鉴于它们都是大写字母,它们很可能是类变量,可能是最终的,也可能是静态的。他们初始化旁边的评论可能会让您更深入地了解他们的性质。 (这是一个很好的例子,说明了为什么你应该总是为以后可能会使用它的人评论你的代码)

标签: android tensorflow tensorflow-lite


【解决方案1】:

提供的代码说明:

for (int i = 0; i < DIM_IMG_SIZE_X; ++i) { 
for (int j = 0; j < DIM_IMG_SIZE_Y; ++j) { 

在这里,我们创建循环遍历列(x 轴),然后遍历列中的每个像素(y 轴)。

  • 这里,IMAGE_MEAN 是所有图像的所有像素值的平均值,范围为 0 到 255。它可能是 127.5(0 和 255 的平均值)

  • STD 将是标准偏差。它是方差的平方根。参考here

这些值用于标准化。标准化意味着以数据均值为零且标准差为 1 的方式对数据进行转换。请参阅here。这里的公式是,

x_new = ( x - mean ) / std

putFloat 方法在 imgData 对象上调用了 3 次,因为它将 RGB 标准化值附加到列表中。每个像素都有这 3 个值,它们是 0 到 255 之间的 3 个标量,它们是标准化和附加的。

  • >> 运算符使用位运算从单个像素整数值中获取这 3 个值。您可以在互联网上获取有关它们的信息。

遵循这条路径:

  • 逐像素读取图像。

  • 从像素中获取 RGB 值。

  • 标准化这 3 个值并将它们存储在一个列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-29
    • 2020-08-13
    • 1970-01-01
    • 2011-05-03
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多