pytracking代码训练算法编写

路径设置
    定义一个settings类
    settings类中增加路径信息
    settings中设置GPU
    路径设置部分如果找不到local.py 就创建localpy
实例化settings类
    给settings增加module_name script_name project_path
    定义run函数 将settings参数传入
定义run(settings)
    给settings增加参数属性
    关于训练用到的所有类都将 在这个文件里实例化
    数据集,数据采样,数据增强,数据预处理 数据加载器,网络函数,目标函数,actor执行器 优化器,学习率表,训练器:最后执行开始训练
数据集
    首先定义数据集父类
        初始化路径和数据读取器
        判断是视频(lasot)还是图像(coco)
        返回数据集的名称
        获取数据集中视频的个数
        获取序列的信息
        最关键是get_frames
    数据集子类中继承并承复写 父类中的对外四个对外函数
定义数据变换方式
    对全体图像数据执行一定概率的灰度变换
    对训练图像亮度增强,并转化为tensor数据
    对训练图像正则化
    对测试图像只转化为Tensor,然后正则化
对数据集采样
    数据采样类继承pytorch 自带数据集处理类
    根据概率设定,采取不同数据集中的图像
    通过类内函数确定有效数据(目标可见)
    设计采样函数,选取采样图像id, 每个视频图像id间隔30-50
    最后获得图像数据字典
对采样数据预处理
    先对所有图像进行联合变换(灰度变换)
    对test图像的bbox增加中心偏移和尺度高斯噪声
    以增强的bbox为中心,截取目标周围面积25倍 区域的图像出来,不够部分用padding补全
    根据截取的图像块中心与增强bbox中心一致的关系, 计算出截取之后目标的新ground_truth bbox
    其中对bbox增强指的是对test增强,训练图像的bbox没增强
    从测试帧bbox中产生N个bbox,已经其与原gt之间的IOU
    整理好数据,返回数据字典
定义LTRLoader
    本类函数继承pytorch的类dataloader
    将数据打包成batch
    存放数据名字,是否是训练的
    主要承当dataloader的功能
    轻松实现数据多线程读取
    https://zhuanlan.zhihu.com/p/30934236
定义网络
    定义一个装饰器model_constructor 来实现网络的封装
        网络封装了backbone和ATOMIOUnet
        将backbone和iou预测期封装近ATOMnet中去
    backbone:采用重新设计的resnet网络, 可以根据需要输出想要层的特征
    将第二第三层特征送入,将第二层网络中目标 的信息抽象成一个向里,广播相乘到第三层网络上
    通过调制的方法将目标的bboxI0U预测出来
    在设计自己网络的时候可以在此改掉代码
    尽量减少中间变里的存储,以降低显存占用
model
    Backbone
        resnet18
        resnet34
        resnet50
        可以对外输出任意层的特征
    定义网络函数
        内部定义backbone
        定义ioupredictor
        实例化ATOMnet,上述的两个网络 并定义要使用的特征层图
    iou-predictor
        初始化网络
        初始化权重
        定义前向通道
        获取调制向量, 计算调制后的特征 预则随机生成的bbox的I0U
实例目标函数
    目标跟踪和分割的目标函数都可以用
    MES损失
    交叉熵损失
    BCE损失
    L1损失
    Objective目标函数要传给actor计算损失的
定义actor
    定义一个基类actor 5S 
        抽象类中定义 net属性, 目标函数属个 将网络转移到显卡 设置训练还是测试
        在基类的基础上派生出 子类,子类完成具体的任务 设定不同的损失权重, 将不同值得损失加权求和, 返回1oss和状态字典
    实例化的时候,将上述定义好的 net,objective,损失权重
实例化优化器
    通常使用Adam优化器
    将需要优化的参数和学习率设置好,进而优化
    针对不同的参数设定不同的学习率, 这种方式有助于网络的优化
设计学习率表
    优化网络的时候, 使用不同的学习率表 有助于网络的快速优化 可以设计阶梯学习率表, 余弦学习率表, 自定义函数学习率表, 循环学习率表, 热重启学习率表 
创造一个训练器,完成最终网络的训练
    首先创建一个基类训练器
        该基类训练器定义了训练器该有的基本函数功能 子类训练器通过复写函数的方法增加新功能
        更新settings,设置检查点文件路径
        保存当前训练状态,保存检查点文件
        载入检查点文件,总是载入最新上一个检查点文件
        训练函数
            传入训练epoch?数,是否载入最新epoch,是否中断自动重启训练
            载入最新检查点文件
            从当前epoch+1开始训练,训练一个epoch,更新一个学习率表,保存一个检查点文件
    LTR训练器子类
        train_epoch
            训练集每个epoch都要执行,验证集每5个epoch执行一次
            在epoch内部循环加载数据集,调用__next__()函数
            如果是训练集,梯度使能置True。如果是验证集,梯度使能端给False.
            for函数迭代loader
                将data字典放入显卡
                将data字典送入actor,经过网络,计算损失
                获取到loss,stats, 如果训练集的话, optimizer.zero_trad(), loss.backward(), optimizer.step ( )
编写脚本进行训练
在线跟踪 算法的部分
run_tracker脚本编写
     获取众多参数
        跟踪算法,参数,多线程
        评测集,视频,调试
        可视化,使用服务器端口
        将参数传给run_tracker函数
构建评测数据集
    定义数据集抽象类 
    继承数据集父类,生成子类数据集
        OTB,VOT,LASOT
        got10k,nfs,tpl,uav
        TrackingNet
    通过函数的方式实例化数据集
实例化跟踪器
    run_video只需要实例化一个跟踪器
        调用跟踪器中的run_video函数
    run_webcam只需要实例化一个跟踪器
        调用跟踪器中的run_webcam函数
    run_tracker需要实例化一个跟踪器列表
        将数据集和跟踪器和相关参数传入run_dataset函数
    run_experiments需要实例化一个跟踪器列表
        可以实例不同算法跟踪器
        将数据集和跟踪器传入run_dataset函数
定义跟踪器tracker
    这个类函数中需要传入 name,参数名,runid号
    实例化环境设置信息
    采用id号来确定结果  存放位置,并创建路径
    然后根据name,参数名称 import module
    在module中的__init__中 定义了跟踪器的实例化函数 由此实例化跟踪器
    其中Tracker类函数封装了下列函数
        get_parameters: 根据name,params_.name 获取到跟踪器使用的parameters参数
        run():跟踪一个视频序列
        run_video():跟踪一个视频文件
        run_webcam():调用电脑摄像头跟踪
        run_vot()跟踪vot数据集
定义参数
    参数文件存放于parameter文件夹下的 算法名称/参数名文件夹下
    针对不同的数据集可能要运行不同的参数 不同的参数对算法评价指标是有影响的
    实例化跟踪参数类,并给其增加属性参数
    将参数封装起来,作为一个类传入网络中
    实例化ATOM_ResNet18的网络
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值