使用Windows Caffe 建立Qt工程 运行SSD(Single Shot MultiBox Detector)目标检测算法

4 篇文章 0 订阅
1 篇文章 0 订阅

这个本是现代模式识别课的一部分作业,使用SSD算法完成一个行人检测的任务,完成过程中遇到了一些问题。
这也不是我的研究方向,不写出来以后可能就这样被遗忘了觉得挺可惜的,分享一下。
这个也是几个月之前的做的,到现在也有许多细节记不太清楚,当时似乎应该稍微记录一下。

当时也试过DPM,但是速度比较慢因此最后放弃了。

配置过程中也参考了一些博客:【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程_风翼冰舟的博客-CSDN博客Windows下Caffe-SSD编译_Chen_yingpeng的博客-CSDN博客windows 配置 SSD ——CPU模式_lxy890123的博客-CSDN博客windows CUDA8.0 配置SSD——GPU模式_lxy890123的博客-CSDN博客

首先说下我的实验环境Windows10,VS2013,64位版Qt 5.3.1,caffe官方的Windows版Caffe。

一:Qt-VS配置

安装好qt-opensource及qt-vs-addin后,在VS新出现一个名为Qt5的菜单栏,记得在其下拉菜单中选择Qt options并做如下设置

二:Windows下Caffe配置

中间遇到了一些坑,总的来说大流程是先生成libcaffe,再生成caffe,中间VS会自动下载一些需要的包耐心等待就好。再根据需要生成别的项目。

三:遇到的一些问题

1. 新建后Qt工程后,需要添加头文件目录、库文件目录以及附加依赖项,我添加的如下:

附加依赖项:

qtmain.lib Qt5Core.lib Qt5Gui.lib Qt5Multimedia.lib Qt5MultimediaWidgets.lib Qt5Network.lib Qt5Qml.lib Qt5Quick.lib Qt5Sql.lib Qt5Test.lib Qt5WebKit.lib Qt5AxContainer.lib Qt5AxBase.lib Qt5Bluetooth.lib Qt5Concurrent.lib Qt5Help.lib Qt5OpenGL.lib opengl32.lib glu32.lib Qt5PrintSupport.lib Qt5Declarative.lib Qt5Script.lib Qt5Sensors.lib Qt5Svg.lib Qt5WebkitWidgets.lib Qt5Widgets.lib Qt5Xml.lib Qt5XmlPatterns.lib libcaffe.lib caffe.lib $(CudaDependencies) opencv_core2410.lib opencv_highgui2410.lib opencv_imgproc2410.lib gflags.lib libglog.lib libopenblas.dll.a libprotobuf.lib leveldb.lib lmdb.lib hdf5.lib hdf5_hl.lib cublas.lib cuda.lib cublas_device.lib cudnn.lib cudadevrt.lib cudart.lib cudart_static.lib cufft.lib cufftw.lib curand.lib cusolver.lib cusparse.lib nppc.lib nppi.lib npps.lib nvblas.lib nvcuvid.lib nvrtc.lib

当然其中有一些是不必要的。

2. 出现一系列错误:

error C2238:意外的标记位于";"之前。

解决:可以看到这些错误都在caffe.pb.h文件的3895行及13066行,直接将这两行注释,问题解决。

3. 最后成功生成exe运行时报错:This application failed to start because it could not find or loadthe.......,

解决:将对应的Qt dll文件复制到exe目录下。

4. 报错未生成二进制文件无法调试,

解决:调试时允许源文件位置不一致;

5. 工程中新建了一个头文件,包含了SSD需要的一些网络层,我也是报了一些错然后慢慢加上的,直接上代码:

#include <caffe/common.hpp>  
#include <caffe/layer.hpp>  
#include <caffe/layer_factory.hpp>  
#include <caffe/layers/input_layer.hpp>  
#include <caffe/layers/inner_product_layer.hpp>  
#include <caffe/layers/dropout_layer.hpp>  
#include <caffe/layers/conv_layer.hpp>  
#include <caffe/layers/relu_layer.hpp>  

#include <caffe/layers/pooling_layer.hpp>  
#include <caffe/layers/lrn_layer.hpp>  
#include <caffe/layers/softmax_layer.hpp>   

#include <caffe/layers/sigmoid_layer.hpp>
#include <caffe/layers/tanh_layer.hpp>
#include <caffe/layers/permute_layer.hpp>
#include <caffe/layers/flatten_layer.hpp>
#include <caffe/layers/prior_box_layer.hpp>
#include <caffe/layers/concat_layer.hpp>
#include <caffe/layers/reshape_layer.hpp>
#include <caffe/layers/detection_output_layer.hpp>
#include <caffe/layers/detection_evaluate_layer.hpp>
#include <caffe/layers/batch_norm_layer.hpp>
#include <caffe/layers/bias_layer.hpp>
#include<caffe/layers/scale_layer.hpp>
#include<caffe/layers/normalize_layer.hpp>

namespace caffe             //添加网络层
{
extern INSTANTIATE_CLASS(InputLayer);
extern INSTANTIATE_CLASS(InnerProductLayer);
extern INSTANTIATE_CLASS(DropoutLayer);
extern INSTANTIATE_CLASS(ConvolutionLayer);
REGISTER_LAYER_CLASS(Convolution);
extern INSTANTIATE_CLASS(ReLULayer);
REGISTER_LAYER_CLASS(ReLU);
extern INSTANTIATE_CLASS(PoolingLayer);
REGISTER_LAYER_CLASS(Pooling);
extern INSTANTIATE_CLASS(LRNLayer);
REGISTER_LAYER_CLASS(LRN);
extern INSTANTIATE_CLASS(SoftmaxLayer);
REGISTER_LAYER_CLASS(Softmax);

extern INSTANTIATE_CLASS(SigmoidLayer);
REGISTER_LAYER_CLASS(Sigmoid);
extern INSTANTIATE_CLASS(TanHLayer);
REGISTER_LAYER_CLASS(TanH);
extern INSTANTIATE_CLASS(PermuteLayer);
//REGISTER_LAYER_CLASS(Permute);
extern INSTANTIATE_CLASS(FlattenLayer);
//REGISTER_LAYER_CLASS(Flatten);
extern INSTANTIATE_CLASS(PriorBoxLayer);
//REGISTER_LAYER_CLASS(PriorBox);
extern INSTANTIATE_CLASS(ConcatLayer);
//REGISTER_LAYER_CLASS(Concat);
extern INSTANTIATE_CLASS(ReshapeLayer);
//REGISTER_LAYER_CLASS(Reshape);
extern INSTANTIATE_CLASS(DetectionOutputLayer);
//REGISTER_LAYER_CLASS(DetectionOutput);
extern INSTANTIATE_CLASS(DetectionEvaluateLayer);
//REGISTER_LAYER_CLASS(DetectionEvaluate);
extern INSTANTIATE_CLASS(BatchNormLayer);
extern INSTANTIATE_CLASS(BiasLayer);
extern INSTANTIATE_CLASS(ScaleLayer);
extern INSTANTIATE_CLASS(NormalizeLayer);
}

四:最终效果

放一下最终的效果,在GPU加速情况下每秒大约16帧。最后产生exe后添加一些dll文件就可以在别的Windows电脑上运行程序了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇哇九号

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值