关于ncnn使用多个模型的问题

背景:yolov5部署到android端之后,发现一个模型实现不了全部的功能,初期训练的和后面的标签不一致不过都是yolov5的,感觉可以合并下。这里主要讲述实现加载2个模型,在调用时候动态选择哪个模型

一:Init修改

1:重新定义一个网络

static ncnn::Net yolov51;

2:加载网络参数

yolov51.opt = opt;

3:注册

yolov51.register_custom_layer("YoloV5Focus", YoloV5Focus_layer_creator);

4:加载模型

yolov51.load_param(mgr, "yolov5.param");
yolov51.load_model(mgr, "yolov5.bin");

二:Detect修改(根据输入参数选择使用哪个模型)

1:添加参数

jstring whdetect

2:参数类型转换

const char* chardata = env->GetStringUTFChars(whdetect, 0);
// char* 转 string
std::string str = chardata;

3: 创建构造器

ncnn::Extractor ex1 = yolov51.create_extractor();

4:修改标签类别

static const char* class_names[8];
//通过参数判断使用哪个模型标签
if (str.compare("aaa")!=0)
{
    class_names[0]="1";
    class_names[1]="2";
    class_names[2]="3";
    class_names[3]="4";
    class_names[4]="5";
    class_names[5]="6";
    class_names[6]="7";
    class_names[7]="8";
} else
{
    class_names[0]="1";
    class_names[1]="2";
    class_names[2]="3";
    class_names[3]="4";
    class_names[4]="5";
}

5: 设置输入输出

if (str.compare("aaa")==0)
{
    ex1.set_vulkan_compute(use_gpu);

    ex1.input("images", in_pad);
}else
{
    ex.set_vulkan_compute(use_gpu);

    ex.input("images", in_pad);
}

if (str.compare("aaa")==0)
    ex1.extract("output", out);
else
    ex.extract("output", out);
if (str.compare("aaa")==0)
    ex1.extract("357", out);
else
    ex.extract("357", out);
if (str.compare("aaa")==0)
    ex1.extract("370", out);
else
    ex.extract("370", out);

三 :调用

boolean ret_init = yolov5ncnn.Init(getAssets());
yolov5ncnn.Detect(bitmap, false,"aaa");

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值