根据昨天训练一晚炼丹出来的结果,选取模型
炼出来很多丹药啊,我们只需要选取验证集损失较低的模型进行预测即可
验证集损失较低不代表mAP较高,仅代表该权值在验证集上泛化性能较好,因此还得要验证一下,运行get_map.py,得出以下结果:
可以看到验证集基本置信度都为1,因此这个模型是可以使用的。
验证完成就可以开始进行预测了!我们写了一个简单的demo进行预测,通过识别出来的label链接图数据库返回对应的解决方案,代码如下:
import tkinter as tk
import os
from tkinter import filedialog
from shutil import copyfile
from frcnn import FRCNN
import time
import cv2
import numpy as np
import tensorflow as tf
from PIL import Image
import tkinter as tk
import os
from tkinter import filedialog
from shutil import copyfile
from connect_neo4j import FindSolutions
import tkinter.messagebox as msgbox
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
def upload_file():
selectFile = tk.filedialog.askopenfilename()
entry1.insert(0, selectFile)
print(entry1.get())
imgpath = entry1.get()
image = Image.open(imgpath)
image, list_label = frcnn.detect_image(image, crop=crop)
image.show()
print(list_label)
fs = FindSolutions()
str1 = ''
for i in list_label:
sql1 = "MATCH (q:Question{name:'%s'}) -[r:解决方案]->(s:Solution) return q.name,s.name, s.programme" % i
ress = fs.search_main(sql1)
l = "%s:%s" % (i, ress)
str1 = str1 + l + "\n"
msgbox.showinfo(title='', message='%s' % str1)
frcnn = FRCNN()
crop = False
video_path = 0
video_save_path = ""
video_fps = 25.0
dir_origin_path = "img/"
dir_save_path = "img_out/"
root = tk.Tk()
frm = tk.Frame(root)
frm.grid(padx='20', pady='30')
btn = tk.Button(frm, text='上传文件', command=upload_file)
btn.grid(row=0, column=0, ipadx='3', ipady='3', padx='10', pady='20')
entry1 = tk.Entry(frm, width='40')
entry1.grid(row=0, column=1)
entry1.grid(row=0, column=1)
root.mainloop()
显示效果如下:
简单的图片选择
成功识别出对应的错误类型
返回对应的解决方案:
解决方案和错误的对应关系在neo4j里面:
成功完成demo!
不过因为数据量不足训练的不够多,还会出现如下问题,比较相似的报错截图会识别成同一种错误:
一路走下来,AI这一个简单的流程剩下的最后一块拼图便是部署了,接下来我们会研究如何部署tf训练好的模型,然后根据计划开始重构需求所需的技术架构图