yolov5--从Github下载到运行遇到的错误集锦【pycocotools报错+Can‘t get attribute SPPF+in _next_assert img0 is not None】

yolo算法

​ YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。现在YOLO已经发展到v6版本,不过新版本也是在原有版本基础上不断改进演化的。这次主要是克隆Github上yolov5版本的程序,然后再pycharm上运行。

​ 首先,是从github上下载程序。【注意此次下载的是V5.0版本】

yolov5--从Github下载到运行遇到的错误集锦【pycocotools报错+Can‘t get attribute SPPF+in _next_assert img0 is not None】_第1张图片

​ 下载成功后就是漫长且易秃的环境配置之路首先我们还需要一些准备工作——安装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-然后选择合适的版本解释器,如图:

    yolov5--从Github下载到运行遇到的错误集锦【pycocotools报错+Can‘t get attribute SPPF+in _next_assert img0 is not None】_第2张图片

    这个问题似乎很难解决,但是从网上的资料来看,这个问题不是个例,但有人貌似是解决了的,在我百思不得其解时,突然看到这样的一条:重装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--从Github下载到运行遇到的错误集锦【pycocotools报错+Can‘t get attribute SPPF+in _next_assert img0 is not None】_第3张图片

经过一步步的调试修改,最后终于可以成功运行了。可以看看运行后的结果,可以实现一些图片中物体的检测

yolov5--从Github下载到运行遇到的错误集锦【pycocotools报错+Can‘t get attribute SPPF+in _next_assert img0 is not None】_第4张图片

yolov5--从Github下载到运行遇到的错误集锦【pycocotools报错+Can‘t get attribute SPPF+in _next_assert img0 is not None】_第5张图片

下面介绍一下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~~点个赞呗

你可能感兴趣的:(自动驾驶,github,pytorch,yolo,yolov5)