在TFLite演示模型上使用静态图像实现低精度

时间:2018-04-21 09:48:30

标签: android python tensorflow tensorflow-lite

我正在尝试使用TensorFlow for Poets 2

中的移动网络转移学习示例进行图像分类的TFLite实施

我能够使用代码实验室中的四个花样成功完成转移学习并获得以下屏幕 App after transfer learning

这是一个连续的图像流,正在被分类。

我需要在拍摄照片而不是流后对图像进行分类,然后根据结果采取一些操作。以下是我的方法。

  1. 创建基本相机应用
  2. 拍照并将其保存到存储
  3. 保存图像的uri,然后从中创建一个drawable URI。
  4. 然后将此drawable转换为位图。
  5. 位图大小转换为224 x 224以匹配输入 移动网络模型
  6. 我收到的代码实验室连续流样本的准确度分别为0.05和0.06,在训练的花卉类别中,精确度在0.80-0.90之间
  7. 下面是我将位图转换为224 x 224大小的代码

    private static Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight, boolean isNecessaryToKeepOrig) {
        int width = bm.getWidth();
        int height = bm.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // CREATE A MATRIX FOR THE MANIPULATION
        Matrix matrix = new Matrix();
        // RESIZE THE BIT MAP
        matrix.postScale(scaleWidth, scaleHeight);
    
        // "RECREATE" THE NEW BITMAP
        Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
        if(!isNecessaryToKeepOrig){
            bm.recycle();
        }
        return resizedBitmap;
    }
    

    结果结果是相同的,即使我将原始位图传递给分类器,分类器本身正在将图像转换为224 x 224.我应该对图像进行更多额外处理还是需要更改任何配置在模型中?

2 个答案:

答案 0 :(得分:1)

我认为问题是applyFilter()可以平滑概率。只需将其删除,则概率应显示为正常。

String classifyFrame(Bitmap bitmap) {
...
// smooth the results
//applyFilter(); <--remove it

...
}

答案 1 :(得分:0)

我遇到了同样的问题,我想对图片进行排序。我发现多次调用分类功能。结果往往是正确的。这只是一个糟糕的解决方案。 enter image description here