这个项目是在研一下学期的时候导师给我们的分配的一个项目,虽然叫做扔垃圾行为识别,但这个东西是一通百通的,我更愿意叫它行为识别或者动作识别。
项目过程
在刚开始这个项目的时候导师说了一个解决方案就是使用图片分类器去解决这个问题(这里已经开始埋下了一个坑),所以我就想着把视频中那些扔垃圾的帧截取成图片保存下来打上标签再拿到yolov5中去训练,但是视频太长了,总共的帧保守估计也有几十万帧了人工去挑选的话实在太慢而且太耗费精力,是一个庞大的工程,所以我想着先使用yolov5与训练的模型yolov5m6.pt去把视频中有人的帧给识别出来,接下来直接处理这些帧就行了,然后根据yolov5识别后的标签我又写了一个脚本去自动把视频中对应的每一帧保存下来可是这些图片只是包含人的并不一定再扔垃圾所以接下来就是人工了(人工智能--先有人工后有智能嘛,哈哈哈哈)。人工挑选完后并使用labelme打上了标签,接着拿到yolov5中去训练,识别结果还算不错,事情正在向好的方向发展,可往往事与愿违哪有这么一帆风顺,这个项目怎么可能一个图片分类就给搞定了呢。
当时做完之后我心里也没有底觉得这个项目是不是也太简单了点,果不其然在第二次会议中导师指出决定加上视频分类,他认为仅仅一个图片分类可能效果不好,视频分类是我从来没有接触过的东西我有点蒙,但没办法只能硬着头皮上了吧。视频分类中导师提出了一个概念---起始帧,他问我们在分割图片的时候有没有保留与原视频文件的映射,这个问题在第一次开会的时候就问过,组长以为我们有所以没多想就回答说有,可当时我觉得没有啊并没有保留啊,而且图片命名格式都是从image0开始的一直往后延续没有任何映射,所以前面提到的坑就是当时老师并没有说要使用视频分类而我们都是小白没有经验不知道要保留这个所以很大可能要重新做一次数据但是太麻烦了啊,人的成本是最高的(学弟们不一定愿意啊)。于是只好死马当活马医了,大不了人工把那些扔垃圾的视频片段给分出来(也只能这样了)。
导师提出视频分类的时候什么方案都没说,只是让我们去尝试一下,我和组长都一致认为lrcn的解决方案挺好的(网络简单粗暴,数据集非常好制作,效率也不算低,识别效果也挺好),lrcn = InceptionNet提取图片特征,然后将图片特征输入到lstm中最后得到预测,只是在开会中导师说这个技术太过老旧,他坚持使用双流法(为什么一开始不说呢),不过也没有一棒子打死,接下来我负责lrcn,组长负责双流法,结果组长在找双流法的过程中发现类双流法的网络SlowFast性能很不错而且还是大佬何凯明2020年提出的,也算比较新颖的技术了,在这次开会中我们各自说明了两个网络的优劣势,只不过我俩不在一个数据集上测试的没有可比性,所以导师说让两个网络都在项目的数据集上跑一下看一看各自的效果怎么样,又回到了做视频分类数据集的问题了。
持续更新中。。。
项目问题
1.在项目开始的时候我们没有明确的划分出哪些视频是训练集,哪些是测试集,所以导致没有统一的标准。
2.由于经验不足,在一开始分数据的时候没有保留图片与视频文件的映射,在下次做类似的项目时一定要注意。