目录
问题3:在下载好zip文件中缺少了一个输出文件,需要添加output文件
问题4:报错:from typing import OrderedDict ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘
问题5:FileNotFoundError: [Errno 2] No such file or directory: 'data/coco.names'
记录debug解决
最近在学习yolov3时,在网上寻找yolov3的源代码,遇到了几个问题,通过网上的方法,和查看报错源代码。成功将代码进行实现。
笔者环境
- window 11
- Anaconda环境
- python 3.7
- pytorch :1.13.0+cpu
我所下载的YOLOv3源代码地址:mirrors / eriklindernoren / pytorch-yolov3 · GitCode
首先将源代码压缩包安装到本地。
因为之前没有弄过,所以打开文件一大批错误映入眼帘。
第一个错误就是pycharm中显示我的环境中没有pytorchyolo库,torchsummary,terminaltables,tqdm等这些都是pytorchyolo中的,安装好pytorchyolo时自动就安装好了。
问题1,安装pytorchyolo遇到的错误:
一开始使用的是pip install pytorchyolo,直接安装但是他报错ERROR:
Could not install packages due to an OSError: [WinError 5] 拒绝访问。Consider using the `--user` option or check the permissions.
原因:说的好像是权限不足
解决方法:
pip3 install pytorchyolo --user
问题2:下载脚本需要的weights文件
第一个链接为yolov3.weights 下载地址(我目前只下载了这个文件)
第二个链接为yolov3-tiny.weights 下载地址
第三个链接为darknet53.conv.74 下载地址
wget -c "https://pjreddie.com/media/files/yolov3.weights" --header "Referer: pjreddie.com"
# # Download weights for tiny YOLOv3
wget -c "https://pjreddie.com/media/files/yolov3-tiny.weights" --header "Referer: pjreddie.com"
# Download weights for backbone network
wget -c "https://pjreddie.com/media/files/darknet53.conv.74" --header "Referer: pjreddie.com"
保存的文件位置:
问题3:在下载好zip文件中缺少了一个输出文件,需要添加output文件
接下来就来到了运行时发生的错误了。直接在压缩包中打开pytorchyolo文件中的detect.py文件运行
问题4:报错:from typing import OrderedDict ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘
网上的是说修改if语句:我没找到,就是用的其他方法
点击报错信息找到 .py文件中(文件找不到在哪里了),将import语句中的 OrderedDict 删掉,添加一行 import collections,
import math
from functools import partial
from typing import Any ,Callable,List,Optional,OrderedDict,Sequence,Tuple
1,将typing导入的OrderedDict函数删除
2,重新导入collections库
import math
from functools import partial
from typing import Any ,Callable,List,Optional,Sequence,Tuple
import collections
3,将该py文件中的OrderedDict()改为collections.OrderedDict()
我记得是一共有三处(一个是变量名,两个函数),要改两处(均为函数):
在当前py文件中,ctrl+f进行搜索OrderedDict,
OrderedDict(。。。)-------》collections.OrderedDict(...)
问题5:FileNotFoundError: [Errno 2] No such file or directory: 'data/coco.names'
原因:这个是因为文件路径错误
在detect.py文件中找到定义的run函数配置文件内容进行修改。
print_environment_info()
parser = argparse.ArgumentParser(description="Detect objects on images.")
parser.add_argument("-m", "--model", type=str, default="config/yolov3.cfg", help="Path to model definition file (.cfg)")
parser.add_argument("-w", "--weights", type=str, default="weights/yolov3.weights", help="Path to weights or checkpoint file (.weights or .pth)")
parser.add_argument("-i", "--images", type=str, default="data/samples", help="Path to directory with images to inference")
parser.add_argument("-c", "--classes", type=str, default="data/coco.names", help="Path to classes label file (.names)")
parser.add_argument("-o", "--output", type=str, default="output", help="Path to output directory")
parser.add_argument("-b", "--batch_size", type=int, default=1, help="Size of each image batch")
parser.add_argument("--img_size", type=int, default=416, help="Size of each image dimension for yolo")
parser.add_argument("--n_cpu", type=int, default=8, help="Number of cpu threads to use during batch generation")
parser.add_argument("--conf_thres", type=float, default=0.5, help="Object confidence threshold")
parser.add_argument("--nms_thres", type=float, default=0.4, help="IOU threshold for non-maximum suppression")
改为:
(就是将model,weights,images,classes,output)参数路径前加上(../)
然后再运行detect.py文件就没有问题了。
output中的输出结果
成功实现代码的运行,