python 训练Bilinear CNN检验模型

运行Inference.py

import argparse
import sys
import os
import struct
import socket
import torch
import torchvision
from BCNN_fc import BCNN_fc
import config
from PIL import Image
import tkinter as tk
from tkinter import filedialog

def main(filename):
    parser = argparse.ArgumentParser(description='network_select')
    parser.add_argument('--net_select',
                        dest='net_select',
                        default='BCNN_fc',
                        help='select which net to train/test.')
    args = parser.parse_args()
    # 配置GPU
    device = torch.device('cpu')

    #加载模型
    if args.net_select == 'BCNN_fc':
        net = BCNN_fc().to(device)
        modelpath = os.path.join(config.PATH['model'],config.PATH['model_fc'])
        net.load_state_dict(torch.load(modelpath, map_location='cpu'),
                            strict=False)

    #设置图像转换参数
    test_transforms = torchvision.transforms.Compose([
        torchvision.transforms.Resize(size=448),
        torchvision.transforms.RandomCrop(size=448),
        torchvision.transforms.ToTensor(),
        torchvision.transforms.Normalize(mean=(0.485, 0.456, 0.406),
                                         std=(0.229, 0.224, 0.225))
    ])

    #通过对话框指定图像文件

    # Inference 提供/添加接口 诸如 setPictureFile 
    # imfile 由服务器端调用模型接口来进行修改

    #读入图像,并转换为torch.cuda.FloatTensor
    #imfile = os.path.join(config.PATH['cub200_test'], '001.biotite/biotite_0001.jpg')
    imageRGB = Image.open(filename).convert('RGB')
    image = test_transforms(imageRGB).unsqueeze(0)
    imageTest=image.to(device, torch.float)#转换为与显卡相关的,cpu或者CUDA

    #imageTest = imageTest.reshape([1, 3, 448, 448])
    net.eval()
    output = net(imageTest)
    _, prediction = torch.max(output.data, 1)
    # label = torch.autograd.Variable(image1)
    la = prediction[0]
    # 多项分支 (多选一)
    if la == 0:
        print("001.biotite")
    elif la == 1:
        print("002.bornite")
    elif la == 2:
        print("003.chrysocolla")
    elif la == 3:
        print("004.malachite")
    elif la == 4:
        print("005.muscovite")
    elif la == 5:
        print("006.pyrite")
    elif la == 6:
        print("007.quartz")
    else:
        print("快走吧脑弟,一会好赶不上二路汽车了7")
    print(prediction)

if __name__ == '__main__':
    main('test.jpg')

1、使用python3运行程序,发现报错,缺少pytorch环境

在这里插入图片描述

2、安装aconda环境(可以不装,这里没有用到)

(1)下载aconda

https://repo.anaconda.com/archive/index.html

image-20210428165055715

(2)上传到服务器并安装

# 安装命令,一直按回车,安装过程需要同意将安装路径加入到环境变量的配置文件中。 source ~.bashrc使其生效。
bash Anaconda2-2019.07-Linux-x86_64.sh

3.安装pytorch环境

到pytorch官网下载对应版本的pytorch 即可

https://pytorch.org/

image-20210428170627386
在这里插入图片描述

根据最后一行红色字体我们知道出现了MemoryError,根据字面意思我们可知此问题与内存有关。因为pip安装的缓存机制想要先把整个文件读取到内存以后才开始安装,因此可能导致内存不足。所以我们在安装时指示不启用缓存即可,可以使用 --no-cache-dir 命令

pip3 install --no-cache-dir torch==1.8.1+cpu torchvision==0.9.1+cpu torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

image-20210428170445683

4.再次运行Inference.py

image-20210428170747339

尝试直接安装tkinter,结果没有发现tkinter包

image-20210428170832942

后查询资料得知:

tkinter其实是Python调用tcl程序的标准Python程序,可以通过这个interface调用tcl的程序,因为在大多数的unix系统中都内置了很多的tcl程序和命令。

Tcl 是“工具控制语言(Tool Command Language)”的缩写,其面向对象为otcl语言。Tk 是 Tcl“图形工具箱”的扩展,它提供各种标准的 GUI 接口项,以利于迅速进行高级应用程序开发。

于是,执行terminal 命令:sudo apt install python3-tk

image-20210428171149048

再次运行Inference.py,正在下载vgg16的预训练模型,成功运行
在这里插入图片描述
image-20210428175918962

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dumbking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值