前言
我在项目中要将yolov5放入到项目中运行,但出现了标题描述的问题,我找了很久,终于在yolov5的github里的问题讨论处找到了解决方案,里面有很详细的讨论,也应该还有我这里没提到的解决方案,或者是更加详细的解决方案,感兴趣的可以去康康,我就把解决了我问题的答案分享给大家
链接: https://github.com/ultralytics/yolov5/issues/22
.
问题简述
当我们尝试把yolo等已有的机器学习项目移植到我们的项目中时,在解决了一系列导包问题并终于看到开始运行的时候,有可能会报出“No module named ‘models’”的Error。
当前项目的解决方法
在报错的文件的开头加上
import sys
sys.path.insert(0, "path/to/your/MLProject")
insert里填的就是机器学习项目的路径,比如我的例子里,我在我的Django_projects项目里移植了yolov5的项目,并将其项目文件夹命名为yolov5Dir,而我报错的文件时yolov5Dir/models文件夹下的experimental.py,我就在他的开头加上了
import sys
sys.path.insert(0, "Django_projects\yolov5Dir")
之后,便解决了问题
根源解决制作的机器学习项目移植问题
这是因为模型在保存的时候可以使用torch提供的两种方式。
第一种是torch官方推荐的方式,也就是仅对模型的参数进行操作,这样移植起来非常的方便
torch.save(the_model.state_dict(),PATH)
第二种的话是针对整个模型,训练时会将本地的class和目录结构都放到模型里,而现在很多的开源模型都是这样保存的
model = ModelClass(*args,**kwargs)
model.load_state_dict(torch.load(PATH))
所以可以考虑使用第一种来进行模型的保存