关于华为:MindSpore实践对篮球运动员目标的检测

15次阅读

共计 5995 个字符,预计需要花费 15 分钟才能阅读完成。

摘要: 本文讲述的是 MindSpore 对篮球运动员指标的检测利用,通过 AI 技术辅助对篮球赛场进行剖析。

本文分享自华为云社区《MindSpore 大 V 博文系列:AI 对篮球运动员指标的检测》,原文作者:李锐锋。

MindSpore 作为一个端边云协同的开源的全场景 AI 框架,往年 3 月份开源以来,受到了发展中国家的宽泛关注和利用,欢送大家参加开源奉献,模型众智单干,行业翻新与利用,学术单干等,奉献您在云侧,端侧(HiMindSpore 应用程序),侧向以及平安畛域的利用案例。MindSpore 与您在 AI 畛域独特成长,让 AI 使能千行百业,开释出弱小的性能。MindSpore 对篮球运动员指标的检测利用,通过 AI 技术辅助对篮球赛场进行剖析。

一、AI 在篮球运动检测方面的应用

想必大家对篮球运动都比拟相熟,在看球赛时,通过咱们的肉眼看到的画面,对赛场状况进行察看,能够剖析出一些有用的信息。当初随着 AI 技术的迅速倒退,通过深度学习算法也能够对篮球赛场上的画面进行学习,而后对篮球运动员的数量、行为等提取一些有用的信息,比方:通过对球员衣服颜 ** 分出各篮球队的成员,也能够通过对球员的行为剖析出球员正在执行什么动作以及赛场的比分等,如图 1 所示为通过 ModelArts 平台实现推理后展现的球员信息。

图 1 深度学习推理出球员信息

那么怎么通过 AI 技术对篮球赛场进行剖析呢,首先咱们抉择 AI 架构是基于华为自研 AI 计算框架 MindSpore。MindSpore 提供全场景对立 API,为全场景 AI 的模型开发、模型运行、模型部署提供端到端能力。同时,MindSpore 采纳端 - 边 - 云按需写作分布式架构、微分原生编程新范式以及 AI Native 新执行模式,实现更好的资源效率、平安可信,同时升高行业 AI 开发门槛、开释昇腾芯片算力,助力普惠 AI。

抉择 AI 框架之后,咱们这次抉择的网络模型是基于 MindSpore 框架开发的 yolov3_darknet53 网络模型。

如果你想要查看篮球运动员检测的网络代码,能够拜访 MindSpore 社区的开源代码,地址:
https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/chapter4

在 MindSpore 开源社区也能够找到基于 MindSpore 框架的 yolov3_darknet53 网络的源码,应用的是 coco2014 数据集,参考链接:https ://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/yolov3_darknet53

以下是对该网络模型及利用实现的具体介绍。

二、yolo 简介

yolo(You only look once) 是一种经典的单阶段指标检测算法,在 16 年提出了第一个版本 yolov1,前面还提出了多个版本,yolov3 就是第三个版本。

yolo 这个算法,在不同版本均有改良之处,上面大抵介绍下 yolov 算法的三种版本的区别和改良:

1、yolov1 是将指标检测作为回归问题来解决,应用一个神经网络间接从整个图片中预测边界框和类别概率,因为速度很快,所以能够做到实时指标检测

2、yolov2 比 yolov1 速度很快,并且更准,改良点比拟多,如:应用了 BatchNorm,让网络更容易拟合;应用了 anchor,去除了 yolov1 中的全连贯层;应用了维度聚类的办法及多尺度训练等改良措施。

3、yolov3 比 yolov2 精度会更高,不过速度会有点降落。yolov3 的改良之处为:

1) 特征提取网络采纳了残差构造,并且层数更多。

2) yolov3 在 3 个尺度上进行检测,顺次检测大、中、小指标。

三、yolov3 网络结构

yolov3 应用的根底网络是用 Darknet53,Darknet53 是全卷积构造,如图 2 所示,右边为 yolov2 的 Darknet19,左边是 yolov3 应用的 Darknet53。Darknet53 去掉了所有的 Maxpooling 层,并减少了卷积层数。它总共有 23 个残差模块,通过 5 次下采样,最初网络输入是网络输出的 1 /32。因为网络加深的起因,yolov3 网络的运行速度比 yolov2 稍慢。

yolov3 网络结构中 Conv2D block 蕴含了 5 个卷积层,整个网络结构绝对简略一些,同时,该网络为单阶段检测办法,绝对 faster rcnn 要容易许多。

图 2 Darknet 网络结构

四、yolov3_darknet53 在篮球运动检测方面的实现

咱们抉择的网络模型正是上一节中介绍的 yolov3_darknet53 模型,数据集则是一段篮球比赛相干的数据集,应用的 AI 框架是华为推出的 MindSpore 深度学习框架。最初,应用 MindSpore 的 API 来执行网络模型的训练和推理工作。

1、数据筹备

本次应用的数据是图片数据,图片能够是在球赛现场拍摄的图片,也能够视频中的图片,咱们这次应用的数据起源是网上下载篮球比赛相干的视频。

视频其实是有一帧一帧图片间断播放实现的,所以,反过来咱们从视频中能够读取一帧一帧的图片,最初将图片保留到相干目录。因为视频中每秒蕴含的视频帧比拟多,一些相邻的图片内容十分类似,看不出什么差异性,所以在获取视频帧时,适当插入工夫距离,按肯定工夫频率截取视频中的一张张图片,这样提取进去的图片差异性比拟大,很少有雷同的图片,这种数据的品质比拟好。

生成好了数据后,还须要对数据进行标注,这个能够在华为云的 ModelArts 平台上进行数据标注操作,最初将筹备好的数据拷贝到相应的目录当中,并且将数据集分成训练数据和推理数据,供后续模型训练和推理应用。

2、模型训练脚本

本次模型的搭建次要是调用 MindSpore 的 API 接口,如:能够调用 context.set_context() 接口配置当初应用的环境,如果咱们环境用的是升腾 910 芯片,并且采纳图模式进行训练,则能够通过以下指令进行配置:

context.set_context(mode=context.GRAPH_MODE, device_target="Ascend")

本次模型训练脚本,所用到的 MindSpore 相干接口如下所示:

import mindspore as ms
import mindspore.nn as nn
import mindspore.context as context
from mindspore import Tensor
from mindspore.nn.optim.momentum import Momentum
from mindspore.train.callback import ModelCheckpoint, RunContext
from mindspore.train.callback import _InternalCallbackParam, CheckpointConfig
from mindspore.train.serialization import load_checkpoint, load_param_into_net

这些配置或接口的应用在 MindSpore 官网上的教程和 API 文档都能找到具体的阐明,官网链接:https : //www.mindspore.cn/tutorial/training/zh-CN/master/index.htm

yolov3_darknet53 网络模型脚本的次要构造如下所示:

图 3 yolov3_darknet53 网络模型脚本构造

上面介绍下网络结构中次要的一些脚本。

1) train.py: 这是该网络的训练脚本,次要是配置环境参数、网络调用、预训练模型的调用、训练数据集读取、优化器配置、ckpt 文件保留设置、模型训练脚本等。在模型训练时,须要配置一些训练参数,这些参数能够在 src 目录下的 config.py 文件中设置好,也能够在执行训练命令时,将参数传入给训练模型,这个上面会有阐明。以下是训练脚本的局部代码,别离是配置环境参数、网络调用、数据集读取、优化器配置等,仅供参考。

context.set_context(mode=context.GRAPH_MODE, enable_auto_mixed_precision=True,
 device_target="Ascend", save_graphs=False)
network = YOLOV3DarkNet53(is_training=True)
ds, data_size = create_yolo_dataset(image_dir=os.path.join(local_data_path, 'images'), anno_path=os.path.join(local_data_path, 'annotation.json'), is_training=True, batch_size=args.per_batch_size, max_epoch=args.epoch_size,  device_num=args.group_size, rank=args.rank, config=config)
opt = Momentum(params=get_param_groups(network), learning_rate=Tensor(lr), 
momentum=args.momentum, 
weight_decay=args.weight_decay, 
loss_scale=args.loss_scale)

2) eval.py: 这是该网络的推理模型,yolov3_darknet53 网络做推理时,也须要配置环境、网络调用、推理数据集读取、次要还须要应用网络训练时保留好的训练模型、推理等,为了对推理过程的理解,须要打印一些推理过程中生成的一些日志信息。以下为实现推理过程的局部代码,仅供参考。

context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", save_graphs=False)
network = YOLOV3DarkNet53(is_training=False)
param_dict = load_checkpoint(local_ckpt_path)
param_dict_new = {}
for key, values in param_dict.items():
 if key.startswith('moments.'):
 continue
 elif key.startswith('yolo_network.'):
 param_dict_new[key[13:]] = values
 else:
 param_dict_new[key] = values
load_param_into_net(network, param_dict_new)
detection = DetectionEngine(args)
input_shape = Tensor(tuple(config.test_img_shape), ms.float32)
for i, data in enumerate(ds.create_dict_iterator()):
  image = Tensor(data["image"])
  image_shape = Tensor(data["image_shape"])
  image_id = Tensor(data["img_id"])
  prediction = network(image, input_shape)
  output_big, output_me, output_small = prediction
  output_big = output_big.asnumpy()
  output_me = output_me.asnumpy()
  output_small = output_small.asnumpy()
  image_id = image_id.asnumpy()
  image_shape = image_shape.asnumpy()
  detection.detect([output_small, output_me, output_big], args.per_batch_size,
 image_shape, image_id, config=config)

3) src 目录下次要是训练脚本和推理脚本须要调用的一些模块,如:yolo.py 文件中次要的 yolov3_darknet53 网络结构脚本、yolo_dataset.py 文件是模型读取并解决数据的脚本等。

4) scripts 目录下则是网络模型训练和推理运行时候的一些执行命令,整合到 sh 文件中,方面间接执行,如:训练执行命令能够参考如下形式:

python train.py 
    --data_dir=./dataset/coco2014 
    --pretrained_backbone=darknet53_backbone.ckpt 
    --is_distributed=0 
    --lr=0.001 
    --loss_scale=1024 
    --weight_decay=0.016 
    --T_max=320 
    --max_epoch=320 
    --warmup_epochs=4 
    --training_shape=416 
    --lr_scheduler=cosine_annealing > log.txt 2>&1 &

3、模型推理

yolov3_darknet53 网络能够对批量数据进行推理,这里有一点须要留神,推理的数据和训练的数据要离开,它们之间不要有雷同的数据,否则影响到最初的推理精度。

在做模型推理时,有两个参数对最初的后果影响比拟大:

1) ignore_threshold: 这个参数是设置最初推理后果的置信度,比方,最初对指标检测出的指标置信度有大有小,置信度越大,阐明推理的后果正确的概率越大,反之,则后果正确的概率越小。这时能够设置改置信度的大小,将小于该置信度的指标剔除,这对最初的后果展现成果会有较好帮忙。

2) nms_thresh:该参数是设置检测的指标框的重合度,当两个框的重合度大于该参数时,则认为这两个指标是同一个指标,只显示一个框,反之,当两个框的重合度小于该参数时,则两个框都保留。以上两个参数的设置须要一些现场的教训,依据现场理论状况进行调整。

五、总结与扩大

yolov3 相比 yolov2 加深了网络,并采纳了 3 中尺度进行检测,引入了更多的 anchor,速度尽管有所降落,然而晋升了精度,对检测小指标来说,成果要更好。

yolov3 可广泛应用在图像分类、图像检测等方面,如人员戴口罩检测、非凡区域安全帽佩戴检测等。总之,通过深度学习算法这种 AI 技术已深刻到生存各个方面,缩小人工的干涉,进步人员的安全性,给生存带来很大便当等。感兴趣的童鞋尽快入手试试吧。

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0