使用cnn提取特征,图像相似度对比。pytorch推理的时候报内存不足的问题(代码片段)

东东就是我 东东就是我     2023-01-27     540

关键词:

with torch.no_grad()
https://blog.csdn.net/CRDarwin/article/details/119943128


# coding: utf-8
from PIL import Image
from torch.utils.data import Dataset,DataLoader
import torch.nn as nn
import torch
import torchvision
import torchvision.transforms as transforms
import numpy as np
import os

def cos_sim(a, b):
    """
    计算两个向量之间的余弦相似度
    """
    a = np.mat(a)
    b = np.mat(b)
    return float(a * b.T) / (np.linalg.norm(a) * np.linalg.norm(b))

class MyDataset(Dataset):
    def __init__(self, file_path,transform = None):
        file_name=os.listdir(file_path)
        imgs = []
        img_names = []
        for file in file_name:
            image_path=os.path.join(file_path,file)
            imgs.append(image_path)
            img_names.append(file)
        self.imgs = imgs
        self.img_names = img_names
        self.transform = transform
    def __getitem__(self, index):
        fn= self.imgs[index]
        img_name=self.img_names[index]
        img = Image.open(fn).convert('RGB')
        if self.transform is not None:
            img = self.transform(img)
        return img,img_name
    def __len__(self):
        return len(self.imgs)

file_path="F:/my_code/2021/sf/data/ICR_EXT/"
save_path="F:/my_code/2021/sf/data/s/"
preprocess = transforms.Compose([
    transforms.ToTensor(),
    transforms.Resize((512,640)),
])
mydata=MyDataset(file_path,transform=preprocess)
l=mydata.__len__()
mydata_loader=DataLoader(mydata,batch_size=32,shuffle=True)
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
model = torchvision.models.shufflenet_v2_x0_5(pretrained=True)
model.fc = nn.Sequential()
model.to(device)
model.eval()
img_names=[]
img_features = []
for image,img_name in mydata_loader:
    image = image.to(device, torch.float)
    img_names.append(img_name)
    with torch.no_grad():
        predictions = model(image)
    predictions.unsqueeze_(1)
    for t in predictions:
        img_features.append(t)
    print(len(img_features))
b = str(img_names)
b = b.replace('(', '')
b = b.replace(')', '')
img_names = list(eval(b))
torch.cat(img_features,dim=0)

dictionary = dict(zip( img_features,img_names))
result=[]
while len(dictionary)>0:
    imgf=list(dictionary.keys())[0]
    result.append(dictionary.get(imgf))
    dictionary.pop(imgf)
    for img_feature in list(dictionary.keys()):
        if cos_sim(imgf.tolist(),img_feature.tolist())>0.93:
            dictionary.pop(img_feature)

for image_name in result:
    image_path = os.path.join(file_path,image_name)
    image = Image.open(image_path)
    save_img_path= os.path.join(save_path,image_name)
    image.save(save_img_path)
print(result.__len__())








如何测量预训练模型(例如 vgg、resnet...)提取的图像特征之间的语义相似度?

】如何测量预训练模型(例如vgg、resnet...)提取的图像特征之间的语义相似度?【英文标题】:Howtomeasurethesemanticsimilaritiesamongimagefeaturesextractedbypre-trainedmodels(e.g.vgg,resnet...)?【发布时间】:2021-11-0522:47:18【问题描述】:据我所知... 查看详情

计算两个数组之间余弦相似度的正确方法?

...,该项目检测两个输入图像(手写签名)的一些特征,并使用余弦相似度比较这两个特征。这里当我指的是两个输入图像时,一个是原始图像,另一个是复制图像。假设我正在提取一张图像(原始图像)的15个这样的特征并将其... 查看详情

深度图像检测算法总结与对比

...dsemanticsegmentation技术路线:selectivesearch+CNN+SVMsStep1:候选框提取(selective search)训练:给定一张图片,利用seletivesearch方法从中提取出2000个候选框。由于候选框大小不一,考虑到后续CNN要求输入的图片大小统一,将2000个候选框全... 查看详情

基于特征点匹配的图像相似度算法之sift特征(代码片段)

...SSIM以及UQI等指标来计算图像之间的相似度。但是,在使用这些算法计算图像相似的时候两张图像的size必须一致,而且这些算法对于图像的旋转、缩放、平移、仿射变换以及光照强度等都是不鲁棒的。这篇文章我们来介绍... 查看详情

数据挖掘视觉模式挖掘:hog特征+余弦相似度/k-means聚类(代码片段)

1.实验概述本次实验使用的是VOC2012数据集,首先从图像中随机采样图像块,然后利用Hog方法提取图像块特征,最后采用余弦相似度和k-means聚类两种方法来挖掘视觉模式。2.数据集说明本次实验使用VOC2012数据集。VOC2012... 查看详情

基于特征点匹配的图像相似度算法之sift特征(代码片段)

...SSIM以及UQI等指标来计算图像之间的相似度。但是,在使用这些算法计算图像相似的时候两张图像的size必须一致,而且这些算法对于图像的旋转、缩放、平移、仿射变换以及光照强度等都是不鲁棒的。这篇文章我们来介绍... 查看详情

基于特征点匹配的图像相似度算法之sift特征(代码片段)

...SSIM以及UQI等指标来计算图像之间的相似度。但是,在使用这些算法计算图像相似的时候两张图像的size必须一致,而且这些算法对于图像的旋转、缩放、平移、仿射变换以及光照强度等都是不鲁棒的。这篇文章我们来介绍... 查看详情

有啥可以对比两张图片得出相似度的软件。

...照搜商品等。图片相似度对比,每种算法都会经过“特征提取”和“特征比对”两个步骤进行。第一步,缩小尺寸为8×8,以去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。第二步,简化... 查看详情

原来cnn是这样提取图像特征的。。。

...算——卷积操作开始。1.卷积操作假设有一个55的图像,使用一个33的卷积核(filter)进行卷积,得到一个3*3的矩阵(其实是FeatureMap,后面会讲),如下所示:下面的动图清楚地展示了如何进行卷积操作(其实就是简单的点乘运... 查看详情

cnn----卷积为何能提取图像特征

一、曲线过滤器二、过滤器作用于图像对于过滤器识别的特征,将计算得到很大的值不符合过滤器的特征,将得到很小的值三、高层特征对原图进行的第一次卷积,经过池化以后得到的特征图,是特征激活图。第二层的卷积,就... 查看详情

文本、语音相似度算法

...它的原理和视频图像相似度算法类似,将一系列的向量,特征,权重,进行合并,然后降维降到一维,其实这个算法也就是采用降维技术,将所有的特征都用一个唯一标识来表示.然后这个标识是经过这个算法内部的计算,再利用海明距离... 查看详情

opencv进行图像相似度对比的几种办法

1、直方图方法方法描述:有两幅图像patch(当然也可是整幅图像),分别计算两幅图像的直方图,并将直方图进行归一化,然后按照某种距离度量的标准进行相似度的测量。方法的思想:基于简单的向量相似度来对图像相似度进行... 查看详情

图像相似度计算【python】

...图片的图像颜色分布直方图,N为颜色空间样点数。这里使用分块的方法计算相似度,用以提高各部分的特征,防止图片颜色相似导致计算的相似度高。—————————————————————————————————... 查看详情

在 CNN 提取特征之上使用 SVM - 如何进行多类分类?

】在CNN提取特征之上使用SVM-如何进行多类分类?【英文标题】:UsingSVMontopofCNNextractedfeatures-HowtodoMulti-Classclassification?【发布时间】:2019-06-0906:37:03【问题描述】:在MNIST数据集中,有10个分类输出。现在,我喜欢使用SVM作为分类... 查看详情

基于pytorch使用实现cnn如何使用pytorch构建cnn卷积神经网络(代码片段)

基于pytorch使用实现CNN如何使用pytorch构建CNN卷积神经网络本文是一个基于pytorch使用CNN在生物信息学上进行位点预测的例子基于pytorch实现CNN,基于CNN进行位点预测,将CNN代码进行封装,可以非常简单的使用代码,基... 查看详情

cnn:

(1)卷积:对图像元素的矩阵变换,是提取图像特征的方法,多种卷积核可以提取多种特征。一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。一次卷积运算提取的特征往往是局部的,难以提取出比较全局的特征,... 查看详情

如何存储 CNN 提取的特征来训练 SVM 分类器

...naSVMclassifier【发布时间】:2018-10-2519:26:28【问题描述】:使用如下所示的2DCNN从图像中提取特征,我如何存储提取的特征以训练SVM对特征进行分类?型号:model=Sequential()model.add(Conv2D(32,(3,3),input_shape=(3,1 查看详情

图像特征点提取方法对比及特征点匹配方法

特征点提取方法官网的文档对特征的理解 UnderstandingFeaturesharris特征点 HarrisCornerDetectionShi-Tomasi特征点 Shi-TomasiCornerDetector&GoodFeaturestoTrackFAST特征点 FASTAlgorithmforCornerDetectionSIFT特征点& 查看详情