Выход модели модели Android (Kotlin) Tflite не соответствует выводу Python для того же входаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Выход модели модели Android (Kotlin) Tflite не соответствует выводу Python для того же входа

Сообщение Anonymous »

Я уже задал этот вопрос в Google AI для разработчиков, но не получил ответа, поэтому я попробую здесь. В настоящее время я работаю над скоростью вывода вывода различных моделей обнаружения объектов, и мой код работает для RT-DETRV2, YOLO11 и YOLO8. К сожалению, Yolox не работает, я воссоздал трубопровод с вывода рабочего сценария вывода Python в моем проекте Android, в то время как значения входного буфера для модели Android такие же, как и у массива Numpy, вывода в версии Python (подтвержденные визуально и проверяют позиции в массиве), выход совершенно другой. Настолько, что модель ничего не обнаруживает на тестовом изображении в Android, одновременно создавая правильные ограничительные ящики в Python. Весь код с спецификациями среды доступен на GitHub, ниже приведена сокращенная версия кода.
Python: < /p>
if len(img.shape) == 3:
padded_img = np.ones((input_size[0], input_size[1], 3), dtype=np.uint8) * 114
else:
padded_img = np.ones(input_size, dtype=np.uint8) * 114

r = min(input_size[0] / img.shape[0], input_size[1] / img.shape[1])
resized_img = cv2.resize(img,(int(img.shape[1] * r), int(img.shape[0] * r)),
interpolation=cv2.INTER_LINEAR,).astype(np.uint8)

padded_img[: int(img.shape[0] * r), : int(img.shape[1] * r)] = resized_img
padded_img = np.ascontiguousarray(padded_img, dtype=np.float32)

interpreter = tf.lite.Interpreter(model_path=MODEL_PATH)
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.set_tensor(input_details[0]['index'], img[None, :, :, :])
< /code>
android (kotlin) < /p>
val imgmat = Mat()
Utils.bitmapToMat(decode,imgmat)
val imgmat3 = Mat()
Imgproc.cvtColor(imgmat,imgmat3,Imgproc.COLOR_RGBA2BGR)
val resizedmat = Mat()
val paddedmat = Mat()

val size = Size((1920F*ratio).toDouble(),(1080F*ratio).toDouble())
val scalar = Scalar(114.0,114.0,114.0)
Imgproc.resize(imgmat3,resizedmat,size, 0.0, 0.0,INTER_LINEAR)
Core.copyMakeBorder(resizedmat,paddedmat,0,(imsize- (1080*ratio)).toInt(),0,0,Core.BORDER_CONSTANT,scalar)
val bitmap = createBitmap(paddedmat.cols(),paddedmat.width(),Bitmap.Config.ARGB_8888)
Imgproc.cvtColor(paddedmat,argbmat,Imgproc.COLOR_RGB2RGBA)
Utils.matToBitmap(argbmat,bitmap)

val image = TensorImage(DataType.UINT8)
image.load(bitmap)
val tensorproc = ImageProcessor.Builder().add(CastOp(INPUT_IMAGE_TYPE)).build()
val proctensor = tensorproc.process(image)
val imageBuffer = proctensor.buffer
val output = TensorBuffer.createFixedSize(intArrayOf(numChannel, numElements), OUTPUT_IMAGE_TYPE)
interpreter.run(imageBuffer, output.buffer)

< /code>
Большинство связанных темы посвящены вопросам с эндзианностью входного буфера, это не применяется здесь, из -за использования данных о тензорамере, который обрабатывает это автоматически. Мое текущее подозрение состоит в том, что TensorFlow не использует входные значения в том же порядке, что и будет отображаться, если массив был распущен, но я не знаю, как легко проверить это.
Я был бы признателен за любую информацию по этой теме.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... t-for-same
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»