yolo算法
YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。现在YOLO已经发展到v6版本,不过新版本也是在原有版本基础上不断改进演化的。这次主要是克隆Github上yolov5版本的程序,然后再pycharm上运行。
首先,是从github上下载程序。【注意此次下载的是V5.0版本】
下载成功后就是漫长且易秃的环境配置之路,首先我们还需要一些准备工作——安装pytorch【安装方法随处都是,这里不过多介绍,推荐使用anaconda】。安装好pytorch后,我们可以为创建一个pytorch的虚拟环境,然后就可以在pycharm内使用这个环境的解释器了。创建命令为 conda create -n pytorch python ,创建好这个虚拟环境之后,可以通过命令 conda activate pytorch进入该环境中。这些准备就绪,真正的环境配置之路正式开始。后文主要介绍一些常见的不好解决的错误,每个人电脑环境不一样,所以错误的方式肯定有所差别,但一些类似之处可以借鉴。
- 现在我们拿到程序了,第一步要做的是安装所需的各种包,此程序为读者写了requirement.txt文档,可谓非常良心。我们可以通过在pycharm的Terminal中输入 pip install -r requirements.txt命令,这样就可以安装此程序所有需要的包了。安装这些包的过程中,最常见的一个问题就是安装pycocotools失败,他会报错需要什么C++tools,这里我尝试了网上的许多方法,发现还是这一个比较靠谱,凡是出现和pycocotools失败有关的问题,都可以参考,链接如下:pycocotools报错解决方法。至于其他的一些包的安装,在网上较容易找到解决方案,这里不一一介绍【注:需要注意的是安装包的过程中最好把代理关了(如果设置了的话),否则可能会出现安装不了的情况】
- 终于把所需要的环境安装好了,接下来肯定是想来运行运行了。果然事情没这么简单,我发现根本运行不了,仔细看看,我的pycharm中都是红色的错误,看看这些错误,心中一喜,发现都是一个类型:python version 3.5 does not support ‘f‘ prefix。意思大致是说,python3.5版本没有前置f的方法【当然自己是纳闷的,根本就没装python3.5呀🤐🤐🤐】。这样一来,我想解决了这个问题应该就可以运行成功了,于是上网上一顿搜索,尝试了各种各样的方法,当然最后还是无果。这里先总结一下网上主要的解决方法:通过设置-搜索Code compatibility inspection-然后选择合适的版本解释器,如图:这个问题似乎很难解决,但是从网上的资料来看,这个问题不是个例,但有人貌似是解决了的,在我百思不得其解时,突然看到这样的一条:重装pycharm吧。没有豁然开朗的感觉,只是抱着试一试的心态,说不定就是pycharm版本较低导致的呢,于是来了一遍卸载+重装pycharm之路,呼···终于装好了,没有报错,果然重装大法好!
- 一眼看着代码文件,没有显眼的的红色了,这回又运行了一次。发现了如下错误:Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘–yolov5-5.0\models\common.py。于是又开始了寻找资料之旅,最后功夫不负有心人,在b站某视频的评论区找到了解决方案:去V6版本里面的model/common.py里面去找到这个SPPF的类,把它拷过来到你的这个V5的model/common.py里面,之后在common.py中引入warnings包就可以了。
- 心中默念这次一定行,出现报错: in _next_ assert img0 is not None, ‘Image Not Found ‘ + path
- 解决方法:将utils/datasets.py文件中的
p=str(Path(path).absolute()) # os-agnostic absolute path
改为
p=str(Path(path))
如图,为修改后的结果:修改后重新运行即可
经过一步步的调试修改,最后终于可以成功运行了。可以看看运行后的结果,可以实现一些图片中物体的检测
下面介绍一下yolov5中一些参数的设置及含义:
parser=argparse.ArgumentParser() parser.add_argument('--weights', nargs='+', type=str, default='yolov5m.pt', help='model.pt path(s)') #表示网络的规模parser.add_argument('--source', type=str, default='data\Video\Train.mp4', help='source') # file/folder, 0 for webcam #表示训练的路径parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)') #输入图片大小parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold') #置信度parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS') parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') parser.add_argument('--view-img', action='store_true', help='display results') #实时显示parser.add_argument('--save-txt', action='store_true', help='save results to *.txt') #保存txt文件parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels') parser.add_argument('--nosave', action='store_true', help='do not save images/videos') parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3') parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS') parser.add_argument('--augment', action='store_true', help='augmented inference') parser.add_argument('--update', action='store_true', help='update all models') parser.add_argument('--project', default='runs/detect', help='save results to project/name') #保存路径parser.add_argument('--name', default='exp', help='save results to project/name') parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') opt=parser.parse_args()
咻咻咻咻~~duang~~点个赞呗