日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification

發布時間:2023/12/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、論文:Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification
2、代碼: https://github.com/zhunzhong07/ECN

無監督的域自適應(UAD):源域的訓練集有標簽,目標域的訓練集無標簽,在目標域的測試集進行驗證。

由于行人的鏡頭是容易確認的,論文中使用了目標域的行人鏡頭信息。

文章的網絡框架:

Exemplar Memory:利用Exemplar Memory保存訓練樣本的所有特征。

本文提出了三種不變形:
Exemplar-invariance (樣本不變性):每個圖像之間都是不同的,將每個圖像認為是單獨的一類,增大了所有圖像之間的差距。
Camera-invariance(相機不變性):同一類別由多個相機獲得,經過stargan對相機風格進行轉化,他們仍具有相同的標簽。
Neighborhood-invariance(近鄰不變性):由于樣本不變性增大了樣本之間的差距。對于每一個樣本,尋找K個最近鄰的圖像,認定為具有相同標簽。

風格轉化圖像:以market為例,該數據庫有6個攝像機拍攝,對每一幅圖像產生對應的另外5種鏡頭的風格。該數據庫訓練集有12936張圖像,使用starGAN總共產生了64680張圖像。

代碼實現解析:

網絡中的第一個分支簡單使用監督學習進行優化;
網絡中的第二個分支首先初始化所有的特征為0,存儲在Exemplar Memory中。

目標域的數據獲取方式:隨機在目標域中選取batch個索引。獲得對應索引的圖像鏡頭A。以market為例,在6個鏡頭中隨機選取一個鏡頭,如果該鏡頭正好是A,則獲得該圖像,如若該鏡頭不是A,則獲取對應產生的假圖像。最后獲得的batch中既包含了真圖像,也包含了生成的假圖像。

對batch計算損失:

公式(3)計算每幅圖像屬于12936中的每一類的概率。K的維度是4096 * 12936;f()獲得的維度是4096 * 1。然后利用公式(4)求交叉熵損失:

經過幾個epoch之后開始約束近鄰不變:

獲得的k個近鄰圖像如果標簽與目標圖像標簽一直,權重為1,否則為1/k,獲得對應權重的代碼:

def smooth_hot(self, inputs, targets, k=6):# Sort_, index_sorted = torch.sort(inputs, dim=1, descending=True)ones_mat = torch.ones(targets.size(0), k).to(self.device)targets = torch.unsqueeze(targets, 1)targets_onehot = torch.zeros(inputs.size()).to(self.device)weights = F.softmax(ones_mat, dim=1)targets_onehot.scatter_(1, index_sorted[:, 0:k], ones_mat * weights)targets_onehot.scatter_(1, targets, float(1))return targets_onehot

然后使用交叉熵計算損失,對應代碼為:

def smooth_loss(self, inputs, targets):targets = self.smooth_hot(inputs.detach().clone(), targets.detach().clone(), self.knn)outputs = F.log_softmax(inputs, dim=1)loss = - (targets * outputs)loss = loss.sum(dim=1)loss = loss.mean(dim=0)return loss

Exemplar Memory 中的每個特征更新方式:

即每次只更新batch中每個圖像對應的索引,對應的更新代碼:`

def backward(self, grad_outputs):inputs, targets = self.saved_tensorsgrad_inputs = Noneif self.needs_input_grad[0]:grad_inputs = grad_outputs.mm(self.em)for x, y in zip(inputs, targets):self.em[y] = self.alpha * self.em[y] + (1. - self.alpha) * xself.em[y] /= self.em[y].norm()return grad_inputs, None

總結

以上是生活随笔為你收集整理的Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。