YOWOv2复现

YOWOv2 :一种更强大高效的实时时空动作检测多级检测框架 代码复现

1. YOWOv2简介

论文链接:https://arxiv.org/pdf/2302.06848v1.pdf

代码链接:https://github.com/yjh0410/YOWOv2

本文提出了一种新的实时动作检测框架YOWOv2。在这个新框架中,YOWOv2利用了3D骨干和2D骨干进行准确的动作检测。设计了多级检测通道来检测不同规模的动作实例。为了实现这一目标,我们精心构建了一个简单高效的二维骨干,利用特征金字塔网络提取不同级别的分类特征和回归特征。对于3D骨干网,我们采用现有的高效3D CNN,以节省开发时间。通过结合不同尺寸的3D骨干和2D骨干,我们设计了YOWOv2家族,包括YOWOv2- tiny, YOWOv2- medium和YOWOv2- large。同时引入了流行的动态标签分配策略和无锚机制,使YOWOv2与先进的模型体系结构设计保持一致。经过我们的改进,YOWOv2明显优于YOWO,并且仍然可以保持实时检测。

YOWOv2的结构如图所示,YOWOv2 采用上采样操作,将3D骨干输出的时空特征与2D骨干输出的各层空间特征进行对齐,并使用解耦融合头实现两层特征在各层的融合。最后,YOWOv2分别输出多级置信度预测、分类预测和回归预测。

2. 复现

2.1 . 准备工作

工具:python编译器(vs code或者pycharm皆可),anaconda 。系统:win10

准备好工具后,接下来开始创建pytorch环境。源码环境要求的是python=3.6,但更高版本也可以实现。打开 anaconda prompt命令版,输入以下指令创建环境。

#创建pytorch环境   yowo是环境名称,可更改;3.6是版本
conda create -n yowo python=3.6

然后,激活环境。

conda activate yowo

然后打开requirements.txt文件,一个一个安装代码所需库。也可以运行该文件,批量安装,但需要注意的是torch库的安装,需要根据自己电脑的cuda版本安装。

pip install -r requirements.txt 

2.2 . 数据集准备

论文中使用了UCF101-24和AVA两个数据集,复现的时候可以先用一个数据集进行复现。AVA数据集的下载过程比较复杂,笔者使用了UCF24数据集进行复现,作者也给出了数据集的下载链接。数据集下载解压后包括以下6个文件。其中,labels文件夹包含了每一帧中的标签;rgb-images文件夹包含了所有的视频帧,这里已经全部处理成了单帧图像,方便我们读取; splitfiles 文件夹里是一些暂时不需要知道的文件;testlist和trainlist两个txt中包含了训练和测试时会用到的图像的文件名称。

Link: https://pan.baidu.com/s/11GZvbV0oAzBhNDVKXsVGKg

Password: hmu6

2.3 . 数据预处理

数据集下载完后。我们开始复现YOWOv2。在此之前,我们先来了解YOWO的数据预处理过程,包括“数据读取+数据增强”。我们以UCF101-24数据集为例,数据读取的代码在笔者复现的YOWO项目的dataset/ucf_jhmdb.py文件中。打开ucf_jhmdb.py文件,修改数据集路径,如图所示,然后运行文件。

可以得到以下结果,表示数据预处理完成。

2.4 . 训练

读者可以从config/dataset_config.py和config/yowo_config.py两个文件中查看到每个数据集所用到的训练配置和YOWO的网络参数设置。训练代码在train.py文件中,读者可以根据自己的情况来改动bash文件中的参数。训练时间会比较长,但使用CUDA会提升2-3倍的训练速度,所以建议设备允许时使用cuda训练。

# Train YOWO
python train.py\
		--cuda \
         -d ucf24\
         --root path/to/dataset\ 
         -v yowo_v2_nano \ #模型类型,YOWOv2-Tiny、 YOWOv2-Medium、YOWOv2-Large、				YOWOv2-Nano
         --num_workers 4\
         --eval_epoch 1\
         --max_epoch 10 \
         --lr_epoch 2 3 4 5 \
         -lr 0.0001 -\
         ldr 0.5 \
         -bs 16 \  #batch size
         -accu 16\
         -K 16\

2.5 测试

训练完后,会得到相应的权重(如果不想自己训练,可以在作者源码链接里面下载相应权重),然后打开eval.py和misc.py文件,修改文件中的配置参数。

#Test YOWO 
python test.py 
		--cuda \
		-d ucf24 \
		-v yowo_v2_nano\
        --weight path/to/weight\
        -size 224 \
        --show\
def parse_args():
    parser = argparse.ArgumentParser(description='YOWOv2')

    # basic
    parser.add_argument('-bs', '--batch_size', default=8, type=int,
                        help='test batch size')
    parser.add_argument('-size', '--img_size', default=224, type=int,
                        help='the size of input frame')
    parser.add_argument('--cuda', action='store_true', default=True,
                        help='use cuda.')
    parser.add_argument('--save_path', default=r'C:\Users\rs\Desktop\YOWOv2\YOWOv2-master\eval_result',
                        type=str, help='Trained state_dict file path to open')

    # dataset
    parser.add_argument('-d', '--dataset', default='ucf24',
                        help='ucf24, jhmdb, ava_v2.2.')
    parser.add_argument('--root', default=r'C:\Users\rs\Desktop\YOWOv2\YOWOv2-master\dataset\ucf24\\',
                        help='data root')

    # eval 计算Frame mAP或者video_mAP
    parser.add_argument('--cal_frame_mAP', action='store_true', default=False,
                        help='calculate frame mAP.')
    parser.add_argument('--cal_video_mAP', action='store_true', default=True,
                        help='calculate video mAP.')

    # model
    parser.add_argument('-v', '--version', default='yowo_v2_tiny', type=str,
                        help='build YOWOv2')
    parser.add_argument('--weight', default=r'C:\Users\rs\Desktop\YOWOv2\YOWOv2-master\weights\ucf24\yowo_v2_tiny\yowo_v2_tiny_epoch_10.pth',
                        type=str, help='Trained state_dict file path to open')
    parser.add_argument('-ct', '--conf_thresh', default=0.005, type=float,
                        help='confidence threshold. We suggest 0.005 for UCF24 and 0.1 for AVA.')
    parser.add_argument('-nt', '--nms_thresh', default=0.5, type=float,
                        help='NMS threshold. We suggest 0.5 for UCF24 and AVA.')
    parser.add_argument('--topk', default=40, type=int,
                        help='topk prediction candidates.')
    parser.add_argument('-K', '--len_clip', default=16, type=int,
                        help='video clip length.')
    parser.add_argument('-m', '--memory', action="store_true", default=False,
                        help="memory propagate.")

    return parser.parse_args()

2.6 . 实验结果

从表格中可以看出,笔者复现的代码精度与源码精度相差不大,算得上比较成功的复现。YOWOv2是一个更高效的实时动作框架,感兴趣者可以部署到硬件上测试一下YOWOv2框架的性能。

至此,我们复现完了YOWOv2。第一次写博客,如有不足之处请多指教。希望这篇YOWOv2复现文章能够帮助到大家。

参考:https://zhuanlan.zhihu.com/p/572031559

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值