BOW模型在ANN框架下的解釋

2021-07-09 06:56:55 字數 2172 閱讀 9821

假設有兩幅影象a和b,a有一系列描述子(例如sift)組成,而b由組成。為了計算這兩幅圖之間的相似度,最直接的方法是採用一下的voting system:

其中f是乙個匹配函式,反映了xi與yj之間是否匹配。對於乙個ε-search和k-nn的匹配方式下,f分別定義為:

按(1)式將所有的i和j累加起來,再對和做歸一化(這對應於bow的l1歸一化),就能夠得到a和b的乙個相似度度量(此時s的值越大,表示a和b之間匹配的特徵對的數目越多)。

近似的最近鄰有可能與真實的最近鄰有所偏差,但是計算上時間複雜度大大降低。

常見的ann的方法有k-d tree(通過生成一棵樹對d維特徵空間進行劃分,待匹配的特徵點會從與之屬於同一子空間的點開始查詢),bbf(改進的k-d tree方法,在k-d tree回溯的時候引入優先順序的佇列),locality-sensitive hashing(通過一系列隨機的雜湊函式,使得經過雜湊投影後兩特徵點雜湊值相等的概率與原特徵的相似度之間形成一對應關係)。

lsh是最需要一說的,但是限於篇幅我又不想在這裡說,我在後面的文章中肯定會再提到,如果大家不太了解的話可以先看這裡。在這裡到提到的結論是,對於歐式距離作為相似度的情況下,lsh選擇的雜湊函式是乙個隨機的投影函式:

這個投影函式相當於將原始特徵向量投影到一條隨機的直線上,然後將這條直線劃分為長度為bi的多條線段,會落入同一線段上的兩特徵點被認為是相似的。我們選擇多個投影函式共同作用,要求在這多個投影函式上的取值都相等的兩個點,才被認為是近鄰的。這些投影函式的作用,相當於對整個描述子的特徵空間做隨機的劃分,如下圖所示:

落入同一子空間的點,都被認為是近鄰的。至於為什麼是隨機投影函式,這裡有比較詳細的解釋,我以後有空再到文章中做介紹。

從lsh的效果上來看,很明顯就是我們只要能夠選擇一種合理的劃分特徵空間的方式,就能認為落入同一子空間的所有點是近鄰的。隨機投影儘管能夠滿足lsh的基本假設,但是這個「隨機」,其實是很蛋疼的,因為隨著投影的直線越來越多,很多直線存在的意義是值得思考的,也就是說如果我們已經選了1000中隨機投影的方法,那麼第1001中投影的方法應該盡可能在效果上不同於前1000中(這樣才能體現它最大的價值嘛),而隨機顯然不能保證這一效果。所以,我們完全可以通過所有樣本的分布情況,學習出一種劃分方式。沒錯,k-means,無疑是一種實現手段,如下圖:

好,終於繞了半天以後繞到bow上來了,bow不就是用k-means訓練了乙個碼數,然後所有sift描述子都往這本碼數上做硬投影(其實就是投影到乙個子空間中)了麼。投影後,在同乙個碼字上的所有點都認為是相匹配的。回到(1)式的f(xi,yj)函式中來,如果xi和yj落入同乙個碼字上,那麼它們就被認為是相匹配的(注意這裡乙個xi可能與b影象的多個特徵相匹配了,我最後還會接著解釋)。這種設計,會是f的一種取法。

再看看bow的向量本身,如果我們採用內積來計算兩個影象之間的相似度(在此不考慮對bow向量做歸一化)。bow特徵的第i維表示影象所有sift在第i個碼字上的投影的數目(對a和b兩幅圖分別用ai和bi表示),那麼這一維上內積的結果就是ai*bi。這不正是在第i個子空間,a圖的所有sift點與b圖所有sift點的兩兩匹配的所有種可能嗎?正好對應著前面所說的f()。

原來內積對應著兩兩匹配的所有可能,但是這很不合理啊,乙個特徵點按理應該在另一幅圖中最多找到1個對應的匹配才對,如果用內積來描述相似度,乙個點不就被匹配了n多次了麼?不合理啊不合理。而如果用直方圖相交的話,取min(ai,bi),這樣乙個點不就最多找到1個對應的匹配了嗎?正是因為這樣,直方圖相交是一種更好的度量bow這類直方圖的方式(而不應該用余弦夾角或者內積)。而從數學上來說,適合l1歸一化的特徵(直方圖一類的特徵)不適合用歐氏距離來度量距離,而更適合用hellinger kernel,mercer kernel之類的,不過我在這裡也不做解釋了,大家應該從其他文獻中能找到答案。

--------

在Django框架下,用redis實現購物車功能

先介紹一下本文中需要用到的資料庫模型類 goodssku,這個主要用於儲存商品,在這個模型類裡有price屬性 name屬性等。最終我們要實現的頁面效果是 購買商品頁面 購物車詳情頁面 總的思路是,因為購物車屬於頻繁被操作的物件,所以我們與之儲存在資料庫裡,不如儲存在記憶體裡。所以我們選擇redis...

在iframe框架下實現全域性彈框

公司使用的是iframe的框架來寫的後台,即包含top,left,right,bottom,想要實現有訊息時出現彈框,該彈框在所有的頁面內都可以顯示,現有實現方式如下 原先的布局為在index頁面設定的iframe等引數 很抱歉,您使用的瀏覽器不支援框架功能,請轉用新的瀏覽器。現在為了實現彈出框在全...

在seam框架下jquery前端技術的使用

相信不少程式設計師朋友都非常熟悉並且喜愛在頁面前端技術中使用jquery技術,但是在seam框架中使用以前的方式引入jquery包,寫jquery語句會報找不到物件的錯誤,這時候需要做乙個小小的修改 引用jqery包不能用以前的寫法 而應該這樣寫 寫jquery 也不應該再使用熟悉的美元 符號,而應...