espressif / esp-dl

Espressif deep-learning library for AIoT applications
MIT License
516 stars 115 forks source link

关于 Filter 测试问题反馈及建议 (AIV-461) #75

Closed xiangweizeng closed 1 year ago

xiangweizeng commented 2 years ago

最近在尝试使用esp-dl库,并针对其进行了一些基本测试,发现如下问题:

  1. 由于Filter 中的模板函数只有定义没有实现,导致在链接时提示错误; 测试代码片段:
    typedef int16_t feature_t;
    typedef dl::Filter <feature_t> TFilter;
    typedef std::vector <feature_t> TData;
    TData filter_data(3 * 3 * 2 * 3, 1);
    auto filter = new TFilter(&filter_data[0], {0, -1, -2} , {3, 3, 2, 3});
    delete filter

链接错误: ··· undefined reference to `dl::Filter::Filter(short const*, std::vector<int, std::allocator >, std::vector<int, std::allocator >, std::vector<int, std::allocator >)' ···

补充:针对另一个构造函数没有出现链接错误

  1. Filter print2d_n 函数打印数据与实际存储格式不符合 Filter 针对 Kernel 的数据存储实际采用的应该是 NHWC 格式,但是 print2d_n 打印数据采用的是HWCN格式

  2. 浏览发现头文件中包含了大量摸板函数,建议将摸板函数和头文件一起发布,或者采用非模板实现方式;

以上, 谢谢!

TiramisuJ commented 2 years ago

Hi 你好,这边解答一下上面提到的问题。

  1. 测试代码段中的构造函数是用于Per-channel量化方式的,目前Per-channel量化只支持8bit量化。原因是16bit量化的误差已经很小了,所以并没有为16bit量化编写Per-channel量化的代码。你提到的另一个构造函数是Per-layer量化,它目前支持8bit和16bit两种量化位宽,所以不存在链接错误的问题。

  2. 本项目中的参数实际排布在不同平台上是不同的,对于没有指令加速的情况下,排布才是NHWC。关于 print2d_n 这个函数,目前是统一成了HWCN格式输出,后续会改为NHWC格式输出,方便理解。

  3. 写成模板函数是为了方便代码的复用,我们的大部分函数都编译成了静态库的形式。后续我们会在头文件中对支持的类型做更加详细的说明。

最后感谢你提出的问题和建议。