Windows下使用spyder训练SSD-TensorFlow,并进行客流检测
背景
- 之前的尝试中,用yolo v3训练自己的模型并进行客流检测。得到的结果其实已经很好,增加训练样本和训练周期,最后也取得了如下的效果,但是实际在视频中检测时候,抖动现象还是比较严重的。
![yolo结果](https://raw.githubusercontent.com/AllentDan/PedestrianDetection/master/yoloImage/result.png)
- 尝试使用另一种实时检测模型SSD,SSD综合了yolo的快捷和Faster RCNN的准确,同时兼备快捷和准确率。
过程
先后参考博客一,博客二和博客三以及对SSD迁移到TensorFlow上的工程。其中第三篇博客对我帮助很大,主要是SSD-TensorFlow都是部署在Linux上,或者在windlows使用pycharm的IDE工具,所以对使用其他工具和环境的造成许多困扰。
可以完全按照第二篇博客一步一步向下做,直到第七步。因为不是使用的pycharm,导致无法直接转换文件生成tfrecord。就做了些修改,将linux下的.sh批处理文件改成Windows下的.bat批处理文件。文件内如如下:
1
2
3
4
5
6python tf_convert_data.py ^
--dataset_name pascalvoc ^
--dataset_dir VOCdevkit/VOC2007/ ^
--output_name voc_2007_train ^
--output_dir tfrecords/
pause读者可以新建TXT文件,然后输入上面内容,换成自己对应的路径,再修改文件名.txt为.bat文件。直接双击运行即可,报错的话,根据内容修改即可。
同样,受限于Windows环境和IDE的辣鸡,只好自己编写.bat批处理文件,内如如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14python train_ssd_network.py ^
--train_dir log2/ ^
--dataset_dir tfrecords/ ^
--dataset_name pascalvoc_2007 ^
--dataset_split_name train ^
--model_name ssd_300_vgg ^
--checkpoint_path checkpoints/VGG_VOC0712_SSD_300x300_ft_iter_120000.ckpt ^
--save_summaries_secs 60 ^
--save_interval_secs 300 ^
--weight_decay 0.0005 ^
--optimizer adam ^
--learning_rate 0.00003 ^
--batch_size 16
pause同样,参照上一个过程做你自己的修改,然后双击运行.bat文件即可,报错修改。训练过程中想终止,按Ctr+C即可。
问题
- 问题:训练不收敛,导致很容易像博客一中存在的问题。此外,我本人的训练不收敛情况严重许多,loss可以在10~150间抖动震荡。但是最后测试图片的时候,仍然像第一篇参考博客一样。
- 办法:后面将所有的图片按最大可能生成tfrecords文件,并且增多图片数量和训练次数。中间还做了其他修改,但是已经忘记了,可以自行尝试。
结果
![GIF](https://raw.githubusercontent.com/AllentDan/ImageBase/main/detection/mytest6.gif)
补充
- 动图是因为调试数人数的时候,需要一幅图片一幅图片地测试。所以用imageio将几百张图片生成了GIF
- 考虑到SSD检测效果是比较稳定的,就不做目标跟踪,直接对检测到的人物框处理。
- 思想就是,下车的人对应的框的位置是相对集中的。所以统计方框的中心点的位置,可以是中心点到原点的欧氏距离,也可以是其他距离。此外,还存在某些人下车不够顺,所以不能直接用方框的y坐标位置,就对y减小到一定值开始算该人下车,当出现该人的框往回时候,又将该人视为上车。以此统计人数,具体仍然有很多细节,就直接贴代码吧。
代码
1 | # -*- coding: utf-8 -*- |