摘要:学习别人的开源项目是日常的一项必备技能,本文通过一个车辆跟踪(YOLOv5+DeepSort)的例子介绍如何配置和调试GitHub上的开源代码。以第一人称的视角给出本人调试代码的过程,包括项目readme的阅读、python环境配置、代码调试运行等,详细的过程已录制在视频中。完整的代码和配置文件可三连博主B站视频后获取。

关注视频获取代码资料:https://www.bilibili.com/video/BV1W34y1Y71w/(欢迎关注博主B站视频)


前言

相传,当你找到一处好代码,雄心勃勃打算“学习”一下时,总会出现一些“灵异事件”,武力值低的人往往“出师未捷身先死”。别人的代码荡下来到自己机器上,怎么就是各种Error铺天盖地?不是环境报错、缺少文件,就是语法错误...于是乎在想这帮人总是分享一堆Bug作甚呢?还是我自己没Get到大佬的点?

直接点,开始我们的故事吧。从前,有个夜黑风高的夜晚,收到上峰指示,先前的“目标跟踪”行动需立即执行:YOLOv4+Sort不好再用了,升级为YOLOv5+DeepSort。我想:“不会写啊,Python都没学过,额忘记我有没有学过了,晓得了先网上找一下吧”。咦,GitHub上有,和要求上差不多,妥了妥了,荡一下改改跑跑好不啦,小似情唷。喏这是原作者的效果,这个项目的地址:https://github.com/duongcongnha/Vehicle-tracking,下面说一下我调试该项目的经过。


1. 打量工作

看到这样一个项目,检测和跟踪效果都不错,所以动手要把它在我的机器上运行起来。这里是GitHub的项目主页,我先下载一下代码到我的G盘,与此同时打量一下这个代码。

下载好了,打开pycharm运行一下?别急,先看一眼训练好的模型有木有,老夫推断在models文件夹下,定睛一看存在yolov5的pt模型文件。Nice啊,目测可以先白嫖模型,预感这个程序靠谱。

再看Readme里面如何使用,这里有Python环境版本,以及要安装的依赖列表(requirement.txt)。想来按照这个要求来,应该能跑通的吧,那现在能打开pycharm运行一下程序?那主程序是哪个不看看你就运行?待我先目测一下主程序在哪里,还有要怎么运行有没有介绍。

这里记载了运行方式,用的命令行运行,这里有个cd命令,看来是在这个程序文件夹的application\main这个文件夹下,有个app_track.py,运行它应该就能跑起来了。

这个项目代码写得比较规范,所以能很方便找到这三个点,其他的项目就不能保证这么幸运了,那样就得自己琢磨,当你阅码无数自然就能积累经验了。

2. 运行调试

虽然看起来介绍齐全,但是我掐指一算可能会有坑,但是具体是什么坑我不知道。先启动pycharm,打开下载程序的文件夹,找到app_track.py这个主程序,然后运行程序?——先配置环境。有人问我:“原来有Python环境,配置好了很多三方依赖,直接用呗可以吗?”,那我不建议,这俩环境很可能不兼容,还是要改部分依赖包的版本,最终可能这个程序运行不通,你自己原来的程序也‘灵异’报错。”

既然如此,我用Anaconda创建一个新环境,然后在新环境里收requirements.txt列出的这些“牛鬼蛇神”,目测靠谱一点。打开PyCharm的终端,输入一下命令:

conda create -n yolo5_track python==3.7

我这里pycharm内置的终端是cmd,有些新版的pycharm变成了powershell,那后面部分命令可能不一样。各自实际情况不一样,大家具体问题具体分析,千万别只是照葫芦画瓢。那在终端里面输入,如下:

然后激活环境,常规操作是吧,那就不要出错。输入以下代码,这里如果是powershell执行下去效果可不一样,如果有需要就自己解决一下哈。

conda activate yolo5_track

接下来要给这个环境装上依赖,它这个项目里是不是有requirements.txt,我们打开看一下。还挺齐全的,有依赖名字还有部分版本号要求,那就来呗。

上面有提示我们输入pip的安装命令,那就在刚刚的终端下输入以下命令,读取txt文件,然后执行各个依赖的安装。

pip install -r requirements.txt

当然要先切换到requirement.txt所在的文件夹目录,然后输入命令回车执行,ChuaChua一堆安装信息提示,然后耐心等待完成。

安装成功之后,在pycharm中选择一下环境,基本就是File->Setting->Project->Python Interpreter,进入Python环境选择conda环境,确定刚刚创建好的环境即可。

环境也选好了,是不是该点运行了啊?这时候是时候展现真正的技术了,打开app_track.py,在编辑器中右击选择“Run”,开始运行,然后手动祈祷。

然后就是这样滴,what?不就是按照作者给出的吗,报错了是什么情况。看我干啥,想想什么原因啊。我们看一下最后三行,torch的module.py文件报错,显示没有某个属性。经验来看哈,这肯定是torch的版本不对,因为代码写错能出没有属性的可能性不大,除非是自己定义的,缺少了模块文件。这里显然是torch的调用问题,应该是版本问题。

我们是按作者给出的requirements.txt安装的,那么问题出现在哪里呢?我们再看一眼这个文件的内容,有些地方是固定版本,有的是给出了最低要求,比如要求这个torch>=1.8.0,大于等于?那我现在的torch版本呢,在终端输入pip list,可以看到torch版本1.11.0,没毛病确实大于1.8.0。

这个版本比1.8新多了,那你说有没有可能,到了某个版本来了个调整,把某些个属性给删掉或换成别的属性了呢?我想是很有可能的,在发布代码的时候作者想不到后面这些依赖会变成什么样的,所以只能告诉我们大于某个版本,所以这里装的时候就变成最新版。那如果我们把所有版本指定为特定的,是不是就能避免了。至于这里面这么多依赖,是不是所有版本都要调整呢,看经验或调试结果了。调整和测试后的依赖版本被我修改如下,然后保存在setup.txt中:

重新输入pip安装命令,在终端键入以下命令,重新安装:

pip install -r setup.txt

这时显然好起来了,运行结果如下,这其实是在处理中,等到进度完成,得到处理后的结果。完整版的资源代码和setup.txt配置文件,可关注并三连博主B站视频后评论获取,可轻松无Bug运行。

这时找到inference/output文件夹下的mp4结果,可以得到如下的画面,这是在原视频中检测后输出的文件。

注意到源码里面读取了yml的设置文件,下意识打开可以发现设置识别视频的路径在第24行,我们可以修改为自己的视频所在目录,重新进行检测测试一下。

修改用自己的视频文件,测试结果如下,感觉可以满足一般的车辆检测跟踪和计数要求,感兴趣的朋友可以关注并三连博主B站视频后,评论获取完整代码和setup.txt依赖文件。

结束语

由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。

记一次调试YOLOv5+DeepSort车辆跟踪项目的经过的更多相关文章

  1. win10 下visual studio 2015 在调试模式下不能跟踪源文件

    win10 下visual studio 2015 在调试模式下不能跟踪源文件,只要一调试就会关闭(隐藏)打开的文档,非常不方便.经过一番折腾,发现是配置的问题. 如果安装多个版本的VS,请删除对应版 ...

  2. Visual Studio调试之避免单步跟踪调试模式

    Visual Studio调试之避免单步跟踪调试模式 写完Visual Studio调试之断点进阶篇之后,想分享一下我常用的一些调试技巧,后面发现写之前,一些背景知识需要介绍一下. 下面是几篇今年2月 ...

  3. 2018-2-13-visual-Studio-无法调试,提示程序跟踪已退出

    title author date CreateTime categories visual Studio 无法调试,提示程序跟踪已退出 lindexi 2018-2-13 17:23:3 +0800 ...

  4. vs2015如何使用附加进程调试发布在IIS上项目

    1.如何使用附加进程调试IIS上的网站项目 1)在IIS部署一个网站项目 2)保证浏览器可访问(比如访问登陆页面) 3)在项目中LoginController断点,并在工具栏的调试找到附加到进程 4) ...

  5. 利用 jrebel 热部署\远程调试\远程热部署 springboot项目 服务器上的代码

    首先要在eclipse 中启用 启用以后在 resource 中生成了 rebel-remote.xml 然后build,把生成的jar包放到服务器上. 然后用下面的命令启动 java -agentp ...

  6. 入门大数据---Spark车辆监控项目

    一.项目简介 这是一个车辆监控项目.主要实现了三个功能: 1.计算每一个区域车流量最多的前3条道路. 2.计算道路转换率 3.实时统计道路拥堵情况(当前时间,卡口编号,车辆总数,速度总数,平均速度) ...

  7. 转载:Chrome调试折腾记_(1)调试控制中心快捷键详解!!!

    转载:http://blog.csdn.net/crper/article/details/48098625 大多浏览器的调试功能的启用快捷键都一致…按下F12;还是熟悉的味道;  或者直接 Ctrl ...

  8. 如何调试SSIS包之跟踪变量赋值

    在SSIS开发工具SQL Server Data Tools中提供了调试功能,可以让我们方便的跟踪参数赋值或者数据流条数.本文主要介绍了如何使用SSDT的调试功能. Part A: Script ta ...

  9. ASP.NET WEB API 中的路由调试与执行过程跟踪

    路由调试 RouteDebugger 是调试 ASP.NET MVC 路由的一个好的工具,在ASP.NET WEB API中相应的有 WebApiRouteDebugger ,Nuget安装 Inst ...

随机推荐

  1. Spring框架中的单例bean是线程安全的吗?

    不,Spring框架中的单例bean不是线程安全的.

  2. spring aop 源码解读之我见

    spring aop 都是动态代理,分为jdk代理和cglib代理.默认的情况下,如果类有实现了接口,使用jdk代理.如果没有实现接口,则使用cglib代理.在下面的代码中,我会标明对应的这段代码. ...

  3. 利用事件的冒泡特性,为子标签添加Onclick事件

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. Djnago中缓存配置(redis配置案例)

    Django中提供了6种缓存方式: 开发调试 内存 文件 数据库 Memcache缓存(python-memcached模块) Memcache缓存(pylibmc模块) 配置文件 # 内存 CACH ...

  5. jdk_8接口的内部内容

    目标: 如何创建已定义好的接口类型的对象呢? 步骤: 实现的概述 抽象方法的使用 默认方法的使用 静态方法的使用 接口的常量使用 讲解: 实现的概述 类与接口的关系为实现关系,即类实现接口,该类可以称 ...

  6. 顺利通过EMC实验(1)

  7. window nginx 简单搭建服务器访问静态资源

    nginx命令: 启动: start nginx 停止:nginx -s stop ||  nginx -s quit 注:stop是快速停止nginx,可能并不保存相关信息:quit是完整有序的停止 ...

  8. An=n的前n项和的前n项和

    #include<iostream> using namespace std; int main() { int n,a=0,b=0; cin>>n; for(int i=1; ...

  9. MySQL的安装详细教程

    一.下载MySQL数据库并创建初始化文件 1.下载MySql数据压缩包-----下载网址:https://dev.mysql.com/downloads/mysql/ 2.选择兆数最少的那个下载 3. ...

  10. Kafka 使用-安装

    Kafka 使用-安装 官方网站 http://kafka.apache.org/ 官方文档 Kafka 是什么? Apache Kafka is an open-source distributed ...