亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
簡(jiǎn)介
對(duì)比損失函數(shù)
在 PyTorch 中的孿生神經(jīng)網(wǎng)絡(luò)
1. 數(shù)據(jù)集創(chuàng)建
總結(jié)
首頁(yè) 科技週邊 人工智慧 探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

Apr 02, 2024 am 11:37 AM
人工智慧 神經(jīng)網(wǎng)路 siamese

簡(jiǎn)介

在電腦視覺(jué)領(lǐng)域,準(zhǔn)確地測(cè)量影像相似性是一項(xiàng)關(guān)鍵任務(wù),具有廣泛的實(shí)際應(yīng)用。從圖像搜尋引擎到人臉辨識(shí)系統(tǒng)和基於內(nèi)容的推薦系統(tǒng),有效比較和尋找相似圖像的能力非常重要。 Siamese網(wǎng)路與對(duì)比損失相結(jié)合,為數(shù)據(jù)驅(qū)動(dòng)方式學(xué)習(xí)影像相似性提供了強(qiáng)大的框架。 在這篇文章中,我們將深入了解Siamese網(wǎng)路的細(xì)節(jié),探討對(duì)比損失的概念,並探討這兩個(gè)組件如何共同運(yùn)作以創(chuàng)建一個(gè)有效的圖像相似性模型。 首先,Siamese網(wǎng)路由兩個(gè)相同的子網(wǎng)路組成,這兩個(gè)子網(wǎng)路共享相同的權(quán)重和參數(shù)。每個(gè)子網(wǎng)路將輸入圖像編碼為特徵向量,這些向量捕捉了圖像的關(guān)鍵特徵。 然後,我們使用對(duì)比損失來(lái)度量?jī)蓚€(gè)輸入影像之間的相似性。對(duì)比損失基於歐氏距離測(cè)量,並採(cǎi)用了一個(gè)限制項(xiàng),以確保同類樣本之間的距離小於不同類樣本之間的距離。 透過(guò)反向傳播和最佳化演算法,Siamese網(wǎng)路能夠自動(dòng)學(xué)習(xí)特徵表示,使得相似影像的能力非常重要。這種模型的創(chuàng)新之處在於它能夠在訓(xùn)練集中學(xué)習(xí)相對(duì)較少的樣本,並透過(guò)遷移學(xué)習(xí)將

探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

Siamese神經(jīng)網(wǎng)路是一類既在比較和測(cè)量輸入樣本對(duì)之間相似性的神經(jīng)網(wǎng)路架構(gòu)。術(shù)語(yǔ)「Siamese」源自於網(wǎng)路體系結(jié)構(gòu)包含兩個(gè)相同結(jié)構(gòu)且共享相同權(quán)重集的孿生神經(jīng)網(wǎng)路的概念。每個(gè)網(wǎng)路處理來(lái)自對(duì)應(yīng)的輸入樣本之一,並透過(guò)比較它們的輸出來(lái)確定它們之間的相似性或不相似性。 在Siamese網(wǎng)路中的每個(gè)樣本處理對(duì)應(yīng)輸入樣本的輸入樣本之間的相似性或不相似性。這種相似性度量可以透過(guò)比較它們的輸出結(jié)果來(lái)確定。 Siamese網(wǎng)路通常用於識(shí)別和驗(yàn)證任務(wù),如人臉辨識(shí)、指紋辨識(shí)和簽章驗(yàn)證等。它可以自動(dòng)學(xué)習(xí)輸入樣本之間的相似性,並根據(jù)訓(xùn)練資料進(jìn)行決策。 透過(guò)Siamese網(wǎng)絡(luò),每個(gè)網(wǎng)路處理來(lái)自對(duì)應(yīng)的輸入樣本之一,並透過(guò)比較它們的輸出來(lái)確定它們之間的相似性或不相

探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

##什麼是Siamese神經(jīng)網(wǎng)路

探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

#Siamese網(wǎng)路的主要?jiǎng)訖C(jī)是學(xué)習(xí)輸入樣本的有意義的表示,以捕捉它們的相似性比較所需的基本特徵。這些網(wǎng)路在直接使用標(biāo)記範(fàn)例進(jìn)行訓(xùn)練有限或困難 的任務(wù)中表現(xiàn)出色,因?yàn)樗鼈兛梢詫W(xué)會(huì)劃分相似和不相似的實(shí)例,而無(wú)需顯示類別標(biāo)籤。 Siamese網(wǎng)路的架構(gòu)通常包括三個(gè)主要元件:共享網(wǎng)路、相似度量度和對(duì)比損失函數(shù)。 共享網(wǎng)路通常由卷積和全連接層組成,用於從輸入中提取特徵表示。它們可以是經(jīng)過(guò)預(yù)先訓(xùn)練的網(wǎng)絡(luò),如VGG、ResNet等,也可以是從頭開(kāi)始訓(xùn)練的網(wǎng)路。 相似度度量模組用於計(jì)算兩個(gè)輸入樣本之間的相似度或距離。常用的測(cè)量方法包括歐氏距離、餘弦相似度等。 對(duì)比損失函數(shù)用於衡量?jī)蓚€(gè)輸入樣本之間的相似性或差異性。常用的損失函數(shù)是對(duì)比損失,它透過(guò)最小化相似樣本之間的距離和最大化不相

  • 共享網(wǎng)絡(luò):共享網(wǎng)絡(luò)是Siamese架構(gòu)的核心組件。它負(fù)責(zé)從輸入樣本中提取有意義的特征表示。共享網(wǎng)絡(luò)包含神經(jīng)單元的層,例如卷積層或全連接層,用于處理輸入數(shù)據(jù)并生成固定長(zhǎng)度的embedding向量。通過(guò)在孿生網(wǎng)絡(luò)之間共享相同的權(quán)重,模型學(xué)會(huì)為相似的輸入提取相似的特征,從而實(shí)現(xiàn)有效的比較。
  • 相似性度:一旦輸入由共享網(wǎng)絡(luò)處理,就會(huì)使用相似性度量來(lái)比較生成的embedding,并測(cè)量?jī)蓚€(gè)輸入之間的相似性或不相似性。相似度度量的選擇取決于特定任務(wù)和輸入數(shù)據(jù)的性質(zhì)。常見(jiàn)的相似性度量包括歐氏距離、余弦相似度或相關(guān)系數(shù)。相似性度量量化了embedding之間的距離或相關(guān)性,并提供了輸入樣本之間相似性的度量。
  • 對(duì)比損失函數(shù):為了訓(xùn)練Siamese網(wǎng)絡(luò),采用了對(duì)比損失函數(shù)。對(duì)比損失函數(shù)鼓勵(lì)網(wǎng)絡(luò)為相似的輸入生成距離更近的embedding,而為不相似的輸入生成距離更遠(yuǎn)的embedding。當(dāng)相似對(duì)之間的距離超過(guò)一定閾值或不相似對(duì)之間的距離低于另一個(gè)閾值時(shí),對(duì)比損失函數(shù)對(duì)模型進(jìn)行懲罰。對(duì)比損失函數(shù)的確切制定取決于所選的相似性度量和相似對(duì)與不相似對(duì)之間的期望邊際。

在訓(xùn)練過(guò)程中,Siamese網(wǎng)絡(luò)學(xué)會(huì)優(yōu)化其參數(shù)以最小化對(duì)比損失,并生成能夠有效捕捉輸入數(shù)據(jù)的相似性結(jié)構(gòu)的判別性embedding。

對(duì)比損失函數(shù)

對(duì)比損失是Siamese網(wǎng)絡(luò)中常用于學(xué)習(xí)輸入樣本對(duì)之間相似性或不相似性的損失函數(shù)。它旨在以這樣一種方式優(yōu)化網(wǎng)絡(luò)的參數(shù),即相似的輸入具有在特征空間中更接近的embedding,而不相似的輸入則被推到更遠(yuǎn)的位置。通過(guò)最小化對(duì)比損失,網(wǎng)絡(luò)學(xué)會(huì)生成能夠有效捕捉輸入數(shù)據(jù)的相似性結(jié)構(gòu)的embedding。

為了詳細(xì)了解對(duì)比損失函數(shù),讓我們將其分解為其關(guān)鍵組件和步驟:

  • 輸入對(duì):對(duì)比損失函數(shù)作用于輸入樣本對(duì),其中每對(duì)包含一個(gè)相似或正例和一個(gè)不相似或負(fù)例。這些對(duì)通常在訓(xùn)練過(guò)程中生成,其中正例對(duì)代表相似實(shí)例,而負(fù)例對(duì)代表不相似實(shí)例。
  • embedding:Siamese網(wǎng)絡(luò)通過(guò)共享網(wǎng)絡(luò)處理每個(gè)輸入樣本,為配對(duì)中的兩個(gè)樣本生成embedding向量。這些embedding是固定長(zhǎng)度的表示,捕捉輸入樣本的基本特征。
  • 距離度量:使用距離度量,如歐氏距離或余弦相似度,來(lái)衡量生成的embedding之間的不相似性或相似性。距離度量的選擇取決于輸入數(shù)據(jù)的性質(zhì)和任務(wù)的具體要求。
  • 對(duì)比損失計(jì)算:對(duì)比損失函數(shù)計(jì)算每對(duì)embedding的損失,鼓勵(lì)相似對(duì)具有更小的距離,而不相似對(duì)具有更大的距離。對(duì)比損失的一般公式如下:L = (1 — y) * D2 + y * max(0, m — D)

其中:

  • ?L:對(duì)于一對(duì)的對(duì)比損失。
  • ?D:embedding之間的距離或不相似性。
  • ?y:標(biāo)簽,指示配對(duì)是否相似(相似為0,不相似為1)。
  • m:定義不相似性閾值的邊際參數(shù)。

損失項(xiàng) `(1 — y) * D2` 對(duì)相似對(duì)進(jìn)行懲罰,如果它們的距離超過(guò)邊際(m),則鼓勵(lì)網(wǎng)絡(luò)減小它們的距離。項(xiàng) `y * max(0, m — D)2` 對(duì)不相似對(duì)進(jìn)行懲罰,如果它們的距離低于邊際,則推動(dòng)網(wǎng)絡(luò)增加它們的距離。

  • 損失的匯總:為了獲得整個(gè)輸入對(duì)批次的整體對(duì)比損失,通常會(huì)對(duì)所有對(duì)之間的個(gè)體損失進(jìn)行平均或求和。匯總方法的選擇取決于特定的訓(xùn)練目標(biāo)和優(yōu)化策略。

通過(guò)通過(guò)梯度下降優(yōu)化方法(例如反向傳播和隨機(jī)梯度下降)最小化對(duì)比損失,Siamese網(wǎng)絡(luò)學(xué)會(huì)生成能夠有效捕捉輸入數(shù)據(jù)的相似性結(jié)構(gòu)的判別性embedding。對(duì)比損失函數(shù)在訓(xùn)練Siamese網(wǎng)絡(luò)中發(fā)揮著關(guān)鍵作用,使其能夠?qū)W習(xí)可用于各種任務(wù),如圖像相似性、人臉驗(yàn)證和文本相似性的有意義表示。對(duì)比損失函數(shù)的具體制定和參數(shù)可以根據(jù)數(shù)據(jù)的特性和任務(wù)的要求進(jìn)行調(diào)整。

在 PyTorch 中的孿生神經(jīng)網(wǎng)絡(luò)

探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

1. 數(shù)據(jù)集創(chuàng)建

我們使用的數(shù)據(jù)集來(lái)自來(lái)自 :

http://vision.stanford.edu/aditya86/ImageNetDogs/?

def copy_files(source_folder,files_list,des):for file in files_list:source_file=os.path.join(source_folder,file)des_file=os.path.join(des,file)shutil.copy2(source_file,des_file)print(f"Copied {file} to {des}")return def move_files(source_folder,des):files_list=os.listdir(source_folder)for file in files_list:source_file=os.path.join(source_folder,file)des_file=os.path.join(des,file)shutil.move(source_file,des_file)print(f"Copied {file} to {des}")return def rename_file(file_path,new_name):directory=os.path.dirname(file_path)new_file_path=os.path.join(directory,new_name)os.rename(file_path,new_file_path)print(f"File renamed to {new_file_path}")returnfolder_path=r"C:\Users\sri.karan\Downloads\images1\Images\*"op_path_similar=r"C:\Users\sri.karan\Downloads\images1\Images\similar_all_images"tmp=r"C:\Users\sri.karan\Downloads\images1\Images\tmp"op_path_dissimilar=r"C:\Users\sri.karan\Downloads\images1\Images\dissimilar_all_images"folders_list=glob.glob(folder_path)folders_list=list(set(folders_list).difference(set(['C:\\Users\\sri.karan\\Downloads\\images1\\Images\\similar_all_images','C:\\Users\\sri.karan\\Downloads\\images1\\Images\\tmp','C:\\Users\\sri.karan\\Downloads\\images1\\Images\\dissimilar_all_images'])))l,g=0,0random.shuffle(folders_list)for i in glob.glob(folder_path):if i in ['C:\\Users\\sri.karan\\Downloads\\images1\\Images\\similar_all_images','C:\\Users\\sri.karan\\Downloads\\images1\\Images\\tmp','C:\\Users\\sri.karan\\Downloads\\images1\\Images\\dissimilar_all_images']:continuefile_name=i.split('\\')[-1].split("-")[1]picked_files=pick_random_files(i,6)copy_files(i,picked_files,tmp)for m in range(3):rename_file(os.path.join(tmp,picked_files[m*2]),"similar_"+str(g)+"_first.jpg")rename_file(os.path.join(tmp,picked_files[m*2+1]),"similar_"+str(g)+"_second.jpg")g+=1move_files(tmp,op_path_similar)choice_one,choice_two=random.choice(range(len(folders_list))),random.choice(range(len(folders_list)))picked_dissimilar_one=pick_random_files(folders_list[choice_one],3)picked_dissimilar_two=pick_random_files(folders_list[choice_two],3)copy_files(folders_list[choice_one],picked_dissimilar_one,tmp)copy_files(folders_list[choice_two],picked_dissimilar_two,tmp)picked_files_dissimilar=picked_dissimilar_one+picked_dissimilar_twofor m in range(3):rename_file(os.path.join(tmp,picked_files_dissimilar[m]),"dissimilar_"+str(l)+"_first.jpg")rename_file(os.path.join(tmp,picked_files_dissimilar[m+3]),"dissimilar_"+str(l)+"_second.jpg")l+=1move_files(tmp,op_path_dissimilar)

我們挑選了3對(duì)相似圖像(狗品種)和3對(duì)不相似圖像(狗品種)來(lái)微調(diào)模型,為了使負(fù)樣本簡(jiǎn)單,對(duì)于給定的錨定圖像(狗品種),任何除地面實(shí)況狗品種以外的其他狗品種都被視為負(fù)標(biāo)簽。

注意:?“相似圖像” 意味著來(lái)自相同狗品種的圖像被視為正對(duì),而“不相似圖像” 意味著來(lái)自不同狗品種的圖像被視為負(fù)對(duì)。

代碼解釋:

  • 46行:從每個(gè)狗圖像文件夾中隨機(jī)挑選了6張圖像。
  • 47行:選擇的圖像被移動(dòng)到一個(gè)名為 “tmp” 的文件夾中,并且由于它們來(lái)自同一狗品種文件夾,因此被重命名為 “similar_images”。
  • 55行:完成所有這些后,它們被移動(dòng)到 “similar_all_images” 文件夾中。
  • 56、57行:類似地,為了獲得不相似的圖像對(duì),從兩個(gè)不同的狗品種文件夾中選擇了3張圖像。
  • 然后重復(fù)上述流程,以獲得不相似的圖像對(duì)并將它們移動(dòng)到 “dissimilar_all_images” 文件夾中。

完成所有這些后,我們可以繼續(xù)創(chuàng)建數(shù)據(jù)集對(duì)象。

import torchimport torch.nn as nnimport torch.optim as optimfrom torch.utils.data import DataLoaderfrom PIL import Imageimport numpy as npimport randomfrom torch.utils.data import DataLoader, Datasetimport torchimport torch.nn as nnfrom torch import optimimport torch.nn.functional as Fclass ImagePairDataset(torch.utils.data.Dataset):def __init__(self, root_dir):self.root_dir = root_dirself.transform = T.Compose([# We first resize the input image to 256x256 and then we take center crop.transforms.Resize((256,256)), transforms.ToTensor()])self.image_pairs = self.load_image_pairs()def __len__(self):return len(self.image_pairs)def __getitem__(self, idx):image1_path, image2_path, label = self.image_pairs[idx]image1 = Image.open(image1_path).convert("RGB")image2 = Image.open(image2_path).convert("RGB")# Convert the tensor to a PIL image# image1 = functional.to_pil_image(image1)# image2 = functional.to_pil_image(image2)image1 = self.transform(image1)image2 = self.transform(image2)# image1 = torch.clamp(image1, 0, 1)# image2 = torch.clamp(image2, 0, 1)return image1, image2, labeldef load_image_pairs(self):image_pairs = []# Assume the directory structure is as follows:# root_dir# ├── similar# │ ├── similar_image1.jpg# │ ├── similar_image2.jpg# │ └── ...# └── dissimilar# ├── dissimilar_image1.jpg# ├── dissimilar_image2.jpg# └── ...similar_dir = os.path.join(self.root_dir, "similar_all_images")dissimilar_dir = os.path.join(self.root_dir, "dissimilar_all_images")# Load similar image pairs with label 1similar_images = os.listdir(similar_dir)for i in range(len(similar_images) // 2):image1_path = os.path.join(similar_dir, f"similar_{i}_first.jpg")image2_path = os.path.join(similar_dir, f"similar_{i}_second.jpg")image_pairs.append((image1_path, image2_path, 0))# Load dissimilar image pairs with label 0dissimilar_images = os.listdir(dissimilar_dir)for i in range(len(dissimilar_images) // 2):image1_path = os.path.join(dissimilar_dir, f"dissimilar_{i}_first.jpg")image2_path = os.path.join(dissimilar_dir, f"dissimilar_{i}_second.jpg")image_pairs.append((image1_path, image2_path, 1))return image_pairsdataset = ImagePairDataset(r"/home/niq/hcsr2001/data/image_similarity")train_size = int(0.8 * len(dataset))test_size = len(dataset) - train_sizetrain_dataset, test_dataset = torch.utils.data.random_split(dataset, [train_size, test_size])batch_size = 32train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

在上述代碼的第8到10行:對(duì)圖像進(jìn)行預(yù)處理,包括將圖像調(diào)整大小為256。我們使用批量大小為32,這取決于您的計(jì)算能力和 GPU。

#create the Siamese Neural Networkclass SiameseNetwork(nn.Module):def __init__(self):super(SiameseNetwork, self).__init__()# Setting up the Sequential of CNN Layers# self.cnn1 = nn.Sequential(# nn.Conv2d(3, 256, kernel_size=11,stride=4),# nn.ReLU(inplace=True),# nn.MaxPool2d(3, stride=2),# nn.Conv2d(256, 256, kernel_size=5, stride=1),# nn.ReLU(inplace=True),# nn.MaxPool2d(2, stride=2),# nn.Conv2d(256, 384, kernel_size=3,stride=1),# nn.ReLU(inplace=True)# )self.cnn1=nn.Conv2d(3, 256, kernel_size=11,stride=4)self.relu = nn.ReLU()self.maxpool1=nn.MaxPool2d(3, stride=2)self.cnn2=nn.Conv2d(256, 256, kernel_size=5,stride=1)self.maxpool2=nn.MaxPool2d(2, stride=2)self.cnn3=nn.Conv2d(256, 384, kernel_size=3,stride=1)self.fc1 =nn.Linear(46464, 1024)self.fc2=nn.Linear(1024, 256)self.fc3=nn.Linear(256, 1)# Setting up the Fully Connected Layers# self.fc1 = nn.Sequential(# nn.Linear(384, 1024),# nn.ReLU(inplace=True),# nn.Linear(1024, 32*46464),# nn.ReLU(inplace=True),# nn.Linear(32*46464,1)# )def forward_once(self, x):# This function will be called for both images# Its output is used to determine the similiarity# output = self.cnn1(x)# print(output.view(output.size()[0], -1).shape)# output = output.view(output.size()[0], -1)# output = self.fc1(output)# print(x.shape)output= self.cnn1(x)# print(output.shape)output=self.relu(output)# print(output.shape)output=self.maxpool1(output)# print(output.shape)output= self.cnn2(output)# print(output.shape)output=self.relu(output)# print(output.shape)output=self.maxpool2(output)# print(output.shape)output= self.cnn3(output)output=self.relu(output)# print(output.shape)output=output.view(output.size()[0], -1)# print(output.shape)output=self.fc1(output)# print(output.shape)output=self.fc2(output)# print(output.shape)output=self.fc3(output)return outputdef forward(self, input1, input2):# In this function we pass in both images and obtain both vectors# which are returnedoutput1 = self.forward_once(input1)output2 = self.forward_once(input2)return output1, output2

我們的網(wǎng)絡(luò)稱為 SiameseNetwork,我們可以看到它幾乎與標(biāo)準(zhǔn) CNN 相同。唯一可以注意到的區(qū)別是我們有兩個(gè)前向函數(shù)(forward_once 和 forward)。為什么呢?

我們提到通過(guò)相同網(wǎng)絡(luò)傳遞兩個(gè)圖像。forward_once 函數(shù)在 forward 函數(shù)中調(diào)用,它將一個(gè)圖像作為輸入傳遞到網(wǎng)絡(luò)。輸出存儲(chǔ)在 output1 中,而來(lái)自第二個(gè)圖像的輸出存儲(chǔ)在 output2 中,正如我們?cè)?forward 函數(shù)中看到的那樣。通過(guò)這種方式,我們?cè)O(shè)法輸入了兩個(gè)圖像并從我們的模型獲得了兩個(gè)輸出。

我們已經(jīng)看到了損失函數(shù)應(yīng)該是什么樣子,現(xiàn)在讓我們來(lái)編碼它。我們創(chuàng)建了一個(gè)名為 ContrastiveLoss 的類,與模型類一樣,我們將有一個(gè) forward 函數(shù)。

class ContrastiveLoss(torch.nn.Module):def __init__(self, margin=2.0):super(ContrastiveLoss, self).__init__()self.margin = margindef forward(self, output1, output2, label):# Calculate the euclidean distance and calculate the contrastive losseuclidean_distance = F.pairwise_distance(output1, output2, keepdim = True)loss_contrastive = torch.mean((1-label) * torch.pow(euclidean_distance, 2) +(label) * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2))return loss_contrastivenet = SiameseNetwork().cuda()criterion = ContrastiveLoss()optimizer = optim.Adam(net.parameters(), lr = 0.0005 )

按照頂部的流程圖,我們可以開(kāi)始創(chuàng)建訓(xùn)練循環(huán)。我們迭代100次并提取兩個(gè)圖像以及標(biāo)簽。我們將梯度歸零,將兩個(gè)圖像傳遞到網(wǎng)絡(luò)中,網(wǎng)絡(luò)輸出兩個(gè)向量。然后,將兩個(gè)向量和標(biāo)簽饋送到我們定義的 criterion(損失函數(shù))中。我們進(jìn)行反向傳播和優(yōu)化。出于一些可視化目的,并查看我們的模型在訓(xùn)練集上的性能,因此我們將每10批次打印一次損失。

counter = []loss_history = [] iteration_number= 0# Iterate throught the epochsfor epoch in range(100):# Iterate over batchesfor i, (img0, img1, label) in enumerate(train_loader, 0):# Send the images and labels to CUDAimg0, img1, label = img0.cuda(), img1.cuda(), label.cuda()# Zero the gradientsoptimizer.zero_grad()# Pass in the two images into the network and obtain two outputsoutput1, output2 = net(img0, img1)# Pass the outputs of the networks and label into the loss functionloss_contrastive = criterion(output1, output2, label)# Calculate the backpropagationloss_contrastive.backward()# Optimizeoptimizer.step()# Every 10 batches print out the lossif i % 10 == 0 :print(f"Epoch number {epoch}\n Current loss {loss_contrastive.item()}\n")iteration_number += 10counter.append(iteration_number)loss_history.append(loss_contrastive.item())show_plot(counter, loss_history)

探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

我們現(xiàn)在可以分析結(jié)果。我們能看到的第一件事是損失從1.6左右開(kāi)始,并以接近1的數(shù)字結(jié)束??吹侥P偷膶?shí)際運(yùn)行情況將是有趣的。現(xiàn)在是我們?cè)谀P椭皼](méi)見(jiàn)過(guò)的圖像上測(cè)試我們的模型的部分。與之前一樣,我們使用我們的自定義數(shù)據(jù)集類創(chuàng)建了一個(gè) Siamese Network 數(shù)據(jù)集,但現(xiàn)在我們將其指向測(cè)試文件夾。

作為接下來(lái)的步驟,我們從第一批中提取第一張圖像,并迭代5次以提取接下來(lái)5批中的5張圖像,因?yàn)槲覀冊(cè)O(shè)置每批包含一張圖像。然后,使用 torch.cat() 水平組合兩個(gè)圖像,我們可以清楚地可視化哪個(gè)圖像與哪個(gè)圖像進(jìn)行了比較。

我們將兩個(gè)圖像傳入模型并獲得兩個(gè)向量,然后將這兩個(gè)向量傳入 F.pairwise_distance() 函數(shù),這將計(jì)算兩個(gè)向量之間的歐氏距離。使用這個(gè)距離,我們可以作為衡量?jī)蓮埬樣卸嗖幌嗨频闹笜?biāo)。

test_loader_one = DataLoader(test_dataset, batch_size=1, shuffle=False)dataiter = iter(test_loader_one)x0, _, _ = next(dataiter)for i in range(5):# Iterate over 5 images and test them with the first image (x0)_, x1, label2 = next(dataiter)# Concatenate the two images togetherconcatenated = torch.cat((x0, x1), 0)output1, output2 = net(x0.cuda(), x1.cuda())euclidean_distance = F.pairwise_distance(output1, output2)imshow(torchvision.utils.make_grid(concatenated), f'Dissimilarity: {euclidean_distance.item():.2f}')view raweval.py hosted with ? by GitHub

探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較

總結(jié)

Siamese 網(wǎng)絡(luò)與對(duì)比損失結(jié)合,為學(xué)習(xí)圖像相似性提供了一個(gè)強(qiáng)大而有效的框架。通過(guò)對(duì)相似和不相似圖像進(jìn)行訓(xùn)練,這些網(wǎng)絡(luò)可以學(xué)會(huì)提取能夠捕捉基本視覺(jué)特征的判別性embedding。對(duì)比損失函數(shù)通過(guò)優(yōu)化embedding空間進(jìn)一步增強(qiáng)

了模型準(zhǔn)確測(cè)量圖像相似性的能力。隨著深度學(xué)習(xí)和計(jì)算機(jī)視覺(jué)的進(jìn)步,Siamese 網(wǎng)絡(luò)在各個(gè)領(lǐng)域都有著巨大的潛力,包括圖像搜索、人臉驗(yàn)證和推薦系統(tǒng)。通過(guò)利用這些技術(shù),我們可以為基于內(nèi)容的圖像檢索、視覺(jué)理解以及視覺(jué)領(lǐng)域的智能決策開(kāi)啟令人興奮的可能性。

以上是探索使用對(duì)比損失的孿生網(wǎng)路進(jìn)行影像相似性比較的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
位元組跳動(dòng)剪映推出 SVIP 超級(jí)會(huì)員:連續(xù)包年 499 元,提供多種 AI 功能 位元組跳動(dòng)剪映推出 SVIP 超級(jí)會(huì)員:連續(xù)包年 499 元,提供多種 AI 功能 Jun 28, 2024 am 03:51 AM

本站6月27日訊息,剪映是由位元組跳動(dòng)旗下臉萌科技開(kāi)發(fā)的一款影片剪輯軟體,依託於抖音平臺(tái)且基本面向該平臺(tái)用戶製作短影片內(nèi)容,並相容於iOS、安卓、Windows 、MacOS等作業(yè)系統(tǒng)。剪映官方宣布會(huì)員體系升級(jí),推出全新SVIP,包含多種AI黑科技,例如智慧翻譯、智慧劃重點(diǎn)、智慧包裝、數(shù)位人合成等。價(jià)格方面,剪映SVIP月費(fèi)79元,年費(fèi)599元(本站註:折合每月49.9元),連續(xù)包月則為59元每月,連續(xù)包年為499元每年(折合每月41.6元) 。此外,剪映官方也表示,為提升用戶體驗(yàn),向已訂閱了原版VIP

使用Rag和Sem-Rag提供上下文增強(qiáng)AI編碼助手 使用Rag和Sem-Rag提供上下文增強(qiáng)AI編碼助手 Jun 10, 2024 am 11:08 AM

透過(guò)將檢索增強(qiáng)生成和語(yǔ)意記憶納入AI編碼助手,提升開(kāi)發(fā)人員的生產(chǎn)力、效率和準(zhǔn)確性。譯自EnhancingAICodingAssistantswithContextUsingRAGandSEM-RAG,作者JanakiramMSV。雖然基本AI程式設(shè)計(jì)助理自然有幫助,但由於依賴對(duì)軟體語(yǔ)言和編寫軟體最常見(jiàn)模式的整體理解,因此常常無(wú)法提供最相關(guān)和正確的程式碼建議。這些編碼助手產(chǎn)生的代碼適合解決他們負(fù)責(zé)解決的問(wèn)題,但通常不符合各個(gè)團(tuán)隊(duì)的編碼標(biāo)準(zhǔn)、慣例和風(fēng)格。這通常會(huì)導(dǎo)致需要修改或完善其建議,以便將程式碼接受到應(yīng)

七個(gè)很酷的GenAI & LLM技術(shù)性面試問(wèn)題 七個(gè)很酷的GenAI & LLM技術(shù)性面試問(wèn)題 Jun 07, 2024 am 10:06 AM

想了解更多AIGC的內(nèi)容,請(qǐng)?jiān)煸L:51CTOAI.x社群https://www.51cto.com/aigc/譯者|晶顏審校|重樓不同於網(wǎng)路上隨處可見(jiàn)的傳統(tǒng)問(wèn)題庫(kù),這些問(wèn)題需要跳脫常規(guī)思維。大語(yǔ)言模型(LLM)在數(shù)據(jù)科學(xué)、生成式人工智慧(GenAI)和人工智慧領(lǐng)域越來(lái)越重要。這些複雜的演算法提升了人類的技能,並在許多產(chǎn)業(yè)中推動(dòng)了效率和創(chuàng)新性的提升,成為企業(yè)保持競(jìng)爭(zhēng)力的關(guān)鍵。 LLM的應(yīng)用範(fàn)圍非常廣泛,它可以用於自然語(yǔ)言處理、文字生成、語(yǔ)音辨識(shí)和推薦系統(tǒng)等領(lǐng)域。透過(guò)學(xué)習(xí)大量的數(shù)據(jù),LLM能夠產(chǎn)生文本

微調(diào)真的能讓LLM學(xué)到新東西嗎:引入新知識(shí)可能讓模型產(chǎn)生更多的幻覺(jué) 微調(diào)真的能讓LLM學(xué)到新東西嗎:引入新知識(shí)可能讓模型產(chǎn)生更多的幻覺(jué) Jun 11, 2024 pm 03:57 PM

大型語(yǔ)言模型(LLM)是在龐大的文字資料庫(kù)上訓(xùn)練的,在那裡它們獲得了大量的實(shí)際知識(shí)。這些知識(shí)嵌入到它們的參數(shù)中,然後可以在需要時(shí)使用。這些模型的知識(shí)在訓(xùn)練結(jié)束時(shí)被「具體化」。在預(yù)訓(xùn)練結(jié)束時(shí),模型實(shí)際上停止學(xué)習(xí)。對(duì)模型進(jìn)行對(duì)齊或進(jìn)行指令調(diào)優(yōu),讓模型學(xué)習(xí)如何充分利用這些知識(shí),以及如何更自然地回應(yīng)使用者的問(wèn)題。但是有時(shí)模型知識(shí)是不夠的,儘管模型可以透過(guò)RAG存取外部?jī)?nèi)容,但透過(guò)微調(diào)使用模型適應(yīng)新的領(lǐng)域被認(rèn)為是有益的。這種微調(diào)是使用人工標(biāo)註者或其他llm創(chuàng)建的輸入進(jìn)行的,模型會(huì)遇到額外的實(shí)際知識(shí)並將其整合

你所不知道的機(jī)器學(xué)習(xí)五大學(xué)派 你所不知道的機(jī)器學(xué)習(xí)五大學(xué)派 Jun 05, 2024 pm 08:51 PM

機(jī)器學(xué)習(xí)是人工智慧的重要分支,它賦予電腦從數(shù)據(jù)中學(xué)習(xí)的能力,並能夠在無(wú)需明確編程的情況下改進(jìn)自身能力。機(jī)器學(xué)習(xí)在各個(gè)領(lǐng)域都有廣泛的應(yīng)用,從影像辨識(shí)和自然語(yǔ)言處理到推薦系統(tǒng)和詐欺偵測(cè),它正在改變我們的生活方式。機(jī)器學(xué)習(xí)領(lǐng)域存在著多種不同的方法和理論,其中最具影響力的五種方法被稱為「機(jī)器學(xué)習(xí)五大派」。這五大派分別為符號(hào)派、聯(lián)結(jié)派、進(jìn)化派、貝葉斯派和類推學(xué)派。 1.符號(hào)學(xué)派符號(hào)學(xué)(Symbolism),又稱符號(hào)主義,強(qiáng)調(diào)利用符號(hào)進(jìn)行邏輯推理和表達(dá)知識(shí)。該學(xué)派認(rèn)為學(xué)習(xí)是一種逆向演繹的過(guò)程,透過(guò)現(xiàn)有的

為大模型提供全新科學(xué)複雜問(wèn)答基準(zhǔn)與評(píng)估體系,UNSW、阿貢、芝加哥大學(xué)等多家機(jī)構(gòu)共同推出SciQAG框架 為大模型提供全新科學(xué)複雜問(wèn)答基準(zhǔn)與評(píng)估體系,UNSW、阿貢、芝加哥大學(xué)等多家機(jī)構(gòu)共同推出SciQAG框架 Jul 25, 2024 am 06:42 AM

編輯|ScienceAI問(wèn)答(QA)資料集在推動(dòng)自然語(yǔ)言處理(NLP)研究中發(fā)揮著至關(guān)重要的作用。高品質(zhì)QA資料集不僅可以用於微調(diào)模型,也可以有效評(píng)估大語(yǔ)言模型(LLM)的能力,尤其是針對(duì)科學(xué)知識(shí)的理解和推理能力。儘管目前已有許多科學(xué)QA數(shù)據(jù)集,涵蓋了醫(yī)學(xué)、化學(xué)、生物等領(lǐng)域,但這些數(shù)據(jù)集仍有一些不足之處。其一,資料形式較為單一,大多數(shù)為多項(xiàng)選擇題(multiple-choicequestions),它們易於進(jìn)行評(píng)估,但限制了模型的答案選擇範(fàn)圍,無(wú)法充分測(cè)試模型的科學(xué)問(wèn)題解答能力。相比之下,開(kāi)放式問(wèn)答

VSCode 前端開(kāi)發(fā)新紀(jì)元:12款 AI 代碼助理推薦 VSCode 前端開(kāi)發(fā)新紀(jì)元:12款 AI 代碼助理推薦 Jun 11, 2024 pm 07:47 PM

在前端開(kāi)發(fā)的世界裡,VSCode以其強(qiáng)大的功能和豐富的插件生態(tài),成為了無(wú)數(shù)開(kāi)發(fā)者的首選工具。而近年來(lái),隨著人工智慧技術(shù)的快速發(fā)展,VSCode上的AI代碼助理也如雨後春筍般湧現(xiàn),大大提升了開(kāi)發(fā)者的編碼效率。 VSCode上的AI代碼助手,如雨後春筍般湧現(xiàn),大大提升了開(kāi)發(fā)者的編碼效率。它利用人工智慧技術(shù),能夠聰明地分析程式碼,提供精準(zhǔn)的程式碼補(bǔ)全、自動(dòng)糾錯(cuò)、語(yǔ)法檢查等功能,大大減少了開(kāi)發(fā)者在編碼過(guò)程中的錯(cuò)誤和繁瑣的手工工作。有今天,就為大家推薦12款VSCode前端開(kāi)發(fā)AI程式碼助手,幫助你在程式設(shè)計(jì)之路

SK 海力士 8 月 6 日將展示 AI 相關(guān)新品:12 層 HBM3E、321-high NAND 等 SK 海力士 8 月 6 日將展示 AI 相關(guān)新品:12 層 HBM3E、321-high NAND 等 Aug 01, 2024 pm 09:40 PM

本站8月1日消息,SK海力士今天(8月1日)發(fā)布博文,宣布將出席8月6日至8日,在美國(guó)加州聖克拉拉舉行的全球半導(dǎo)體記憶體峰會(huì)FMS2024,展示諸多新一代產(chǎn)品。未來(lái)記憶體和儲(chǔ)存高峰會(huì)(FutureMemoryandStorage)簡(jiǎn)介前身是主要面向NAND供應(yīng)商的快閃記憶體高峰會(huì)(FlashMemorySummit),在人工智慧技術(shù)日益受到關(guān)注的背景下,今年重新命名為未來(lái)記憶體和儲(chǔ)存高峰會(huì)(FutureMemoryandStorage),以邀請(qǐng)DRAM和儲(chǔ)存供應(yīng)商等更多參與者。新產(chǎn)品SK海力士去年在

See all articles