# actiondet
**Repository Path**: seekerrc/actiondet
## Basic Information
- **Project Name**: actiondet
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2021-11-15
- **Last Updated**: 2026-01-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 研究生
## README
## 行为检测
### logs
#### 2021/11/15
第一次调试完成,基本模型架构搭建成功。
摔到检测算法流程:
1. yolov5模型行人检测
2. 行人区域裁剪后送入efficientnet进行姿态分类,采用2分类(精度97%),其中异常姿态仅包含fall和lie两种,只要存在异常姿态直接break,并将当前帧标记为关键帧
3. **(proposal策略)**如果8帧缓存队列中存在两帧关键帧,缓存队列送入TSM模型进行分类,5分类(精度95%),分类后将结果输出为图片格式
当前的观察:
- fall的置信度往往很高,其他类别的置信度往往较低0.5以下
- 当前姿态二分类中异常姿态仅仅包含fall和lie两种,都是完全摔倒之后才有的姿态,模型的fall动作的关键帧判定一般都是最后两帧(完全摔倒躺平的两帧),前面的6帧非关键帧往往是摔倒的过程,可以说结果还行

优化:
- 优化画图函数,把姿态画出来,可视化
- 姿态模块改为十分类再次测试,其中fall和lie记为异常。实验表明姿态准确度较低,不能依靠姿态的变化判断,仅可作为异常的判别依据。
- 筛除背景人物,设定高度阈值为100,后续可以对比实验
统计luoyan.mp4测试视频中的准确度和召回率:
其中原视频含有13段摔倒(不计入下蹲),模型总共检出10次,其中1次错误,准确率90%,召回率70%
代办:
- 检出的摔倒和非摔倒中姿态的变化是否有规律(考虑到姿态错误分类),proposal生成策略是否可以根据姿态信息继续优化
- proposal的生成条件,关键帧数量变大变小(2换成1、3)有什么影响。总帧数变化有什么影响(tsm需要按16帧采样重新训练)
- 消融实验,只有tsm滑窗实现检测效果如何,有行人检测和tsm同时工作效果如何,进行对比总结
- 在UCF101和THUMOS数据集子集上实验,其中tsm在UCF101上训练,THUMOS用来跑测试
预计:
单独tsm和tsm+yolo本质都是滑窗,计算量大。其中tsm计算量最大,yolo避免了无人场景下的计算,yolo+姿态分类避免了非异常姿态下的计算,实际监控场景下出现人的概率较大,出现异常姿态的概率则很小,这是建模的思想来源
能够有效筛除无关动作的错误分类(比如下蹲捡东西系鞋带分类为摔倒,减轻了动作数据集建设的负担以及误检率),减轻模型计算量,减轻多路模型同时检测压力(摔倒几乎不可能同时发生,一个tsm模块就可以负责多路的检测)
优先:
消融实验,对比单独TSM和TSM+yolo和yolo+姿态(这个其实就是TSM分类之前,没有TSM过滤的结果,已经做完了~)
#### 2021/11/17
#### 摔倒检测
测试视频(约12分钟)中基本都有人,而且存在密集的摔倒事件。
- 现实监控中出现人的视频比例会较低,加入yolo预计可以筛除部分没必要的行为识别运算。
- 同时存在特定异常姿态的人比例会极低,yolo+姿态可以过滤掉绝大部分运算。
耗时包含:视频解码、图像预处理以及存储报警图像全过程。
| | 摔倒检测次数 | 准确率 | 召回率 | 耗时 | 备注 |
| ----------------- | ----------------------------- | ------ | ------ | ----------------------- | ------------------------------------------------------------ |
| TSM滑窗 | 57次,22次正确,存在重复检测 | 38.6% | 84.6% | 178.3s | 无关行为容易被检测为摔倒,tsm运算716次 |
| yolo+TSM滑窗 | 55次,22次正确,存在重复检测 | 40.0% | 84.6% | 207.0s | 无关行为容易被检测为摔倒,基本上都有人所以耗时反而更长,tsm运算672次 |
| yolo+姿态 | 51次,9次正确,不存在重复检测 | 17.7% | 69.2% | 126.3s(单yolo为71.4s) | 姿态存在大量误分类,直接输出准确率较低 |
| yolo+姿态+TSM过滤 | 10次,9次正确,不存在重复检测 | 90.0% | 69.2% | 139.8s | 无关行为被大量筛除(下蹲、坐下),以牺牲召回率的代价提升检测准确度。tsm运算51次 |
1-3人时,姿态模块耗时约等于yolo
行为检测模型设计准确率和效率得到了优化,召回率是代价。
优势:
1. 行为proposal机制和行为识别两重过滤机制,筛除大量无关行为(行为识别模型训练时要求的样本数也会降低,不用对下蹲等类别额外建立分类),可以达到可观的准确度水平
2. proposal生成机制避免了大量非必要的动作识别计算,模型整体运行耗时更低
缺点:
1. 姿态识别的不准确性造成可能会漏掉一部分正样本,召回率相对滑窗穷举方法较低
下一步工作:
在UCF101子集上训练模型并选取长视频进行检测
#### 2021/11/23
今天先看一下UCF101数据集,特别是上次看中的那几个类别,然后迁移tsm代码到服务器上训练,拿到权重后修改main代码跑测试,其中长视频从TH14里面挑
目前想到的问题就是,训练的视频抽帧帧率不太确定,平均5秒8帧?长视频帧率会因此受到影响,一定要注意比对。
UCF101子集
7 BaseballPitch 45 JavelinThrow:需要抛投姿态的支持,搜集一下图片建一个抛投类
40 HighJump:人太多,太糊了,yolo都检测不出来
51 LongJump:效果还行,姿态需要轨迹跟踪,姿态需要连续变化(用数值表示姿态,避免突然的波峰(坡度))
26 Diving
68 PoleVault
VAED数据集
192.168.104.19
zsf
123456
40 HighJump测试
在UCF101上训练TSM,101分类,精度93.7%,和论文差了两个点,估计是batchsize的问题,最高只能达到16,论文是64,这个没办法(已经找师兄验证了,以后如果要跑模型对比实验的话就用16重新跑一遍对比)
应用行为识别的权重,没有背景类,测试长视频为THUMOS14的跳高体育视频,抽帧为12帧一次,每个proposal约为3s多一点,目前用all跑出来效果很差,精度召回率都很低
可能的原因:
不像摔倒数据集场景固定,训练和测试长视频场景存在差异而且人物关系复杂,会出现镜头移动遮挡情形
训练集,平均每个类别100多个视频,摔倒数据集都有170例样本,所以每种行为分到的视频其实很少。针对跳高来说,长度平均5s,且可能包含助跑,训练可能将奔跑视为跳高的子集(没有奔跑的背景类)。场景变化较大,100多个视频包含了数十个场景。TH14验证集的视频又是其他的场景,模型泛化能力自然不高。
跳高的关键帧的人姿态扭曲,导致yolo无法识别为人,自然无法识别姿态
姿态数据集本身体量较小,模型的泛化能力不高,姿态的误分类依然很严重,数据集里面的jump本来就有问题,这个用之前清理过的数据集重新跑一下
跳之前被识别为jump,和摔倒这种不太一样,需要后续context
用其他方法跑一下?
试一试其他的类别?
试一试其他的小数据集?
试一试在原数据集基础上魔改出来小数据集?
和老师讨论一下闸机行为检测那一个点,那个点感觉不太能泛化,完全工程化,不知道可不可行。但是毕竟工作量在那,他也认可,问一下。
基于嵌入式AI的高效行为检测研究
目录
一、绪论
背景与意义
研究现状
1. 行为识别
2. 行为检测
3. 嵌入式监控系统
二、基于候选片段生成的在线行为检测方法
1. 主流候选片段生成策略
2. 主流在线检测方法
3. 在线候选片段生成+行为识别方法介绍,其中前者:目标检测、姿态分类、proposal生成算法策略(连续异常姿态置信度加权)
4. 姿态数据集及姿态分类器
5. 行为数据集(自建摔倒数据集+其他(待优化???))及行为识别模型
6. 实验结果及对比消融实验分析:消融实验包括:模块删减替换(分类器模块,行为识别模块),参数调整(proposal异常姿态占比,敏感度)
三、基于后处理策略的嵌入式特定行为检测系统
针对样本采集困难的场景可以针对特定行为设计后处理从而实现在线行为检测
1. 系统整体架构
2. 取流模块
3. 目标检测模块
4. 姿态识别模块
5. 目标轨迹跟踪算法:卡尔曼滤波,SORT,meanshift,IoU Tracker
6. 后台通讯模块
7. 嵌入式移植环境搭建及模型部署
8. tensorRT加速
9. 多线程推理优化
#### 2021/11/25
fall
lie
bend
squat
sit
ride
jump
run
stand
walk
#### THUMOS14-运动行为检测
这个数据集有摄像头移动和剪辑的干扰,准确度相比摔倒数据集有大幅下降,实际监控场景一般不会面临这样的困难
基于UCF101训练,没有针对THUMOS14的特定类别进行训练,所以也就没有背景类,16的batchsize精度93.7%
测试视频选自THUMOS14的video_validation_0000486.mp4,视频时长3分钟,其中跳远行为6次
行为检测模型一共检出8次,4次正确
改变proposal机制:相邻帧姿态加权后筛除2例误报,一共检出6次
| 方法 | 准确率 | 召回率 | 耗时 |
| :-------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | :--------------------------------------------------------: |
| yolo+TSM滑窗 | 38.4% | 83.3% | |
| proposal+TSM过滤 | 50.0% | 66.7% | 优化20% |
| 相邻帧姿态加权proposal+TSM过滤 | 66.7% | 66.7% | 优化20% |
**相邻帧姿态加权**:考虑到异常姿态通常连续出现,通过相邻帧姿态是否出现异常来为当前帧的姿态分类进行加权,可以排除部分姿态错误分类的情况,提升检测的准确率
通过在UCF101行为识别数据集上训练行为识别模型,并抽取THUMOS行为检测数据集的视频进行检测验证依然可以得到和摔倒数据集上一样的结论:
基于在线proposal生成的方式实现行为检测相比于行为识别遍历求解来说:损失了召回率,提升了准确率并又优化了耗时
姿态模块的引入减轻了行为识别数据集建设的压力,能够应对辅助少样本的场景。这种压力转移到了姿态模块,要进一步提升整体的精度和召回率水平需要加强姿态数据集的建设,目前的SHAD数据集每类只有一千余张图像,且图像本身存在大量的重复(通过图像增强生成的),应对实际需求还不太够。
目前的在线行为检测整体架构能够应用的行为种类受限于姿态的数据集分类,如果有额外的检测需求,可以在姿态数据集基础上加入需要的分类
跳远:

撑杆跳:

下一步计划:
姿态分类模型选型,从速度和精度指标比较主流方法,实验数据集选取SHAD
efficient-net?
行为识别模型选型,从速度和精度指标比较主流方法,实验数据集选取UCF101
TSM?
#### 2021/11/30
在线行为检测的行为识别模块选择分析
3D行为识别代表性工作:I3D,I3D + Non-local
I3D由图像分类成熟网络演变而来,图像分类模型都有固定的输入尺寸,I3D的处理方式:长视频截取成多个clip,每个clip单独进行训练预测,短视频重复填充成固定长度进行训练。non-local在I3D模型基础上优化特征表示,以额外的计算量为代价提升其精度。

I3D

Non-local

3D精度表现超过2D模型,但是依赖于光流flow的模态,在线检测场景中只存在RGB模态,光流估计会带来额外的计算负担。
单独RGB模态学习出来的精度约等于TSM为代表的2D模型。计算量上也是后者的数倍。TSM能在不引入额外的计算量优化经典2D模型TSN,故而选择TSM作为在线检测整体框架的行为识别子模块,作为精度和速度的权衡选择
| 模型 | UCF101 | HMDB51 | GFLOPs/Video |
| ----------------- | ------ | ------ | ------------ |
| I3D(RGB) | 95.1% | 74.3% | 153 |
| I3D(RGB + flow) | 98.0% | 80.9% | 153*2 |
| TSN(RGB) | 91.7% | 64.7% | 33 |
| TSM(RGB) | 95.9% | 73.5% | 33 |
TSN

TSM:shift

摔倒数据集漏检样本姿态输出:替代为新加权策略后再次输出???
**依据关键帧占比阈值生成proposal:**
阈值越大,准确度提升,召回率下降
**ROI限制:**
在不影响基础上较明显提升检测的准确率
**相关姿态加权:**
异常姿态伴随相关姿态发生,摔倒过程中少部分姿态容易被识别为下蹲,当检测到关键帧时,如果相邻帧存在连续的下蹲相关姿态,则为相邻帧加权。能够在关键帧占比1/8方法基础上保持召回率并进一步提升准确率
| 方法 | 准确度 | 召回率 |
| --------------------- | ------------ | ------------- |
| tsm baseline | 38.6%(50%) | 84.6%(100%) |
| 关键帧占比1/8 | 70.6% | 71.4% |
| 关键帧占比2/8 | 71.4% | 64.2% |
| 关键帧占比3/8 | 81.2% | 50.0% |
| 关键帧占比1/8+ROI限制 | 78.6% | 71.4% |
| 关键帧占比2/8+ROI限制 | 84.6% | 64.2% |
| 相关姿态加权+ROI限制 | 83.3% | 71.4% |
漏检样本可视化筛查:姿态分类错误,被识别为下蹲或者坐下,考虑添加摔倒图片扩充SHAD数据集,提升姿态分类模块准确率

192.168.4.85
654321
长视频数据集:
AVA activitynet
姿态数据集:
增加摔倒姿态,或者其他开源姿态
#### 2021/12/7
基于摔倒视频抽帧裁剪,新增姿态图片约1500张,较平均地分布于摔倒场景涉及的六种姿态
| | 弯腰 | 摔倒 | 躺下 | 坐下 | 下蹲 | 走路 |
| :--: | :--: | :--: | :--: | :--: | :--: | :--: |
| base | 2500 | 2000 | 2000 | 2000 | 3000 | 3000 |
| 新增 | 100 | 350 | 200 | 350 | 250 | 300 |
重新训练姿态分类器,将在扩充数据集上得到的权重替换,进行行为检测测试,召回率提升,达到和tsm遍历方法相同的召回率,并且准确率和速度在其基础上都有较大提升
| 方法 | 准确度 | 召回率 |
| :---------------------------------: | :----------: | :-----------: |
| tsm baseline | 38.6%(50%) | 84.6%(100%) |
| 关键帧占比1/8 | 70.6% | 71.4% |
| 关键帧占比1/8+ROI限制 | 78.6% | 71.4% |
| 相关姿态加权+ROI限制 | 83.3% | 71.4% |
| 相关姿态加权+ROI限制+扩充姿态数据集 | 87.5% | 84.6%(100%) |
之前的漏检样本在新权重引入后被成功检出为异常

找开源数据集:行为检测数据集,长视频????
https://gist.github.com/jin-zhe/3a6054e99162bc9277940867f942bba2
抛投:新增类别,2000张,从ucf、hmdb、thumos里面抽取
跳跃:扩充类别,跳远视频中较夸张的姿态分为fall
跳水:暂定,单独分一个类别

efficientnet 为CNN实现,参数少,它和它的变种(包括v2)是唯一可以和transformer匹敌的模型,其他模型都不太行,直接从论文里面找对比就可以了,和TSM的选取一样的思路,yolov5也是如此,直接找官网看就好了,不用细说,重点放在行为检测上
移植的话最好还是写成c++,到时候争取写一份出来?
补充的实验做完之后就可以开始下一章的建模了,目标跟踪解算,专利模型实现,移植加速,cpp实现。
#### 2021/12/15
抛投,棒球
完整检测流程:
| 测试视频 | 检出样例 | 正确样本数 | 召回 |
| -------- | -------- | --------------- | --------------- |
| 681(1) | 2 | 2 | 1 |
| 682(2) | 9 | 3 | 2 |
| 683(4) | 5 | 3 | 2 |
| 685(8) | 6 | 5 | 5 |
| 687(2) | 2 | 2 | 2 |
| 689(1) | 3 | 2 | 1 |
| 总计 | 27 | 17/27(62.96%) | 13/18(72.22%) |
TSM baseline
| 测试视频 | 检出样例 | 正确样本数 | 召回 |
| -------- | -------- | --------------- | --------------- |
| 681(1) | 12 | 2 | 1 |
| 682(2) | 24 | 2 | 2 |
| 683(4) | 20 | 3 | 2 |
| 685(8) | 11 | 6 | 6 |
| 687(2) | 8 | 2 | 2 |
| 689(1) | 6 | 2 | 1 |
| 总计 | 70 | 17/70(24.29%) | 14/18(77.78%) |
TSM准确率低很多:动作片段识别比较依赖场景,容易和相关姿态混淆
行为检测模型:proposal筛选将不存在特定姿态的无关场景都筛除掉,避免TSM误识别。由于依赖于目标和姿态检测,人物过于不清晰时会漏掉。在人少的情形下效果会更加明显,错误样本基本来源于人多场景
抛投,标枪
| 测试视频413(19) | 检出样例 | 正确样本 | 召回样本 |
| ----------------- | -------- | -------- | -------- |
| model | 35 | 85.71% | 79.85% |
| TSM baseline | 46 | 69.56% | 84.21% |
视频本身为剪辑的合集,场景干扰较少,baseline的准确率较高
跳远
| 测试视频 | 检出样例 | 正确样本 | 召回样本 |
| -------- | -------- | -------- | -------- |
| 483(3) | 6 | 4 | 3 |
| 486(7) | 12 | 8 | 6 |
| 489(6) | 7 | 5 | 4 |
| 总计 | 25 | 68.0% | 81.25% |
| TSM | 40 | 37.5% | 81.25% |
撑杆跳
| 测试视频666(23) | 检出样例 | 正确样本数 | 召回样本 |
| ----------------- | -------- | ---------- | -------- |
| model | 48 | 81.25% | 91.30% |
| TSM baseline | 54 | 66.07% | 91.30% |
新增抛投类别,数据来源于UCF101和HMDB相关类别,当前类别图片数总计约1900张,用于姿态分类训练。针对抛投和跳跃相关姿态的体育运动视频进行行为检测,结论和摔倒数据集基本一致,提出的片段生成策略相对于TSM遍历检测方式,更快且准确率有较明显提升,召回率和TSM遍历相近




样本展示:

后续:
1. 添加背景视频的检测对比实验,实际中特定行为发生的时间占比往往极少,对比TSM和当前模型筛除无关视频内容的速度,验证当前方法的高效性
2. 子模块调研及选择理由,yolov5+efficientnet+tsm三部分进行,作为论文章节的三个小节
3. 目标跟踪算法调研及复现,算法复现后根据跟踪的逻辑重写闸机代码,改完测试通过后再加入姿态检测的逻辑
额外的摔倒数据集:都是裁剪好的短视频,或者是帧图像。
一般较老的数据集就是图片数据,一般就是每帧都检测,看每一帧的异常。新一点的就是行为识别数据集,搜出来都是这个。比如
http://fenix.univ.rzeszow.pl/~mkepski/ds/uf.html
那位老师的数据集没有专门的摔倒分类,分割或者跟踪数据集里面可能会出现摔倒而已。感觉说服力没有THUMOS14高。
google能搜到的行为检测数据集里面并不存在针对摔倒的长视频数据集。唯一找到一篇论文有讲说到这事,但是数据集不开源。
暂且如此,先完成背景筛选速度对比、目标跟踪逻辑实现
#### 2021/12/21
背景视频处理速度对比实验
场景分类:无人场景、有人场景。正常场景为两种分类的组合情况,偶尔会有行人通过。
当前检测策略在所有场景上的表现都会较大幅度由于TSM遍历的解法:
1. 无人场景的增益主要来源于YOLO的行人目标筛选机制
2. 有人场景的增益则来源于proposal机制的过滤,无异常特征的有人片段不会送入TSM分类,避免了大量的计算
TSM遍历解法不关注人的存在与否,所以任何场景都是一样的计算量、复杂度。

匈牙利算法解析:
http://data.biancheng.net/view/150.html
