Faceboxes.pytorch项目链接
ModuleNotFoundError: No module named 'cv2'
解决办法:
Anaconda缺少什么模块就安装什么模块,打开Anaconda prompt
输入:conda install --channel https://conda.anaconda.org/menpo opencv
参考链接
第一次更新失败,因为我的conda未更新,所以我要先更新conda再继续安装cv2模块
RemoveError: ‘requests’ is a dependency of conda and cannot be removed from conda’s operating enviro…
解决办法:
输入 conda update --force conda
参考链接
等待conda 顺利更新结束,重新按照问题一的解决办法安装cv2
ModuleNotFoundError: No module named 'utils'
解决办法:Anaconda缺少什么模块就安装什么模块,打开Anaconda prompt
输入:conda install -c conda-forge python-utils
参考链接
ValueError: Expected a cuda device, but got: cpu
有考虑过是否要换一台电脑,但无奈自己平时用的电脑在学校没带回来,也考虑过要连接远程服务器来解决没有GPU的问题,但是自己没有使用过远程服务器,所以这个办法也是远水救近火,后面经“高人”指点:这些模型肯定是既可以在CPU上运行又可以在GPU上运行的,只不过你要将模型中选择用GPU运行的部分全部改成用CPU运行就行。所以我开始大概的浏览了一遍模型,将网络模型中用cuda的部分都改成了cpu,从而解决了这个问题。
我的解决办法:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
parser.add_argument('--cpu', action="store_true", default=False, help='Use cpu inference')
因为我是代码小白,所以只能把自己看得懂的,且涉及到cpu,gpu的位置进行一下稍微的调整
更改后为:
parser.add_argument('--cpu', action="store_true", default=True, help='Use cpu inference')
PS:
add_argument
:用于给定参数,在运行程序时,程序将通过其调用给定的参数来执行程序
ArgumentParser.add_argument(name or flags…[, action][, nargs][,const][, default][, type][, choices][, required][, help][, metavar][,dest])
name of flags :是必须的参数,该参数接受选项参数或者是位置参数。
例:`
parser.add_argument('--dataset', default='PASCAL', type=str, choices=['AFW', 'PASCAL', 'FDDB'], help='dataset')`
例如上面代码中的‘–dataset’数据集,在运行test.py时,若test.py中的args.dataset == “FDDB”
,则本次运行将使用FDDB数据集作为测试集,若不给参数时,则使用default=‘PASCAL’
默认数据集PASCAL进行测试。
type
:为参数类型,例如str, int
choices
:用来选择输入参数的范围,例如上面的choices=['AFW', 'PASCAL', 'FDDB']
表示输入的数据集只能是‘AFW’
或‘PASCAL’
或'FDDB'
.
required:用来设置再命令中显示参数,当required为True时,在输入命令时需要显示这个参数
help:用来描述这个选项的作用
action:表式该选项要执行的操作
参考链接
device = torch.device("cpu" if args.cpu else "cuda")
改成:
device = torch.device("cpu")
net = net.cuda()
改成:
net = net.cpu()
def load_model(model, pretrained_path, load_to_cpu):
print('Loading pretrained model from {}'.format(pretrained_path))
if load_to_cpu:
pretrained_dict = torch.load(pretrained_path, map_location=lambda storage, loc: storage)
else:
device = torch.cuda.current_device()
pretrained_dict = torch.load(pretrained_path, map_location=lambda storage, loc: storage.cuda(device))
改成:
def load_model(model, pretrained_path, load_to_cpu):
print('Loading pretrained model from {}'.format(pretrained_path))
if load_to_cpu:
pretrained_dict = torch.load(pretrained_path, map_location='cpu')
else:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
pretrained_dict = torch.load(pretrained_path, map_location=lambda storage, loc: storage.cuda(device))
所以总的来说:
工作要部署到服务器上 ,服务器上面没有GPU,所以要将GPU改为CPU处理,于是训练的模型要动一动,在load的时候加上map_location=‘cpu’,然后把所有的.cuda()方法删掉。(只有使用一块gpu训练的模型才可以使用该方法,使用多块GPU的模型转CPU)
GPU->CPU
model = torch.load(‘xxx.pkl’, map_location=‘cpu’)
CPU->GPU1
torch.load(‘gen_500000.pkl’, map_location=lambda storage, loc: storage.cuda(1))
参考链接1
参考链接2
至此,我解决了由GPU转换成CPU来运行模型的问题。
import
: 在python
用import或者from...import
来导入相应的模块。模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中,我们就可以使用了。这类似于C语言中的include头文件,Python中我们用import导入我们需要的模块。
原来的test.py文件中的from .nms.cpu_nms import cpu_nms, cpu_soft_nms
会导致错误,因为没有cpu_nums
这个模块,后面我把这一行代码删掉了,且把下面代码中的return
进行了稍微的改动。
def nms(dets, thresh, force_cpu=False):
"""Dispatch to either CPU or GPU NMS implementations."""
if dets.shape[0] == 0:
return []
#if cfg.USE_GPU_NMS and not force_cpu:
#return gpu_nms(dets, thresh, device_id=cfg.GPU_ID)
else:
return nms(dets, thresh)
#原来代码中的return(如下),改成了上面的return,定义的函数和返回的结果不一致
#return cpu_nms(dets, thresh)
按照GitHub上的FaceBoexes.pytorch项目的安装指引,
$FaceBoxes_ROOT/data/AFW/images/
$FaceBoxes_ROOT/data/PASCAL/images/
$FaceBoxes_ROOT/data/FDDB/images/
我的数据集是需要放在(如上位置)每一个数据集文件夹的images/文件夹下的,但是我把images/文件夹的名字写成了AEW_images/,所以运行该测试代码的时候,模型无法找到测试数据集,所以出现了数据格式不对的错误。
TypeError: src is not a numpy array, neither a scalar
解决办法:将数据集文件夹的名字改成images/,并重新载入
从这个错误中学到的知识:
python路径拼接os.path.join()函数完全教程
解决了这几个问题,test.py在我的电脑中暂时没有报错了,现在要开始学习怎么用这个模型来跑我的数据集并提取特征,小白求好运求毕业~
———————————————
版权声明:本文为CSDN博主「weixin_45654744」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45654744/article/details/105206549