工程地址:【http://davheld.github.io/GOTURN/GOTURN.html】
第一次看深度学习网络实现的工程代码,有很多内容和结构不理解,并且在Linux下跑网络工程代码没有IDE,无法调试,我也不知道在查看函数的时候如何跳转,因此看整个工程文件十分麻烦。因此自己也是边看边查边学。
下面开始解析该工程代码,可能存在一些偏差和错误,将会不断学习和修正。
一、工程结构
工程主目录下有6个文件夹以及3个文件。
CMakeLists.txt:
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。CMake的所有语句都写在CMakeLists.txt文件中,当CMakeList.txt文件确定后,可以用ccmake命令对相关的变量值进行配置,这个命令必须指向CMakeList.txt所在的目录。配置完成后,应用cmake命令生成相应的Makefile(在UNIX like系统下)或者project文件(指定用Windows下的相应编程工具编译时)。
详细看博文:【http://blog.csdn.net/u012150179/article/details/17852273】
build文件夹:
该文件夹内为编译之后生成的一些文件,具体我也不是很懂,之后再看。
cmake文件夹:
该文件夹是配置文件,指向相应的caffe模型,配置工程所需的库文件。
FindTinyXML.cmake的功能之后再去了解吧。。。
imgs文件夹内存放的是一张论文中功能实现的截图。
nets文件夹:
tracker.prototxt定义了网络的结构,利用netscope我们可以看到网络结构是这样的,并不复杂。
solver.prototxt文件是整个模型运行的参数配置文件。
models里是已经训练好的网络模型:
tracker_output里是工程的输出文件,包括videos等。
scripts文件:
该文件夹内是运行程序的一些脚本文件。实现的功能包括下载模型初始化(download_model_init.sh),下载训练好的模型(download_trained_model.sh),评估结果(evaluate_val.sh),保存测试运行结果(save_videos_test.sh),追踪过程展示(show_tracker_test.sh),追踪过程验证(show_tracker_val.sh),训练(train.sh)以及解压ImageNet(unzip_imagenet.sh)。还有一个文件夹Fscore_v1.0应该是计算Fscore时用到的相关文件。
src文件夹:
该文件夹内为c++源码。
由于服务器上运行无法实现可视化,所以我按照源码文档的说明,将测试数据运行结果保存下来(调用save_videos_test.sh脚本文件),然后观察其performance。下面将按照运行的流程对部分代码进行解释说明。
二、代码流程(根据需求调用的部分)
首先通过如下语句运行脚本文件以执行程序:
bash scripts/save_videos_test.sh /*/dataPackage/vot2014
1、因此,进入save_videos_test.sh文件
#!/bin/bash
if [ -z "$1" ]
then
echo "No folder supplied!"
echo "Usage: bash `basename "$0"` vot_videos_folder"
exit
fi
# Choose which GPU the tracker runs on
GPU_ID=10
VIDEOS_FOLDER=$1
FOLDER=GOTURN1_test
DEPLOY_PROTO=nets/tracker.prototxt
CAFFE_MODEL=nets/models/pretrained_model/tracker.caffemodel
OUTPUT_FOLDER=nets/tracker_output/$FOLDER
echo "Saving output to " $OUTPUT_FILE
# Run tracker on test set and save vidoes
build/save_videos_vot $VIDEOS_FOLDER $DEPLOY_PROTO $CAFFE_MODEL $OUTPUT_FOLDER $GPU_ID
GPU_ID:这里可以修改使用的GPU编号,由于服务器上运行的程序较多,导致程序运行速度变慢,因此,要选择一个空闲的GPU使用。(新开一个终端,输入nvidia-smi就可以查看GPU使用情况。)
VIDEOS_FOLDER:$1指的是第一个参数,即指令后面紧跟的第一个参数,这里是输入的视频文件夹(事实上是图像文件夹);
DEPLOY_PROTO:该指令调用的模型,即网络结构
,但是存在未知参数。
CAFFE_MODEL:训练好的网络模型,经过训练,参数都已确定。
脚本文件的最后调用了save_videos_vot.cpp,因此下面进入该文件。
2、save_videos_vot.cpp
该文件在test文件夹下,代码内容如下:
#include <string>
#include <boost/lexical_cast.hpp>
#include <boost/filesystem.hpp>
#include <opencv/cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "helper/high_res_timer.h"
#include "network/regressor.h"
#include "loader/loader_alov.h"
#include "loader/loader_vot.h"
#include "tracker/tracker.h"
#include "tracker/tracker_manager.h"
using std</