谁能帮我理解这段代码?精简版
Can anyone help me understand this code ? Tensorflow Lite
在 thensorflow-Lite Android 应用程序中,我们必须将位图转换为字节缓冲区,用于此的代码是:
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);
}
}
谁能解释一下什么是图像均值和 STD,以及这些代码行中发生了什么?
提供的代码说明:
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 个值并将它们存储在列表中。
在 thensorflow-Lite Android 应用程序中,我们必须将位图转换为字节缓冲区,用于此的代码是:
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);
}
}
谁能解释一下什么是图像均值和 STD,以及这些代码行中发生了什么?
提供的代码说明:
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 个值并将它们存储在列表中。