xiangweizeng / darknet2ncnn

Darknet2ncnn converts the darknet model to the ncnn model
Do What The F*ck You Want To Public License
158 stars 56 forks source link

layer DarknetShortcut not exists or registered? #36

Closed zhoujinhai closed 4 years ago

zhoujinhai commented 4 years ago

我训练好模型后用darknet2ncnn能成功转为bin和param,但运行检测后提示layer DarknetShortcut not exists or registered,我看在darknet2ncnn/src/register_darknet.cpp文件中有注册,请问这个有好的建议吗?


void register_darknet_layer(ncnn::Net &net)
{
  net.register_custom_layer("DarknetActivation", ncnn::DarknetActivation_layer_creator);
  net.register_custom_layer("DarknetShortcut", ncnn::DarknetShortcut_layer_creator);
  net.register_custom_layer("Yolov1Detection", ncnn::Yolov1Detection_layer_creator);
  net.register_custom_layer("Yolov3Detection", ncnn::Yolov3Detection_layer_creator);
}```
xiangweizeng commented 4 years ago

需要调用register_darknet_layer 将操作注册到网络中, 具体参考example 中的例子。

------------------ 原始邮件 ------------------ 发件人: "zhoujinhai"<notifications@github.com>; 发送时间: 2019年11月6日(星期三) 上午9:14 收件人: "xiangweizeng/darknet2ncnn"<darknet2ncnn@noreply.github.com>; 抄送: "Subscribed"<subscribed@noreply.github.com>; 主题: [xiangweizeng/darknet2ncnn] layer DarknetShortcut not exists or registered? (#36)

我训练好模型后用darknet2ncnn能成功转为bin和param,但运行检测后提示layer DarknetShortcut not exists or registered,我看在darknet2ncnn/src/register_darknet.cpp文件中有注册,请问这个有好的建议吗? void register_darknet_layer(ncnn::Net &net) { net.register_custom_layer("DarknetActivation", ncnn::DarknetActivation_layer_creator); net.register_custom_layer("DarknetShortcut", ncnn::DarknetShortcut_layer_creator); net.register_custom_layer("Yolov1Detection", ncnn::Yolov1Detection_layer_creator); net.register_custom_layer("Yolov3Detection", ncnn::Yolov3Detection_layer_creator); }```

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

zhoujinhai commented 4 years ago

是这样的 我在您的这个工程下将模型转换成bin和param, 然后到ncnn工程下运行,我在yolov3.cpp中对应位置添加

net.register_custom_layer("DarknetActivation", ncnn::DarknetActivation_layer_creator);
  net.register_custom_layer("DarknetShortcut", ncnn::DarknetShortcut_layer_creator);
  net.register_custom_layer("Yolov1Detection", ncnn::Yolov1Detection_layer_creator);
  net.register_custom_layer("Yolov3Detection", ncnn::Yolov3Detection_layer_creator);

执行后提示error: ‘DarknetActivation_layer_creator’ is not a member of ‘ncnn’

yolov3.cpp

 ncnn::Net yolov3;

#if NCNN_VULKAN
    yolov3.opt.use_vulkan_compute = true;
#endif // NCNN_VULKAN

    // original pretrained model from https://github.com/eric612/MobileNet-YOLO
    // param : https://drive.google.com/open?id=1V9oKHP6G6XvXZqhZbzNKL6FI_clRWdC-
    // bin : https://drive.google.com/open?id=1DBcuFCr-856z3FRQznWL_S5h-Aj3RawA

    yolov3.register_custom_layer("DarknetActivation", ncnn::DarknetActivation_layer_creator);
    yolov3.register_custom_layer("DarknetShortcut", ncnn::DarknetShortcut_layer_creator);
    yolov3.register_custom_layer("Yolov1Detection", ncnn::Yolov1Detection_layer_creator);
    yolov3.register_custom_layer("Yolov3Detection", ncnn::Yolov3Detection_layer_creator);

    yolov3.load_param("../model/yolov3-tiny.param");
    yolov3.load_model("../model/yolov3-tiny.bin");
xiangweizeng commented 4 years ago

关于最终的部署, 可以使用合并darknet layers 后的ncnn, 将定期同步保持和ncnn官方版最新一致,地址:https://github.com/xiangweizeng/ncnn

xiangweizeng commented 4 years ago

使用合并后的ncnn, 不在需要注册自定义层

zhoujinhai commented 4 years ago

使用合并后的ncnn, 不在需要注册自定义层

好的 非常感谢 我去试试