Android работает как ANeuralNetworksMemory_createFromFd?

В Android Neural Network API в документации сказано: Создает объект общей памяти из файлового дескриптора.

Но я не могу найти место, где указан формат этого файла, в исходном коде TFL:

allocation.cc:

MMAPAllocation::MMAPAllocation(const char* filename,
ErrorReporter* error_reporter)
: Allocation(error_reporter), mmapped_buffer_(MAP_FAILED) {
mmap_fd_ = open(filename, O_RDONLY);
if (mmap_fd_ == -1) {
error_reporter_->Report("Could not open '%s'.", filename);
return;
}
struct stat sb;
fstat(mmap_fd_, &sb);
buffer_size_bytes_ = sb.st_size;
mmapped_buffer_ =
mmap(nullptr, buffer_size_bytes_, PROT_READ, MAP_SHARED, mmap_fd_, 0);
if (mmapped_buffer_ == MAP_FAILED) {
error_reporter_->Report("Mmap of '%s' failed.", filename);
return;
}
}

nnapi_delegate.cc

NNAPIAllocation::NNAPIAllocation(const char* filename,
ErrorReporter* error_reporter)
: MMAPAllocation(filename, error_reporter) {
if (mmapped_buffer_ != MAP_FAILED)
CHECK_NN(ANeuralNetworksMemory_createFromFd(buffer_size_bytes_, PROT_READ,
mmap_fd_, 0, &handle_));
}

Это означает, что TFL открывает файл и передает этот файл в NNAPI. Что мне нужно, так это какой формат этого файла, в котором хранятся тензоры, это файл с плоскими буферами, такой как формат TFL?

Редактировать:
Это пример из документа NNAPI:

ANeuralNetworksMemory* mem1 = NULL;
int fd = open("training_data", O_RDONLY);
ANeuralNetworksMemory_createFromFd(file_size, PROT_READ, fd, 0, &mem1);

Этот файл training_dataКак его содержание должно быть структурировано, чтобы понять NNAPI?

0

Решение

Загрузка файла модели и его разбор выполняются отдельно. Это облегчает смешивание и сопоставление разных моделей памяти и разных форматов файлов. Это также позволяет использовать эти строительные блоки для других функций, таких как загрузка входных данных из файла.

ANeuralNetworksMemory_createFromFd () просто используется для загрузки файла модели в память.

FlatBufferModel :: BuildFromFile () получает выделение (блок памяти), который представляет модель. Это где ANeuralNetworksMemory_createFromFd () вызывается. Затем он сообщает объект FlatBufferModel. Это вызывает tflite :: GetModel (), который находится в подкаталоге схемы. Подкаталог схемы десериализует модель плоского буфера из модели .tflite, загруженной в память.

Когда вызывается NNAPIDelegate :: Invoke (), объект Model схемы используется для построения модели на уровне Android-NN с использованием вызовов, подобных ANeuralNetworksModel_addOperand ().

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]