AI摄像误认裁判光头为足球想一想觉得很有趣
想想就很有趣。 如果识别技术不再是单纯的追踪足球,而是改为“综合考虑球员密度和足球位置”的设计,岂不是更好?
例如:场上有22人,确定在一定的摄像机画面尺寸范围内,将摄像机角度调整到对于足球位置和球员人数都最佳的位置。 这将问题转化为足球位置和球员密度的双目标优化问题。 不仅考虑足球的位置,还考虑足球和球员聚集中心的位置。 镜头调度是根据两人的位置来实现的。
我的想法大致是这样一个过程:
1.使用YOLO创建识别算法,可以随时在屏幕中标记球员的位置和足球的位置
2.设计一个算法计算球员聚类中心(这不能是一个简单的中心,因为带球球员、中立球员、防守球员、暂时不相关的球员等之间的权重一定是不同的))
3. 设计调度算法3d足球比赛下载,根据球员聚类中心、足球位置以及两者的运动方向同时确定摄像机调度。
4. 在现实世界中进行物理测试
具体如何处理这个复杂的问题呢? 首先,我们需要设计一套球队规则,如何衡量足球位置和球员密度的重要性,以及设计什么样的函数来代表球员密度和所谓的“最佳足球位置”? 如果运动到了侧面,投篮应该如何变化? 如果有快速传切,足球位置快速变化3d足球比赛下载,如何保证摄像机不会剧烈晃动? 对于守门员大力射门且足球位置中心与球员位置距离巨大的情况我们该如何考虑? 具体处理这个问题太复杂了。 我一个人很难做到,而且我没有时间,没有摄像机,也没有场上的两个团队配合我测试(= =,)。 但我还是可以迈出这个想法的第一步——使用yolo5分析屏幕,分析当前镜头中的球员数量和足球位置。
于是目标就定下来了。
项目目标:
简而言之,最终的结果是俯视球场的射门,而识别技术可以标记出射门中球员的位置和足球的位置。 这就是我能做的。 后续的事情我们再说吧。
做出这个样子就是要达到的目标(虽然这张图中没有足球(被人挡住了))
项目实施:STEP1 获取数据集图片
作为一名阿森纳球迷,我选择了20-21赛季的一场阿森纳比赛。 阿森纳对阵曼城,
首先下载视频。
然后每12秒拍摄一帧照片。 这里一开始就拍了前一个小时的照片,但其实最后也没用那么多。
import cv2
capture=cv2.VideoCapture(r'F:/素材资源/足球比赛/【英语解说】20-21赛季英超第25轮|阿森纳VS曼城 全场录像 - 1.21.02.2021(Av416851693,P1).mp4') #视频名称
print(capture.isOpened())
num=0
# 总共输出一个小时 24*60*60 = 86400
# 每4秒钟输出一帧 24 * 12 = 288
# 86400 / 288 = 300 能够得到300张数据集
while True:
ret,img=capture.read()
if not ret:
print("path 1")
break
if num % 288 ==0:
cv2.imwrite(r'arsvsmcn/%s.jpg'%('pic_'+str(num)),img) #写出视频图片.jpg格式
print("已输出:"+str(num//288)+"帧")
if num == 86400: # 一个小时
break
num=num+1
capture.release()
如果您继续,就该标记了。
STEP2 标签
参考:使用标签
计划:标记所有 213 张图片。
实际情况:这部分真的很痛苦,平均每张图片有10个左右的球员,而且足球到处都是。 图片一共有213张,我打了107张(正好是一半)。 我总共大概打了1000多个标签。 我真的不想再打字了。 我断断续续用了大概4到5小时吧? 我当时的心态就是尝试着进行下一步。 如果效果还不错,就这样吧。 如果没有,我会继续。
当然,这里我犯了一个可以说是系统性错误的问题,所以暂时不提。
最终效果
最后将xml格式转换为yolo格式(这个地方是参考一篇博客做的,但是具体链接没有保存)
STEP3 调整yolo5工程参数
下一步是调整参数。 第一次下载,
进口
# data文件要修改的参数(此行不要出现)
# number of classes
nc: 2
# class names
names: [ 'person','football' ]
# models
# parameters
nc: 2 # number of classes
STEP4 培训
parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='weights/yolov5s.pt', help='initial weights path')
parser.add_argument('--cfg', type=str, default='models/nowusing.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default='data/nowusing.yaml', help='data.yaml path')
parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=100)
parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs') # CUDA out of memory.
因为我的笔记本电脑才几年前,所以不敢把batch-size调太大,只设置了8个batch。其他参数基本没啥好说的。
问题1
:媒体盒/是。 ……
这个问题是wandb造成的。 这里,我一开始认真的选择了注册一个wandb账号,然后打开项目,但是还是报错,而且是很无头绪,报错。 后来我觉得我根本不需要这个辅助功能,所以我干脆将这部分选择禁用。我选择了本文中的解决方案
添加在utils//.py开头的try/模块后面
wandb = None # add this
禁止这个和那个就可以了。
问题2
: 周一无法获取 SPPF
此问题的解决方案
但我不明白为什么会发生这种情况。
正式测试
我第一次尝试了30个epoch,速度还蛮快的。 也许数据集不是很大,所以很快就结束了,得到了结果。然后进行第二次实验,运行100个epoch,持续20分钟。
前 30 个纪元
第二个 100 个 epoch
最后结果
然后我又看了看损失,并没有我想象的那么糟糕,所以“纸面上”还是不错的。 想要看到具体的效果,还需要用其他数据来测试。
STEP5 测试检查
首先,我用原视频进行了检查。 因为我选择了前60分钟(虽然没有全部用过),所以直接用后面的视频来查看。
效果图展示
比我想象的要好,因为它能更准确地识别人。 除了当第二张图人多的时候,它会认出更多的人。 其他一切都很好。
然后我继续用其他视频来测试验证
布雷顿 0-2 埃弗顿
切尔西 VS 利物浦 比赛
这场比赛天气非常晴朗,球场分为阴阳两方。 在这种情况下依然能够被识别,说明鲁棒性比较强。 我以为我能很好地适应原来的训练比赛,没想到我基本能适应其他比赛,这确实让我有点高兴。
但我一看,就发现了一个很严重的问题——为什么只有标记,没有标记? ?
有一个问题
几乎所有视频,几乎每一帧,只显示标记,从不显示标记。
发现这个问题的时候我有点困惑,但是后来仔细想了想就想通了,因为我的每张图片少则5个3d足球比赛下载,多则20多个标记,但只有1个标记。 如果被一名球员挡住,连一个都没有,标记数量太少,足球本身占用的像素也很少。 剪出的训练集中,有很多是在击球瞬间处于鬼魂状态,处于乱序状态。 在混战的状态下,这些情况导致足球印记无法出现,这也可以说是不可避免的。 这可以说是一个系统性问题。 数据集的设计从一开始就存在缺陷,所以可以说我完成了一半的目标(识别人),但另一半目标(识别球)却没有完成。
在我看来有点...
关于改进目标和前景的一些思考
虽然这次总体来说不是很成功,但是总体来说也不算太差。 这对我来说是一次完整的yolo实践(从制作自己的数据集开始,到训练、验证、测试一套流程走下来),非常有趣,让我感觉很开心(得到结果的那一刻,我真的感觉就像小时候在格斗游戏中打败boss一样的快乐)。 所以我还是比较满意的。
改进的可能性
由于问题是标签不平衡,太多和太少,所以解决办法就是把图片切成碎片,让每张图片包含一个人和一个足球,大致到这个程度。 但在这种情况下,我不仅需要从头开始使用标签,而且还需要对现有图片进行过滤、分割和切片来选择持球者和足球。 想想这个工作量就有点让人不知所措了。 我刚刚经历了5个小时的贴标签,我真的不想短时间内再经历一遍。 而且我还有其他事情要做,所以暂时把这件事放在一边。
外表
经过2021年一整年的经历,我明白自己现在想做的就是那些“有意义的事情”,不想把时间浪费在一些很虚浮的事情上,比如辩经、欺骗自己做一些事情。所谓我要努力工作等等,所以我打算做一些“生意”,学一些我想做的事情。 不管是为了自己,还是为了别人,至少我要有所收获,真正留下一些东西。 我不想只学习表面的东西。 假装很老练,希望从细节入手。 让我们一点一滴做起吧,以后我会在计算机视觉方面努力。
那我就等当前手头的事情结束了,再去读一下yolo的源码。 CNN的基本数学原理已经了解了,batch-size等参数的作用也基本了解了,但是总的来说,在代码层面,它还只是一个骗子而已,我们慢慢把这些东西付诸实践吧。
标记数据集
关联:
提取码:rcpx
相关资讯
- 英超争冠悬念重燃:曼城缩小分差至4分,斯通斯关键救球成转折点
- 英超第6轮焦点战:热刺3-0大胜曼联,伊普斯维奇与阿斯顿维拉战平,积分榜变动分析
- 英超赛事分析:莱切斯特城对阵切尔西,历史交锋与近期战绩解析
- 2024年NBA选秀日程历史性变革:两天进行,布朗尼与崔永熙引关注
- 尤文图斯欧冠亚军次数最多,欧冠亚军排名统计及历史回顾
- NBA季后赛最新战况:2023年4月7日排名更新,凯尔特人保持不败,雄鹿和掘金锁定头名
- C 罗进球辉煌之路:900+进球书写足球传奇,皇马、曼联、葡萄牙国家队荣耀象征
- 娄一晨足球解说生涯回顾:从上海电视台到咪咕解说天团
- 英超联赛:英格兰最高级别职业足球联赛,全球足球爱好者的盛宴
- nba选秀模板 杰林 - 威廉姆斯的成长之路:从高中到阿肯萨斯大学
- 篮网队传奇球星:基德、卡特、欧文生涯及成就大盘点
- 11-12赛季德甲 昨日球赛反向明灯,今日球赛简单回顾及盘赔走向
- 每日球衣鉴赏2022.8.18:黄蜂巴图姆球衣,独特之处全知晓
- 如何在 NBA 选秀规则中抽取状元?快来了解一下吧
- 女足世界杯落幕,五大联赛火热来袭
- 利物浦12轮英超积31分领跑,曼城遇五连败夺冠赔率跌至第三
- 网易体育:用数据回顾穆里尼奥告别西甲之际的皇马生涯
- 11月23日凌晨拜仁3 - 0胜奥格斯堡,凯恩戴帽创德甲纪录
- CBA服装相关:安踏供应比赛服,李宁CBA篮球服极受欢迎
- 意甲联赛第 25 轮:尤文图斯 1-1 亚特兰大,达尼洛补时绝平