基于卷积神经网络的体育运动项目分类识别系统

news2024/9/30 18:55:30

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        随着计算机视觉和深度学习技术的快速发展,利用先进的图像处理技术对体育运动进行智能分类与识别已成为研究热点。传统的运动分析方法通常依赖于人工观察和记录,耗时耗力且容易出错。本系统利用 TensorFlow、Keras 等深度学习框架,以VGG16和 InceptionV3 为 base 模型构建卷积神经网络(CNN),利用体育运动项目数据集进行模型训练与验证,预测准确率达到 87.2%,使用Flask框架结合Bootstrap前端技术搭建了一个交互式的分析预测平台,能够从大量的图像数据中自动学习和提取特征,从而实现高效、准确的分类。 

        B站系统演示视频:基于卷积神经网络的体育运动项目分类识别系统_哔哩哔哩_bilibili

基于卷积神经网络的体育运动项目分类识别系统

2. 体育运动项目数据集读取与预处理

        使用 Tensorflow 的 tf.keras.preprocessing.image_dataset_from_directory 函数从数据集文件夹中加载图片数据:

def image_generator(height,width):
    train_datagen = ImageDataGenerator(
            rescale=1./255.,
            validation_split=0.2,
            rotation_range=10,
            width_shift_range=0.05,
            height_shift_range=0.05,
            brightness_range=[0.5, 1.5]
    )
    train_ds = train_datagen.flow_from_directory(
            './dataset/train',
            batch_size=batch_size,
            shuffle=True,
            class_mode='categorical',
            target_size=(height, width),
            classes=class_map
    )
    
    valid_datagen = ImageDataGenerator(rescale=1./255.)
    val_ds = valid_datagen.flow_from_directory(
            './dataset/valid',
            class_mode='categorical',
            target_size=(height, width),
            batch_size=batch_size,
            classes=class_map
    )
    return train_ds, val_ds

        数据集一共有100个类别,每个类别包含 117 张图片,样本均衡。对加载的数据集进行样本的可视化:

fig, ax = plt.subplots(2, 6, figsize=(20, 8))
fig.suptitle("不同类型运动项目的样本可视化", fontsize=18)
for k in range(12):
    images, labels = train_ds.next()
    i, j = k//6, k%6
    ax[i, j].imshow(images[0])

    index = np.argmax(labels[i])  # get image index
    class_name = class_name_dict[int(index)]
    ax[i, j].set_title(class_name, color= 'red', fontsize= 16)
        
    ax[i, j].axis('off')
plt.show()

3. 深度卷积神经网络模型构建与训练

        深度卷积神经网络(Deep Convolutional Neural Networks, CNNs)是一种专门设计用于处理具有网格结构的数据的深度学习模型,如图像。它们在图像识别、分类、分割以及物体检测等计算机视觉任务中取得了巨大成功,尤其是在图像识别、目标检测和图像生成等方面。

        卷积神经网络的的主要层结构包括:

  • 卷积层:这是CNN的核心部分。它使用一组可学习的小型过滤器(通常称为内核或滤波器),这些过滤器在输入数据上滑动以检测局部特征,如边缘或纹理。每个过滤器会与输入数据的不同部分进行卷积运算,以产生特征图。

  • 激活函数:卷积操作之后通常会应用一个非线性激活函数,如ReLU(Rectified Linear Unit),以引入非线性并增强模型的表达能力。

  • 池化层:通常位于一系列卷积层之后,用于降低数据的空间维度,从而减少后续计算量,并且有助于提取平移不变特征。最常见的池化方法是最大池化(Max Pooling),它选择每个区域中的最大值作为输出。

3.1 VGG16 Base Model

        VGG网络被广泛应用于图像分类、目标检测、语义分割等计算机视觉任务中,并且其网络结构的简单性和易实现性使得VGG成为了深度学习领域的经典模型之一。VGG16和VGG19网络架构非常相似,都由多个卷积层和池化层交替堆叠而成,最后使用全连接层进行分类。两者的区别在于网络的深度和参数量,VGG19相对于VGG16增加了3个卷积层和一个全连接层,参数量也更多。

        以预训练的 VGG16 base model 为基础模型,输出端添加 100 类体育运动的分类器:

input_shape = (height, width, 3)
base_model = tf.keras.applications.vgg16.VGG16(
    weights='./pretrained_models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', 
    include_top=False,
    input_shape=input_shape
)
base_model.trainable = False

# ..........

model_vgg16.add(tf.keras.layers.Dense(len(class_map), activation='softmax'))

model_vgg16.compile(loss='categorical_crossentropy', 
              optimizer=tf.keras.optimizers.Adam(0.001),
              metrics=['accuracy'])
model_vgg16.summary()

        完成卷积神经网络模型构建后,进行模型的编译:

from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
 
epochs = 100
 
# 保存最佳模型参数
checkpointer = ModelCheckpoint(
    'best_vgg16_model.h5',
    monitor='val_accuracy',
    verbose=1,
    save_best_only=True
)

# 设置早停
earlystopper = EarlyStopping(
    monitor='val_accuracy', 
    min_delta=0.001,
    patience=5, 
    verbose=1
)

        模型训练与验证:

vgg16_history = model_vgg16.fit(
    train_ds,
    validation_data=val_ds,
    epochs=epochs,
    callbacks=[checkpointer, earlystopper]
)

        模型训练日志:

Epoch 1/100
422/422 [==============================] - ETA: 0s - loss: 2.7480 - accuracy: 0.4451
Epoch 1: val_accuracy improved from -inf to 0.73400, saving model to best_vgg16_model.h5
422/422 [==============================] - 1658s 4s/step - loss: 2.7480 - accuracy: 0.4451 - val_loss: 1.1710 - val_accuracy: 0.7340
......
Epoch 14/100
422/422 [==============================] - ETA: 0s - loss: 0.2579 - accuracy: 0.9427
Epoch 14: val_accuracy did not improve from 0.79400
422/422 [==============================] - 1571s 4s/step - loss: 0.2579 - accuracy: 0.9427 - val_loss: 2.1247 - val_accuracy: 0.7480
Epoch 14: early stopping

3.2 InceptionV3 Base Model

        深度神经网络(Deep Neural Networks, DNN)或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出,包括Inception-v1、Inception-v2、Inception-v3、Inception-v4及Inception-ResNet系列。

        Inception V3引入了因子分解卷积的概念,即用两个较小的卷积核代替一个较大的卷积核。例如,用一个1x7的卷积后接一个7x1的卷积代替一个7x7的卷积。这种方法减少了参数数量,同时保持了模型的深度,提高了计算效率。每个Inception模块内部包含几个并行的卷积流,这些流分别负责捕捉不同尺度的信息。Inception V3进一步改进了这些模块的设计,使得网络能够更加灵活地处理不同尺度的特征。

        模型构建:

tf.keras.backend.clear_session()

base_model = tf.keras.applications.InceptionV3(
    weights='./pretrained_models/inception_v3_weights_tf_dim_ordering_tf_kernels_notop.h5', 
    include_top=False, 
    input_shape=input_shape
)
base_model.trainable = False

# ......

model_inceptionv3.add(tf.keras.layers.Dense(len(class_map), activation='softmax'))

model_inceptionv3.compile(loss='categorical_crossentropy',
    optimizer=tf.keras.optimizers.Adam(0.001),
    metrics=['accuracy']
)
model_inceptionv3.summary()

        模型训练

inceptionv3_history = model_inceptionv3.fit(
    train_ds,
    validation_data=val_ds,
    epochs=epochs,
    callbacks=[checkpointer, earlystopper]
)

        模型训练日志:

Epoch 1/100
422/422 [==============================] - ETA: 0s - loss: 10.9468 - accuracy: 0.5350
Epoch 1: val_accuracy improved from -inf to 0.69200, saving model to best_inceptionv3_model.h5
422/422 [==============================] - 416s 969ms/step - loss: 10.9468 - accuracy: 0.5350 - val_loss: 6.5931 - val_accuracy: 0.6920
......
Epoch 23/100
422/422 [==============================] - ETA: 0s - loss: 1.5095 - accuracy: 0.9610
Epoch 23: val_accuracy did not improve from 0.87200
422/422 [==============================] - 406s 961ms/step - loss: 1.5095 - accuracy: 0.9610 - val_loss: 8.1535 - val_accuracy: 0.8640
Epoch 23: early stopping

3.3 模型性能对比

labels = ['损失Loss','准确率Accuracy']
vgg16_evals = [vgg16_eval_result['损失Loss'], vgg16_eval_result['准确率Accuracy']]
inceptionv3_evals = [inceptionv3_eval_result['损失Loss'], inceptionv3_eval_result['准确率Accuracy']]

x = np.arange(len(labels))  # the label locations
bar_width = 0.35  # the width of the bars

fig, ax = plt.subplots(figsize=(8, 6), dpi=100)
rects1 = ax.bar(x - bar_width/2, vgg16_evals, bar_width, label='VGG16')
rects2 = ax.bar(x + bar_width/2, inceptionv3_evals, bar_width, label='Inception-V3')

# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel('Loss/Acc')
ax.set_title('VGG16 与 Inception-V3 的花卉分类性能对比')
ax.set_xticks(x, labels)
ax.legend()

ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)

fig.tight_layout()
 
plt.show()

        可以看出,基于 Inception-V3 为 base 模型的卷积神经网络,其预测准确率较高,为87.2%,以此体育运动项目智能分类识别系统中,我们将集成该模型。

        同时我们也能看出,对于100个类别的多类别分类问题,且每个类别仅包含100多个小样本,难度相对来说是更大些的,我们的模型准确率达到了87.2%,具有很好的实用价值。

4. 体育运动项目分类识别系统

4.1 系统首页

        系统首页提供简洁明了的界面设计,包括系统名称、主要功能简介以及使用模型的介绍等内容。用户可以通过主页快速了解系统的基本操作流程及注意事项。首页还提供在线测试的按钮,点击可进行在线测试。

4.2 卷积神经网络模型介绍

4.3 体育运动实时分类预测

        用户上传图像后,系统将自动调用预先训练好的深度学习模型进行分析处理。模型会根据图像中的特征判断体育运动类型,并给出相应的分类结果。此外,系统还会提供模型对所有类别的预测概率分布,提升模型输出可解释性。

        (1)balance beam 平衡木样本预测

        (2)snowmobile racing 雪地摩托赛样本预测

        (3)tennis 网球样本预测

        (4)hockey 曲棍球样本预测

5. 总结

        本系统利用 TensorFlow、Keras 等深度学习框架,以VGG16和 InceptionV3 为 base 模型构建卷积神经网络(CNN),利用体育运动项目数据集进行模型训练与验证,预测准确率达到 87.2%,使用Flask框架结合Bootstrap前端技术搭建了一个交互式的分析预测平台,能够从大量的图像数据中自动学习和提取特征,从而实现高效、准确的分类。 

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python-数据挖掘实战案例

2. Python-深度学习实战案例

3. Python-管理系统实战案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fatfs API使用手册

配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…

JWT(JSON Web Token)的介绍

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话&…

如何组织鼠标的默认的事件

如何组织鼠标的默认的事件 我原先的代码是 dblclick"checkNode(data)"设置了一个双击的事件,我如果双击的话就会导致这个内容被选中。 选中内容的同时会触发浏览器默认的操作,导致出现复制的框这些东西。 解决的方法。加一句。 mousedown.pr…

尝鲜使用 YOLO V11 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V11 2024年9月30日,Ultralytics官方团队宣布YOLOv11正式发布,标志着YOLO系列实时目标检测器的又一次重大升级。这一新版本不仅在准确性和检测速度上再创新高,还通过架构和训练方法的革新,极大地提升了目标检测的综合性能…

算法打卡:第十一章 图论part11

今日收获:Floyd 算法,A * 算法,最短路算法总结 1. Floyd 算法 题目链接:97. 小明逛公园 思路:Floyd用于解决多源最短路问题,对边的正负权值没有要求。核心是动态规划 (1)dp数组的…

Stable Diffusion的Lora使用和训练 如何使用和训练LoRA模型?你想要的都在这!--人人都可以当炼金术士!

随着人工智能技术的不断发展,图像生成与反推技术已经成为了AI领域的一大热点。今天,我们就来为大家详细介绍Stable Diffusion的Lora使用和训练方法,让每个人都能成为炼金术士,创造出属于自己的图像生成魔法! 在我们使…

108.WEB渗透测试-信息收集-FOFA语法(8)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:107.WEB渗透测试-信息收集-FOFA语法(7) 指挥系统的后台&#xff…

把GV幅度还不赶紧地方吧

文章目录 标题1代码 标题1 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

pve虚拟机常见问题汇总

一、问题记录 当你遇到 Proxmox VE (PVE) 报错信息 “TASK ERROR: can’t lock file ‘/var/lock/qemu-server/lock-141.conf’ - got timeout”&#xff0c;通常意味着 PVE 尝试对一个虚拟机进行操作&#xff08;如停止或重启&#xff09;时&#xff0c;无法获取必要的锁文件&…

项目管理系统如何实现项目申报流程自动化?

传统的项目申报流程往往繁琐复杂&#xff0c;涉及众多环节和部门间的协作&#xff0c;不仅耗时费力&#xff0c;还容易因人为疏忽而导致错误或延误。随着信息技术的飞速发展&#xff0c;项目管理系统的出现为项目申报流程的自动化提供了可能&#xff0c;极大地提升了申报效率和…

【Windows】自定义显示器的分辨率

背景 由于本人更新驱动导致2个显示器里面&#xff0c;有一个显示器的分辨率只剩下2个可以调节 这样就导致2个显示器分辨率不同&#xff0c;更新了多次驱动都修复不了&#xff0c;所以想着看能不能自定义分辨率 工具下载 显示器自定义分辨率工具 或者百度搜索 Custom Resolu…

基于大数据的二手房价数据可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

求组合数专题

求组合数 Ⅰ&#xff08;递推公式&#xff09; 思路 递推法预处理 利用公式 复杂度 直接查询 单次查询复杂度 代码 #include <bits/stdc.h> using namespace std; const int N 2010; const int mod 1e97; int c[N][N]; int get_c(int a, int b) {c[0][0] 1;for(i…

解决VRM格式模型在Unity中运行出现头发乱飞等问题

1、问题 通过VRoidStudio制作导出的vrm格式的模型&#xff0c;放在unity中使用时&#xff0c;一运行就会出现头发乱飞&#xff0c;没有自然下垂的问题 2、解决方法 将模型下的secondary中的所有VRM Spring Bone脚本中的Drag Force改为1&#xff0c;Hit Radius改为0 修改后…

SpringBoot+Thymeleaf发票系统

> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录&#xff0c;权限控制&#xff0c;客户管理&#xff0c;发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…

LeetCode[中等] 24.两两交换链表中的结点

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 思路&#xff1a;递归 头结点head&#xff0c;第二个结点head.next, 交换结点…

【论文阅读】MEDICAL GRAPH RAG: TOWARDS SAFE MEDICAL LARGE LANGUAGE MODEL VIA

论文地址&#xff1a;https://arxiv.org/abs/2408.04187#:~:textWe%20introduce%20a%20novel%20graph-based%20Retrieval-Augmented 代码地址&#xff1a; GitHub - MedicineToken/Medical-Graph-RAG: Medical Graph RAG: Graph RAG for the Medical Data 1 研究背景&#xff1…

LARA:多语言多轮对话意图分类的新突破

人工智能咨询培训老师叶梓 转载标明出处 多轮对话意图分类面临的主要挑战在于对话的复杂性和上下文的不断变化。如图 1 所示。在多轮对话中&#xff0c;意图可能随着对话的进展而变化&#xff0c;这就需要注释者不仅要理解每条消息的内容&#xff0c;还要把握整个对话的上下文…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27目录1. VisScience: An Extensive Benchmark for Evaluating K12 Educational Multi-modal Scientific Reasoning VisScience:…

Android开发国家手机号归属地列表

Android开发国家手机号归属地列表 国家手机号归属地列表需求不多&#xff0c;但是还是有一些 一、思路&#xff1a; 本地的国家归属号json 二、效果图&#xff1a; 三、关键代码&#xff1a; // 联系&#xff1a;893151960 public class ChooseCountryActivity extends Ap…