前言

这是我的本科毕设主题,导师对我论文工作的肯定让我鼓足勇气回首这一年来的手忙脚乱和努力收获,使得我的第一篇博客没有成为最后一篇。

在我看来,我的本科专业与计算机视觉领域没有任何关系,没有编程和数学基础,只学过 Matlab 和 C 的一点皮毛课程,因此这方面的学习使我万分痛苦。但幸运地是,真的没有白学的知识,就这样简单一点对语言的学习就让我对 Python 的语法不那么陌生。

从来没有想到能走到最后结题这一步,但事实如此,这让云里雾里的我有种不真实的感觉,也许是因为站在了太多巨人的肩膀上实现的,无知无能让我深陷自卑情结。这篇文章,用来整理记忆。感谢一些对我完成课题提供巨大帮助的博主的文章。提供遇到问题时的解决办法。

1. 基于 SSD 的单目标检测

1)目标检测 | SSD原理与实现
https://zhuanlan.zhihu.com/p/33544892
这一部分的原理是我着重学习的一部分,我觉得很难理解,有些地方到现在也很模糊。之前对机器学习方面基础知识的学习是很有必要的,但是离自己设计一个架构还遥遥无期。学这一部分从训练代码到检测代码学了很久,现在想来是没有浪费时间的,虽然对于 TensoFlow 没有做到熟练运用,但是其中原理明白了一些。理解检测和跟踪的定义和区别也花了很久,开题、中期和结题每次的理解都在变,现在应该是理解对了。
2)制作和训练自己的数据集
https://blog.csdn.net/zzZ_CMing/article/details/81131101
https://blog.csdn.net/zzz_cming/article/details/81131523
开源的源码是针对特定数据集的,而不是本课题要检测的目标,因此需要制作自己的数据集,调整某些参数后训练新的模型,源码的 README 务必仔细阅读。
3)安装 TensorFlow
https://blog.csdn.net/abcabc77777/article/details/53456453#commentBox
第一次安装 TensorFlow 时,用的是我上一篇文章中清华镜像库的办法,但当我需要更改 TensorFlow 版本的时候发现关于 Anaconda 的清华镜像库停止服务了,在安装 TensorFlow 时一直出现 ReadTimeoutError,为了解决这个问题找了好久。网络真的很万能,能不能尽早解决问题大概需要碰运气吧。
4)TensorFlow-slim 训练 CNN 分类模型
https://www.jianshu.com/p/68598e8fca7d
源码是利用 slim 库训练模型的,当我在用 CPU 训练到一定次数时就会终止,比如训练1000次停在了800次,这个时候其实不用从头训练,只需要继续运行刚才的命令即可。(后期 TensorFlow 2.0 版本中好像会被弃用?)
5)计算 IoU
https://blog.csdn.net/yy_diego/article/details/82769831
这时候需要用到人工标记边界框的真实值信息,这些信息就包含在制作数据集时的 XML 文件中,用这些信息就需要解析此种文件。
6)SSD 测试 mAP 出现的问题
https://blog.csdn.net/duanyajun987/article/details/88942680
首先很玄学,同样的 eval_ssd_network.py 文件,就是一个可以运行一个会报错:Error reported to Coordinator:<class 'tensorflow.python.framework.errors_impl.InvalidArgumentError'>, assertion failed: [Unable to decode bytes as JPEG, PNG, GIF, or BMP]。如果测试集图片数量大的话同样会报错,这个问题还没有解决。
7)SSD-TensorFlow 检测视频中的目标
https://blog.csdn.net/c20081052/article/details/80455449#commentBox
用 OpenCV 读入视频并检测每帧中的目标,标出类别和置信度信息。可以在每帧中标注帧数。

2. SORT 关联算法

1)卡尔曼滤波
https://blog.csdn.net/codesamer/article/details/81191487
我找的网上最易懂的原理解释。
2)匈牙利算法
https://www.cnblogs.com/chenyg32/p/3293247.html
匈牙利算法最初用于解决二分图匹配问题,后来被延伸到用于解决指派问题。检测算法得到的检测框和卡尔曼滤波得到的预测框之间的唯一匹配正好可以转换为一种指派问题。
最初我想的是直接用匈牙利算法直接实现关联问题,但不知道要实现检测框和谁的关联,后来在网上发现了这种 SORT 算法,原论文中是一种类似于检测跟踪的方法,用 YOLO 对每帧中的目标进行检测,然后利用 SORT 算法进行关联,这类的算法强烈依赖于前端的检测质量。于是我有了将 SSD 作为前端检测算法的想法。网上一搜,果然人才辈出,这种做法早有人实现,有想法还不行,还要充分关注前沿。

3. SSD + SORT

https://blog.csdn.net/ycc2011/article/details/85094651#commentsedit
由于数据集、参数设置、硬件条件不好等的问题,自己训练的 SSD 模型检测效果不太好,对于小目标检测置信度很低,视频某些帧中还检测不到目标,导致一旦某帧中检测不到目标就跟踪结束。因为本课题是简单的单目标跟踪,而且实测视频中每帧中都存在目标,检测时也并不是连续很多帧中都检测不到目标,所以可以调整 SORT 算法使之输出卡尔曼滤波预测的框。
每次长视频跟踪到369帧时就会出现:Fail to create pixmap with Tk_GetPixmap in ImgPhotoInstanceSetSize,没有地方报错,但会停止跟踪,没有找到解决办法。

4. 打包

用 Python 自带的 pyinstaller 封装成了一个可移植的执行文件。同样玄学,有些库在编辑器运行时不需要,但是封装时需要,乱七八糟一通乱安装之后不知道怎么就成功了,可能需要注意这几点:1)有些不用的库最好不要导入,不然会增加软件占的内存;2)自定义的模块文件,在导入时不要直接 import,最好 from … import …。

结语

我第一次体会到那种每天奋斗一点点慢慢接近答案真相的感觉,一个课题走向终结的过程就带给了我这种小小的成就感。
车到山前必有路,船到桥头自然直,开始以为一定解决不了的难题不一定解决不了。
足够的付出才可能换来差强人意的结果。
持续的每天坚持学习才能换来一名其他领域都不擅长的学生的满足感。
之后,怀着一颗感恩和进取的心继续前行。

SSD + SORT 实现单目标跟踪相关推荐

  1. 单目标跟踪SiamMask:特定目标车辆追踪 part2

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN.SPPNet.Fast RCNN.Faste ...

  2. Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解

    视频目标跟踪问题分析         视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...

  3. 352万帧标注图片,1400个视频,亮风台推最大单目标跟踪数据集

    CVPR 2019期间,专注于AR技术,整合软硬件的人工智能公司亮风台公开大规模单目标跟踪高质量数据集LaSOT,包含超过352万帧手工标注的图片和1400个视频,这也是目前为止最大的拥有密集标注的单 ...

  4. python 粒子滤波目标追踪_Python实现基于相关滤波的单目标跟踪算法

    最近在阅读一些单目标跟踪的算法论文,主要看了一系列基于相关滤波的算法,尝试着用python实现了其中一些比较经典的算法,地址在https://github.com/wwdguu/pyCFTracker ...

  5. CVPR 2019 | 亮风台发布全球最大单目标跟踪数据集LaSOT

    点击我爱计算机视觉标星,更快获取CVML新技术 CVPR 2019 正在美国加州举行,发布交流来自全球的工业界与学术界最新研究成果. 会上,亮风台公开大规模单目标跟踪高质量数据集LaSOT,包含超过3 ...

  6. 单目标跟踪——个人笔记

    单目标跟踪--个人笔记 以<Handcrafted and Deep Trackers: A Review of Recent ObjectTracking Approaches>为主线看 ...

  7. 基于嵌入式设备的 单目标跟踪算法

    基于嵌入式设备的单目标跟踪实现 最近基于嵌入式设备(Khadas Vim3)做了一套单目标跟踪算法,跟踪效率可以做到每秒25帧左右. 算法运行耗时记录 time is:37.6241 ms time ...

  8. 视觉单目标跟踪任务概述

      视觉目标跟踪的主要目的是:模仿生理视觉系统的运动感知功能,通过对摄像头捕获到的图像序列进行分析,计算出运动目标在每一帧图像中的位置:然后,根据运动目标相关的特征值,将图像序列中连续帧的同一运动目标 ...

  9. 单目标跟踪——【数据集基准】RGB数据集OTB / NFS / TrackingNet / LaSOT / GOT-10k / UAV123 / VOT 简介

    入手单目标跟踪的三个方面之数据集简介 目前单目标跟踪领域有哪些公认比较好的数据集? 这可以从一些优秀论文中找,看他们在验证自己的tracker用到哪些数据集.这些数据集的侧重不一,有的会包含快速移动: ...

最新文章

  1. asp.net MVC2 初探四
  2. Linux(Ubuntu)下MySQL的安装与配置
  3. 我要做一个合格的网络工程师
  4. Java内存泄露的理解与解决
  5. android怎么升级版本5.0,一加手机怎么升级安卓5.0系统
  6. 用python写一个彩票过滤器_37.Python自定义过滤器
  7. android触摸进度条,Android仿IOS ViewPager滑动进度条
  8. 腾讯云数据库TDSQL——数据库迁移备份与恢复
  9. Metadata-extractor读取图片的EXIF信息
  10. sql 节假日判断(春节、中秋、国庆、周末等)
  11. javaSE探赜索隐四<数组>
  12. 从静态检查工具谈代码编程规范
  13. UNIX下PageDown健如何捕捉
  14. C/C++语言入门——鸡兔同笼问题
  15. 阿里10年测试大佬带你搞懂测试左移和右移
  16. 修改注册表,更改Win10版本,解决升级时无法“保留个人文件和应用”的问题
  17. Bench 2022 | 第一届 OpenBench 国际研讨会精彩回顾
  18. TeXLive + Sublime Text 3 + LaTeXTools 环境配置
  19. Footprints:一款真正的“千里眼”应用
  20. JS 数组转对象 对象转数组 对象数组互相转换

热门文章

  1. 关于计算机图形学的书籍推荐
  2. 怎样用cmd命令查看系统信息
  3. 【语音识别】基于BP神经网络0到10数字语音识别含Matlab源码
  4. 外国网红靠财富密码在中国年入百万
  5. 受験日記 5年生 一週間のスケージュール
  6. c++中for_each用法简单概述
  7. 商业日志管理系统发展史
  8. Ajax使用JSON将对象、集合传递给后台的方式(用于同时对多个对象进行修改)
  9. 情商是怎样提高起来的?
  10. 历史上消失的日期:我消失了,但仿佛又没消失……