当前位置: 首页 > news >正文

东营网站制作公司中英文网站切换怎么做

东营网站制作公司,中英文网站切换怎么做,广州网络网站建设,vlc WordPress在上一篇文章中#xff0c;我们学习了如何利用人工智能技术#xff08;例如开源 AI 向量数据库 Milvus 和 Hugging Face 模型#xff09;寻找与自己穿搭风格相似的明星。在这篇文章中#xff0c;我们将进一步介绍如何通过对上篇文章中的项目代码稍作修改#xff0c;获得更… 在上一篇文章中我们学习了如何利用人工智能技术例如开源 AI 向量数据库 Milvus 和 Hugging Face 模型寻找与自己穿搭风格相似的明星。在这篇文章中我们将进一步介绍如何通过对上篇文章中的项目代码稍作修改获得更详细和准确的结果文末附赠彩蛋。 注试用此项目应用需要点击下载并使用 notebook 01.回顾前文 在深入探讨前先简要回顾一下前一篇教程文章。 导入所需的图像处理库和工具 首先导入所有必要的图像处理库包括用于特征提取的 torch、transformers 中的 segformer 对象、matplotlib 和 torchvision 中的 Resize、masks_to_boxes和crop 等。 import torch from torch import nn, tensor from transformers import AutoFeatureExtractor, SegformerForSemanticSegmentation import matplotlib.pyplot as plt from torchvision.transforms import Resize import torchvision.transforms as T from torchvision.ops import masks_to_boxes from torchvision.transforms.functional import crop预处理明星照片 在导入所有必要的图像处理库和工具后就可以开始处理图像。以下三个函数 get_segmentation、get_masks 和 crop_images 用于分割并裁剪图片中的时尚单品以供后续使用。 import torch def get_segmentation(extractor, model, image):inputs extractor(imagesimage, return_tensorspt)outputs model(**inputs)logits outputs.logits.cpu()upsampled_logits nn.functional.interpolate(logits,sizeimage.size[::-1],modebilinear,align_cornersFalse,)pred_seg upsampled_logits.argmax(dim1)[0]return pred_seg# 返回两个 maskstensor列表和 obj_idsint # 来自 Hugging Face 的 mattmdjaga/segformer_b2_clothes 模型 def get_masks(segmentation):obj_ids torch.unique(segmentation)obj_ids obj_ids[1:]masks segmentation obj_ids[:, None, None]return masks, obj_idsdef crop_images(masks, obj_ids, img):boxes masks_to_boxes(masks)crop_boxes []for box in boxes:crop_box tensor([box[0], box[1], box[2]-box[0], box[3]-box[1]])crop_boxes.append(crop_box)preprocess T.Compose([T.Resize(size(256, 256)),T.ToTensor()])cropped_images {}for i in range(len(crop_boxes)):crop_box crop_boxes[i]cropped crop(img, crop_box[1].item(), crop_box[0].item(), crop_box[3].item(), crop_box[2].item())cropped_images[obj_ids[i].item()] preprocess(cropped)return cropped_images将图像数据存储到向量数据库中 选择开源向量数据库 Milvus 来存储图像数据。开始前需要先解压包含照片的 zip 文件并在 notebook 相同的根目录中创建照片文件夹。完成后可以运行以下代码来将图像数据存储在 Milvus 中。 import os image_paths [] for celeb in os.listdir(./photos):for image in os.listdir(f./photos/{celeb}/):image_paths.append(f./photos/{celeb}/{image})from milvus import default_server from pymilvus import utility, connections default_server.start() connections.connect(host127.0.0.1, portdefault_server.listen_port) DIMENSION 2048 BATCH_SIZE 128 COLLECTION_NAME fashion TOP_K 3 from pymilvus import FieldSchema, CollectionSchema, Collection, DataTypefields [FieldSchema(nameid, dtypeDataType.INT64, is_primaryTrue, auto_idTrue),FieldSchema(namefilepath, dtypeDataType.VARCHAR, max_length200),FieldSchema(namename, dtypeDataType.VARCHAR, max_length200),FieldSchema(nameseg_id, dtypeDataType.INT64),FieldSchema(nameembedding, dtypeDataType.FLOAT_VECTOR, dimDIMENSION) ]schema CollectionSchema(fieldsfields) collection Collection(nameCOLLECTION_NAME, schemaschema) index_params {index_type: IVF_FLAT,metric_type: L2,params: {nlist: 128}, } collection.create_index(field_nameembedding, index_paramsindex_params) collection.load()接着运行以下代码使用来自 Hugging Face 的 Nvidia ResNet 50 模型生成 embedding 向量。 # 如遇 SSL 证书 URL 错误请在导入 resnet50 模型前运行此步骤 import ssl ssl._create_default_https_context ssl._create_unverified_context # 并删除最后一层模型输出 embeddings_model torch.hub.load(NVIDIA/DeepLearningExamples:torchhub, nvidia_resnet50, pretrainedTrue) embeddings_model torch.nn.Sequential(*(list(embeddings_model.children())[:-1])) embeddings_model.eval()以下函数定义了如何将图像转换为向量并插入到 Milvus 向量数据库中。代码会循环遍历所有图像。注意如果需要开启 Milvus 全新特性动态 Schema需要修改代码。 def embed_insert(data, collection, model):with torch.no_grad():output model(torch.stack(data[0])).squeeze()collection.insert([data[1], data[2], data[3], output.tolist()]) from PIL import Image data_batch [[], [], [], []]for path in image_paths:image Image.open(path)path_split path.split(/)name .join(path_split[2].split(_))segmentation get_segmentation(extractor, model, image)masks, ids get_masks(segmentation)cropped_images crop_images(masks, ids, image)for key, image in cropped_images.items():data_batch[0].append(image)data_batch[1].append(path)data_batch[2].append(name)data_batch[3].append(key)if len(data_batch[0]) % BATCH_SIZE 0:embed_insert(data_batch, collection, embeddings_model)data_batch [[], [], [], []]if len(data_batch[0]) ! 0:embed_insert(data_batch, collection, embeddings_model)collection.flush()查询向量数据库 以下代码演示了如何使用输入图像查询 Milvus 向量数据库以检索和上传衣服图像最相似的的前三个结果。 def embed_search_images(data, model):with torch.no_grad():output model(torch.stack(data))if len(output) 1:return output.squeeze().tolist()else:return torch.flatten(output, start_dim1).tolist() # data_batch[0]是 tensor 列表 # data_batch[1]是图像文件的文件路径字符串 # data_batch[2]是图像中人物的名称列表字符串 # data_batch[3]是分割键值列表int data_batch [[], [], [], []]search_paths [./photos/Taylor_Swift/Taylor_Swift_3.jpg, ./photos/Taylor_Swift/Taylor_Swift_8.jpg]for path in search_paths:image Image.open(path)path_split path.split(/)name .join(path_split[2].split(_))segmentation get_segmentation(extractor, model, image)masks, ids get_masks(segmentation)cropped_images crop_images(masks, ids, image)for key, image in cropped_images.items():data_batch[0].append(image)data_batch[1].append(path)data_batch[2].append(name)data_batch[3].append(key)embeds embed_search_images(data_batch[0], embeddings_model) import time start time.time() res collection.search(embeds,anns_fieldembedding,param{metric_type: L2,params: {nprobe: 10}},limitTOP_K,output_fields[filepath]) finish time.time() print(finish - start) for index, result in enumerate(res):print(index)print(result)02.匹配更多风格标示每张图像中的时尚单品 除了直接使用上述代码查找与你着装风格最相似的 3 位明星以外我们还可以稍微修改一下代码拓展项目的应用场景。可以修改代码获取如下所示不包含边界框的图像。 接下来将为大家介绍如何修改上述代码寻找更多匹配的穿衣风格。 导入所需的图像处理库和工具 同样需要先导入所有必要的图像处理库。如果已经完成导入请跳过此步骤。 import torch from torch import nn, tensor from transformers import AutoFeatureExtractor, SegformerForSemanticSegmentation import matplotlib.pyplot as plt from torchvision.transforms import Resize import torchvision.transforms as T from torchvision.ops import masks_to_boxes from torchvision.transforms.functional import crop预处理图像 这个步骤涉及三个函数get_segmentation、get_masks 和 crop_images。 无需修改 get_segmentation 函数部分的代码。 对于 get_masks 函数只需要获取与 wanted 列表中的分割 ID 相对应的分割图像即可。 对 crop_image 函数做出更改。在前一篇文的教程中此函数返回裁剪图像的列表。这里我们进行一些调整使函返回三个对象裁剪图像对应的 embedding 向量、边界框在原始图像上的坐标列表以及分割 ID 列表。这一改动将转化 embedding 向量的步骤提前了。 wanted [1, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17] def get_segmentation(image):inputs extractor(imagesimage, return_tensorspt)outputs segmentation_model(**inputs)logits outputs.logits.cpu()upsampled_logits nn.functional.interpolate(logits,sizeimage.size[::-1],modebilinear,align_cornersFalse,)pred_seg upsampled_logits.argmax(dim1)[0]return pred_seg# returns two lists masks (tensor) and obj_ids (int) # mattmdjaga/segformer_b2_clothes from hugging face def get_masks(segmentation):obj_ids torch.unique(segmentation)obj_ids obj_ids[1:]wanted_ids [x.item() for x in obj_ids if x in wanted]wanted_ids torch.Tensor(wanted_ids)masks segmentation wanted_ids[:, None, None]return masks, obj_idsdef crop_images(masks, obj_ids, img):boxes masks_to_boxes(masks)crop_boxes []for box in boxes:crop_box tensor([box[0], box[1], box[2]-box[0], box[3]-box[1]])crop_boxes.append(crop_box)preprocess T.Compose([T.Resize(size(256, 256)),T.ToTensor()])cropped_images []seg_ids []for i in range(len(crop_boxes)):crop_box crop_boxes[i]cropped crop(img, crop_box[1].item(), crop_box[0].item(), crop_box[3].item(), crop_box[2].item())cropped_images.append(preprocess(cropped))seg_ids.append(obj_ids[i].item())with torch.no_grad():embeddings embeddings_model(torch.stack(cropped_images)).squeeze().tolist()return embeddings, boxes.tolist(), seg_ids有了图像数据之后就可以加载数据了。这一步骤需要使用到批量插入功能上篇文章的教程中也有涉及但不同点在于本文的教程中将数据作为 dictionary 列表一次性插入。这种插入方式更简洁同时还允许我们在插入数据时动态新增 Schema 字段。 for path in image_paths:image Image.open(path)path_split path.split(/)name .join(path_split[2].split(_))segmentation get_segmentation(image)masks, ids get_masks(segmentation)embeddings, crop_corners, seg_ids crop_images(masks, ids, image)inserts [{embedding: embeddings[x], seg_id: seg_ids[x], name: name, filepath: path, crop_corner: crop_corners[x]} for x in range(len(embeddings))]collection.insert(inserts)collection.flush()查询向量数据库 现在可以开始在向量数据库 Milvus 中查询数据了。本文与上篇文章的教程有以下几点区别 将一张图像中匹配的时尚单品数量限制到 5 件。 指定查询返回最相似的 3 张图像。 添加函数获取图片的色彩图。 随后在 matplotlib 中设置 figures 和 axes 代码会循环遍历所有图像将上文的 3 个函数应用到所有图像上以获取分割结果和边界框。 查询数据时可以根据每张图像中匹配的时尚单品数量来获得最相似的 3 张图像。 最终返回的结果图像中会带有标示出匹配单品的边界框。 from pprint import pprint from PIL import ImageDraw from collections import Counter import matplotlib.patches as patchesLIMIT 5 # 每张图像中匹配的时尚单品件数 CLOSEST 3 # 返回的最相似图像数量。CLOSEST Limitsearch_paths [./photos/Taylor_Swift/Taylor_Swift_2.jpg, ./photos/Jenna_Ortega/Jenna_Ortega_6.jpg] # Images to search fordef get_cmap(n, namehsv):Returns a function that maps each index in 0, 1, ..., n-1 to a distinctRGB color; the keyword argument name must be a standard mpl colormap name.Sourced from https://stackoverflow.com/questions/14720331/how-to-generate-random-colors-in-matplotlibreturn plt.cm.get_cmap(name, n)# 创建结果 subplot f, axarr plt.subplots(max(len(search_paths), 2), CLOSEST 1)for search_i, path in enumerate(search_paths):# Generate crops and embeddings for all items foundimage Image.open(path)segmentation get_segmentation(image)masks, ids get_masks(segmentation)embeddings, crop_corners, _ crop_images(masks, ids, image)# 生成色彩图cmap get_cmap(len(crop_corners))# Display the first box with image being searched foraxarr[search_i][0].imshow(image)axarr[search_i][0].set_title(Search Image)axarr[search_i][0].axis(off)for i, (x0, y0, x1, y1) in enumerate(crop_corners):rect patches.Rectangle((x0, y0), x1-x0, y1-y0, linewidth1, edgecolorcmap(i), facecolornone)axarr[search_i][0].add_patch(rect)# 查询向量数据库start time.time()res collection.search(embeddings,anns_fieldembedding,param{metric_type: L2,params: {nprobe: 10}, offset: 0},limitLIMIT,output_fields[filepath, crop_corner])finish time.time()print(Total Search Time: , finish - start)# 根据位置给查询结果增加不同的权重filepaths []for hits in res:seen set()for i, hit in enumerate(hits):if hit.entity.get(filepath) not in seen:seen.add(hit.entity.get(filepath))filepaths.extend([hit.entity.get(filepath) for _ in range(len(hits) - i)])# 查找排名最高的图像counts Counter(filepaths)most_common [path for path, _ in counts.most_common(CLOSEST)]# 提取每张图像中与查询图像相关的时尚单品matches {}for i, hits in enumerate(res):matches[i] {}tracker set(most_common)for hit in hits:if hit.entity.get(filepath) in tracker:matches[i][hit.entity.get(filepath)] hit.entity.get(crop_corner)tracker.remove( hit.entity.get(filepath))# 返回最相似图像# 返回与查询图像临近的图像image Image.open(res_path)axarr[search_i][res_i1].imshow(image)axarr[search_i][res_i1].set_title( .join(res_path.split(/)[2].split(_)))axarr[search_i][res_i1].axis(off) # 为匹配单品添加边界框if res_path in value:x0, y0, x1, y1 value[res_path]rect patches.Rectangle((x0, y0), x1-x0, y1-y0, linewidth1, edgecolorcmap(key), facecolornone)axarr[search_i][res_i1].add_patch(rect)运行上述步骤后结果如下所示 03.项目后续探索更多应用场景 欢迎大家基于本项目拓展更多、更丰富的应用场景例如 进一步延伸对比功能例如将不同的单品归类到一起。同样也可以上传更多图像到数据库中丰富查询结果。 将本项目转变为时尚探测仪或者时尚推荐系统。例如将明星图像替换成可购买的衣服图像。这样一来用户上传照片后可以查询与他的衣服风格相似的其他衣服。 还可以基于本项目搭建一个穿搭生成系统很多方法都可以实现这个应用但这个应用的搭建相对而言更有难度本文提供了一种思路系统可以根据用户上传的多张照片相应推荐穿搭。这里需要用到生成式图像模型从而提供穿搭建议。 总之不要限制你的想象力搭建更丰富的应用。Milvus 之类的向量数据库为相似性搜索应用提供了无限可能。 04.总结 本文教程中我们进一步拓展了时尚 AI 项目的应用场景。 本次教程使用了 Milvus 全新的 动态 Schema 功能筛选了分割 ID在返回图像中保留了边界框。同时我们在查询中指定 Milvus 根据每张图像中匹配的时尚单品件数返回最相似的 3 张图像。Milvus 全新的动态 Schema 功能支持在上传数据时添加新的字段改变了我们批量上传数据的方式。使用这个功能后在上传数据时无需改动 Schema 即可添加裁剪。在图像预处理步骤中剔除了一些识别到的非着装类元素。同时本教程保留了边界框将转化向量的步骤提前至了裁剪图片的步骤。 当然通过进一步调整代码我们还可以搭建更多相关应用例如时尚推荐系统、帮助用户搭配着装的系统甚至是生成式的时尚 AI 应用 「寻找 AIGC 时代的 CVP 实践之星」 专题活动即将启动 Zilliz 将联合国内头部大模型厂商一同甄选应用场景 由双方提供向量数据库与大模型顶级技术专家为用户赋能一同打磨应用提升落地效果赋能业务本身。 如果你的应用也适合 CVP 框架且正为应用落地和实际效果发愁可直接申请参与活动获得最专业的帮助和指导联系邮箱为 businesszilliz.com。 本文由 mdnice 多平台发布
http://www.hkea.cn/news/14347502/

相关文章:

  • 企业内部系统网站制作photoshop手机版在线使用
  • 做家教网站赚钱么北京网站高端建设
  • 做网站的工资辽阳网站网站建设
  • 公司网站建设教程综合性门户网站是什么意思
  • 天津智能网站建设哪里有现在哪个公司家庭网络好用
  • 宁波网站推广优化公司怎么样海淀商城网站建设
  • 网站片头怎么做济宁住房和城乡建设厅网站
  • asp企业网站源码下载mugeda做网站
  • dedecms教育h5网站模板优质龙岗网站建设
  • 网站后台无法上传本地图片专门做家具的网站
  • 安徽建筑大学城市建设学院网站电商网络推广怎么做
  • 整站seo哪家服务好龙华网站建设的软件
  • seo批量建站大连网站建设方案
  • 唐山做网站汉狮网络网站弹出式链接后台怎么做
  • 硅藻泥网站怎么做上海公司注册名字查询网
  • 胶州网站建设dch100小程序订单管理系统
  • 浙江网站做网站都有备案吗
  • 网站内链结构是什么意思产品怎么做推广和宣传
  • 手机如何制作网站源码如何做全网营销推广
  • 做catalog的免费网站中国铁路建设行业协会网站
  • 网站建设基础流程为什么检测行业不能用网站做
  • 个人网站建设一般流程桂林网站推广
  • 哪里做网站优化软件开发公司账务处理
  • 网站建站的基本步骤如何做html网站
  • 企业门户网站模式平面广告设计专业
  • 网站开发不足之处uniapp开发者中心
  • jsp网站开发步骤dz论坛如何seo
  • 公司手机网站开发深圳航空公司官方网站
  • 免费python在线正常网站关键词指数
  • 甘肃住房与城乡建设厅网站品牌网站策划书