基于轻量级卷积神经网络CNN开发构建打架斗殴识别分析系统

news2024/11/23 23:05:19

在很多公共场合中,因为一些不可控因素导致最终爆发打架斗殴或者大规则冲突事件的案例层出不穷,基于视频监控等技术手段智能自动化地识别出已有或者潜在的危险行为对于维护公共场合的安全稳定有着重要的意义。本文的核心目的就是想要基于CNN模型来尝试开发构建公众场景下的打架斗殴行为识别系统,这里我们从互联网中采集了相当批量的聚众数据,首先看下效果:
 

接下来看下数据集:

【有打架斗殴】

【无打架斗殴】

数据主要来源于互联网数据采集和后期的人工处理标注。

可以借助我编写的数据集随机划分函数,便捷地生成训练集-测试集,如下所示:

def randomSplit(dataDir="data/",train_ratio=0.80):
    """
    数据集随机划分
    """
    if not os.path.exists("labels.json") or not os.path.exists("dataset.json"):
        pic_list=[]
        labels_list = os.listdir(dataDir)
        labels_list.sort()
        print("labels_list: ", labels_list)
        with open("labels.json", "w") as f:
            f.write(json.dumps(labels_list))
        for one_label in os.listdir(dataDir):
            oneDir=dataDir+one_label+"/"
            one_list=[oneDir+one for one in os.listdir(oneDir)]
            pic_list+=one_list
        length=len(pic_list)
        print("length: ", length)
        train_num=int(length*train_ratio)
        test_num=length-train_num
        print("train_num: ", train_num, ", test_num: ", test_num)
        train_list=random.sample(pic_list, train_num)
        test_list=[one for one in pic_list if one not in train_list]
        dataset={}
        dataset["train"]=train_list
        dataset["test"]=test_list
        with open("dataset.json","w") as f:
            f.write(json.dumps(dataset))
    else:
        print("Not Need To SplitData Again!!!!!")

接下来需要加载本地图像数据来解析创建可直接用于后续模型训练计算的数据集,核心实现如下所示:

def buildDataset():
    """
    加载本地数据集创建数据集
    """
    X_train, y_train = [], []
    X_test, y_test = [], []
    train_list=dataset["train"]
    test_list=dataset["test"]
    picDir = "data/train/"
    #训练集
    for one_path in train_list:
        try:
            print("one_path: ", one_path)
            one_img = parse4Img(one_path)
            one_y = parse4Label(one_pic_classes,labels_list)
            X_train.append(one_img)
            y_train.append(one_y)
        except Exception as e:
            print("train Exception: ", e)
    X_train = np.array(X_train)
    #测试集
    for one_path in test_list:
        try:
            print("one_path: ", one_path)
            one_img = parse4Img(one_path)
            one_y = parse4Label(one_pic_classes,labels_list)
            X_test.append(one_img)
            y_test.append(one_y)
        except Exception as e:
            print("test Exception: ", e)
    X_test = np.array(X_test)

完成数据集的解析构建之后就可以进行模型的开发训练工作了。

这部分可以参考我前面的博文的实现即可,这里就不再赘述了。本文中搭建的轻量级模型结构详情如下所示:

{
	"class_name": "Sequential",
	"config": {
		"name": "sequential_1",
		"layers": [{
			"class_name": "Conv2D",
			"config": {
				"name": "conv2d_1",
				"trainable": true,
				"batch_input_shape": [null, 100, 100, 3],
				"dtype": "float32",
				"filters": 64,
				"kernel_size": [3, 3],
				"strides": [2, 2],
				"padding": "same",
				"data_format": "channels_last",
				"dilation_rate": [1, 1],
				"activation": "relu",
				"use_bias": true,
				"kernel_initializer": {
					"class_name": "RandomUniform",
					"config": {
						"minval": -0.05,
						"maxval": 0.05,
						"seed": null
					}
				},
				"bias_initializer": {
					"class_name": "Zeros",
					"config": {}
				},
				"kernel_regularizer": null,
				"bias_regularizer": null,
				"activity_regularizer": null,
				"kernel_constraint": null,
				"bias_constraint": null
			}
		}, {
			"class_name": "MaxPooling2D",
			"config": {
				"name": "max_pooling2d_1",
				"trainable": true,
				"pool_size": [2, 2],
				"padding": "valid",
				"strides": [2, 2],
				"data_format": "channels_last"
			}
		}, {
			"class_name": "Conv2D",
			"config": {
				"name": "conv2d_2",
				"trainable": true,
				"filters": 128,
				"kernel_size": [3, 3],
				"strides": [2, 2],
				"padding": "same",
				"data_format": "channels_last",
				"dilation_rate": [1, 1],
				"activation": "relu",
				"use_bias": true,
				"kernel_initializer": {
					"class_name": "RandomUniform",
					"config": {
						"minval": -0.05,
						"maxval": 0.05,
						"seed": null
					}
				},
				"bias_initializer": {
					"class_name": "Zeros",
					"config": {}
				},
				"kernel_regularizer": null,
				"bias_regularizer": null,
				"activity_regularizer": null,
				"kernel_constraint": null,
				"bias_constraint": null
			}
		}, {
			"class_name": "MaxPooling2D",
			"config": {
				"name": "max_pooling2d_2",
				"trainable": true,
				"pool_size": [2, 2],
				"padding": "valid",
				"strides": [2, 2],
				"data_format": "channels_last"
			}
		}, {
			"class_name": "Conv2D",
			"config": {
				"name": "conv2d_3",
				"trainable": true,
				"filters": 256,
				"kernel_size": [3, 3],
				"strides": [2, 2],
				"padding": "same",
				"data_format": "channels_last",
				"dilation_rate": [1, 1],
				"activation": "relu",
				"use_bias": true,
				"kernel_initializer": {
					"class_name": "RandomUniform",
					"config": {
						"minval": -0.05,
						"maxval": 0.05,
						"seed": null
					}
				},
				"bias_initializer": {
					"class_name": "Zeros",
					"config": {}
				},
				"kernel_regularizer": null,
				"bias_regularizer": null,
				"activity_regularizer": null,
				"kernel_constraint": null,
				"bias_constraint": null
			}
		}, {
			"class_name": "MaxPooling2D",
			"config": {
				"name": "max_pooling2d_3",
				"trainable": true,
				"pool_size": [2, 2],
				"padding": "valid",
				"strides": [2, 2],
				"data_format": "channels_last"
			}
		}, {
			"class_name": "Flatten",
			"config": {
				"name": "flatten_1",
				"trainable": true,
				"data_format": "channels_last"
			}
		}, {
			"class_name": "Dense",
			"config": {
				"name": "dense_1",
				"trainable": true,
				"units": 256,
				"activation": "relu",
				"use_bias": true,
				"kernel_initializer": {
					"class_name": "VarianceScaling",
					"config": {
						"scale": 1.0,
						"mode": "fan_avg",
						"distribution": "uniform",
						"seed": null
					}
				},
				"bias_initializer": {
					"class_name": "Zeros",
					"config": {}
				},
				"kernel_regularizer": null,
				"bias_regularizer": null,
				"activity_regularizer": null,
				"kernel_constraint": null,
				"bias_constraint": null
			}
		}, {
			"class_name": "Dropout",
			"config": {
				"name": "dropout_1",
				"trainable": true,
				"rate": 0.1,
				"noise_shape": null,
				"seed": null
			}
		}, {
			"class_name": "Dense",
			"config": {
				"name": "dense_2",
				"trainable": true,
				"units": 512,
				"activation": "relu",
				"use_bias": true,
				"kernel_initializer": {
					"class_name": "VarianceScaling",
					"config": {
						"scale": 1.0,
						"mode": "fan_avg",
						"distribution": "uniform",
						"seed": null
					}
				},
				"bias_initializer": {
					"class_name": "Zeros",
					"config": {}
				},
				"kernel_regularizer": null,
				"bias_regularizer": null,
				"activity_regularizer": null,
				"kernel_constraint": null,
				"bias_constraint": null
			}
		}, {
			"class_name": "Dropout",
			"config": {
				"name": "dropout_2",
				"trainable": true,
				"rate": 0.15,
				"noise_shape": null,
				"seed": null
			}
		}, {
			"class_name": "Dense",
			"config": {
				"name": "dense_3",
				"trainable": true,
				"units": 2,
				"activation": "softmax",
				"use_bias": true,
				"kernel_initializer": {
					"class_name": "VarianceScaling",
					"config": {
						"scale": 1.0,
						"mode": "fan_avg",
						"distribution": "uniform",
						"seed": null
					}
				},
				"bias_initializer": {
					"class_name": "Zeros",
					"config": {}
				},
				"kernel_regularizer": null,
				"bias_regularizer": null,
				"activity_regularizer": null,
				"kernel_constraint": null,
				"bias_constraint": null
			}
		}]
	},
	"keras_version": "2.2.4",
	"backend": "tensorflow"
}

默认200次epoch的迭代计算,训练完成后,对loss曲线和acc曲线进行了对比可视化展示,如下所示:

【loss对比曲线】

【acc对比曲线】

可以看到:模型的效果还是很不错的。

最后编写专用的可视化系统界面,进行实例化推理展示,实例结果如下所示:

后续的工作考虑结合视频连续帧的特点来进一步提升打架斗殴行为的识别精度,感兴趣的话也都可以自行尝试实践一下。

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

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

相关文章

MySQL中的多列子查询

-- 多列子查询 -- 如何查询与WOARD 的部门和岗位完全相同的所有雇员(并且不含smith本人) -- (字段1,字段2...) (select 字段1,字段2 from ...) -- 分析: 1. 得到smith的部门和岗位 SELECT deptno,job FROM empWHERE ename WARD; -- 2.使…

字符编码转换时发生内存越界引发的摄像头切换失败问题的排查

目录 1、问题说明 2、初步分析 3、字符串字符编码说明 4、进一步分析 5、为啥在日常测试时没有遇到切换摄像头失败的问题呢? 6、华为MateBook笔记本使用高通的CPU 7、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更…

电脑msvcp110.dll丢失怎么办,msvcp110.dll缺失的详细修复步骤

在现代科技发展的时代,电脑已经成为我们生活和工作中不可或缺的工具。然而,由于各种原因,电脑可能会出现一些问题,其中之一就是msvcp110.dll文件丢失。这个问题可能会导致一些应用程序无法正常运行,给我们的生活和工作…

[直播自学]-[汇川easy320]搞起来(3)看文档安装软件 查找设备

2023.11.09 20:04 按照文档 解压压缩包得到: 打开 里面有一条值得注意: 想把软件安装到C盘,但是C盘没什么空间了,把C盘清理清理。 20:35 安装很快完成,然后阅读 由于PLC是新的&#xff0c…

【MATLAB源码-第70期】基于matlab的萤火虫算法(FA)的栅格路径规划,输出最短路径和适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 萤火虫算法(Firefly Algorithm,FA)是由剑桥大学的Xin-She Yang在2008年提出的一种元启发式优化算法。该算法的灵感来源于萤火虫闪烁的行为特征,主要用于解决连续的优化问题。萤…

【123. 买卖股票的最佳时机 III】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:const int Init-0x3f3f3f3f;int maxProfit(vector<int>& prices) {int nprices.size();vector<vector<int>> f(n,vector<int>(3,Ini…

使用TS进行Vue-Router的Meta类型扩展

文章目录 1、前言2、解决 1、前言 使用Vue-Router时&#xff0c;会将一些字段信息附加到路由的Meta对象里面&#xff0c;比如图标icon&#xff0c;标题&#xff0c;权限等&#xff0c;如下&#xff1a; {path: /billboard/board/:boardId,name: billboardBoard,props: true,c…

超全总结!大模型算法面试指南(含答案)

大家好&#xff0c;从 2019 年的谷歌 T5 到 OpenAI GPT 系列&#xff0c;参数量爆炸的大模型不断涌现。可以说&#xff0c;LLMs 的研究在学界和业界都得到了很大的推进&#xff0c;尤其去年 11 月底对话大模型 ChatGPT 的出现更是引起了社会各界的广泛关注。 近些年&#xff0…

java项目之服装定制系统(ssm框架)

项目简介 服装定制系统实现了以下功能&#xff1a; 管理员&#xff1a;管理员使用本系统涉到的功能主要有首页、个人中心、用户管理、服装类型管理、服装信息管理、服装定制管理、留言反馈、系统管理等功能。用户&#xff1a;用户进入系统可以对首页、个人中心、服装定制管理…

Java类和对象(1)

&#x1f435;本篇文章将会开始对类和对象的第一部分讲解 一、简单描述类和对象 对象可以理解为一个实体&#xff0c;在现实生活中&#xff0c;比如在创建一个建筑之前&#xff0c;要先有一个蓝图&#xff0c;这个蓝图用来描述这个建筑的各种属性&#xff1b;此时蓝图就是类&a…

C++day6作业

1.思维导图 2.编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&am…

后台管理系统解决方案-中大型-Vben Admin

后台管理系统解决方案-中大型-Vben Admin 官网 Vben Admin 在线演示 Vben Admin 为什么选择它 github现有20K星&#xff0c;并且它有个可视化生成表单&#xff0c;我很喜欢 快速开始 # 拉取代码 git clone https://github.com/vbenjs/vue-vben-admin-doc# 安装依赖 yarn#…

天津WEB前端培训哪家好?Web机构推荐!

05年以后&#xff0c;互联网已经进入了web2.0时代&#xff0c;同时也标志着网站的前端由此发生了翻天覆地的变化&#xff0c;现在市场上对WEB前端开发工程师岗位有着很大的需求&#xff0c;学习web前端开发的方式有很多种&#xff0c;对于初学者来说&#xff0c;选择自学还是培…

使用篇(一):Ai绘图-Stable Diffusion WebUI

1.介绍 1.1 概述 Stable Diffusion Web UI是一个基于Stable diffusion AI模型的AI绘画软件。它是一个多功能的AI绘画软件&#xff0c;支持以下几个功能&#xff1a; 用户可以输入一堆关键词或一句话来生成图片。 它使用了图像加噪去噪过程中的生成模型—— Duffusion&#xff…

与set和map相关的OJ题练习

一、两个数组的交集 题目链接&#xff1a; 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给两个数组&#xff0c;求在数组里面共同出现的部分&#xff0c;就是求两个数组的交集&#xff0c;返回顺序不做要求 解题思路&#xff1a; …

视频剪辑:制作视频画中画效果,背景图片的添加方法

随着社交媒体的兴起&#xff0c;视频制作越来越受到人们的关注。在视频制作过程中&#xff0c;除了主要的画面&#xff0c;背景图片往往能够增加视频的层次感和视觉效果。今天&#xff0c;我们就来探讨一下如何使用云炫AI智剪制作视频画中画效果&#xff0c;并添加背景图片。 在…

Java自学第6课:电商项目(2)

1 创建工具类并连接数据库 在工程src右键单击new&#xff0c;新建util包 再创建DBUtil类 数据库交互需要有数据库支持的包&#xff0c;这是官方给出的类库。 先声明1个代码块 // 静态代码块 只加载1次static{try {Class.forName("com.mysql.jdbc.Driver");} catch (…

基于springboot实现高校党务平台管理系统【项目源码】

基于springboot实现高校党务平台管理系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#x…

可持久化01Trie

例题&#xff1a; 解释&#xff1a; 首先这里要求连续异或&#xff0c;所以存储前缀异或和数组。首先的话&#xff0c;我们只考虑前r个版本的Trie&#xff0c;所以以root[r]为根节点的Trie就是1到r位置数。但是&#xff0c;还有一个l左端点&#xff0c;所以我们对于每一个节点…