• SSD的安装与测试, invalid pointer double free解决方案


    I suggest you use atlas not openblas, and use cuda 8.0.
    Now the best solution is to remake openCV with qt5 I think.
    What’s more, Here is something I suggest: when making openCV, I strongly suggest add -D WITH_GTK=NO, without this my computer will automatically build with gtk if it can find gtk packs on computer.

    1. 安装cuda和caffe, 暂略

    2. 安装相应库依赖

    sudo apt-get update
    sudo apt-get install --no-install-recommends libboost-all-dev
    sudo apt-get install libgflags-dev
    sudo apt-get install libgoogle-glog-dev
    sudo apt-get install libblas-dev
    sudo apt-get install libhdf5-serial-dev
    sudo apt-get instal libopenblas-base libopenblas-dev
    

    3. 安装opencv3.1

    强烈建议使用QT安装,不要用GTK, 默认的GTK带来的double-link problem 让我连续三天苦不堪言,一直是munmap_chunk(),invalid pointer,简直崩溃,参考解决方案:https://github.com/BVLC/caffe/issues/5282#issuecomment-306063718

    #依赖库的安装
    sudo apt-get install build-essential
    sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
    
    #安装cmake
    sudo apt-get install cmake
    #安装pkg-config
    sudo apt-get install pkg-config
    
    #安装QT
    sudo apt-get install cmake qt5-default qtcreator
    
    #下载opencv (http://opencv.org/opencv-3-1.html),并解压
    进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:
    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
    改为
    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
    
    cd opencv-3.1.0/
    sudo mkdir build
    cd build
    cmake  -DWITH_GTK=NO -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_CUBLAS=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON ..
    sudo make
    sudo make install
    

    注意:cmake编译时,会临时从网络上下载第三方依赖库,因此要保证网络的畅通,如果网速过慢,长时间下载不完,cmake也会报错,经常会用到的是ippicv_linux_20151201.tgz。如果长时间下载不成功,可以自行下载(下载地址),然后手动放入opencv源码文件夹下的3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/文件夹中,再使用cmake进行编译。

    4.获取源码并编译

    • 说明:SSD采用的是在caffe文件夹中内嵌例程的方式,作者改动了原版caffe,所以你需要把原来的caffe文件夹移除,Git命令会新建一个带有SSD程序的caffe文件夹,当然,这个新的caffe要重新编译一次。

      sudo git clone https://github.com/weiliu89/caffe.git  
      sudo cd caffe  
      sudo git checkout ssd  
      
    • 编译Caffe

    cd 到caffe的文件夹
    sudo cp Makefile.config.example Makefile.config
    sudo vi Makefile.config
    
    将USE_CUDNN :=1取消注释
    
    将# Whatever else you find you need goes here.下面的
    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
    修改为:
    INCLUDE_DIRS :=  $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
    //这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径
    
    将
    PYTHON_INCLUDE := /usr/include/python2.7 
    /usr/lib/python2.7/dist-packages/numpy/core/include
    改成
    PYTHON_INCLUDE := /usr/include/python2.7 
    /usr/local/lib/python2.7/dist-packages/numpy/core/include
    
    //Step2: 取消BLAS的 47行,Blas这里使用atblas
    # BLAS := open
    BLAS := atlas
    然后再安装atblas: sudo apt-get install libatlas-base-dev
    
    sudo vi Makefile
    替换NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
    
    为NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) 
    
    cd caffe文件夹
    sudo mkdir build
    cd build
    sudo cmake ..
    cd ..
    sudo make -j4
    sudo make py
    sudo make test
    sudo make runtest
    

    5. 可能出现的问题:

    • error: 'NppiGraphcutState' has not been declared
    进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,将:
    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
    改为
    #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
    
    • undefined reference to `cv::VideoCapture::set(int, double)'
    LIBRARIES += glog gflags protobuf leveldb snappy 
     lmdb boost_system boost_filesystem hdf5_hl hdf5 m 
     opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio
    
    • munmap_chunk(): Invalid pointer
      apt-get install libtcmalloc-minimal4
      然后打开~/.bashrc文件: vi ~/.bashrc 在末尾添加export LD_PRELOAD="/usr/lib/libtcmalloc_minimal.so.4" 最后,再sudo source ~/.bashrc
      如果这样还不成功,请按照上面的方法使用QT重新安装opencv,并重新编译caffe
      本人就是之前opencv用默认的GTK装的,导致libprotobuf-lite.so.10 and libmirprotobuf.so.3同时链接到opencv_highgui, 从而导致错误;
      the only place that used functions in highgui_core is in bbox_util.cpp. Comment these lines: cv::imshow("detections", image); if (cv::waitKey(1) == 27) { raise(SIGINT); } should solve the problem. However, I do think jmuncaster's solution is better, since the root cause is the libprotobuf-lite incurred by libgtk-3.0. Roll back to Ubuntu 14.04 will also solve this problem, since Ubuntu 14.04 use gtk-2.0 that did not include libprotobuf-lite.
      参考:munmap_chunk:Invalid pointer or Double free or corruption issue when make runtest
    • fatal error: numpy/arrayobject.so
      先安装sudo apt-get install python-numpy
      再打开Makefile.config并修改(第二行加了一个local)
      PYTHON_INCLUDE := /usr/include/python2.7
      /usr/lib/python2.7/dist-packages/numpy/core/include
      改成
      PYTHON_INCLUDE := /usr/include/python2.7
      /usr/local/lib/python2.7/dist-packages/numpy/core/include
    • fatal error: glog/logging.h: 没有那个文件或目录
      apt-get install libgoogle-glog-dev
    • fatal error: boost/shared_ptr.hpp: No such file or directory
      apt-get install --no-install-recommends libboost-all-dev
      若不成功,先apt-get update,再执行上面

    6. 训练与测试

    在caffe目录下执行python examples/ssd/ssd_pascal.py ,此时就不会报错找不到 ./build/tools/caffe 了。

    7. 绘制损失和精度曲线(loss and accuracy)

    7.1 损失曲线需要利用到训练存下来的日志,对于SSD, 日志存在于caffe/jobs/VGGNet/VOC2007/SSD_300x300/VGG_VOC2007_SSD_300x300.log
    7.2 caffe在tools/extra中自带日志分析工具parse_log.sh

     cd caffe/tools/extra
     sudo ./parse.sh ../../jobs/VGGNet/VOC2007/SSD_300x300/VGG_VOC2007_SSD_300x300.log  
    

    这样会生成VGG_VOC2007_SSD_300x300.log.test,VGG_VOC2007_SSD_300x300.log.train两个解析过的文件
    parse
    内容打开如下:
    train.png
    test.png
    7.3 修改gpuplot设置,在caffe/tools/extra/下存在有plot_log.gnuplot.example,我们照着上面修改即可

    cd caffe/tools/extra
    sudo cp plot_log.gnuplot.example plot_log.gnuplot
    

    绘制train loss单曲线:下面有例程,改名字就可以
    loss.png
    再安装gnuplot:sudo apt-get install gnuplot
    再执行:sudo gnuplot plot_log.gnuplot
    即可得到当前目录下生成一张png图片
    7.4 accuracy等等曲线修改对应的代码即可,对于在一张图上画多个曲线,可以参考https://www.ibm.com/developerworks/cn/linux/l-gnuplot/index.html

  • 相关阅读:
    web中状态码及请求方式
    访问服务器时一直在转圈,等待localhost响应
    Address already in use: JVM_Bind 端口被占用的几个解决办法
    Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean)
    taotao商城
    Dubbo的学习
    taotao商城
    sql中有一些保留字,当你的字段名是它的保留字时,这个时候sql语句的字段不加``就会报错
    ssm学习的第一个demo---crm(4)
    ssm学习的第一个demo---crm(3)
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/9513493.html
Copyright © 2020-2023  润新知