ncnn 加载模型 学习笔记

目录

模型加载:

加载模型,获取模型输入,输出:

分类推理:


cpp 复制代码
private:
    ncnn::Net landmark;
};

模型加载:

cpp 复制代码
    char parampath[256];
    char modelpath[256];
    sprintf(parampath, "%s.param", modeltype);
    sprintf(modelpath, "%s.bin", modeltype);

    landmark.load_param(mgr, parampath);
    landmark.load_model(mgr, modelpath);

加载模型,获取模型输入,输出:

cpp 复制代码
bool MobileNetInference::load_model(AAssetManager* mgr,const std::string& param_path,
                                    const std::string& bin_path) {


    ncnn::set_cpu_powersave(2);

    net_.opt = ncnn::Option();

#if NCNN_VULKAN
    net_.opt.use_vulkan_compute = use_gpu_;
#endif

    net_.opt.num_threads = ncnn::get_big_cpu_count();

    // 1. 加载参数文件
    int ret = net_.load_param(mgr, param_path.c_str());
    if (ret != 0) {

        return false;
    }

    // 2. 加载模型权重
    ret = net_.load_model(mgr, bin_path.c_str());
    if (ret != 0) {
        return false;
    }

    // 配置网络选项
//    net_.opt.use_vulkan_compute = use_gpu_;
//    net_.opt.num_threads = num_threads_;

    model_loaded_ = true;

    const std::vector<const char*>& input_names = net_.input_names();
    const std::vector<const char*>& output_names = net_.output_names();

    std::cout << "Input names: ";
    for (auto name : input_names) {
        std::cout << name << " ";
    }


    std::cout << "Output names: ";
    for (auto name : output_names) {
        std::cout << name << " ";
    }

    std::cout << "Model loaded successfully from:" << std::endl;
    std::cout << "  - " << param_path << std::endl;
    std::cout << "  - " << bin_path << std::endl;
    std::cout << "Using " << (use_gpu_ ? "GPU (Vulkan)" : "CPU")
              << " with " << num_threads_ << " threads." << std::endl;

    return true;
}

分类推理:

cpp 复制代码
JNIEXPORT jboolean JNICALL Java_com_example_classroom_NcnnMediapipeHand_loadModel(JNIEnv* env, jobject thiz, jobject assetManager, jint modelid, jint cpugpu)
{
    if (modelid < 0 || modelid > 6 || cpugpu < 0 || cpugpu > 1)
    {
        return JNI_FALSE;
    }
    AAssetManager *mgr = AAssetManager_fromJava(env, assetManager);
    if (0) {
        __android_log_print(ANDROID_LOG_DEBUG, "ncnn", "loadModel %p", mgr);

        // 默认参数
        std::string model_param = "model_traced.ncnn.param";
        std::string model_bin = "model_traced.ncnn.bin";
        std::string image_path = "22.jpg";

        __android_log_print(ANDROID_LOG_ERROR, "ncnn", "image_path %s ", image_path.c_str());

        // 1. 创建推理器实例
        MobileNetInference mobilenet;

        // 2. 配置参数
        //    mobilenet.set_use_gpu(true);    // 启用GPU加速
        mobilenet.set_num_threads(2);   // 设置4个线程

        // 3. 加载模型
        if (!mobilenet.load_model(mgr, model_param, model_bin)) {
            __android_log_print(ANDROID_LOG_ERROR, "ncnn", " Failed to load model: %s",
                                model_bin.c_str());
            return JNI_TRUE;
        }

        cv::Mat img = readImageFromAssets(mgr, image_path.c_str());
        // 4. 加载图像
        //        cv::Mat img = cv::imread(image_path);
        //    cv::Mat img = cv::Mat::zeros(64, 64, CV_8UC3);  // 224x224, 3通道, 全0(黑色)
        if (img.empty()) {
            __android_log_print(ANDROID_LOG_ERROR, "ncnn", " Failed to load image: %s",
                                image_path.c_str());
            return JNI_TRUE;
        }

        __android_log_print(ANDROID_LOG_ERROR, "ncnn", "img.cols %d,img.rows %d ", img.cols,
                            img.rows);
        std::vector<float> scores = mobilenet.inference(img);

        if (scores.empty()) {
            __android_log_print(ANDROID_LOG_ERROR, "ncnn", " Inference failed");
            return JNI_TRUE;
        }

        __android_log_print(ANDROID_LOG_ERROR, "ncnn", " inference_time %ld ms scores.size:%zu ",
                            mobilenet.get_last_inference_time(), scores.size());

        // 6. 获取top-5结果
        auto top5 = MobileNetInference::get_top_k(scores, 1);

        // 7. 加载标签并显示结果
        std::vector <std::string> labels;
    }
相关推荐
欣欣之王来了7 分钟前
面试指南:执行式AI岗位真题解析
人工智能
墨天梦8 分钟前
25-评估指标与基准设计
人工智能·自然语言处理
烈风逍遥9 分钟前
第七篇:提示词模板管理与 Agent 提示词编排
前端·人工智能·后端
橘和柠16 分钟前
AI-Infra-Guard 部署与技能扫描实战:Docker 一键起,附我的一次“漏报”复盘
人工智能
茵Cindy17 分钟前
从RPA到Agent:HR流程自动化的架构演进与选型建议
人工智能·ai+hr·hr智能体
m4Rk_21 分钟前
【论文阅读】Agent 记忆机制(77):TSM——让记忆回到事件真正发生的时间
论文阅读·人工智能·学习·开源·github
陈天伟教授23 分钟前
技能人才评价考评员(高级考评员)备考要点-模块一技能人才评价制度体系与政策法规
人工智能·具身智能
ksueh25 分钟前
2026网文有声化新规落地:AI配音的边界划在了哪里
人工智能·ai写作·ai工具·ai写小说
旺仔小馒头wang33 分钟前
AI 智能手机发布会:赋予人类的五种新能力
人工智能·学习·音视频
人工智能培训34 分钟前
未来三年,AI 落地的五个确定性判断
大数据·人工智能·学习·生活·ai写作