siamFC算法复现及使用自己的数据集进行测试

通过学习siamFC的原理,download下来干净的跟踪源码,因为该算法是基于栾生网络的里程碑的单目标跟踪算法,故对于该算法进行复现,可参考东大阿德的目标跟踪入门视频

代码地址:siamFC

思想是将一个已知类别的训练样本和一个未知类别的测试样本分别输入到两个共享参数的 CNN 中。

从而获得两个特征向量,然后通过计算两个特征向量的 相似度,相似度越高表明其更可能是同一个类别。

使用了模板分支和搜索分支共享权重,模板分支实质上是第一帧提取的图像特征。

搜索分支与模板特征进行滑动卷积,最终输出一个得分图,得分最高的位置为当前帧的中心位置。缺点是缺乏对目标形状尺寸的感知度估计。

本来采用的测试集为OTB100数据集,但是组里的内容需要使用更高跟踪难度的飞行器目标进行测试。将自制的红外目标跟踪数据集作为测试数据集,权重采用GOT10k数据集训练的前2000个序列。


进行测试

用来记录出现的问题和解决的方法。

首先在test.py程序中修改测试集合的路径。

python 复制代码
root_dir = os.path.expanduser('/home/ubuntu22/dataset/infread/OTB100')

单修改路径运行会发现跟踪还是会按照OTB100本来的序列信息进行寻找测试,又因为此时已经更改了数据集路径,所以肯定找不到会报错。

因此需要去更改读取数据集的序列处理函数的内容,位于/anaconda3/envs/siamFC/lib/python3.7/site-packages/got10k/datasets下面的otb.py文件。注意,这里pycharm中有bug,如果只在pycharm中修改是无法生效的,用命令行的vim进行操作。

发现test程序中传入的version=2015,此时的序列信息为__tb100_seqs + __tb50_seqs 的内容,所以需要更改序列信息。

python 复制代码
 __tb50_seqs = ['Basketball', 'Biker', 'Bird1', 'BlurBody', 'BlurCar2',
                   'BlurFace', 'BlurOwl', 'Bolt', 'Box', 'Car1', 'Car4',
                   'CarDark', 'CarScale', 'ClifBar', 'Couple', 'Crowds',
                   'David', 'Deer', 'Diving', 'DragonBaby', 'Dudek',
                   'Football', 'Freeman4', 'Girl', 'Human3', 'Human4',
                   'Human6', 'Human9', 'Ironman', 'Jump', 'Jumping',
                   'Liquor', 'Matrix', 'MotorRolling', 'Panda', 'RedTeam',
                   'Shaking', 'Singer2', 'Skating1', 'Skating2-1','Skating2-2','Skiing',
                   'Soccer', 'Surfer', 'Sylvester', 'Tiger2', 'Trellis',
                   'Walking', 'Walking2', 'Woman']
 __tb100_seqs = ['Bird2', 'BlurCar1', 'BlurCar3', 'BlurCar4', 'Board',
                    'Bolt2', 'Boy', 'Car2', 'Car24', 'Coke', 'Coupon',
                    'Crossing', 'Dancer', 'Dancer2', 'David2', 'David3',
                    'Dog', 'Dog1', 'Doll', 'FaceOcc1', 'FaceOcc2', 'Fish',
                    'FleetFace', 'Football1', 'Freeman1', 'Freeman3',
                    'Girl2', 'Gym', 'Human2', 'Human5', 'Human7', 'Human8',
                    'Jogging-1','Jogging-2','KiteSurf', 'Lemming', 'Man', 'Mhyang',
                    'MountainBike', 'Rubik', 'Singer1', 'Skater',
                    'Skater2', 'Subway', 'Suv', 'Tiger1', 'Toy', 'Trans',
                    'Twinnings', 'Vase'] + __tb50_seqs
					
					__otb15_seqs = __tb100_seqs
 __version_dict = {
        2013: __otb13_seqs,
        2015: __otb15_seqs,
        'otb2013': __otb13_seqs,
        'otb2015': __otb15_seqs,
        'tb50': __tb50_seqs,
        'tb100': __tb100_seqs}

自制的数据集序列为data001-data020,所以更改这一部分为:

python 复制代码
 __tbInfread_seqs = [
        'data001', 'data002', 'data003', 'data004', 'data005', 'data006',
        'data007', 'data008', 'data009', 'data010', 'data011', 'data012',
        'data013', 'data014', 'data015', 'data016', 'data017', 'data018',
        'data019', 'data020']

     # 尝试修改
    # __otb15_seqs = __tb100_seqs
    __otb15_seqs = __tbInfread_seqs

另外发现自制的红外小目标数据集里的data004中的groundtruth.txt文件标注信息格式有误,有多余的[],报错:

使用命令批量操作:

shell 复制代码
sed -i 's/\[//g; s/\]//g' groundtruth_rect.txt

至此全部解决,成功复现siamFC算法在自制的红外目标小数据集上测试.

相关推荐
AI浩41 分钟前
【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因
人工智能·深度学习·计算机视觉·transformer
IE062 小时前
深度学习系列75:sql大模型工具vanna
深度学习
不惑_2 小时前
深度学习 · 手撕 DeepLearning4J ,用Java实现手写数字识别 (附UI效果展示)
java·深度学习·ui
CM莫问3 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别
余炜yw4 小时前
深入探讨激活函数在神经网络中的应用
人工智能·深度学习·机器学习
ARM+FPGA+AI工业主板定制专家5 小时前
基于RK3576/RK3588+FPGA+AI深度学习的轨道异物检测技术研究
人工智能·深度学习
小猪咪piggy6 小时前
【深度学习入门】深度学习知识点总结
人工智能·深度学习
热爱编程的OP7 小时前
机器学习 vs 深度学习
人工智能·深度学习·机器学习
跟德姆(dom)一起学AI8 小时前
0基础跟德姆(dom)一起学AI 自然语言处理18-解码器部分实现
人工智能·python·rnn·深度学习·自然语言处理·transformer
清图8 小时前
Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
人工智能·python·深度学习·机器学习·计算机视觉·自然语言处理·ai作画