当前位置: 首页 > article >正文

保姆级教程:用TSM模型从零搭建视频打架检测系统(附完整代码)

保姆级教程用TSM模型从零搭建视频打架检测系统附完整代码在公共安全领域视频监控系统每天产生海量数据但传统人工监控效率低下且成本高昂。针对这一痛点我们基于TSMTemporal Shift Module时间位移模块模型开发了一套能够自动识别暴力行为的智能检测系统。不同于通用视频分类方案本教程将聚焦打架检测这一具体场景从数据准备到模型部署全流程拆解特别包含处理监控视频常见问题的实战技巧。1. 环境准备与数据采集1.1 硬件与软件基础配置推荐使用NVIDIA显卡GTX 1080Ti及以上加速训练过程。基础环境配置如下conda create -n tsm python3.7 conda install pytorch1.7.1 torchvision0.8.2 cudatoolkit10.1 -c pytorch pip install opencv-python pillow matplotlib对于监控场景的特殊需求建议准备两类典型数据正样本公共场所打架斗殴视频建议从公开数据集获取负样本正常行走、奔跑、拥抱等易混淆行为视频注意数据收集需遵守隐私保护法规建议使用公开数据集如RWF-2000或自定义模拟数据1.2 视频预处理关键步骤监控视频常存在画质低下、分辨率不一的问题我们采用黑边填充策略保持原始比例def video_to_frames(video_path, output_dir, target_size320): cap cv2.VideoCapture(video_path) os.makedirs(output_dir, exist_okTrue) frame_count 0 while True: ret, frame cap.read() if not ret: break # 保持宽高比的黑边填充 h, w frame.shape[:2] scale target_size / max(h, w) new_h, new_w int(h*scale), int(w*scale) resized cv2.resize(frame, (new_w, new_h)) delta_w target_size - new_w delta_h target_size - new_h padded cv2.copyMakeBorder(resized, delta_h//2, delta_h - delta_h//2, delta_w//2, delta_w - delta_w//2, cv2.BORDER_CONSTANT, value(0,0,0)) cv2.imwrite(f{output_dir}/frame_{frame_count:04d}.jpg, padded) frame_count 1 cap.release() return frame_count2. TSM模型定制化训练2.1 数据加载器优化针对打架检测任务我们改进采样策略确保时间连续性class FightDataset(torch.utils.data.Dataset): def __init__(self, video_folders, num_segments8): self.clips [] self.num_segments num_segments for folder in video_folders: frames sorted(glob.glob(f{folder}/*.jpg)) total_frames len(frames) segment_length total_frames // num_segments # 确保采样帧覆盖整个视频时长 indices [i*segment_length j for i in range(num_segments) for j in range(1)] # 每段取1帧 self.clips.append((frames, indices)) def __getitem__(self, idx): frames, indices self.clips[idx] images [Image.open(frames[i]) for i in indices] return torch.stack(images), label2.2 关键训练参数配置下表对比了不同配置在打架检测任务中的表现参数推荐值备选方案效果差异num_segments1683.2%准确率base_modelMobileNetV2ResNet50速度提升2.5倍input_size320x320224x2242.1%准确率batch_size3216训练稳定性更好learning_rate0.0010.01收敛更平稳训练命令示例python main.py ucf101 RGB \ --arch mobilenetv2 \ --num_segments 16 \ --gd 20 --lr 0.001 --lr_steps 20 40 \ --epochs 50 -b 32 -j 8 \ --dropout 0.1 \ --consensus_typeavg \ --eval-freq1 \ --shift --shift_div8 --shift_placeblockres3. 模型部署与实时检测3.1 实时推理优化技巧针对监控场景的低延迟要求我们采用帧缓冲策略class FrameBuffer: def __init__(self, max_len16): self.buffer [] self.max_len max_len def add_frame(self, frame): if len(self.buffer) self.max_len: self.buffer.pop(0) self.buffer.append(frame) def get_segments(self, num_segments8): total_frames len(self.buffer) if total_frames num_segments: return None indices [int(i*(total_frames-1)/(num_segments-1)) for i in range(num_segments)] return [self.buffer[i] for i in indices]3.2 完整检测流程实现def run_detection(model, video_path, output_pathNone): cap cv2.VideoCapture(video_path) buffer FrameBuffer(max_len32) transform create_transform() while cap.isOpened(): ret, frame cap.read() if not ret: break # 预处理帧 frame_rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) pil_img Image.fromarray(frame_rgb) buffer.add_frame(pil_img) # 每0.5秒检测一次 if len(buffer.buffer) % 5 0: segments buffer.get_segments(num_segments8) if segments: input_tensor transform(segments).unsqueeze(0).cuda() with torch.no_grad(): output model(input_tensor) prob torch.softmax(output, dim1)[0] if prob[1] 0.7: # 打架概率阈值 cv2.putText(frame, VIOLENCE ALERT!, (50,50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2) cv2.imshow(Detection, frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()4. 性能优化与异常处理4.1 常见问题解决方案显存不足错误减小batch_size最低可至8使用--gradient-checkpointing参数尝试更小的基础模型如MobileNetV1过拟合处理# 在transform中添加数据增强 transform Compose([ GroupRandomHorizontalFlip(), GroupRandomRotation(10), GroupRandomBrightness(0.2), GroupNormalize(mean, std) ])类别不平衡调整# 在损失函数中添加权重 weight torch.tensor([1.0, 3.0]).cuda() # 提高正样本权重 criterion nn.CrossEntropyLoss(weightweight)4.2 边缘设备部署方案对于嵌入式设备部署推荐使用以下优化手段技术实现方式预期加速比TensorRT加速转换模型为FP16/INT8格式3-5x模型剪枝移除冗余卷积通道1.5-2x多线程流水线分离视频解码与推理线程2-3x示例剪枝代码from torch.nn.utils import prune parameters_to_prune [ (module, weight) for module in filter(lambda m: isinstance(m, nn.Conv2d), model.modules()) ] prune.global_unstructured( parameters_to_prune, pruning_methodprune.L1Unstructured, amount0.3 # 剪枝比例 )在 Jetson Xavier 上的部署命令trtexec --onnxtsm_fight.onnx \ --fp16 \ --workspace2048 \ --saveEnginetsm_fight.engine

相关文章:

保姆级教程:用TSM模型从零搭建视频打架检测系统(附完整代码)

保姆级教程:用TSM模型从零搭建视频打架检测系统(附完整代码) 在公共安全领域,视频监控系统每天产生海量数据,但传统人工监控效率低下且成本高昂。针对这一痛点,我们基于TSM(Temporal Shift Modu…...

【AGI临界点倒计时】:SITS2026圆桌权威解码——3大不可逆趋势、5个生存级能力清单与人类文明分水岭预警

第一章:SITS2026圆桌:AGI与人类未来 2026奇点智能技术大会(https://ml-summit.org) 圆桌共识的核心命题 在SITS2026主会场“AGI与人类未来”圆桌中,来自OpenAI、DeepMind、中科院自动化所及欧盟AI伦理委员会的七位专家达成三项基础共识&…...

SITS2026 AGI pipeline深度溯源:从AlphaFold3衍生结构→Diffusion生成→微流控芯片实时验证,全流程时间戳级还原

第一章:SITS2026案例:AGI在药物研发中的应用 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026大会上,DeepPharma Labs联合MIT Computational Therapeutics Group展示了首个面向端到端药物发现的通用人工智能系统——MolSynth-AGI。…...

AGI记忆遗忘机制比训练更重要:2026奇点大会披露首套可控遗忘算法框架(ForgetNet v1.0),支持GDPR合规级记忆擦除

第一章:2026奇点智能技术大会:AGI与记忆系统 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将“记忆系统”确立为AGI架构的核心支柱,而非传统意义上的辅助模块。研究者指出,具备可演化、可检索、可因果回溯的长期记…...

AGI让机器人真正“理解”指令,还是只是更高级的拟人幻觉?SITS2026现场实测结果颠覆认知

第一章:AGI让机器人真正“理解”指令,还是只是更高级的拟人幻觉?SITS2026现场实测结果颠覆认知 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026主会场B3展台,我们对三款宣称搭载“类脑AGI推理引擎”的服务机器人&…...

FreeRTOS临界区实战:从taskENTER_CRITICAL()到中断安全的数据保护

FreeRTOS临界区实战:从taskENTER_CRITICAL()到中断安全的数据保护 在嵌入式实时系统中,多任务与中断的并发操作就像一场精心编排的交响乐——每个乐器(任务或中断)都需要在正确的时间发声,但某些关键段落必须由单一乐器…...

别再死磕单层AHB了!用Multi-Layer AHB搭建高性能SoC的保姆级思路

解锁Multi-Layer AHB:复杂SoC设计的性能加速器 当你在设计一个需要同时处理CPU运算、DMA数据传输和GPU渲染的复杂SoC时,传统的单层AHB总线架构很快就会成为性能瓶颈。想象一下早高峰的地铁站,如果所有人只能通过一个闸机进出会是怎样的场景—…...

深度相机D435与机械臂搭配使用:坐标系转换与点云数据处理详解

深度相机D435与机械臂协同工作全流程解析:从坐标系对齐到精准抓取 在工业自动化领域,视觉引导的机械臂系统正在重塑生产线的运作方式。Intel RealSense D435深度相机凭借其出色的三维感知能力和性价比,成为众多机器人工程师的首选传感器。但当…...

Ollama/vLLM/llama.cpp实测

Ollama 每月有 5200 万次下载。它是每个教程都推荐的工具。我用了它六个月,认为它已经"生产就绪",并将其部署给了 40 名内部用户。响应时间从 3 秒变成了超过一分钟。请求开始超时。模型没问题。是 Ollama 的问题。 那次事故让我深入研究&…...

Vector-CANoe实战:CAPL编程与NetWork Node节点深度配置指南

1. 初识NetWork Node:从Client到Server的角色转变 第一次接触CANoe时,大多数人都会把它当作一个简单的Client端工具,用来收发CAN报文、解析信号。但当我真正参与到一个整车网络测试项目时,才发现NetWork Node的强大之处。那次我们…...

从RS485接线到云平台配置:一个真实车间电表数据采集上云的完整踩坑记录

从RS485接线到云平台配置:一个真实车间电表数据采集上云的完整踩坑记录 车间里那台老旧的电力监测系统终于到了必须升级的时候。作为项目负责人,我原本以为将电表数据通过RS485采集再上传到云平台是件标准化的"流水线作业",直到真正…...

层次分析法(AHP)翻车实录:我踩过的3个大坑和避坑指南

层次分析法实战避坑指南:从理论到落地的关键挑战 去年数学建模竞赛中,我们团队在决策分析环节选择了层次分析法(AHP),结果却因为几个隐蔽的陷阱导致最终结果与实际情况严重偏离。这次经历让我深刻认识到——掌握AHP的基…...

STM32F103C8T6新手避坑指南:用软件IIC读取MPU6050原始数据,串口打印实测(附完整工程)

STM32F103C8T6实战:从零搭建MPU6050数据采集系统(附避坑手册) 第一次接触STM32和MPU6050传感器时,我花了整整三天时间才让串口成功输出数据。期间经历了IIC通信失败、数据异常、硬件连接错误等各种问题。本文将分享这些实战经验&a…...

手把手教你用SM2246EN主控板DIY 512G MLC固态U盘(含避坑指南)

从零打造高性能MLC固态U盘:SM2246EN主控实战全攻略 在数字存储需求爆炸式增长的今天,传统U盘的速度和容量已难以满足技术爱好者的需求。市面上的消费级U盘大多采用TLC或QLC闪存,虽然价格亲民,但性能和耐用性往往不尽如人意。而采用…...

ESP8266开发环境二选一:手把手教你用AiThinkerIDE_V1.5.2玩转NonOS与RTOS SDK(含项目迁移避坑指南)

ESP8266开发环境二选一:手把手教你用AiThinkerIDE_V1.5.2玩转NonOS与RTOS SDK(含项目迁移避坑指南) 对于嵌入式开发者来说,选择合适的开发环境往往能事半功倍。ESP8266作为一款经典的Wi-Fi芯片,提供了NonOS和RTOS两种S…...

《基于 FSet 的现代 Common Lisp》1.0 版发布,涵盖多方面使用指南

下一篇 [介绍与必要的宣传](Introduction-and-Obligatory-Hype.html) [目录][[索引](Index.html "索引")] 文档版本及许可信息 本文档版本为 1.0(适用于 FSet v2.4.2),© 2026 Scott L. Burson 所有。它遵循 [知识共享署名 - 非…...

Spring WebFlux实战:手把手教你用WebFilter和Context实现全局请求日志追踪

Spring WebFlux全链路追踪实战:从WebFilter到Reactor Context的深度设计 当微服务架构遇上响应式编程,传统的日志追踪方案突然变得力不从心。想象这样一个场景:某电商平台大促期间,订单服务突然出现异常响应延迟,但当你…...

Proteus 8.9安装Arduino仿真库?保姆级图文指南带你绕过‘隐藏文件夹’这个大坑

Proteus 8.9安装Arduino仿真库全流程指南:从隐藏文件夹到实战验证 在电子设计自动化领域,Proteus与Arduino的结合为创客和教育工作者提供了强大的仿真能力。然而,许多用户在第一步——安装Arduino元件库时就遭遇了"隐藏文件夹"这个…...

Windows Cleaner:3个步骤彻底解决C盘爆红问题,让电脑重获新生

Windows Cleaner:3个步骤彻底解决C盘爆红问题,让电脑重获新生 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你的电脑是否经常出现C盘爆红…...

GitHub中文界面终极解决方案:3分钟告别英文困扰

GitHub中文界面终极解决方案:3分钟告别英文困扰 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾经面对GitHub满屏…...

【5G MAC】从RAR到MAC-CE:深入解析NR Timing Advance的同步机制与演进

1. 什么是NR Timing Advance? 想象一下你参加一场线上会议,如果所有人都在不同时间说话,主持人根本听不清谁在说什么。5G网络中的上行同步也是类似的道理——当多个终端设备(UE)同时向基站(gNB)…...

从零搭建RGBD视觉开发环境:Python+OpenNI2驱动奥比中光深度相机实战

1. 环境准备:驱动与OpenNI2安装 刚拿到奥比中光RGBD相机时,我就像拿到新玩具的孩子一样兴奋。但很快发现,要让这个"玩具"真正动起来,得先搞定驱动和开发环境。这里分享我踩过坑之后总结的可靠安装方法。 首先需要下载官…...

Proxmox Mail Gateway (PMG) 部署与基础安全配置实战

1. 为什么企业需要Proxmox Mail Gateway? 最近不少企业的IT部门都在头疼一个问题:Windows Server 2022和Microsoft 365相继取消了SMTP服务,但企业内部的各种系统告警、业务通知又必须通过邮件发送。我去年就遇到过这种情况,当时公…...

FPGA--Verilog 实现乒乓操作:从原理到工程实践(附完整代码)

1. 什么是乒乓操作? 乒乓操作是FPGA设计中一种经典的数据缓冲技术,它的核心思想就像打乒乓球一样,两个存储单元轮流接收和输出数据。想象一下有两个水桶,当一个水桶在接水时,另一个水桶在倒水,如此反复交替…...

Phi-3-Mini-128K在计算机网络教学中的应用:协议模拟与故障排查

Phi-3-Mini-128K在计算机网络教学中的应用:协议模拟与故障排查 计算机网络这门课,很多学生都觉得有点“硬核”。协议栈、数据包、三次握手、路由表……这些概念光是听起来就让人头大。传统的教学方式,要么是老师对着PPT讲,要么是…...

winodws下cpolar 公网穿透保姆级安装使用教程

适用场景:把本机运行的服务(如 FastAPI 天气接口)暴露为公网 HTTPS,供 Dify、Apifox、手机等访问。 重要:cpolar 是独立客户端,不是 npm 包,不要使用 npm install cpolar 或 npx cpolar。一、cp…...

联想小新Air14 AMD版装Ubuntu 20.04,升级内核到5.11解决触控板和亮度问题(附详细步骤)

联想小新Air14 AMD版Ubuntu 20.04深度优化指南:从内核调优到桌面效率革命 当AMD锐龙5500U遇上Ubuntu 20.04,这本应是开源世界与高性能硬件的完美邂逅,但预装的5.8内核却让触控板和亮度调节成了摆设。这不是个例——2023年硬件兼容性报告显示&…...

Ollama离线安装避坑指南:从下载加速、权限配置到彻底卸载的完整闭环

Ollama离线安装避坑指南:从下载加速到彻底卸载的完整闭环 在人工智能模型本地化部署的浪潮中,Ollama凭借其轻量级和易用性成为众多开发者的首选工具。然而,离线环境下的安装过程往往充满各种"坑"——从缓慢的下载速度到恼人的权限问…...

保姆级教程:用Cesium.js 1.107+ 加载ArcGIS Server发布的WMTS地图(附完整代码)

从零实现Cesium与ArcGIS WMTS地图集成:2023终极实践指南 第一次打开Cesium的官方示例时,那个缓缓旋转的蓝色星球总让人有种造物主般的兴奋。但当你真正需要把业务地图投射到这个数字地球上时,现实往往比想象复杂得多——特别是当数据源来自企…...

从点阵到屏幕:深入解析STM32驱动LCD显示汉字的每一个字节(以16x16‘留’字为例)

从点阵到像素:STM32驱动LCD显示汉字的底层逻辑全解析 在嵌入式开发中,汉字显示是一个看似简单却暗藏玄机的技术点。当你在调试时遇到汉字显示乱码或错位的问题,是否曾好奇过这背后的完整数据流?本文将带你深入汉字显示的底层世界&…...