evaluation: 包含了在数据集上运行跟踪器的重要脚本,它也包含了大量标准跟踪数据集的一个集成,有OTB-100,NFS,UAV123,TColor 128,TrackingNet,GOT-10k,LaSOT,and VOT2018;还有数据集的环境设置,即路径;
experiments: 存储实验设置的文件
features: 包含了用于特征提取的函数,包括各种数据增强的方法
libs: 包含优化的一些库,dcf等
parameter: 包含对于不同的跟踪器的一些参数设置
tracker: 包含不同跟踪器的实现
utils: 一些工具的函数
在上一篇博客中,ATOM 代码运行(一)我们搭建好了环境,现在开始 Running a tracker,而且上一篇也提到了, 在"evaluation/local.py”文件里面可以设置自己想要跑或者评估的数据集的路径
,如果没有生成这个local.py文件。可以运行evaluation.environment.create_default_local_file()来生成 它。当然如果你不想使用默认的路径,也可以改变网络和结果 的路径。(我只加了otb数据集的路径)
这里提供了三种方法:
(1)run the tracker on webcam feed
上一篇博客已经介绍
(2)run the tracker on some dataset sequence
python run_tracker.py tracker_name parameter_name --dataset_name dataset_name --sequence sequence --debug debug --threads threads
以下是参数的详解
我运行如下,python run_tracker.py atom default --dataset otb --sequence Soccer --debug 0 --threads 8
tracker_name :atom
parameter_name:
其余的都是可选参数了,对于–dataset_name,代码写的是–dataset,所以按照readme上写会报错:
从这里可以详细看出它需要哪些参数,–sequence 是你数据集中任何一个序列的名字,当然也可以是索引,–debug ,debug 则是设定debug level, 0表示提供最少的信息,9表示提供最多的信息,数越高,越详细。–thread, 是多线程参数
命令弄明白之后,看一下一下报错:
这类型的报错是由于你的数据集和代码中给定的pytracking/evaluation/otbdataset.py 下的_get_sequence_info_list()函数描述的信息不符,它找不到,所以你可以改数据集或者代码的描述
以上报错修改好了,就可以在tracking_results /atom/default下 找到生成的.txt文件结果和相应的运行时间。
当debug为0时
,只保存结果,没有可视化,当把 debug 等级设为8时
,没有保存结果,但是可以修改代码保存一下结果的,会出现可视化,和一些图,部分图如下:
第一张是第一帧可视化的结果
这是后续帧 可视化的结果,发现只有跟踪的框框,这个可视化也不怎么明确,自己可修改几行代码把ground truth 也可视化出来,对比看更好(已实现)
右边是跟踪过程中显示的最大分数(具体看看怎么可视化,show_tensor),
在最开始初始化时运行basetracker.py 中state=self.track(image)最大分数为1,显示图如下:
这两个图,loss和CG residuals是在运行basetracker.py代码为:self.initialize(image,sequence.init_state) 时出现的。
关于上述运行的警告: UserWarning: Default upsampling behavior when mode=bilinear is changed to align_corners=False since 0.4.0. Please specify align_corners=True if the old behavior is desired. See the documentation of nn.Upsample for details.
查了一下是函数interpolate()函数中的警告:
至于原因得具体看代码,不过也不影响
(3)run the tracker on a set of datasets
这个使用run_experiment脚本来执行,在使用这个脚本执行之前,你需要在pytracking/experiments/myexperiments.py创建一个z自己想运行数据集的实验设置文件
python run_experiment.py experiment_module experiment_name --dataset_name dataset_name --sequence sequence --debug debug --threads threads
接下来看两个参数,其他参数同上
experiment_module : 是那个实验设置文件的名字。e.g. myexperiments
experiment_name : 是那个实验设置的名字 。 e.g. atom_nfs_uav,otb_test(我自己加的)
代码中是两个跟踪器(ECO和ATOM)都运行,所以需要修改代码,去掉[Tracker(‘eco’, ‘default’, i) for i in range(1)]这行,然后只运行ATOM
还是因为数据集和otbdataset.py中的信息不一样报错:
因为这个OTB100数据集是经过处理的,把一些黑乎乎的图像去掉了, 如BlurCar1 不是从1开始而是从247开始,代码中是这样写的{“name”: “BlurCar1”, “path”: “BlurCar1/img”, “startFrame”: 247, “endFrame”: 988, “nz”: 4,},而我的数据集都是从1开始的,这样就不对应了,读取错误,所以报错,心累,另外还会有数据集命名不一致错误,总之根据报错一个一个改吧!!!!
最后的结果保存在tracking_results/atom/default_000/下,如图所示:
这只是在otb100上测试,还可以试试其他数据集的(但是我都不熟悉),以后再说
********************************************* 更新 *********************************************
以上用的是resnet18模型,可以换成 resnet50 会达到0.43
用pysot集成工具测了vot2018 0.401 ,运行的时候改动了atom.py 加了score,basetracker.py中的def track_sequence()方法,default_vot.py 定义两个参数long_term,short_term
ATOM训练
总的梳理一下:run_tracker.py->otbdataset.py->evaluation/tracker.py->evaluation/running.py->basetracker.py
最开始加载网络的结果:
local.py myexperiments.py parameter/atom/default_vot.py run_experiment.py running.py basetracker.py atom.py votdataset.py loading.py coco