谁能帮助我理解此代码? Tensorflow Lite

时间:2019-02-17 11:10:03

标签: android tensorflow tensorflow-lite

在thensorflow-Lite Android应用中,我们必须将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);
  }
}

有人可以解释什么是图像均值和性病,这几行代码又发生了什么?

1 个答案:

答案 0 :(得分: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-平均值)/ std

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

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

遵循此路径:

  • 逐像素读取图像。

  • 从像素获取RGB值。

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