在Android上可视化TensorFlow Lite AI结果(译文)
By S.F.
本文链接 https://www.kyfws.com/news/visualizing-tensorflow-lite-ai-results-on-android/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 3 分钟阅读 - 1217 个词 阅读量 0在Android上可视化TensorFlow Lite AI结果(译文)
原文地址:https://www.codeproject.com/Articles/5279605/Visualizing-TensorFlow-Lite-AI-Results-on-Android
原文作者:Joel Ivory Johnson
译文由本站翻译
前言
在本系列的先前安装中,TensorFlow Lite解释器检查了图像并产生了输出.在本文中,我们将学习如何解释这些结果并为其创建可视化效果. 在这里,我们完成了基于TensorFlow Lite的应用程序的构建,该应用程序使用来自ONNX Model Zoo的网络模型执行对象识别. 输出存储在一组数字数组中.除非我们做更多的工作来解释其中的值,否则数值数组本身不会告诉我们有关检查图像的太多信息.数组的其中一个保留值如下所示:
float[][][][][] buf2 = new float[1][13][13][3][85];
让我们拆开这个数组的包装.数组的第一个维度是1,用于选择要检查的一组图像中的哪个图像.对于我们的实施,任何时候都只检查一张图像.数组的下两个维[13] [13]用于选择网格的行和列.每行和每一列都包含有关图像的32x32像素部分的信息.图像部分包含3个针对发现对象的边界框定义.最后一个维度用于包含有关找到的对象的有趣数据的数组. 此维度的前四个元素包含找到的元素的边界矩形:X,Y,WIDTH,HEIGHT.第五个元素包含0到1之间的置信度.如果置信度小于某个阈值,那么我们得出的结论是,没有指向任何感兴趣的内容,并且可以跳过此行中其余数据的评估.剩余80项数据.这80个数据项代表模型可以识别的80类对象.类是对象类型.类的示例包括"猫",“狗”,“远程”,“电视”,“人"等.对于每个类别,该类别中的对象都有一个置信度值. 此数据上需要进行一些处理.这些值的格式不符合我们的期望.需要一些缩放和调整,以使数字与我们的图像对齐.当我们有一个可以接受的置信度的项目时,它将被添加到发现的项目列表中,以便可以在屏幕上呈现标记发现的项目的框.
float[][][][][] result = buf2;
for(int y=0;y<IMAGE_SEGMENT_ROWS;++y) {
for(int x=0;x<IMAGE_SEGMENT_COLS;++x) {
for(int b=0;b<BOXES_PER_SEGMENT;++b) {
final float confidence = expit(result[0][y][x][b][4]);
int classIndex = -1;
float maxConfidence = 0;
float[] classConfidence = new float[OBJECT_CLASS_COUNT];
for(int k=0;k<OBJECT_CLASS_COUNT;++k) {
float currentConfidence = classConfidence[k]= result[0][y][x][b][5 + k];
if(currentConfidence > maxConfidence) {
classIndex = k;
maxConfidence = currentConfidence;
}
}
float combinedConfidence = maxConfidence * confidence;
if(combinedConfidence > DETECTION_THRESHOLD) {
final float xPos = (x + expit(result[0][y][x][b][0])) * (float)IMAGE_SEGMENT_WIDTH;
final float yPos = (y + expit(result[0][y][x][b][1])) * (float)IMAGE_SEGMENT_HEIGHT;
final float w = (float)(Math.exp(result[0][y][x][b][2]))*ANCHORS[b*2+0];
final float h = (float)(Math.exp(result[0][y][x][b][3]))*ANCHORS[b*2+1];
final RectF boundary = new RectF(
Math.max(0, xPos - w/2),
Math.max(0, yPos - h/2),
Math.min(IMAGE_WIDTH-1, xPos + w / 2),
Math.min(IMAGE_HEIGHT-1, yPos + h/2)
);
RecognizedBox box = new RecognizedBox(
labels.get(classIndex),
combinedConfidence,
boundary
);
recognizedItems.add(box);
}
}
}
}
}
添加所有框后,可以在屏幕上呈现已识别项目的边界框,标记已识别的内容.
下一步
我们已经走了很长一段路!到目前为止,我们已经采用了预先训练的模型,将其从ONNX转换为Tensorflow Lite格式,并使用它来检测Android应用程序中的对象.在下一篇文章中,我们将研究一些最佳实践和优化技巧,以在工作时遵循使用Tensorflow Lite.
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
Python Android AI neural tensorflow 新闻 翻译