| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 基于卷积神经网络的密集人群估计算法【内含教程和踩坑】 -> 正文阅读 |
|
[人工智能]基于卷积神经网络的密集人群估计算法【内含教程和踩坑】 |
文章目录前言毕业季要到了,在此之前最重要的事情就是毕业设计,而我的课题是关于密集人群估计的算法研究。我和各位在坐大部分人一样都是从零开始的,在看论文、修改代码、训练模型、调参数中一点点了解人群估计的全貌。此文力求带领各位初学者进一步了解人群密度估计算法,尽量涵盖前期了解算法的途径到后期自己复现论文代码、训练模型的全过程。本文出现的一些代码和数据集都会在文末给出网盘资源供读者下载。 一、什么是密集人群估计简而言之,就是给你一张图片,然后你能算出图片中出现的人的数量。基于卷积神经网络的此类算法都离不开生成Ground Truth,高斯核函数生成密度图,然后对密度图进行积分,积分结果即为估计出的人群数量,很明显算法并不是一个个去数人头,而是通过积分的方法来估计。有人问为啥要这么做呢,因为人群估计的重点在于密集,一张图片可能存在成百上千人,就算让算法一个个数这也是不现实的,因此如今最好的办法就是去拟合估计,也算是回归算法的一种做法。 二、实验前准备1.Github开源项目——Awesome Crowd Counting名字带有Awesome的项目永远都不会让你失望,这个项目整理了关于人群估计的论文和论文中模型的代码,当然并不是所有论文都能找得到代码。有个原则就是先找有代码的论文来读,因为论文始终是架空的,只有真正自己运行起了代码才是开始的第一步。 2.数据集下载人群密度估计的数据集相对较为有限,基本就那么几个常见数据集。 3.环境配置这一步环境配置没什么好说的,读者自行配置环境,配置环境是做实验的第一步,也算是对个人能力的一种锻炼。毫无疑问是要使用Python语言来开发,版本最好为3.7以上,建议安装anaconda,学习通过虚拟环境管理不同项目,pip或者conda install安装过慢解决方法参照使用国内清华、阿里镜像来提速。深度学习框架我是选择了Pytorch,我在过去的AlexNet那篇文章也有解释理由,因为Pytorch更加Pythonic。最后深度学习训练最好有块显卡,别在自己的笔记本电脑上跑。 三、ShanghaiTech数据集实验1.论文代码复现其实这一步以前读者最好先把原论文读一遍,不过问题也不大,看代码其实更好理解。我跑通的论文代码有两个,[CAN] Context-Aware Crowd Counting和[CSR] CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes,这两份代码结构上基本一致,CSRNet早于CAN发表,尽管CAN论文中给出自己超过前面论文模型的实验证明,但我在自己做过实验后更看好CSRNet,尽管CSRNet训练的时间远比CAN长。 2.CAN复现从github上直接下载的代码运行绝对是会报错的,不过只要修改几个地方就可以正常运行了。 3.CSRNet复现如CAN复现的那样如法炮制来修改原代码,训练基本不会出啥问题。 4.可视化调参一般来说partA的效果往往和论文效果相差甚远,我训练的时候CSRNet倒是和论文给的结果很贴近,而CAN就呵呵了。我们接下来可以就CAN对partA的训练过程进行可视化,然后通过图像我们手动调节学习率等参数(我目前是只修改CAN学习率)。 四、UCF_CC_50数据集实验1.数据集目录结构重构网上所下载的UCF_CC_50的数据集往往是图片和mat文件都在同个文件夹,而ShanghaiTech里面则是分了train训练集和test测试集。为了更好让我们已复现的代码可以适应UCF数据集,我们要对UCF目录进行重构。按照论文要把50张图分为5组每组10张做交叉验证,4组训练集,1组测试集;如此做不同的5次最后取平均值。我的五组安排如下:
以part1为例如图,其实就是和ShanghaiTech的文件目录保持一致。 这个训练的时间可不比ShanghaiTech的短,本人训练结果如下图供读者参考: 五、DIY数据集实验跑通了实验只能证明读者已具备配置环境和自行运行程序的能力,要进一步理解人群估计算法还得自行制作数据集来训练。 1.数据集采集这一步读者可根据自身情况而定,手机相机等设备拍摄人群图像亦或是网上采集到的现成图片均可。我采用的是前者,使用手机拍摄校园中的人群。如图: 【踩坑】在人头标注之前,要关注的一个图片重要参数就是分辨率,因为训练的时候要生成Ground Truth,h5文件的大小直接和分辨率挂钩。好比我手机拍摄出来的图片分辨率是3000x4000=1200万像素,生成h5文件接近100M,训练时GeForce RTX 3060的显卡直接报空间不足,因为ShanghaiTech里面的任一张图片的h5文件也才6K左右。因此如果读者拍摄的图片分辨率太高,就要降低图片分辨率。 2.降低图片分辨率
这是网上直接搜到的代码,读者自行更改img_path和path_save即可,不难发现这两个路径是相同的,只是img_path多了个*.jpg。 3.数据集人头标注[T-PAMI] NWPU-Crowd: A Large-Scale Benchmark for Crowd Counting and Localization是个不错的网站,值得一看,其实在Awesome-Crowd-Counting里面就能找到。接下来我们要使用其中的Annotation Tools工具CCLabeler-master,读者直接进入链接安装即可,其中有完备的说明,很容易使用。尽管如此我还是多说几句吧。 4.数据集整合标注打完后,人头的位置坐标就存在cclabeler-master\data\jsons\目录下,里面的json文件相当于市面上数据集里的mat文件。参照ShanghaiTech数据集分成train、test,然后分成ground_truth和images子目录的结构就可以了。 5.DIY数据集训练毕竟和传统数据集中mat文件不同,DIY的是json文件,所以代码相应位置也要做细微调整。只需将make_dataset.py此处更改即可,其他地方貌似没有什么要改动的,生成了GT的h5文件后,后续操作都一视同仁。 6.仅供参考的训练结果
我的数据集图片数仅有50张,40张用于训练,10张用于测试,epoch数均为500,看来这次是CAN打败了CSRNet呢。 文末资源因为某些因素暂时没法上传到网盘,请读者见谅,之后会补上。资源至少包含已重构的UCF_CC_50数据集,修改后可直接运行的论文复现代码。 总结长路漫漫你并不孤单,你不是一个人面对这困难,曾经有许多人和你面临相同的问题,未来也会有无数人遇到,我们能做的且唯一能做到的就是问心无愧,尽力而为。毕设还未结束,我后期仍将更新此文,请读者关注,欢迎和各路大佬交流学习。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 22:30:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |