微软AI系列 C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度

news2024/11/27 7:36:32

在C#中实现相似度计算涉及到加载图像、使用预训练的模型提取特征以及计算相似度。你可以使用.NET中的深度学习库如TensorFlow.NET来加载预训练模型,提取特征,并进行相似度计算。

以下是一个使用TensorFlow.NET的示例:

using System;
using TensorFlow;
using TensorFlow.Image;

class Program
{
    static void Main(string[] args)
    {
        // 载入模型
        var model = new ResNet50();

        // 加载图像
        var image1 = ImageUtil.LoadTensorFromImageFile("image1.jpg");
        var image2 = ImageUtil.LoadTensorFromImageFile("image2.jpg");

        // 提取特征
        var feature1 = ExtractFeatures(image1, model);
        var feature2 = ExtractFeatures(image2, model);

        // 计算相似度
        var similarityScore = CalculateSimilarity(feature1, feature2);
        Console.WriteLine("图片相似度: " + similarityScore);
    }

    static TFTensor ExtractFeatures(TFTensor image, ResNet50 model)
    {
        // 预处理图像
        var processedImage = ImageUtil.ResizeAndCropCenter(image, model.InputHeight, model.InputWidth);
        processedImage = ImageUtil.Normalize(image, mean: model.Mean, std: model.Std);

        // 转换图像形状以匹配模型输入
        var reshapedImage = processedImage.Reshape(new long[] { 1, model.InputHeight, model.InputWidth, 3 });

        // 获取特征
        var features = model.Predict(reshapedImage);

        return features;
    }

    static double CalculateSimilarity(TFTensor feature1, TFTensor feature2)
    {
        // 使用余弦相似度计算特征之间的相似度
        var similarity = CosineSimilarity(feature1.ToArray<float>(), feature2.ToArray<float>());
        return similarity;
    }

    static double CosineSimilarity(float[] vector1, float[] vector2)
    {
        double dotProduct = 0.0;
        double magnitude1 = 0.0;
        double magnitude2 = 0.0;
        for (int i = 0; i < vector1.Length; i++)
        {
            dotProduct += vector1[i] * vector2[i];
            magnitude1 += Math.Pow(vector1[i], 2);
            magnitude2 += Math.Pow(vector2[i], 2);
        }
        magnitude1 = Math.Sqrt(magnitude1);
        magnitude2 = Math.Sqrt(magnitude2);
        return dotProduct / (magnitude1 * magnitude2);
    }
}

在这个示例中,我们使用了TensorFlow.NET库中的ResNet50模型来提取图像的特征表示。我们首先载入模型,然后加载图片并对其进行预处理,接着提取特征,并最后使用余弦相似度计算图片的相似度。

请确保在项目中包含了TensorFlow.NET的引用,并根据实际情况修改图片的路径以及模型的输入参数。

使用Python实现了同样的逻辑,可以对比 参考

import numpy as np
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.applications.resnet50 import preprocess_input
from sklearn.metrics.pairwise import cosine_similarity

# 加载预训练的ResNet50模型
model = ResNet50(weights='imagenet', include_top=False, pooling='avg')

# 加载并预处理图像
def preprocess_image(img_path):
    img = image.load_img(img_path, target_size=(224, 224))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    return x

# 提取图像的特征向量
def extract_features(img_path, model):
    img = preprocess_image(img_path)
    features = model.predict(img)
    return features.flatten()

# 图像路径
image1_path = '/Users/AI/pythonsamples-main/ML/CNN(卷积神经网络)/ImageVector/houge.jpg'
image2_path = '/Users/AI/pythonsamples-main/ML/CNN(卷积神经网络)/ImageVector/zhipiao.jpg'

# 提取特征向量
features1 = extract_features(image1_path, model)
features2 = extract_features(image2_path, model)

# 计算余弦相似度
similarity = cosine_similarity([features1], [features2])[0][0]
print("相似度:", similarity)

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1530632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十二 超级数据查看器 讲解稿 详情7 其他功能

十二 超级数据查看器 讲解稿 详情7 其他功能 点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 ​ 讲解稿全文&#xff1a; 其他操作&#xff0c;主要用来完成替换和批量修改&#xff0c; 这里&#xff0c;我们想给成语字段增…

HarmonyOS系统开发ArkTS常用组件文本及参数(五)

目录 一、Text组件 1、Text组件案例 二、Text组件参数 1、string字符串类型 2、Resources类型 2.1、resources中内容配置 base/element/string.json 中的内容 zh_US/element/string.json 中的内容 es_US/element/string.json 中的内容 2.2、环境适配 适配英文 适配中文…

2022年安徽省职业院校技能大赛 (高职组)“云计算”赛项样卷

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 第一场次&#xff1a;私有云(5…

云服务器2核4g能支持多少人同时访问?腾讯云和阿里云PK

腾讯云轻量应用服务器2核4G5M配置性能测评&#xff0c;腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;并发数10&#xff0c;支持每天5000IP人数访问&#xff0c;腾讯云百科txybk.com整理2核4G服务器支持多少人同时在线&#xff1f;并发数测试、CPU性能、内存性能、…

【HMM】Hidden Markov Model

文章目录 1 HMM 的概念1.1 引入1.1.1 Markov property1.1.2 Markov chain1.1.3 一阶离散马尔可夫模型 1.2 HMM 的定义1.3 观测序列的生成过程1.4 HMM 的 3 个基本问题 2 三个基本问题的解法2.1 概率计算算法2.1.1 直接计算法2.1.2 向前算法2.1.3 向后算法2.1.4 一些概率与期望值…

基于springboot+vue的智慧生活商城系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

反射与串扰

一、 反射 原因&#xff1a;由于AD采集端与传感器端和双绞线的阻抗不匹配而导致待测信号在AD处反射叠加&#xff1b; 解决办法&#xff1a;1、对AD采集端和炮榄传感器端进行合适于炮榄的阻抗匹配。具体来说可 以在AD采集端并联一个匹配电阻&#xff0c;电阻的阻值需要和传输线…

免费录音软件大集合,轻松录制高品质音频

“有没有免费的录音软件推荐呀&#xff1f;最近我在制作一个关于环境保护的宣传片&#xff0c;需要录制一些大自然的声音。但是我发现自己并不擅长录音&#xff0c;甚至不知道如何开始。希望有人能推荐一些免费且易用的录音软件&#xff0c;感激不尽&#xff01;” 在当今信息…

保护王国的钥匙:探索特权访问管理 (PAM) 的深度

在零信任架构的范例中&#xff0c;特权访问管理&#xff08;PAM&#xff09;正在成为网络安全策略的关键组成部分&#xff0c;旨在控制和监控组织内的特权访问。本文深入探讨了 PAM 在现代网络安全中的关键作用&#xff0c;探讨了其原理、实施策略以及特权访问的演变格局。 什么…

Czkawka重复文件查找工具

分享一款重复文件查找工具&#xff0c;Czkawka是一款简单、快速且免费的用于查找重复项、空文件夹、相似图像等的多功能的应用程序。可以从计算机中删除不必要的文件。 软件特色&#xff1a; 用内存安全的 Rust 编写&#xff0c;惊人的快 – 由于使用了或多或少的高级算法和多线…

【Java常用API】正则表达式练习

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

【Auth Proxy】为你的 Web 服务上把锁

Auth Proxy 一个极简的用于 Web 服务鉴权的反向代理服务 极其简约的 UI对你的真实服务无任何侵入性支持容器部署&#xff0c;Docker Image 优化到不能再小&#xff08;不到 9MB&#xff09;GitHub&#xff1a;https://github.com/wengchaoxi/auth-proxy 效果 我在 http://lo…

一文读懂NAS存储:从零开始的存储“神器”

目录 一、初识NAS&#xff1a;它是何方神圣&#xff1f; 二、NAS存储的特点 三、NAS的工作原理简述 四、NAS的应用场景介绍 五、NAS与其他存储的区别 今天我们要揭开神秘面纱的是一个名为“NAS”的存储设备&#xff0c;它就像是你家中的私人云端资料库&#xff0c;帮你轻松…

【AIGC】全球首位AI软件工程师 Devin,程序员们真的会失业吗

文章目录 强烈推荐推荐一&#xff1a;人工智能网站推荐二&#xff1a;人工智能工具 Devin的诞生Devin的特点和能力Devin如何工作&#xff1f;程序员会彻底消失吗&#xff1f;总结强烈推荐推荐一&#xff1a;人工智能网站推荐二&#xff1a;人工智能工具 专栏集锦写在最后 强烈推…

【论文速读】| 增强静态分析以实现实用漏洞检测:一种集成大语言模型的方法

本次分享论文为&#xff1a;Enhancing Static Analysis for Practical Bug Detection: An LLM-Integrated Approach 基本信息 原文作者&#xff1a;Haonan Li, Yu Hao, Yizhuo Zhai, Zhiyun Qian 作者单位&#xff1a;加州大学河滨分校 关键词&#xff1a;静态分析、错误检测…

Linux hook系统调用使你文件无法删除

文章目录 前言一、什么是hook技术二、Linux hook种类三、系统调用表hook3.1 查看删除文件用到系统调用3.2 获取系统调用函数3.3 编写hook函数3.4 替换hook函数3.5 测试 参考资料 前言 hook技术在Linux系统安全领域有着广泛的应用&#xff0c;例如通过hook技术可以劫持删除文件…

Regex正则表达式 --java学习笔记

正则表达式 由一些特定字符组成&#xff0c;代表的是一个规则作用一&#xff1a;校验数据格式是否合法作用二&#xff1a;在一段文本中查找满足要求的内容 String提供了一个匹配正则表达式的方法 public boolean matches&#xff08;String regex&#xff08;正则表达式&…

高校|政务|医院|集团等网站站群建设要怎么做

网站站群集约化系统&#xff0c;建立统一部署、统一标准、统一规范、统一管理、统一安全体系、支持移动终端访问的“门户网站群”&#xff0c;建设以高校/集团/医院/门户网站为主站&#xff0c;以部门、院系、子公司及其应用为基础支撑的若干子站&#xff0c;形成若干主站子站以…

python3入门机器学习,知识点全面总结与代码实操示例

目录 写在前面的话 一、机器学习的基本任务与方法分类 机器学习的概念和定义 基本任务 二分类任务&#xff08;Binary Classification&#xff09;&#xff1a; 多分类任务&#xff08;Multi-class Classification&#xff09;&#xff1a; 多标签分类任务&#xff08;Mu…

第二证券股市指南:如何看懂股票的量价关系?

股票成交量是指生意日当天个股成交的股数&#xff0c;股票成交量越大&#xff0c;说明当天股票生意比较生动&#xff0c;商场上的流动资金增加&#xff0c;股票后期上涨的或许性加大。成交量越小&#xff0c;说明个股当天生意比较低迷&#xff0c;缺少出资者的注重。所以一般情…