★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>

一、赛题分析

  • 背景:视频的端到端文字文字识别在计算机视觉领域具有大量的应用场景,如:视频理解、视频检索、视频文字翻译、车牌识别等等。但是由于缺乏实际的数据集和有效的方法,目前的视频文字识别几乎处于停滞状态,已经存在的视频文字识别基准,如 ICDAR 2015, YouTube Video Text, RoadText-1K,BOVText,专注于常规文字(如:正常大小、密集分布)和单一场景,而忽略了极端视频文字的挑战,即:各种密集小文本场景。因此,为了更好地解决密集小文本场景的视频文字识别问题,主办方建立了DSText 数据集。

  • 分析:与其他视频文字识别场景相比,DSText 数据集面临三个挑战:1)密集视频文字识别 2)高比例小文字识别 3)多场景文字识别。此外,与ICDAR 2015 端到端文字识别相似, DSText数据集也存在一些视频文字中常见的技术挑战。如:视频由于运动模糊和失焦问题,图像的质量通常比静态图像差,视频压缩会产生更多的伪影,等等。此外,如何利用视频中有用的时间信息进行有效的视频文字识别也是一个尚未解决的挑战。当前赛事包含两个任务——视频文字跟踪和端到端视频文字识别。对于任务一,网络需要预测文本的旋转检测框和不同帧间同一文字的跟踪id;对于任务二,网络需要在任务一的基础上预测每一个跟踪 id 所对应文本的识别结果。由于时间和计算资源有限,本项目仅完成任务一中的挑战,即对密集小文字进行检测和跟踪。

  • 比赛链接https://rrc.cvc.uab.es/?ch=22&com=introduction

  • 比赛排名:在 Text Localization 任务上,MOTR 分数为 36.87%, MOTP分数为 79.24%, IDF1 分数为 48.99%。最终排名为 5 名。

二、数据分析

  • 本次比赛的训练和测试数据集涵盖 Activity, Driving, Game, Sports, Street_View_Indoor, Street_View_Outdoor 六个场景,包含 50 个训练视频(500MB)和50个测试视频(500MB),视频格式为MP4格式。训练集中的每一个视频均对应一个xml 真实框标注文件。为了降低算法研究的GPU开销,所用视频序列均在 15 s 左右。视频中的每帧图像平均包含23.5个文字实例。每个场景的可视化图像如下:

  • 考虑到视频图像大小在1K-3K之间,较小尺寸会显著降低图像中的文字实例质量,同时,密集小文本在空间上的关联性较强,不适合切片预测,我们将 PP-YOLOE-R 网络的输入尺寸宽度设置为1600,高度设置为900。

三、评价指标

  • DSText 比赛采用ICDAR 2015 Text in Video比赛中的评价方法对检测和跟踪结果进行评估。上述评价方法通过对多目标跟踪比赛 MOTChallenge的评价指标进行改写而成,包含多目标跟踪精度(MOTP)、多目标跟踪准确率(MOTA)和平均数比率(IDF1)三个评估指标, 具体的计算公式如下:

M O T P = ∑ t , i d t , i ∑ t c t M O T P=\frac{\sum_{t, i} d_{t, i}}{\sum_t c_t} MOTP=tctt,idt,i

  • 其中, c t c_t ct 表示在第 t 帧时候总共匹配的数量, d d d 表示预测边界框与真实边界框之间的距离值

M O T A = 1 − ∑ t ( m t + f p t + m m e t ) ∑ t g t ∈ ( − ∞ , 1 ] M O T A=1-\frac{\sum_t\left(m_t+f p_t+m m e_t\right)}{\sum_t g_t} \in(-\infty, 1] MOTA=1tgtt(mt+fpt+mmet)(,1]

  • 其中, m t m_t mt 表示整个视频序列中假阳性的数量(FN), f p t fp_t fpt 表示整个视频序列中假阴性的数量(FP), m m e t mme_t mmet 表示跟踪过程中身份交换的数量(ID Sw.), g t gt gt 表示整个视频序列当中真实目标的数量。

I D F 1 = I D T P I D T P + 0.5 I D F P + 0.5 I D F N I D F 1=\frac{I D T P}{I D T P+0.5 I D F P+0.5 I D F N} IDF1=IDTP+0.5IDFP+0.5IDFNIDTP

  • 其中, I D T P IDTP IDTP 表示在整个视频中检测目标被正确分配的数量, I D F N IDFN IDFN 表示在整个视频中检测目标被漏分配的数量, I D F P IDFP IDFP 表示在整个视频中检测目标被错误分配的数量。

四、算法介绍

  • 如下图所示,该算法先将视频拆分为一系列图像帧进行单独预测,再通过 SORT 目标跟踪算法对整个视频的预测结果进行跟踪。这里,我们采用PP-YOLOE-R-l 作为单帧图像的目标检测网络,具体原因如下:一方面,PP-YOLOE-R-l 在遥感小目标数据集 DOTA 1.0 上以极小的参数量和计算量为代价,取得了78.14 mAP的分数,超越了几乎所有的旋转框检测模型,因此十分适合于密集小文字的检测。由于 PP-YOLOE-R-l 的参数量较少,可以保证模型在 1920*1080 这种大尺度输入情况下,仍能保持较高的推理速度。另一方,数据集中的文字尺度较小,语义特征较弱,传统的目标检测方法和语义分割方法在该任务上发挥不了太大优势。
  • 此外,在目标跟踪方面,由于视频帧本身的尺度较大,采用JDE范式同时进行目标检测和特征提取的计算成本太高,因此我们选择 SDE 范式作为该方案的目标跟踪范式,并通过实验发现 DeepSort算法对文字的跟踪不太稳定,且由于每帧需要跟踪的文本实例太多,推理速度缓慢。最终,我们选择Sort算法作为我们的跟踪模型。这里,由于没有具体的识别结果,我们仅采用IoU值作为是否为同一跟踪目标的判断依据。

五、训练细节

5.1 PP-YOLOE-R

数据处理

  • 在进行训练之前,我们将所有训练视频拆分为一系列图像帧作为PPYOLOE-R模型的输入。在视频中所有单帧图像通过 PP-YOLOE-R 网络获得密集小文字旋转框后,我们将单个视频的检测结果保存为独立的 txt 文件,每行结果由 当前帧ID、检测框左上角、右上角、右下角、左下角坐标、置信度组成。

数据划分

  • 该方案不对数据集进行划分,采用全部数据进行训练,并根据测试视频可视化效果对模型进行评估。

数据增广

  • 随机翻转
  • 随机旋转(0°, 90°, 180°, -90°)
  • 随机旋转(30°到60°之间,随机旋转概率为0.5)
  • 等比例缩放 (target_size = [900, 1600])
  • 归一化处理, 均值为 [0.485, 0.456, 0.406],标准差为 [0.229, 0.224, 0.225]
  • 按批次填充。(pad_to_stride:32)

训练配置

  • 总迭代周期: 36 epoch, 除数据处理外,其他配置均采用官方配置。
  • 预训练模型: PP-YOLOE-R-l 在 Object365 数据集上的预训练模型。
  • 首先,我们采用 LinearWarmup 策略对 PP-YOLOE-R-l 进行预热,其中,预热周期为 1000 steps。 之后,采用 CosineDecay 策略对学习率进行调整,其中,训练的基础学习率为 0.008。此外,我们采用动量为 0.9 的 Momentum 优化器对网络进行优化,采用 ProbIoU 损失将旋转框建模为 Guass 边界框,并通过两个Guass分布的巴氏系数来衡量两个旋转矩形框的相似性。

5.2 SORT 算法进行目标跟踪

数据处理

  • SORT 算法采用上述.txt 作为目标跟踪的输入,返回每帧文字旋转框所对应的 traceID, 并将单个视频跟踪结果按照官方格式写入到 xml 文件中。

数据集准备

# 解压数据集
%cd /home/aistudio/work
!mkdir train_video test_video train_anno
%cd /home/aistudio/work/train_video
!unzip /home/aistudio/data/data199252/train_video.zip
%cd /home/aistudio/work/test_video
!unzip /home/aistudio/data/data199252/test_video.zip
%cd /home/aistudio/work/train_anno
!unzip /home/aistudio/data/data199252/train_annotation.zip
# 将视频转化为图像帧,整个过程大约需要10分钟左右
%cd /home/aistudio/work
!mkdir train_video_frame
!python train_video2frame.py

# 将标签从data数据集文件夹中直接拷贝到本地目录,若需要重新生成数据集标签,请使用注释的命令行
%cd /home/aistudio/work
!cp /home/aistudio/data/data199252/train_all.json /home/aistudio/work/
# 将 xml 标签转换为 coco 标签,耗时约 8分钟左右
# !python xml2coco.py

训练过程

# 解压 PaddleDetection 套件
%cd /home/aistudio/
!unzip /home/aistudio/data/data186448/PaddleDetection-release-2.6.zip
# 安装相关包
%cd /home/aistudio/PaddleDetection-release-2.6
! pip install --user -r requirements.txt
!pip install filterpy==1.4.5 scikit-image==0.17.2 lap==0.4.0
!pip install  moviepy
# 编译并安装旋转算子
%cd /home/aistudio/PaddleDetection-release-2.6/ppdet/ext_op
!python setup.py install
# 修改配置文件
%cd /home/aistudio/work/modify_code/
!cp ppyoloe_r_reader.yml /home/aistudio/PaddleDetection-release-2.6/configs/rotate/ppyoloe_r/_base_/
!cp ppyoloe_r_crn_l_3x_dota.yml /home/aistudio/PaddleDetection-release-2.6/configs/rotate/ppyoloe_r/
!cp text.yml /home/aistudio/PaddleDetection-release-2.6/configs/datasets/
# 模型训练,训练周期为 36 epochs , 每2000个迭代打印一次日志,每4个epoch保存一次模型
%cd /home/aistudio/PaddleDetection-release-2.6
! python tools/train.py -c /home/aistudio/PaddleDetection-release-2.6/configs/rotate/ppyoloe_r/ppyoloe_r_crn_l_3x_dota.yml 

测试过程

# 模型导出,这里导出的是之前训练好的model_final.pdparams文件,如果要导出新训练的模型,请修改weights参数下的模型路径
%cd /home/aistudio/PaddleDetection-release-2.6
!python tools/export_model.py -c /home/aistudio/PaddleDetection-release-2.6/configs/rotate/ppyoloe_r/ppyoloe_r_crn_l_3x_dota.yml  \
                               --output_dir=/home/aistudio/work/predict_code \
                               -o weights=/home/aistudio/data/data199252/model_final.pdparams\
# 在测试集上进行测试,并将测试视频的旋转框检测结果写入到.txt 文件中,耗时约40-50分钟
%cd /home/aistudio/work/predict_code/
!python predict_video.py
# 对 ppyoloe-r的检测结果进行跟踪,生成xml文件,耗时约5-6分钟
%cd /home/aistudio/work/predict_code/
!python predict_traceID.py
# 对检测和跟踪结果进行可视化
%cd /home/aistudio/work/predict_code/
video_path = '/home/aistudio/work/test_video/Street_View_Outdoor/Video_145_4_5.mp4 '
video_anno_path = '/home/aistudio/work/predict_code/trace_output/res_Video_145_4_5.xml'
visualize_output = ' /home/aistudio/work/predict_code/visualize_output'
!python visualize.py  $video_path $video_anno_path $visualize_output

检测和跟踪结果可视化如下:

# 打包提交
%cd /home/aistudio/work/predict_code/
!rm submit.zip
!python submit.py

六、后续优化点

  • 该项目将密集小文字视频转化为单帧图像处理,没有考虑帧间的空间和时间关系,因此可采用 MOTR 等 Transformer 类网络建模文字视频的时序信息,直接对每帧视频的traceID进行预测。
  • 由于运动模糊和镜头失焦的影响,单帧图像存在严重的图像退化,而小目标又极易受到运动模糊等环境干扰的影响,因此,可尝试借助图像恢复类网络提高图像质量,进而提高检测和跟踪性能。
  • 该项目仅在DSText数据集上进行训练,网络可能没有学到足够健壮的文字表征。因此,可尝试在更大规模的文字视频数据集上进行预训练,再使用DStext 数据集进行微调。

参考项目

[1] TransDETR: End-to-end Video Text Spotting with Transformer. https://github.com/weijiawu/TransDETR

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐