Вывод Yolop, дающий значения NaN на SNPE android

private val modelName = "yolop_seg.dlc"
private fun configureNetwork(): NeuralNetwork? {
        return try {

            val assetInputStream = applicationContext.assets.open(modelName)
            val network = SNPE.NeuralNetworkBuilder(application)
                .setDebugEnabled(false)
                .setRuntimeOrder(NeuralNetwork.Runtime.GPU_FLOAT16)
                .setModel(assetInputStream, assetInputStream.available())
                .setCpuFallbackEnabled(true)
                .setUseUserSuppliedBuffers(false)
                .setUnsignedPD(false)
                .setCpuFixedPointMode(false)
                .setOutputLayers("Sigmoid_1671","Concat_1534", "Sigmoid_1808" )

                .build()
            assetInputStream.close()
            network
        } catch (e: Exception) {
            Log.e("NETWORK", e.message.toString())
            null
        }
    }
 private fun getClassificationResult(network: NeuralNetwork, bitmap: Bitmap): FloatArray{
        val image = Bitmap.createScaledBitmap(bitmap, 640, 640, true)
        
        val inputsMap: MutableMap<String, FloatTensor> = HashMap()
        val inputNames: Set<String> = network.inputTensorsNames
        val outputNames: Set<String> = network.outputTensorsNames
        var mInputLayer = ""
        val mOutputLayer = ""
        mInputLayer = inputNames.iterator().next()

        val tensor = network.createFloatTensor(1, 640, 640,3)
        val dimension = tensor.shape
        val isGrayScale = (dimension[dimension.size - 1] == 1)

        val input: FloatArray = if (!isGrayScale) {
            loadRgbBitmapAsFloat(image)
        } else {
            loadGrayScaleBitmapAsFloat(image)
        }
        tensor.write(input, 0, input.size)
        inputsMap[mInputLayer] = tensor
        val outputsMap = network.execute(inputsMap)

        val driveAreaSeg = outputsMap["drive_area_seg"]
        val DrivAreaSegValues = FloatArray(driveAreaSeg!!.size)
        driveAreaSeg.read(DrivAreaSegValues, 0, DrivAreaSegValues.size)
        val i = 0

        val laneLineSeg = outputsMap["lane_line_seg"]
        val LanLinSegValues = FloatArray(laneLineSeg!!.size)
        laneLineSeg.read(LanLinSegValues, 0, LanLinSegValues.size)

        val detOut = outputsMap.get("det_out")
        val DetOutValues = FloatArray(detOut!!.size)
        detOut.read(DetOutValues, 0, DetOutValues.size)

        return laneLineSeg`

This is how i configure network, pass input tensors. but my variables laneLineSeg,DrivAreaSegValues and DetOutValues are NaN values. Any one can help me on this. Thanks in advance
Олег
Вопрос задан14 сентября 2024 г.

1 Ответ

2
Стоян
Ответ получен13 сентября 2024 г.

Ваш ответ

Загрузить файл.