caffe版本的posenet编译

编译测试,参考该处

代码
训练好的模型
官网链接
数据

  1. 安装caffe

  2. 最终caffe编译

    make -j8
    make pycaffe
    其实我最终make runtest -j8并没有通过,是说我的显卡驱动与cuda不匹配
    但是我先暂且放着没管,上面两行命令是可以成功的,当然做到后面还是要解决的
    
  3. 测试

    1)得到lmdb文件

    poseNet的输入是一张图像,输出是对应的位姿

    先介绍一下我的目录结构
    caffe-posenet是下载的代码
    CambridgeLandmarks放的要输入的图片
    PoseNet是我下载的训练好的模型
    
    CambridgeLandmarks里面放了8张图片(从官网直接保存的),命名为king1.png king2.png... ,
    然后还在里面放了一个kingdataset_test.txt,内容如下:
    
    # creat by GPH
    #
    #
    1.png 0 0 0 0 0 0 0
    2.png 0 0 0 0 0 0 0
    3.png 0 0 0 0 0 0 0
    4.png 0 0 0 0 0 0 0
    5.png 0 0 0 0 0 0 0
    6.png 0 0 0 0 0 0 0
    7.png 0 0 0 0 0 0 0
    8.png 0 0 0 0 0 0 0
    
    

    在这里插入图片描述

    之后修改caffe-posenet/posenet/scripts/create_posenet_lmdb_dataset.py的1,11,12行依次如下(根据自己的具体情况修改):
    第1行caffe_root = '/home/mk/tools/caffe-posenet/' # Change to your directory to caffe-posenet;
    第11行directory = '/home/mk/tools/CambridgeLandmarks/king';
    第12行dataset = 'dataset_test.txt'。
    

    注意第11行的king必须有,虽然没有相应的文件夹,这个king其实是图片名字前缀。
    加粗样式
    在某个目录下运行这个.py文件,就会在该目录下生成posenet_dataset_lmdb文件夹,得到lmdb数据。

    运行的命令python2 ./posenet/scripts/create_posenet_lmdb_dataset.py
    所以我的posenet_dataset_lmdb这个文件夹是生成在caffe-posenet下面
    

    2)得到均值文件
    一般情况下均值文件应该为训练模型时的数据的均值文件,但是作者并没有提供,想要跑同测试,又必须有。训练数据集有5G大,我不想下,所以就用上面生成的lmdb数据得到一个临时的均值文件,这会让模型计算的结果是错误的,但是能跑通。所以没关系吧。。。
    直接利用caffe提供的均值文件计算程序即可得到均值文件mean.binaryproto

    在caffe-posenet下面运行
    ./build/tools/compute_image_mean ~/tools/caffe-posenet/posenet_dataset_lmdb/ ~/tools/caffe-posenet/posenet_dataset_lmdb/mean.binaryproto
    

    3)运行
    把下载的模型PoseNet文件夹里面的train_kingscollege.prototxt ,weights_kingscollege.caffemodel拷贝到posenet_dataset_lmdb里面(这个拷贝到哪里随意,只要跟着把下面语句路径改一改就好)

    修改运行脚本test_posenet.py中的路径(第13行)
    在这里插入图片描述
    修改网络结构中的路径参数(4个路径)
    在这里插入图片描述
    运行脚本,在caffe-posenet下运行

    python2 ./posenet/scripts/test_posenet.py --model ./posenet_dataset_lmdb/train_kingscollege.prototxt --weights ./posenet_dataset_lmdb/weights_kingscollege.caffemodel --iter 8
    

    在这里插入图片描述

问题记录:

  1. 运行的时候,发现/caffe-posenet/posenet/scripts/create_posenet_lmdb_dataset.py等创建文件的脚本是Python2版本,其他地方又是Python3版本

  2. No module named lmdb

    sudo pip2 install lmdb
    
  3. ImportError: No module named skimage.io

    //如果是Python3版本,以下两条语句都可以
    pip3 install scikit-image
    //如果是Python2版本,则只能下面这条语句了
    sudo apt-get install python-skimage
    
    Complete output from command python setup.py egg_info:
    Python 2.7.12 detected.
        
    scikit-image 0.16+ supports only Python 3.6 and above.
        
    For Python 2.7, please install the 0.14.x Long Term Support using:
        
    $ pip install 'scikit-image<0.15'
    
    因为Python2版本不支持scikit-image 0.16以上的版本
    然后指定版本在0.15以下
    然而,在安装过程中会遇到如下错误:
    File "/tmp/pip-build-cm9XtI/scipy/setup.py", line 31, in <module>
        raise RuntimeError("Python version >= 3.5 required.")
    RuntimeError: Python version >= 3.5 required.
    
    所以考虑通过apt-get或源码安装
    
  4. ImportError: No module named google.protobuf.internal

    sudo apt-get install python-protobuf
    
  5. Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime

    遇到这个问题,基本是cuda版本与显卡驱动不匹配造成的
    我先去查了下cuda是否出了问题,然后发现之前安装好的cuda,可以通过sample测试,现在不可以了
    cd ./NVIDIA_CUDA-10.1_Samples/1_Utilities/deviceQuery , 先去这个目录下
    make
    ./deviceQuery
    如果最后一行输出的是pass,那么cuda是没有问题的,然而我的是FAL,估计是平时装其他东西把环境破坏了
    所以直接去重装cuda,连着显卡驱动也选择重新一起安装
    果然,最后,重新编译sample时,可以通过了,上面这个问题也解决了
    
发布了93 篇原创文章 · 获赞 29 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/ljl1015ljl/article/details/102717795