0


OSTrack的一些代码执行命令讲解

一些单目标跟踪算法的代码执行命令非常相似,例如Stark、OSTrack、CSWinTT、AiATrack等,因此对一些命令进行讲解,有助于提升代码研究效率。下面以OSTrack为例进行讲解。

执行如下命令可以生成路径文件,分别会在OSTrack/lib/train/admin目录和OSTrack/lib/test/evaluation目录下生成local.py文件,里面是各种路径的默认设置。而后想配置自己的路径也只需在这两个目录中的local.py文件中进行修改即可。

python tracking/create_default_local_file.py --workspace_dir .--data_dir ./data --save_dir ./output

训练数据集放在OSTrack/tracking/data目录中,存放格式如下:

OSTrack
    tracking
        data
            lasot
                airplane
                basketball
                bear
                ...
            got10k
                test
                train
                val
            coco
                annotations
                images
            trackingnet
                TRAIN_0
                TRAIN_1
                ...
                TRAIN_11
                TEST

下载预训练权重文件MAE ViT-Base weights,并将其放在OSTrack/pretrained_models目录中。

如果想在本地编译器进行train的运行测试,那么需要在lib/train/run_training.py文件中进行运行,其中的参数设置如下:

--script ostrack
--config vitb_256_mae_ce_32x4_ep300  # 这个可以在OSTrack/experiments/ostrack目录中进行相应选择 --save_dir ./output
--use_lmdb 0--script_prv None--config_prv baseline
--distill 0--script_teacher None--config_teacher None--use_wandb 0# 值为1时,可以使用wandb来记录详细的训练日志;不想用wandb则可以置成0

使用如下命令行进行正式训练,如果是单卡训练,需要设置参数–mode single,wandb可以设置成0:

python tracking/train.py --script ostrack --config vitb_256_mae_ce_32x4_ep300 --save_dir ./output --mode multiple --nproc_per_node 4--use_wandb 1

如果只想用部分数据集来训练模型,例如只用GOT-10k进行训练,则需要在相应配置文件中注释掉其它数据集。配置文件为OSTrack/experiments/ostrack/vitb_256_mae_ce_32x4_ep300.yaml。

DATA:......
    TRAIN:
        DATASETS_NAME:#          - LASOT- GOT10K_vottrain
#         - COCO17#         - TRACKINGNET

可能出现的问题及解决办法:

ValueError: Caught ValueError in DataLoader worker process 0.# 可以将yaml配置文件中TRAIN的NUM_WORKER设置成0
ValueError: The number of weights does notmatch the population  # 可能是因为只用了部分数据集进行训练导致的,可以将dataset = random.choices(self.datasets, self.p_datasets)[0]替换成dataset = self.datasets[0]
FileNotFoundError:[Errno 2] No such fileor directory:'/OSTrack/tracking/data/got10k/train/GOT-10k_Train_008341/groundtruth.txt'# 将train文件夹中所有split目录下的文件放到train下即可
RuntimeError: CUDA out of memory. Tried to allocate 24.00 MiB (GPU 0;10.76 GiB total capacity;9.68 GiB already allocated;13.56 MiB free;9.74 GiB reserved in total by PyTorch)# 可以将yaml配置文件中TRAIN的BATCH_SIZE调小

在以下地方会打印日志:

# OSTrack/lib/train/run_training.py  line--42
script_name: ostrack.py  config_name: vitb_256_mae_ce_32x4_ep300.yaml
# OSTrack/lib/train/train_script.py  line--32
New configuration is shown below.
MODEL configuration:{'PRETRAIN_FILE':'mae_pretrain_vit_base.pth','EXTRA_MERGER':False,'RETURN_INTER':False,'RETURN_STAGES':[],'BACKBONE':{'TYPE':'vit_base_patch16_224_ce','STRIDE':16,'MID_PE':False,'SEP_SEG':False,'CAT_MODE':'direct','MERGE_LAYER':0,'ADD_CLS_TOKEN':False,'CLS_TOKEN_USE_MODE':'ignore','CE_LOC':[3,6,9],'CE_KEEP_RATIO':[0.7,0.7,0.7],'CE_TEMPLATE_RANGE':'CTR_POINT'},'HEAD':{'TYPE':'CENTER','NUM_CHANNELS':256}}
TRAIN configuration:{'LR':0.0004,'WEIGHT_DECAY':0.0001,'EPOCH':300,'LR_DROP_EPOCH':240,'BATCH_SIZE':4,'NUM_WORKER':0,'OPTIMIZER':'ADAMW','BACKBONE_MULTIPLIER':0.1,'GIOU_WEIGHT':2.0,'L1_WEIGHT':5.0,'FREEZE_LAYERS':[0],'PRINT_INTERVAL':50,'VAL_EPOCH_INTERVAL':20,'GRAD_CLIP_NORM':0.1,'AMP':False,'CE_START_EPOCH':20,'CE_WARM_EPOCH':80,'DROP_PATH_RATE':0.1,'SCHEDULER':{'TYPE':'step','DECAY_RATE':0.1}}
DATA configuration:{'SAMPLER_MODE':'causal','MEAN':[0.485,0.456,0.406],'STD':[0.229,0.224,0.225],'MAX_SAMPLE_INTERVAL':200,'TRAIN':{'DATASETS_NAME':['GOT10K_vottrain'],'DATASETS_RATIO':[1,1,1,1],'SAMPLE_PER_EPOCH':60000},'VAL':{'DATASETS_NAME':['GOT10K_votval'],'DATASETS_RATIO':[1],'SAMPLE_PER_EPOCH':10000},'SEARCH':{'SIZE':256,'FACTOR':4.0,'CENTER_JITTER':3,'SCALE_JITTER':0.25,'NUMBER':1},'TEMPLATE':{'NUMBER':1,'SIZE':128,'FACTOR':2.0,'CENTER_JITTER':0,'SCALE_JITTER':0}}
# OSTrack/lib/train/trainers/base_trainer.py  line--174
No matching checkpoint file found
# OSTrack/lib/train/trainers/ltr_trainer.py  line--112[train:1,50/15000] FPS:5.9(5.0),  DataTime:0.508(0.002),  ForwardTime:0.171,  TotalTime:0.681,  Loss/total:50.35498,  Loss/giou:1.22484,  Loss/l1:0.28600,  Loss/location:46.47531,  IoU:0.07033

以下地方是模型的一些入口:

# OSTrack/lib/train/train_script.py  line--48# 建立dataloader;数据的加载与Dataloader和Dataset的机制有关,自己定义导入数据时需要继承Dataset父类,并重写__len__和__getitem__方法,这一块代码实现主要在OSTrack/lib/train/data/sampler.py中
loader_train, loader_val = build_dataloaders(cfg, settings)
# OSTrack/lib/train/train_script.py  line--55# 创建模型,这里面包括预训练权重的加载和整个模型的加载
net = build_ostrack(cfg)
# OSTrack/lib/train/train_script.py  line--71# 加载损失和优化
actor这一步就是在执行训练过程
# OSTrack/lib/train/train_script.py  line--88# train过程开始
trainer.train(cfg.TRAIN.EPOCH, load_latest=True, fail_safe=True)
# OSTrack/lib/train/actors/ostrack.py  line--69  数据送入模型# OSTrack/lib/models/ostrack/ostrack.py  line--40  这里才算是数据送入模型的开始
# OSTrack/lib/train/actors/ostrack.py  line--31# 前向传播过程
out_dict = self.forward_pass(data)
# OSTrack/lib/train/actors/ostrack.py  line--34# 计算loss
loss, status = self.compute_losses(out_dict, data)
# OSTrack/lib/train/trainers/base_trainer.py  line--169
断点续训
# OSTrack/lib/train/data/sampler.py  line--156# 建立一个data训练单位
data = TensorDict({'template_images': template_frames,'template_anno': template_anno['bbox'],'template_masks': template_masks,'search_images': search_frames,'search_anno': search_anno['bbox'],'search_masks': search_masks,'dataset': dataset.get_name(),'test_class': meta_obj_test.get('object_class_name')})
# OSTrack/lib/train/data/processing_utils.py  line--68# 裁剪的区域是根据bbox来的,将输入resize为128×128
im_crop_padded = cv.resize(im_crop_padded,(output_sz, output_sz))
数据的加载过程都是在OSTrack/lib/train/data/sampler.py中实现的,它重写了Dataset类中的方法,所以Dataloader加载导入输入数据是从这里进行的。
而OSTrack/lib/train/data/processing.py中的内容是对原始的输入数据进行处理,在这里面包括裁剪、数据增强、归一化等操作。

本文转载自: https://blog.csdn.net/weixin_48158964/article/details/130227779
版权归原作者 写进メ诗的结尾。 所有, 如有侵权,请联系我们删除。

“OSTrack的一些代码执行命令讲解”的评论:

还没有评论