Siam-RPN提出了一种基于RPN的孪生网络结构。由孪生子网络和RPN网络组成,它抛弃了传统的多尺度测试和在线跟踪,从而使得跟踪速度非常快。在VOT2015, VOT2016和VOT2017上取得了领先的性能,并且速度能都达到160fps。
论文:Bo Li,Junjie Yan,Wei Wu,Zheng Zhu,Xiaolin Hu, High Performance Visual Tracking with Siamese Region Proposal Network[C]// 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2018.
此网络由Siamese Network和Region Proposal Network两部分组成。前者用来提取特征,后者用来产生候选区域。其中,RPN子网络由两个分支组成,一个是用来区分目标和背景的分类分支,另外一个是微调候选区域的回归分支。整个网络实现了端到端的训练。
:VID-youtube-bb VOT2015 VOT2016
- 百度网盘密码:myq4
- 数据集大小:143.8G,共600多万图像
- 训练集:141G,共600多万图像
- 测试集:2.8G,共60个视频
- 数据格式:RGB
采用混合精度的训练方法使用支持单精度和半精度数据来提高深度学习神经网络的训练速度,同时保持单精度训练所能达到的网络精度。混合精度训练提高计算速度、减少内存使用的同时,支持在特定硬件上训练更大的模型或实现更大批次的训练。 以FP16算子为例,如果输入数据类型为FP32,MindSpore后台会自动降低精度来处理数据。用户可打开INFO日志,搜索“reduce precision”查看精度降低的算子。
- 硬件(Ascend/GPU)
- 使用Ascend/GPU处理器来搭建硬件环境。
- 框架
- 如需查看详情,请参见如下资源:
通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
-
Ascend处理器环境运行
# 运行训练示例 bash scripts/run.sh DATA_PATH DEVICE_ID # 运行分布式训练示例 bash scripts/run_distribute_train.sh /path/dataset /path/rank_table # 运行评估示例 bash scripts/run_eval.sh 0 /path/dataset /path/ckpt/siamRPN-50_1417.ckpt eval.json
-
GPU处理器环境运行
# 运行训练示例 bash scripts/run_gpu.sh 0 # 运行分布式训练示例 bash scripts/run_distribute_train_gpu.sh device_num device_list # 运行评估示例 bash scripts/run_eval_gpu.sh 0 /path/dataset /path/ckpt/siamRPN-50_1417.ckpt eval.json
├── model_zoo
├── README.md // 所有模型相关说明
├── research
├── cv
├── siamRPN
├── README_CN.md // SiamRPN相关说明
├── ascend_310_infer // 实现310推理源代码
├── scripts
│ ├──run.sh // 训练脚本
| |──run_distribute_train.sh //本地Ascend多卡训练脚本
| |──run_eval.sh //910评估脚本
| |──run_eval_gpu.sh // GPU评估脚本
| |──run_distribute_train_gpu.sh // 本地GPU多卡训练脚本
| |──run_infer_310.sh //310推理评估脚本
| |──run_gpu.sh //GPU单卡训练脚本
├── src
│ ├── data_loader.py // 数据集加载处理脚本
│ ├── net.py // siamRPN架构
│ ├── loss.py // 损失函数
│ ├── util.py // 工具脚本
│ ├── tracker.py
│ ├── generate_anchors.py
│ ├── tracker.py
│ ├── evaluation.py
│ ├── config.py // 参数配置
├── ytb_vid_filter //训练集(需要自己下载)
│ ├── --0bLFuriZ4
│ ├── --4VWx_0Sc4
│ ├── ······
│ ├── ······
│ └── meta_data.pkl
├── vot2015 //测试集(需要自己下载)
│ ├── bag
│ ├── ball1
│ ├── ······
│ ├── ······
│ └── list.txt
├── vot2016 //测试集(需要自己下载)
│ ├── bag
│ ├── ball1
│ ├── ······
│ ├── ······
│ └── list.txt
├── train.py // 训练脚本
├── eval.py // 评估脚本
├── export_mindir.py // 将checkpoint文件导出到air/mindir
在config.py中可以同时配置训练参数和评估参数。
-
训练相关参数。
checkpoint_path = r'/home/data/ckpt' # 模型检查点保存目录 pretrain_model = 'alexnet.ckpt' # 预训练模型名称 train_path = r'/home/data/ytb_vid_filter' # 训练数据集路径 cur_epoch = 0 #当前训练周期 max_epoches = 50 #训练最大周期 batch_size = 32 #每次训练样本数 start_lr = 3e-2 #初始训练学习率 end_lr = 1e-7 #结束学习率 momentum = 0.9 #动量 weight_decay = 0.0005 # 权重衰减值 check = True #是否加载模型
更多配置细节请参考脚本config.py
。
-
Ascend处理器环境运行
python train.py --device_id=0 --device_target="Ascend"> train.log 2>&1 &
上述python命令将在后台运行,您可以通过train.log文件查看结果。
训练结束后,您可在默认脚本文件夹下找到检查点文件。采用以下方式达到损失值:
# grep "loss is " train.log epoch:1 step:390, loss is 1.4842823 epcoh:2 step:390, loss is 1.0897788 ...
模型检查点保存在当前目录下。
-
GPU处理器环境运行
在运行train.py文件前,需要手动配置src/config.py文件中的pretrain_model参数、train_path参数和checkpoint_path参数,pretrain_model参数代表预训练权重模型路径,train_path参数代表训练集存放的位置,checkpoint_path参数代表存放生成得到的训练模型的位置。
python train.py --device_id=0 --device_target="GPU"> train.log 2>&1 &
上述python命令将在后台运行,您可以通过train.log文件查看结果。
对于分布式训练,需要提前创建JSON格式的hccl配置文件。
请遵循以下链接中的说明:
https://gitee.com/mindspore/models/tree/master/utils/hccl_tools.
-
在 ModelArts 进行训练 (如果你想在modelarts上运行,可以参考以下文档 modelarts)
-
在 ModelArts 上使用8卡训练 VID-youtube-bb 数据集
# (1) 在网页上设置 "is_cloudtrain=True" # 在网页上设置 "is_parallel=True" # 在网页上设置 "unzip_mode=1"(原始的数据集设置为0,tar压缩文件设置为1) # 在网页上设置 "data_url=/cache/data/ytb_vid_filter/" # 在网页上设置 其他参数 # (2) 上传你的压缩数据集到 S3 桶上 (你也可以上传原始的数据集,但那可能会很慢。) # (3) 在网页上设置你的代码路径为 "/path/siamRPN" # (4) 在网页上设置启动文件为 "train.py" # (5) 在网页上设置"训练数据集"、"训练输出文件路径"、"作业日志路径"等 # (6) 创建训练作业
-
cd SiamRPN //进入到SiamRPN文件根目录
bash scripts/run_distribute_train_gpu.sh DEVICE_NUM DEVICE_ LIST //运行脚本
# DEVICE_NUM表示显卡数量
# DEVICE_LIST: GPU处理器的id,需用户指定,例如“0,1,2,3”
- 评估过程如下,需要vot数据集对应video的图片放于对应文件夹的color文件夹下,标签groundtruth.txt放于该目录下。
# 使用Ascend
python eval.py --device_id=0 --dataset_path=/path/dataset --checkpoint_path=/path/ckpt/siamRPN-xx_xxxx.ckpt --filename=eval.json --device_target="Ascend"&> evallog &
- 上述python命令在后台运行,可通过
evallog
文件查看评估进程,结束后可通过eval.json
文件查看评估结果。评估结果如下:
{... "all_videos": {"accuracy": 0.5809545709441025, "robustness": 0.33422978326730364, "eao": 0.3102655908013835}}
- 评估过程如下,需要vot数据集对应video的图片放于对应文件夹的color文件夹下,标签groundtruth.txt放于该目录下。
# 使用gpu
python eval.py --device_id=0 --dataset_path=/path/dataset --checkpoint_path=/path/ckpt/siamRPN-xx_xxxx.ckpt --filename=eval.json --device_target="GPU"&> evallog &
- 上述python命令在后台运行,可通过
evallog
文件查看评估进程,结束后可通过eval.json
文件查看评估结果。评估结果如下:
{... "all_videos": {"accuracy": 0.5826686315079969, "robustness": 0.2982987648566767, "eao": 0.3289693903290864}}
- 评估过程如下,需要vot数据集对应video的图片放于对应文件夹的color文件夹下,标签groundtruth.txt放于该目录下,并到script目录。
# 使用数据集
bash run_infer_310.sh [MINDIR_PATH] [DATA_PATH] [DATA_NAME] [DEVICE_ID]
查看评估结果命令如下:
cat acc.log
参数 | siamRPN(Ascend) | siamRPN(GPU) |
---|---|---|
模型版本 | siamRPN | siamRPN |
资源 | Ascend 910;CPU:2.60GHz,192核;内存:755 GB | RTX3090 |
上传日期 | 2021-07-22 | |
MindSpore版本 | 1.2.0-alpha | |
数据集 | VID-youtube-bb | VID-youtube-bb |
训练参数 | epoch=50, steps=1417, batch_size = 32 | epoch=50, steps=1417, batch_size = 32 |
优化器 | SGD | SGD |
损失函数 | 自定义损失函数 | 自定义损失函数 |
输出 | 目标框 | 目标框 |
损失 | 100~0.05 | 100~0.05 |
速度 | 8卡:625毫秒/步 | 8卡:296毫秒/步 |
总时长 | 8卡:12.3小时 | 8卡: 5.8小时 |
调优检查点 | 247.58MB(.ckpt 文件) | 247.44MB(.ckpt 文件) |
脚本 | siamRPN脚本 | siamRPN脚本 |
参数 | siamRPN(Ascend) | siamRPN(Ascend) | siamRPN(GPU) | siamRPN(GPU) |
---|---|---|---|---|
模型版本 | simaRPN | simaRPN | simaRPN | simaRPN |
资源 | Ascend 910 | Ascend 910 | GPU | GPU |
上传日期 | 2021-07-22 | 2021-07-22 | 2021-12-7 | 2021-12-7 |
MindSpore版本 | 1.2.0-alpha | 1.2.0-alpha | 1.5.0 | 1.5.0 |
数据集 | vot2015,60个video | vot2016,60个video | vot2015,60个video | vot2016,60个video |
batch_size | 1 | 1 | 1 | 1 |
输出 | 目标框 | 目标框 | 目标框 | 目标框 |
准确率 | 单卡:accuracy:0.58,robustness:0.33,eao:0.31; | 单卡:accuracy:0.56,robustness:0.39,eao:0.28; | 单卡:accuracy:0.5826,robustness:0.298,eao:0.329; | 单卡:accuracy:0.5538,robustness:0.345,eao:0.295; |
在train.py中,我们设置了随机种子。
请浏览官网主页。