在本文中,将探讨如何在NVIDIA Jetson系列边缘AI设备上,通过优化推理服务器来实现最佳性能。这包括针对其CPU和GPU架构特别定制的驱动程序、库和二进制文件。
CLIP是由OpenAI开发的开源视觉模型,它能够生成文本和图像嵌入。这些嵌入编码了文本和图像的语义信息,可以用于多种计算机视觉任务。以下是一些可以使用CLIP模型完成的任务:
通过在Jetson上部署CLIP,可以在边缘为应用程序需求使用CLIP。
确保Jetson设备已使用Jetpack 5.1.1进行刷机。首先,从下载Jetson Orin Nano开发者套件SD卡镜像,然后按照NVIDIA的指导将镜像写入microSD卡。
一旦Jetson Nano开机并启动,可以使用以下代码库检查是否已安装Jetpack 5.1.1:
git clone https://github.com/jetsonhacks/jetsonUtilities.git
cd jetsonUtilities
python jetsonInfo.py
Roboflow推理提供了针对多种设备和环境的Docker配置。有一个特别为NVIDIA Jetsons设计的Docker容器。可以在中了解更多关于Roboflow推理Docker镜像的构建、拉取和运行。
按照以下步骤运行Jetson Orin Docker容器:
git clone https://github.com/roboflow/inference
docker build -f dockerfiles/Dockerfile.onnx.jetson.5.1.1 -t roboflow/roboflow-inference-server-trt-jetson-5.1.1
sudo docker run --privileged --net=host --runtime=nvidia --mount source=roboflow,target=/tmp/cache -e NUM_WORKERS=1 roboflow/roboflow-inference-server-trt-jetson-5.1.1:latest
以下代码通过向边缘的OpenAI CLIP模型发送POST请求并返回图像的嵌入向量。传入图像URL、Roboflow API密钥和连接到运行Jetpack 5.1.1的Docker容器的基础URL(默认为http://localhost:9001):
import requests
dataset_id = "soccer-players-5fuqs"
version_id = "1"
image_url = "https://source.roboflow.com/pwYAXv9BTpqLyFfgQoPZ/u48G0UpWfk8giSw7wrU8/original.jpg"
# 替换为Roboflow API密钥
api_key = "ROBOFLOW_API_KEY"
# 定义请求负载
infer_clip_payload = {
# 图像可以作为URL提供,也可以作为base64编码的字符串提供
"image": {
"type": "url",
"value": image_url,
},
}
# 定义推理服务器URL(localhost:9001, infer.roboflow.com等)
base_url = f"http://localhost:9001"
# 定义Roboflow API密钥
api_key = "YOUR_API_KEY_HERE"
res = requests.post(
f"{base_url}/clip/embed_image?api_key={api_key}",
json=infer_clip_payload,
)
embeddings = res.json()['embeddings']
print(embeddings)
在为多张图像创建嵌入向量后,可以计算嵌入向量的余弦相似性并返回相似性分数:
# 计算嵌入向量之间相似性的函数
def calculate_similarity(embedding1, embedding2):
# 在此处定义相似性度量标准
# 可以使用余弦相似性、欧几里得距离等
cosine_similarity = np.dot(embedding1, embedding2) / (np.linalg.norm(embedding1) * np.linalg.norm(embedding2))
similarity_percentage = (cosine_similarity + 1) / 2 * 100
return similarity_percentage
# 计算嵌入向量的相似性
embedding_similarity = calculate_similarity(embedding1, embedding2)
有了CLIP在边缘,可以嵌入图像、文本并计算相似性分数!