在本指南中,将使用家庭作业簿作为示例,展示如何构建自定义模型以及基础模型。首先,可以选择复制一个现有模型(耗时较短),或者从头开始构建自己的模型。通过使用模型ID和API密钥,可以立即开始使用训练的模型。还将教如何使用现有数据集创建自己的模型,但如果想从头开始构建自己的数据集,请参考这个教程。
要复制现有模型,可以在RoboflowUniverse上找到模型,那里存储了成千上万的计算机视觉模型。一旦找到了适合用例的模型,就下载完整的数据集。选择想要放入的工作区:之后,将图像添加到数据集中。接下来,将使用这个数据集在账户中训练模型。为此,请转到生成并创建一个新版本。确保添加一个预处理步骤,该步骤应将图像大小调整为2048乘以2048。模型训练完成后,可以进行下一步。
在侧边栏中,打开工作流,点击创建工作流,然后添加以下模型。之后,在对象检测块中,添加训练的模型。接下来,对LMM(GPT-4)进行类似的操作。点击LMM,添加一个提示(提示是:孩子完成小册子需要多长时间?输出格式为列表,仅包含孩子的名字和时间。例如,如果时间是10分钟,名字是Nathan,那么格式将是:["Nathan", "10"])。
指定模型,通过打开可选属性添加OpenAIAPI密钥。现在已经添加了模型,工作流应该看起来像这样:注意LMM与响应之间没有连接线?要添加LMM,请点击响应并添加另一个输出。然后,工作流应该看起来像这样。现在工作流已经设置好了。要部署它,请点击保存并部署工作流。使用部署工作流中提供的Python代码。
参考这个Google Colab笔记本,跟随构建项目的下一步。首先安装所需的库。这些包括:Opencv Inference!pip install inference opencv-python。接下来,添加从工作流中获得的代码。
from inference_sdk import InferenceHTTPClient
client = InferenceHTTPClient(
api_url="https://detect.roboflow.com",
api_key="ADD YOUR API KEY"
)
result = client.run_workflow(
workspace_name="nathan-yan",
workflow_id="kumon",
images={"image": "/content/IMG_3442.jpg"},
)
现在,让看看正在处理的图像。因为使用的是kumon小册子,所以使用了从以下Google Drive链接获得的小册子图像。
# 图像链接:https://drive.google.com/file/d/1pDJaWemV5oMcMkSeTETxWl_ks-_Jp2AO/view?usp=sharing
!wget --no-check-certificate 'https://drive.google.com/ucexport=download&id=1pDJaWemV5oMcMkSeTETxWl_ks-_Jp2AO' -O kumon.jpg
接下来,使用代码显示图像,以更好地了解预期的输出应该是什么。在这种情况下,花费的时间是10分钟,名字是Nathan,在一页上得了70%,其他四页都是完美的。
from google.colab.patches import cv2_imshow
import cv2
image = cv2.imread("IMAGE_PATH")
# 显示图像
cv2_imshow(image)
# 标记是检查,7,检查,检查,检查。
# 时间是10分钟
# 名字是Nathan
在这里,定义变量,并获取每个预测的结果。对于每个预测,取x变量以及对象的类别(应该是检查,9,8,7或6)。这样,就能够获得页面的顺序以及哪个特定页面是错误的。
scores = []
main_dict = result[0]
# 预测
predictions = main_dict['predictions']['predictions']
# 访问每个预测的详细信息
for prediction in predictions:
x = prediction['x']
class_name = prediction['class']
scores.append([class_name, x])
接下来,使用检测到的类别的顺序x坐标,按顺序对检测进行排序。将特定的标记而不是x坐标添加到列表“marks”中。
sorted_scores = sorted(scores, key=lambda item: item[1])
marks = []
for score in sorted_scores:
marks.append(score[0])
那里!得到了标记!现在需要访问时间和孩子的名字,这是通过GPT-4 Vision获得的。首先获取GPT-4的原始输出。
raw_output = main_dict['output']['raw_output']
原始输出存储的数据应该看起来像这样:["Nathan", "14"]。因此,为了将字符串转换为列表,使用以下代码。
import ast
output = ast.literal_eval(raw_output)
最后,能够访问这两个变量,这意味着可以使用以下代码将两者结合起来。
booklet_information = {
"name": output[0],
"time": output[1],
"scores": marks
}
print(f"Booklet Information: {booklet_information}")