123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- #pragma once
- #include <string>
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include "nlohmann/json.hpp"
- #include "ConfigModule.h"
- #ifdef EEASY_CHIP
- #include "EeasyModel.h"
- #define Model EeasyModel
- #elif AXERA_CHIP
- #include "AxeraModel.h"
- #define Model AxeraModel
- #endif
- /**
- * @struct pipeline_t
- * @brief 推理管道结构体
- *
- * 该结构体用于存储推理管道的业务配置项目。
- */
- typedef struct
- {
- /**
- * @brief 类别属性映射
- *
- * 用于存储类别属性及其对应的值,与模型结构体中的 class_attributes的key和vlue 一一对应。
- */
- std::unordered_map<std::string, float> classAttributes;
- }PipelineConfig;
- /**
- * @brief AIMODEL模型类
- *
- * 该类包含了用于管理和操作AI模型的各种成员变量和方法。
- */
- class ResourceKit
- {
- public:
- /**
- * @brief 初始化AI模型资源
- *
- * 该函数用于初始化AI模型所需的资源,包括创建指定UID的资源,并根据配置文件初始化推理管道。
- *
- * @param cfg AI模型配置参数
- * @return 返回值为整数,表示初始化结果:
- * - 如果初始化成功,返回AIStatus::StatusCode::SUCCESS。
- * - 如果发生错误,返回错误码,可能的错误码及其含义如下:
- * - AIStatus::ErrorCode::MODEL_INIT_UID_START: 模型初始化错误,错误码起始值。
- * - AIStatus::ErrorCode::MODEL_INIT_UID_START - 1: 最后一个初始化资源失败。
- * - AIStatus::ErrorCode::MODEL_INIT_UID_START - 2: 最后两个个初始化资源失败。
- * - 以此类推
- */
- int initializeResources(const ConfigModule cfg);
- /**
- * @brief 更新AI模型资源
- *
- * 该函数用于更新AI模型所需的资源,删除所有已创建的资源,然后重新初始化资源。
- *
- * @param cfg AI模型配置参数
- * @return 返回值为整数,表示更新结果:
- * - 如果更新成功,返回AIStatus::StatusCode::SUCCESS。
- * - 如果删除资源或初始化资源过程中发生错误,返回相应的错误码,具体错误码含义请参考 init_resource 函数的注释。
- */
- int updateResources(const ConfigModule cfg,bool isEnabled,const std::vector<int> &needCreateResource,const std::vector<int> &needDeleteResource);
- /**
- * @brief update_resource之后执行
- *
- * 该函数用于更新推理管道的配置信息,根据给定的配置参数重新初始化推理管道。
- *
- * @param cfg AI模型配置参数
- * @return 返回值为整数,表示更新操作的结果:
- * - 如果更新成功,返回AIStatus::StatusCode::SUCCESS。
- * - 如果发生错误,返回相应的错误码,一般情况下不会出现错误。
- */
- int parsePipelineConfig(const ConfigModule cfg);
- int getRuntimeCacheConfig(const ConfigModule cfg, unsigned long &maxPreprocessDstImageSize, unsigned long &maxInferedTensorTotalSize);
- /**
- * @brief 预处理资源初始化映射
- *
- * 用于存储各个步骤的预处理资源初始化信息,其中包括UID和NPU厂家的预处理结构体。
- */
- std::unordered_map<int, Model::PreprocessConfig> uidPreprocessInitMap;
- /**
- * @brief 预处理资源资源最大dstImageSize
- *
- */
- long unsigned int maxPreprocessDstImageSize;
- long unsigned int maxInferedTensorTotalSize;
- /**
- * @brief 模型运行资源初始化映射
- *
- * 用于存储各个步骤的模型运行资源初始化信息,其中包括UID和NPU厂家的模型结构。
- */
- std::unordered_map<int, Model::ModelConfig>uidModelInitMap;
- /**
- * @brief 后处理资源初始化映射
- *
- * 用于存储各个步骤的后处理运行资源初始化信息,其中包括UID和NPU厂家的模型结构。
- */
- std::unordered_map<int, Model::PostprocessConfig>uidPostprocessInitMap;
- /**
- * @brief 推理管道资源初始化映射
- *
- * 用于存储各个推理管道的资源初始化信息,其中包括UID和推理管道的业务配置项目。
- */
- std::unordered_map<int, PipelineConfig> uidPipelineCfgMap;
- /**
- * @brief 模型厂家的类对象
- *
- * 用于处理底层AI模型操作的EZModel对象,实现了与NPU厂家的交互。
- */
- Model model;
- int deleteAllResource(const ConfigModule cfg);
-
- private:
- /**
- * @brief 创建AI模型资源
- *
- * 该函数根据给定的配置和步骤(step),创建AI模型所需的资源。
- *
- * @param cfg AI模型配置参数
- * @param step 模型创建的步骤编号
- * @return 返回值为整数,表示创建结果:
- * - 如果创建成功,返回AIStatus::StatusCode::SUCCESS。
- * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下:
- * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。
- * - AIStatus::ErrorCode::INVALID_PREPROCESS_CONFIG: 无效的预处理配置。
- * - AIStatus::ErrorCode::INVALID_MODEL_CONFIG: 无效的模型配置。
- * - 其他可能的错误码,请参考具体模块的初始化函数的注释。
- */
- int createResource(const ConfigModule cfg, int step);
- /**
- * @brief 创建AI模型资源PipeLine
- *
- * 该函数根据给定的配置和pipeline,创建AI模型所需的资源。
- *
- * @param cfg AI模型配置参数
- * @param pipeline 模型创建的步骤pipeline
- * @return 返回值为整数,表示创建结果:
- * - 如果创建成功,返回AIStatus::StatusCode::SUCCESS。
- * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下:
- * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。
- * - AIStatus::ErrorCode::INVALID_PREPROCESS_CONFIG: 无效的预处理配置。
- * - AIStatus::ErrorCode::INVALID_MODEL_CONFIG: 无效的模型配置。
- * - 其他可能的错误码,请参考具体模块的初始化函数的注释。
- */
- int createPipelineResource(const ConfigModule cfg, std::vector<int> pipeline);
- /**
- * @brief 删除AI模型资源
- *
- * 该函数根据给定的配置和步骤(step),删除AI模型所占用的资源。
- *
- * @param cfg AI模型配置参数
- * @param step 模型删除的步骤编号
- * @return 返回值为整数,表示删除结果:
- * - 如果删除成功,返回AIStatus::StatusCode::SUCCESS。
- * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下:
- * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。
- * - AIStatus::ErrorCode::RESOURCE_RELEASE_FAILURE: 资源释放失败。
- * - 其他可能的错误码,请参考具体模块的释放资源函数的注释。
- */
- int deleteResource(const ConfigModule cfg, int step);
- };
|