2

tensorflow-lite を使用して、Android でセマンティック セグメンテーション アプリケーションに取り組んでいます。モデルを実行し、tflite.run メソッドの助けを借りて ByteBuffer 形式で出力を取得できました。しかし、Java でこの出力から画像を抽出できませんでした。パスカル voc データセットでトレーニングされ、実際に変換されたモデルTF モデルからの tflite 形式: ' mobilenetv2_dm05_coco_voc_trainval ' 。

この問題は、次のスタックオーバーフローの質問に似ているようです: tensorflow-lite - using tflite Interpreter to get an image in the output

float データ型の変換を扱う同じ問題は、github の問題で修正されているようです: https://github.com/tensorflow/tensorflow/issues/23483

では、UINT8 モデルの出力からセグメンテーション マスクを適切に抽出するにはどうすればよいでしょうか。

4

2 に答える 2

1

このコードを試してください:

    /**
     * Converts ByteBuffer with segmentation mask to the Bitmap
     *
     * @param byteBuffer Output ByteBuffer from Interpreter.run
     * @param imgSizeX Model output image width
     * @param imgSizeY Model output image height
     * @return Mono color Bitmap mask
     */
    private Bitmap convertByteBufferToBitmap(ByteBuffer byteBuffer, int imgSizeX, int imgSizeY){
        byteBuffer.rewind();
        byteBuffer.order(ByteOrder.nativeOrder());
        Bitmap bitmap = Bitmap.createBitmap(imgSizeX , imgSizeY, Bitmap.Config.ARGB_4444);
        int[] pixels = new int[imgSizeX * imgSizeY];
        for (int i = 0; i < imgSizeX * imgSizeY; i++)
            if (byteBuffer.getFloat()>0.5)
                pixels[i]= Color.argb(100, 255, 105, 180);
            else
                pixels[i]=Color.argb(0, 0, 0, 0);

        bitmap.setPixels(pixels, 0, imgSizeX, 0, 0, imgSizeX, imgSizeY);
        return bitmap;
    }

モノカラー出力のモデルで動作します。

于 2019-02-22T16:07:16.920 に答える