Я уже задал этот вопрос в 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
Выход модели модели Android (Kotlin) Tflite не соответствует выводу Python для того же входа ⇐ Android
Форум для тех, кто программирует под Android
1748912137
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 не использует входные значения в том же порядке, что и будет отображаться, если массив был распущен, но я не знаю, как легко проверить это.
Я был бы признателен за любую информацию по этой теме.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79650499/model-ouput-of-androidkotlin-tflite-model-not-matching-python-output-for-same[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия