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

优秀网站设计案例中国爱城市网app官方下载

优秀网站设计案例中国,爱城市网app官方下载,计算机专业主要学什么女生,高端私人订制网站建设文章内容结构#xff1a; 一. 先介绍什么是Annoy算法。 二. 用Annoy算法建树的完整代码。 三. 用Annoy建树后的树特征匹配聚类归类图像。 一. 先介绍什么是Annoy算法 下面的文章链接将Annoy算法讲解的很详细#xff0c;这里就不再做过多原理的分析了#xff0c;想详细了解…文章内容结构 一. 先介绍什么是Annoy算法。 二. 用Annoy算法建树的完整代码。 三. 用Annoy建树后的树特征匹配聚类归类图像。 一. 先介绍什么是Annoy算法 下面的文章链接将Annoy算法讲解的很详细这里就不再做过多原理的分析了想详细了解的可以看看这篇文章内容。 https://zhuanlan.zhihu.com/p/148819536 总的来说 1通过多次递归迭代建立一个二叉树以二叉树的方式提升数据聚类和搜索速度但会损失一些精度。 2建树过程相对比较耗时但建树只需要一次部署到线上或者其他设备上能无数次聚类搜索。(类似于人脸识别的人脸底库) 注 这里全部是个人经验能提升样本标注和清洗效率不是标准的数据处理方式希望对您有帮助。 -------- 二. 用Annoy算法建树的完整代码 对底库聚类建树生成Annoy树特征文件。  下面参数说明 最佳聚类类别数量 是根据《三.以聚类的方式清洗图像数据集找到最佳聚类类别数 (图像特征提取Kmeans聚类)》获取得到 BEST_NUM_CLUSTERS 2501图像特征提取后的向量维度是pt或者onnx模型输出的类别数 FEATURE_DIM 190推断图像尺寸是根据训练pt模型时输入的图像尺寸大小 CLASSIFY_SIZE 224 以下是正式的代码 import os import cv2 import numpy as np from PIL import Image import onnxruntime as ort import shutil from sklearn.cluster import KMeans from sklearn.preprocessing import Normalizer from tqdm import tqdm import math import matplotlib.pyplot as plt# 图像预处理函数 def preprocess_image(image_path):roi_frame cv2.imread(image_path)width roi_frame.shape[1]height roi_frame.shape[0]if (width ! CLASSIFY_SIZE) or (height ! CLASSIFY_SIZE) :if width height:# 将图像逆时针旋转90度roi_frame cv2.rotate(roi_frame, cv2.ROTATE_90_COUNTERCLOCKWISE)new_height CLASSIFY_SIZEnew_width int(roi_frame.shape[1] * (CLASSIFY_SIZE / roi_frame.shape[0]))roi_frame cv2.resize(roi_frame, (new_width, new_height))# 计算上下左右漂移量y_offset (CLASSIFY_SIZE - roi_frame.shape[0]) // 2x_offset (CLASSIFY_SIZE - roi_frame.shape[1]) // 2gray_image np.full((CLASSIFY_SIZE, CLASSIFY_SIZE, 3), 128, dtypenp.uint8)# 将调整大小后的目标图像放置到灰度图上gray_image[y_offset:y_offset roi_frame.shape[0], x_offset:x_offset roi_frame.shape[1]] roi_frame# # 显示结果# cv2.imshow(gray_image, gray_image)# cv2.waitKey(1)# 将图像转为 rgbgray_image cv2.cvtColor(gray_image, cv2.COLOR_BGR2RGB)else:gray_image cv2.cvtColor(roi_frame, cv2.COLOR_BGR2RGB)img_np np.array(gray_image).transpose(2, 0, 1).astype(np.float32)# 假设模型需要[0,1]归一化img_np img_np / 255.0# 均值 方差mean np.array([0.485, 0.456, 0.406],dtypenp.float32).reshape(3, 1, 1)std np.array([0.229, 0.224, 0.225],dtypenp.float32).reshape(3, 1, 1)img_np (img_np - mean)/stdreturn np.expand_dims(img_np, axis0)# 卸载 onnxruntime # 安装 pip install onnxruntime-gpu def get_onnx_providers():# 检查是否安装了GPU版本的ONNX Runtimeall_provider ort.get_available_providers()if CUDAExecutionProvider in all_provider:providers [(CUDAExecutionProvider, {device_id: 0,arena_extend_strategy: kNextPowerOfTwo,gpu_mem_limit: 6 * 1024 * 1024 * 1024, # 限制GPU内存使用为2GBcudnn_conv_algo_search: EXHAUSTIVE,do_copy_in_default_stream: True,}),CPUExecutionProvider]print(检测到NVIDIA GPU使用CUDA加速)return providerselse:print(未检测到NVIDIA GPU使用CPU)return [CPUExecutionProvider]if __name__ __main__:root_path /home/xxx/Download# ONNX模型路径MODEL_PATH os.path.join(root_path, 08以图搜图_找相似度/98_weights/classify_modified_model_224.onnx)# 图像文件夹路径IMAGE_DIR os.path.join(root_path, 08以图搜图_找相似度/99_test_datasets/8_bcd已验收/8)# 分类结果输出路径OUTPUT_DIR os.path.join(root_path, 08以图搜图_找相似度/99_test_datasets/8_bcd已验收/8_kmeans_besk_k_classify)# 保存ann建树文件路径ANNOY_PATH 08以图搜图_找相似度/01kmeans和DBscan/kmeans/annoy_cls.ann# 最佳聚类类别数量(用kmeans和inner找到的)BEST_NUM_CLUSTERS 2501# 图像特征提取后的向量维度FEATURE_DIM 190 # 根据自己的模型输出维度修改# 推断图像尺寸CLASSIFY_SIZE 224# 手动划分分类数量# NUM_CLUSTERS 3000# 创建输出文件夹os.makedirs(OUTPUT_DIR, exist_okTrue)print(ONNX Runtime版本:, ort.__version__)print(可用执行器:, ort.get_available_providers())# 可用执行器: [TensorrtExecutionProvider, CUDAExecutionProvider, AzureExecutionProvider, CPUExecutionProvider]# 加载ONNX模型动态获取输入/输出名称ort_session ort.InferenceSession(MODEL_PATH,providersget_onnx_providers())# 确保输出名称正确input_name ort_session.get_inputs()[0].nameoutput_name ort_session.get_outputs()[0].namefrom annoy import AnnoyIndext AnnoyIndex(FEATURE_DIM, metricangular) # FEATURE_DIM是图像特征提取后的向量维度# 提取特征向量features []image_paths []print(开始对所有图像推理, 提取特征)for index, filename in tqdm(enumerate(os.listdir(IMAGE_DIR))):if filename.lower().endswith((.png, .jpg, .jpeg)):path os.path.join(IMAGE_DIR, filename)try:# 前处理input_tensor preprocess_image(path)# 推断feature ort_session.run([output_name], {input_name: input_tensor})[0]# 确保特征展平为1D, 190维度features.append(feature.reshape(-1))image_paths.append(path)# 增加到Annoy树t.add_item(index, feature.reshape(-1))except Exception as e:print(fError processing {filename}: {str(e)})t.build(BEST_NUM_CLUSTERS) # 根据kmeans聚类找到最佳的聚类类别数量t.save(ANNOY_PATH)print(提取特征结束)print(Annoy建树结束)生成建树annoy_cls.ann文件。 三. 用Annoy建树后的树特征匹配聚类归类图像 使用流程 1加载ann建树文件 2提取单张A图像特征 3单张A图像特征与ann建树文件的特征进行比对找到ann建树文件里面的与A图像特征相似的TOP_K的底库图像拷贝走或者移动走。 import os import cv2 import numpy as np from PIL import Image import onnxruntime as ort import shutil from sklearn.cluster import KMeans from sklearn.preprocessing import Normalizer from tqdm import tqdm import math import matplotlib.pyplot as plt# 图像预处理函数 def preprocess_image(image_path):roi_frame cv2.imread(image_path)width roi_frame.shape[1]height roi_frame.shape[0]if (width ! CLASSIFY_SIZE) or (height ! CLASSIFY_SIZE) :if width height:# 将图像逆时针旋转90度roi_frame cv2.rotate(roi_frame, cv2.ROTATE_90_COUNTERCLOCKWISE)new_height CLASSIFY_SIZEnew_width int(roi_frame.shape[1] * (CLASSIFY_SIZE / roi_frame.shape[0]))roi_frame cv2.resize(roi_frame, (new_width, new_height))# 计算上下左右漂移量y_offset (CLASSIFY_SIZE - roi_frame.shape[0]) // 2x_offset (CLASSIFY_SIZE - roi_frame.shape[1]) // 2gray_image np.full((CLASSIFY_SIZE, CLASSIFY_SIZE, 3), 128, dtypenp.uint8)# 将调整大小后的目标图像放置到灰度图上gray_image[y_offset:y_offset roi_frame.shape[0], x_offset:x_offset roi_frame.shape[1]] roi_frame# # 显示结果# cv2.imshow(gray_image, gray_image)# cv2.waitKey(1)# 将图像转为 rgbgray_image cv2.cvtColor(gray_image, cv2.COLOR_BGR2RGB)else:gray_image cv2.cvtColor(roi_frame, cv2.COLOR_BGR2RGB)img_np np.array(gray_image).transpose(2, 0, 1).astype(np.float32)# 假设模型需要[0,1]归一化img_np img_np / 255.0# 均值 方差mean np.array([0.485, 0.456, 0.406],dtypenp.float32).reshape(3, 1, 1)std np.array([0.229, 0.224, 0.225],dtypenp.float32).reshape(3, 1, 1)img_np (img_np - mean)/stdreturn np.expand_dims(img_np, axis0)# todo # 卸载 onnxruntime # 安装 pip install onnxruntime-gpu def get_onnx_providers():# 检查是否安装了GPU版本的ONNX Runtimeall_provider ort.get_available_providers()if CUDAExecutionProvider in all_provider:providers [(CUDAExecutionProvider, {device_id: 0,arena_extend_strategy: kNextPowerOfTwo,gpu_mem_limit: 6 * 1024 * 1024 * 1024, # 限制GPU内存使用为2GBcudnn_conv_algo_search: EXHAUSTIVE,do_copy_in_default_stream: True,}),CPUExecutionProvider]print(检测到NVIDIA GPU使用CUDA加速)return providerselse:print(未检测到NVIDIA GPU使用CPU)return [CPUExecutionProvider]if __name__ __main__:root_path /home/xxx/Download# ONNX模型路径MODEL_PATH os.path.join(root_path, 08以图搜图_找相似度/98_weights/classify_modified_model_224.onnx)# 图像文件夹路径IMAGE_DIR os.path.join(root_path, 08以图搜图_找相似度/99_test_datasets/8_bcd已验收/8)# 分类结果输出路径OUTPUT_DIR os.path.join(root_path, 08以图搜图_找相似度/99_test_datasets/8_bcd已验收/8_kmeans_besk_k_classify)# 保存annoy建树路径ANNOY_PATH os.path.join(root_path, 08以图搜图_找相似度/01kmeans和DBscan/kmeans/annoy_cls.ann)# 最佳聚类类别数量BEST_NUM_CLUSTERS 2501# 图像特征提取后的向量维度FEATURE_DIM 190# 推断图像尺寸CLASSIFY_SIZE 224# 取top10TOP_K 10# 手动划分分类数量# NUM_CLUSTERS 3000# 创建输出文件夹os.makedirs(OUTPUT_DIR, exist_okTrue)print(ONNX Runtime版本:, ort.__version__)print(可用执行器:, ort.get_available_providers())# 可用执行器: [TensorrtExecutionProvider, CUDAExecutionProvider, AzureExecutionProvider, CPUExecutionProvider]# 加载ONNX模型动态获取输入/输出名称ort_session ort.InferenceSession(MODEL_PATH,providersget_onnx_providers())# 确保输出名称正确input_name ort_session.get_inputs()[0].nameoutput_name ort_session.get_outputs()[0].namefrom annoy import AnnoyIndexAnnoy_ AnnoyIndex(FEATURE_DIM, metricangular) # FEATURE_DIM是图像特征提取后的向量维度Annoy_.load(ANNOY_PATH) # 提取特征向量features []image_paths []# 获取所有图像路径for _, filename in tqdm(enumerate(os.listdir(IMAGE_DIR))):if filename.lower().endswith((.png, .jpg, .jpeg)):path os.path.join(IMAGE_DIR, filename)image_paths.append(path)print(开始对所有图像推理, 提取特征, 根据创建的树进行聚类)for _, filename in tqdm(enumerate(os.listdir(IMAGE_DIR))):if filename.lower().endswith((.png, .jpg, .jpeg)):path os.path.join(IMAGE_DIR, filename)try:# 前处理input_tensor preprocess_image(path)# 推断feature ort_session.run([output_name], {input_name: input_tensor})[0]# 确保特征展平为1D, 190维度features.append(feature.reshape(-1))# image_paths.append(path)# 取top10的相似图像similar_img_indices, similar_img_distancesAnnoy_.get_nns_by_vector(feature.reshape(-1), TOP_K, include_distancesTrue)print(similar_img_index:, similar_img_indices)print(similar_img_distance:, similar_img_distances)shutil.copy(path, os.path.join(OUTPUT_DIR,11))# 移动相似图像到输出目录for idx in similar_img_indices:similar_image_path image_paths[idx]# shutil.move(similar_image_path, OUTPUT_DIR)shutil.copy(similar_image_path, OUTPUT_DIR)except Exception as e:print(fError processing {filename}: {str(e)})print(提取特征结束)print(根据Annoy数特征聚类归类图像结束)
http://www.zqtcl.cn/news/402861/

相关文章:

  • 软件下载网站排行住房和城乡建设部办公厅网站
  • 贵阳网站建设需要多少钱百度资源搜索平台
  • 做安全防护信息的网站wordpress初始密码
  • 广东企业网站seo哪里好微信公众号怎么创建文章
  • 建行网站登录不了wordpress好主题
  • 南屏网站建设湖北省建设厅的网站
  • 有没有做花卉种子的网站啊正规网站建设服务
  • 长沙网站建设公司招聘那个建设网站好
  • 网站开发视频下载网站优化关键词排名自己怎么做
  • 网站建设 流程咸宁网站建设哪家好
  • 建站公司兴田德润实惠钦州建设局网站
  • 高新区免费网站建设旅游网站开发设计与实现
  • 怎样做才能让网站帮忙送东西线上推广方案怎么做
  • 服装公司网站网页设计友情链接交换网站
  • 公司建设网站需要去哪报备网页挂马
  • 做网站需要代码吗秦皇岛在哪里
  • 番禺网站设计公司万网查询全部域名
  • 电子商务网站建设与运营的试题集团高端网站
  • 天津网站建设电话网页制作与设计调试分析
  • 深圳中建南方建设集团网站自己的网站建设
  • 有些网站怎么经常换域名北京宣传片制作公司
  • 网站改版降权多久恢复经典网站
  • 南昌建网站的公司中国专业做鞋子的网站
  • 做100个垂直网站网站建设外包
  • 网站开发图片素材营销软文的范文
  • 手机网站免费建设排行湖南公司响应式网站建设价位
  • 专业网站设计制作价格wordpress 动画特效
  • 如何找企业联系做网站网站内容建设的核心和根本是
  • 网站制作找如何判断一个网站是恶意网站
  • dedecms 网站导航建设自己网站的流程图