问题:
使用opencv dnn 模块调用darknet模型时候出错,报错信息为 不支持relu激活函数

以下过程为笔者自己解决该问题的过程,供各位参考学些,因为中间又遇到新的坑,所以各位务必看完再决定如何操作执行。

cv2.dnn.readNetFromDarknet error: (-212:Parsing error) 
Unsupported activation: relu in function 
'cv::dnn::darknet::ReadDarknetFromCfgStream'

解决办法:

优化opencv,使得opencv支持 CNN “relu” 和 maxpool “VALID”。

complie
get opencv

#wget https://codeload.github.com/opencv/opencv/zip/4.0.1   
wget http://www.chineseocr.com:9990/static/models/opencv/opencv.4.0.1.zip    
注意:使用wget下载不下来,最终使用迅雷可以有效下载,手动上传到服务器,执行后续命令。

而darknet_io.cpp、layer_common.cpp、all_layers.hpp需要从github下载,解压后处理

unzip  opencv.4.0.1.zip &&
cp darknet_io.cpp opencv-4.0.1/modules/dnn/src/darknet && 
cp layers_common.cpp opencv-4.0.1/modules/dnn/src/layers && 
cp all_layers.hpp opencv-4.0.1/modules/dnn/include/opencv2/dnn/
------------------------------------------------------------------------------------

编译

mac下:

cd opencv-4.0.1 && mkdir build && cd build && cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON  \
   -D PYTHON3_EXCUTABLE=~/anaconda3/envs/chineseocr/bin/python3 \
  -D PYTHON3_INCLUDE_DIR=~/anaconda3/envs/chineseocr/include/python3.6m  \
-D PYTHON3_LIBRARY=~/anaconda3/envs/opencv/lib/libpython3.6m.dylib \
-D PYTHON_NUMPY_PATH=~/anaconda3/envs/opencv/lib/python3.6/site-packages/numpy/core/include .. \
&& make -j2 && make install

ubuntu下:
需要先cd到opencv中的cmake目录下再执行编译

cd opencv-4.0.1/cmake/

insightzen@master:/opt/OCR_darknet/opencv-4.0.1/cmake$ pwd
/opt/OCR_darknet/opencv-4.0.1/cmake

------------------------------------------------------------------------------------
cmake -D CMAKE_BUILD_TYPE=RELEASE \
     -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON  \
   -D PYTHON3_EXCUTABLE=/usr/bin/python \
  -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m  \
-D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \
-D PYTHON_NUMPY_PATH=/usr/local/lib/python3.6/dist-packages/numpy/ .. \
&& make -j2 && make install
------------------------------------------------------------------------------------
编译遇到如下错误:
/opt/OCR_darknet/opencv-4.0.1/modules/python/src2/cv2.cpp:9:20: fatal error: Python.h: No such file or directory
compilation terminated.
modules/python3/CMakeFiles/opencv_python3.dir/build.make:81: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o' failed
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1
CMakeFiles/Makefile2:5466: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/all' failed
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2

上stackoverflow、以及github对应包的issue部分查找得到:

I fixed the issue. The problem was that PYTHON3_INCLUDE_DIR was set to
 ~/anaconda3/include while Anaconda's Python.h is actually inside
  ~/anaconda3/include/python3.5m. 
Setting PYTHON3_INCLUDE_DIR=anaconda3/include/python3.5m/ 
fixes this issue as it now sees Python.h

------------------------------------------------------------------------------------

错误已经解决, 已经重新从零开始编译, 另外, 用ubuntu的记得cmake之前加上

mkdir build && cd build
作者没写这个,加上我也没看mac的命令导致我被坑了好久
另外,贴上自己的cmake指令

注意:结合自己的环境的路径特点进行对应修改........

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/ubuntu/anaconda3/envs/sparkPy37 \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=/home/insightzen/anaconda3/envs/sparkPy37/bin/python3.7 \
-D PYTHON3_INCLUDE_PATH=/home/insightzen/anaconda3/include/python3.7m \
-D PYTHON3_LIBRARIES=/home/insightzen/anaconda3/envs/sparkPy37/lib/libpython3.7m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/insightzen/anaconda3/envs/sparkPy37/lib/python3.7/site-packages/numpy/core/include .. \
&& make -j2 && sudo make install
------------------------------------------------------------------------------
编译中遇到权限问题:

insightzen is not in the sudoers file.  This incident will be reported.

su root
chmod u+w /etc/sudoers
su insightzen

-----------------------------------------------------------------------
接着是这个问题:

-- Install configuration: "RELEASE"
CMake Error at cmake_install.cmake:46 (file):
  file cannot create directory: /usr/local/share/licenses/opencv4.  Maybe
  need administrative privileges.

手动建目录:
su root
mkdir /usr/local/share/licenses/opencv4

-----------------------------------------------------------------------
cmake -D CMAKE_BUILD_TYPE=RELEASE \
     -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON  \
   -D PYTHON3_EXECUTABLE=/usr/bin/python \
  -D PYTHON3_INCLUDE_PATH=/usr/include/python3.6m  \
-D PYTHON3_LIBRARIES=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.6/dist-packages/numpy/core/include .. \
&& make -j2 && sudo make install
-----------------------------------------------------------------------

XXX is not in the sudoers file. This incident will be reported.解决办法
在用sudo时提示"xxx is not in the sudoers file. This incident will be reported.其中XXX是你的用户名,也就是你的用户名没有权限使用sudo,我们只要修改一下/etc/sudoers文件就行了。

修改方法:

1)进入超级用户模式。也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(当然,你也可以直接用root用)

2)添加文件的写权限。也就是输入命令"chmod u+w /etc/sudoers"。

3)编辑/etc/sudoers文件。也就是输入命令"vim /etc/sudoers",输入"i"进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存(就是先按一 下Esc键,然后输入":wq")退出。

4)撤销文件的写权限。也就是输入命令"chmod u-w /etc/sudoers"。(如果不撤销的话会提示sudo: /etc/sudoers is mode 0640, should be 0440)
-----------------------------------------------------------------------------------

虽然没有报错,但是没有对应激活函数的问题依旧存在,所以继续查看github issues

------------------------------------------------------------------------------------

前面老不成功,折腾了挺久
PYTHON3_EXCUTABLE 少了个E 应该是PYTHON3_EXECUTABLE
PYTHON3_INCLUDE_DIR 貌似应该是 PYTHON3_INCLUDE_PATH
PYTHON3_LIBRARY 改成了 PYTHON3_LIBRARIES
PYTHON_NUMPY_PATH 改成了 PYTHON3_NUMPY_INCLUDE_DIRS 然后要到 /numpy/core/include这一级

另外贴一下调整后的 conda虚拟环境的

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=~/miniconda3/envs/[虚拟环境名称] \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=~/miniconda3/envs/[虚拟环境名称]/bin/python3.6 \
-D PYTHON3_INCLUDE_PATH=~/miniconda3/envs/[虚拟环境名称]/include/python3.6m \
-D PYTHON3_LIBRARIES=~/miniconda3/envs/[虚拟环境名称]/lib/libpython3.6m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=~/miniconda3/envs/[虚拟环境名称]/lib/python3.6/site-packages/numpy/core/include .. \
&& make -j2 && sudo make install

-----------------------------------------------------------------------------------
本地环境最终版:

cd opencv-4.0.1
mkdir build && cd build

然后编译:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/home/insightzen/anaconda3/envs/sparkPy37 \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=/home/insightzen/anaconda3/envs/sparkPy37/bin/python3.7 \
-D PYTHON3_INCLUDE_PATH=/home/insightzen/anaconda3/include/python3.7m \
-D PYTHON3_LIBRARIES=/home/insightzen/anaconda3/envs/sparkPy37/lib/libpython3.7m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/insightzen/anaconda3/envs/sparkPy37/lib/python3.7/site-packages/numpy/core/include .. \
&& make -j2 && sudo make install

参考:chineseocr/opencv-for-darknet

参考:opencv+github issue list + stackoverflow

使用opencv dnn 模块调用darknet模型时候出错,不支持relu激活函数相关推荐

  1. OpenCV的dnn模块调用TesorFlow训练的MoblieNet模型

    七月 上海| 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共2073个字,2张图,预计阅读时间10分钟. 一.初得模型 那是一个月之前的事情了 ...

  2. OpenCvSharp (C# OpenCV) DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别、骰子识别、菜品识别)(附源码)

    本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别.骰子识别.菜品识别)! 前言: 下 ...

  3. 深度学习与OpenCV DNN模块:权威指南

    计算机视觉领域自20世纪60年代末就已经存在.图像分类和目标检测是计算机视觉领域的一些最古老的问题,研究人员已经努力解决了几十年.使用神经网络和深度学习,我们已经达到了一个阶段,计算机可以开始真正地理 ...

  4. 基于OpenCV DNN模块给黑白老照片上色(附Python/C++源码)

    点击下方卡片,关注"OpenCV与AI深度学习"公众号! 导读 本文给大家分享一个用OpenCV DNN模块给黑白老照片上色的实例,并给出Python和C++版本源码. 背景介绍 ...

  5. opencv dnn模块 示例(15) opencv4.2版本dnn支持cuda加速(vs2015异常解决)

    opencv在4.2.0版本正式发布,DNN深度神经网络模块集成Google Summer of Code的项目CUDA后端支持.(详细changelog) 1.编译 常规编译过程,这里使用软硬件环境 ...

  6. OpenCV DNN模块黑白图片上色修复

    大家新年快乐啊,时隔多日,今天又来给博客添砖加瓦了,话不多说,我们先上效果图吧  图片左边部分是原始的黑白图像,右边是生产的彩色图片. 这个项目是基于在加利福尼亚大学,伯克利,Richard Zhan ...

  7. opencv3.4.3的DNN模块调用bvlc_googlenet.caffemodel实现图像分类

    DNN模块官方文档:https://docs.opencv.org/3.4.3/d6/d0f/group__dnn.html#ga29d0ea5e52b1d1a6c2681e3f7d68473a 1. ...

  8. 【opencv】调用caffe、tensorflow、darknet模型

    本文参考自:opencv调用cCaffe.TensorFlow.Torch.PyTorch训练好的模型 往往,当我们训练好一个模型后,就可以通过OpenCV加载模型使用该模型,完成分类和实时预测的任务 ...

  9. 干货 | tensorflow模型导出与OpenCV DNN中使用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 OpenCV DNN模块 Deep N ...

最新文章

  1. 关于C++14:你需要知道的新特性
  2. VTK:图片之ImageMirrorPad
  3. VMM系列之VMM角色介绍以及创建运行方式账户
  4. 如何使用curl访问k8s的apiserver
  5. Python sys模块的使用
  6. 开源cms 和 开源博客_BackBee CMS如何以及为何开源
  7. 4.JAVA之GUI编程事件监听机制
  8. c# Open Source
  9. pycharm python3.5 神奇的导入问题
  10. es search delete
  11. DEV控件之ChartControl用法
  12. DWG转PDF在线转换怎么转?这个方法线上线下都能用
  13. 32.filter表案例 nat表应用 (iptables)
  14. 萤石云视频监控接入详细流程,添加设备,展示视频,云台控制
  15. linux x99 测试,超频测试总结 - 技嘉X99 Phoenix SLI主板评测:综合素质爆表的主板 - 超能网...
  16. maven的pom出现cannot reconnect错误
  17. 京东技术体系员工级别划分及薪资区间
  18. 02325计算机系统结构201810,2018年10月自考02325计算机系统结构真题及答案
  19. 科达视频系统设置服务器,科达KDV-VS视频录像点播系统用户手册.doc
  20. 物联网卡能否永久使用

热门文章

  1. 46 jQuery属性操作
  2. shell脚本编程之处理用户输入
  3. C++中类型转换函数:将当前类的类型转换为其它类型
  4. 使用wmi的snmp类查询计算机网卡信息的源代码,在java中使用SNMP和/或wmi / wmic进行进程到端口的映射...
  5. IROS 2021 | 相机数据转化为2D激光伪标签的自监督学习行人检测
  6. 超越GhostNet!吊打MobileNetV3!MicroNet通过极低FLOPs实现图像识别(文末获取论文)
  7. 清华首超新加坡国立大学,成亚洲第一;苏州大学成211学科黑马丨留言送书
  8. 单图像三维重建、2D到3D风格迁移和3D DeepDream
  9. slf4j+log4j打印日志,控制台无日志输出
  10. RabbitMQ:入门(三)——RabbitMQ用户管理、角色管理与权限管理