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

温馨提示:文末有 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%6ax[i, j].imshow(images[0])index = np.argmax(labels[i])  # get image indexclass_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, EarlyStoppingepochs = 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 barsfig, 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.xdnf.cn/news/1547593.html

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

相关文章

Golang | Leetcode Golang题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; func getSteps(cur, n int) (steps int) {first, last : cur, curfor first < n {steps min(last, n) - first 1first * 10last last*10 9}return }func findKthNumber(n, k int) int {cur : 1k--for k > 0 {steps : getSteps(cu…

基于SSM+小程序的在线课堂微信管理系统(在线课堂1)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 &emsp1、管理员实现了首页、个人中心、用户管理、课程分类管理、课程信息管理、课程订阅管理、课程视频管理、公告栏管理、留言板管理、系统管理。 2、用户实现了首页、课程信息、公…

Windows系统下批量重命名文件的两种实现方法

我们如果有一批文件&#xff0c;想要大批的重命名文件。例如&#xff0c;将下面的这些图片重命名为boot_itc_00001.jpg、boot_itc_00002.jpg、……、boot_itc_01000.jpg。总不能一个一个改吧&#xff1f; 第一种方法&#xff08;也是最灵活的一种&#xff09;&#xff1a; 借助…

机器学习-KNN分类算法

1.1 KNN分类 KNN分类算法&#xff08;K-Nearest-Neighbors Classification&#xff09;&#xff0c;又叫K近邻算法。它是概念极其简单&#xff0c;而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想&#xff1a;如果一个样本在特征空间中的k个最…

IIs站点发布ERR_UNSAFE_PORT

换个端口&#xff0c;谢谢&#xff01; nice 浏览器对部分端口有特定的保护机制&#xff0c;如果你的应用使用了这些端口&#xff0c;浏览器在发送请求时会触发保护机制&#xff0c;拒绝发送请求&#xff0c;于是&#xff0c;你的服务器应用自然就收不到请求了。 1, // …

树莓派基础命令

目录 1.树莓派简介 2.树莓派使用命令 3.树莓派包管理 4.关于远程连接树莓派的思路&#xff1a; 5.总结 1.树莓派简介 树莓派&#xff08;Raspberry Pi&#xff09;是一款由英国非营利组织树莓派基金会开发的小型、低成本的单板计算机&#xff0c;最初设计目的是为了让学生…

好看的首页展示

代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* RESET…

【BUG】静读天下|静读天下无法设置段间距解决方案

【BUG】静读天下&#xff5c;静读天下无法设置段间距解决方案 文章目录 【BUG】静读天下&#xff5c;静读天下无法设置段间距解决方案前言解决办法 凑质量分静读天下的特点与优势功能布局与使用技巧个人使用心得结语 前言 03-23 求助&#xff5c;关于排版的问题【静读天下吧】_…

数字孪生平台,助力制造设备迈入超感知与智控新时代!

痛点剖析 当前&#xff0c;制造业面临系统分散导致的数据孤岛问题&#xff0c;严重阻碍了有效监管与统计分析&#xff1b;同时&#xff0c;设备多样化且兼容性不足&#xff0c;增加了管理难度&#xff1b;台账记录方式混乱&#xff0c;工单审批流程繁琐且效率低下&#xff1b;…

Stable Diffusion零基础学习

Stable Diffusion学习笔记TOP11 _插件篇之ControlNet功能篇 ControlNet目前支持的10多种预处理器&#xff0c;根据数据检测种类可分为两种类型&#xff1a; 1、功能型&#xff1a;拥有着不同的能力 2、构图型&#xff1a;控制着SD扩散图形的构图规则 Shuffle洗牌/转换&#…

基于Ubuntu 20.04 LTS上部署MicroK8s(最小生产的 Kubernetes)

目录 文章目录 目录简介Kubernetes简介MicroK8s简介Ubuntu系统MicroK8s的优势安装环境基本要求执行安装命令加入群组(使用非 root 用户访问)开启 dashboard 仪表盘查看服务名称查看仪表盘开放的端口打开浏览器检查状态打开你想要的服务(使用附加组件)开始使用 microk8s访问 Kub…

【【通信协议之ICMP协议的FPGA实现】】

通信协议之ICMP协议的FPGA实现 整体的实现框图如下所示 arp_rx.v module arp_rx#(//开发板MAC地址 00-11-22-33-44-55parameter BOARD_MAC 48h00_11_22_33_44_55, //开发板IP地址 192.168.1.10 parameter BOARD_IP {8d192,8d168,8d1,8d10} )(input …

RFID手持机——物联网时代的核心工具

一、行业背景 在当今物联网技术高速发展的时代&#xff0c;RFID技术作为核心的数据采集与识别手段&#xff0c;在物流、仓储、资产管理等众多领域发挥着至关重要的作用。以物流行业为例&#xff0c;利用RFID技术能够对货物进行全程精准跟踪&#xff0c;从入库、存储、搬运到出…

Keepalived+Nginx 高可用集群(双主模式)

1.基础环境配置 [rootlb1 ~]# systemctl stop firewalld # 关闭防火墙 [rootlb1 ~]# sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/sysconfig/selinux # 关闭selinux&#xff0c;重启生效 [rootlb1 ~]# setenforce 0          …

从Elasticsearch到RedisSearch:探索更快的搜索引擎解决方案

文章目录 RedisSearch 的关键功能与 ElasticSearch 对比性能对比产品对比 如何使用 Docker 安装 RedisSearch1. 获取 RedisSearch Docker 镜像2. 启动 RedisSearch 容器3. 验证安装 RedisSearch 使用示例1. 连接到 RedisSearch2. 创建索引3. 添加文档4. 执行搜索搜索所有包含 &…

C++ | Leetcode C++题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; class Solution { public:int getSteps(int curr, long n) {int steps 0;long first curr;long last curr;while (first < n) {steps min(last, n) - first 1;first first * 10;last last * 10 9;}return steps;}int findKthNum…

Ubuntu20.04 安装汉语拼音后重启登入黑屏

在虚拟机上装了一个Ubuntu用来学C&#xff0c;默认没有安装中文输入。于是按照网上教程装了几个汉语包。切换输入法的时候突然死机&#xff0c;重启登入直接黑屏。百度后发现有不少老哥和我这个问题一模一样&#xff0c;按照他们的方法也终于整好了&#xff0c;虚惊一场。 解决…

Windows 10 系统安装 FFmpeg 查看、转换、编辑音频文件

1、FFmpeg官网&#xff1a;FFmpeg 点击下载 可以选择下载full版本 下载之后解压到指定目录&#xff0c;在系统环境变量 Path 里面新增环境变量 打开CMD终端运行 ffmpeg -version 查看是否安装成功。 2、基本命令 查看音频基本信息 ffprobe 1.mp3 ##输出 [mp3 000002ab334405…

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight&#xff08;V1.4.5&#xff09; 版本更新&#xff0c;新增 Ranger、Solr DataLight 迎来了重大的版本更新&#xff0c;现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化&#xff0c;新增了对 Ranger 和 Solr 服务组件的支持&#xff0c;同时对多项已…

傅里叶级数在机器人中的应用(动力学参数辨识)

B站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清华大学李永乐老师教你如何理解傅里叶变换&#xff0c;辨清美颜和变声原理&#xff0c;&#xff01;&#xff01;_哔哩哔哩_bilibiliB站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清…