如何工作anealurnetworksmemory_createfromfd

How works ANeuralNetworksMemory_createFromFd?

本文关键字:anealurnetworksmemory createfromfd 工作 何工作      更新时间:2023-10-16

在Android神经网络API文档中说:从文件描述符中创建共享内存对象。

,但我找不到任何位置,可以在TFL源代码上指定该文件的格式是如何的:

分配.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格式这样的flatbuffers文件?

编辑:这是来自NNAPI DOC的样本:

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

此文件 training_data,必须如何将其内容构造到nnapi?

aneuralnetworksmemory_createfromfd(file_size,prot_read, fd ,0,0,& mem1 ( - 此API将模型文件映射到Anealuralnetworkworkssssmemory。

映射地址存储在 mem1 中(通过引用!(

此外,通过指向适当的偏移值并复制到NeuralNetwork模型的张量中,读取了 mem1 (anealurnetworksmory对象(中存储的训练值。

 ANeuralNetworksModel_setOperandValueFromMemory(model_, tensor0, mem1, offset, size);
 ANeuralNetworksModel_setOperandValueFromMemory(model_, tensor1, mem1, offset+size, size);
  • Tensor0-指向 offset
  • Tensor1-指向偏移 大小

模型文件的加载及其解析分别进行。这使得更容易在不同的内存模型和不同的文件格式之间混合匹配。它还可以将这些构建块用于其他功能,例如从文件加载输入。

anealurnetworksmemory_createfromfd((仅用于将模型文件加载到内存中。

flatbuffermodel :: buildfromfile((获得代表模型的分配(内存块(。这是anealurnetworksmemory_createfromfd((被调用的地方。然后,它将flatbuffermodel对象发布。这称为模式子目录中的tflite :: getModel((。架构子目录从加载到内存中的.tflite模型中的扁平缓冲器模型。

当nnapidelegate :: Invoke((称为nnapidelegate :: invoke((时,使用anealurnetworksmodel_addoperand((((((((。

相关文章:
  • 没有找到相关文章