0


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

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

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

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

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

  1. OSTrack
  2. tracking
  3. data
  4. lasot
  5. airplane
  6. basketball
  7. bear
  8. ...
  9. got10k
  10. test
  11. train
  12. val
  13. coco
  14. annotations
  15. images
  16. trackingnet
  17. TRAIN_0
  18. TRAIN_1
  19. ...
  20. TRAIN_11
  21. TEST

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

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

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

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

  1. 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。

  1. DATA:......
  2. TRAIN:
  3. DATASETS_NAME:# - LASOT- GOT10K_vottrain
  4. # - COCO17# - TRACKINGNET

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

  1. ValueError: Caught ValueError in DataLoader worker process 0.# 可以将yaml配置文件中TRAIN的NUM_WORKER设置成0
  2. ValueError: The number of weights does notmatch the population # 可能是因为只用了部分数据集进行训练导致的,可以将dataset = random.choices(self.datasets, self.p_datasets)[0]替换成dataset = self.datasets[0]
  3. FileNotFoundError:[Errno 2] No such fileor directory:'/OSTrack/tracking/data/got10k/train/GOT-10k_Train_008341/groundtruth.txt'# 将train文件夹中所有split目录下的文件放到train下即可
  4. 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配置文件中TRAINBATCH_SIZE调小

在以下地方会打印日志:

  1. # OSTrack/lib/train/run_training.py line--42
  2. script_name: ostrack.py config_name: vitb_256_mae_ce_32x4_ep300.yaml
  1. # OSTrack/lib/train/train_script.py line--32
  2. New configuration is shown below.
  3. 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}}
  4. 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}}
  5. 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}}
  1. # OSTrack/lib/train/trainers/base_trainer.py line--174
  2. No matching checkpoint file found
  1. # 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

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

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

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

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

还没有评论