over 3 years ago

Latent Dirichlet Allocation是PLSI的一個改進版本,主要是改善PLSI的一些問題,像是因為PLSI是topic mixure model,但對於沒看過的文章,我們很難去對這篇文章針對每個topic去給weight,加上因為要每篇文章都對每個topic給定一個weight,就需要大量的parameter,但同時也增加了overfittting的機率,不得不說是個不小的缺點。

所以LDA引入了θ的概念,θ是個hidden random variable,可以想成就是每個文章對每個topic的distribution,利用α-θ-z間的關係來解決原本需要調整許多參數的問題,再利用β影響 w,作為每個 document 個別差異的 model 方式。

下圖為LDA的model visualize後的樣子:

經過一連串激烈的推導後,可得下以下的式子

如此這般,就可以得到每個word的topic mixture,進而推斷我們所想要的,文章的semantic的topic的意義。

 
over 3 years ago

Probabilistic Latent Semantic Indexing

這篇Paper要處理的問題,就是文件的分類與檢索(indexing),基於LSA(Latent Semantic Analysis)並利用EM(Expectation Maximization)train出的corpus去方便做語意上的分類,並同時能解決同義字與一字多義的問題。

首先先簡單的介紹一下LSA,LSA的Idea很簡單,主要就是我們可以將training data中的每個document d與所有的training document中的word的聯集,形成一個非常大而稀疏(Sparse)的矩陣。

之後再利用SVD(Singular Value Decomposition)去將這個matrix分解成U(sigma)V的形式,其中的物理意義分別為U=P(d|k), V=P(w|z), sigma=diag(P(z))。

由於Sigma這個對角矩陣中對角線的每個element都是singular value,再把除了top k大的singular value外的element都設為零,以物理意義來說就是只留下前k大具代表性的vector,以達到dimention reduction的目的。

而PLSA就是基於以上所述的LSA,加上機率統計模型的輔助而試圖去做改進。

而PLSA的一大核心就是Aspect Model,Aspect Model是種generative model,所以希望能求得的是P(w,d)的pair,並利用這個式子去想辦法得到我們想要的P(z)。

但為了避免overfitting發生,所以他們引入了tempered EM(TEM),基於entropic regularization,並與deterministic annealing十分的接近。

透過加入貝塔這個參數,並iterative的去learn出最適合的貝塔。

最後就可以在latent space上面,而不是原本的sparse matrix上做indexing,並直接在上面計算相似度(similarity),能讓index加速但仍然保有一定程度的物理意義,並得到我們想要的結果。

我想這篇paper的貢獻主要就是基於LSA,加上機率統計模型的輔助去improve 原本的LSI,並

 
over 3 years ago

本篇paper介紹了一個product quantization based approach for approximate nearest neighbor search,

 
over 3 years ago

Efficient visual search of videos cast as text retrieval這篇paper的中心思想很簡單,就是希望能將傳統text mining的技術也應用到visual search上,把這些技巧套到object recognition上,看看是否能利用這些現有的技術快速獲得一個還不錯的結果。

本篇paper希望做到的是能即時的對使用者給出的query image(通常為一個object的截圖),就能快速找到這query image相對應的場景。

而要做到這個目標,當然首先需要考慮的自然就是「如何找出物品所相對應的frame?」和「如何做到即時(real time)呢?」

找出物品相對應的frame這部分,主要可以分成以下幾個步驟:

  1. 找出frame中的viewpoint invariant description
  2. 找出Shape Adapted(SA)與Maximally Stable(MS)這兩種區塊,並用SIFT去描述那些區塊
  3. 運用K-means做clustering來找出visual vocabuary
  4. 運用text retrieval的方法們來檢索

其中我覺得比較有趣的部份是透過1~3,想辦法把frame轉變成一個個的visual word,就可以在4的部分用一般text retrieval上傳統的方法來做,像是tf-idf weighting(visual word在frame中出現的次數和在所有frame中出現的次數做weighting),stop word removal(移除掉幾乎在每個frame都會出現的,較沒資訊含量的visual word),spatial consistency(從原本的word和word中間隔幾個字變成在frame的二維座標上離多遠)等。直覺上來想,其實許多的對映還滿直覺的,所以這樣直接把方法照搬過來,即使可能不到最好,但有一定的成效是可以預期到的。

而如何做到即時的部分,這篇paper的作者運用了一些方法,像是vector quantization,根據作者所做的比較,不僅複雜度比傳統的nearest neighbor matching還低許多,而且其實依然能保有不錯的準確度。

此篇paper提出了用text retrieval的方法來做visual search,但有些地方還是會覺得有些怪異,像是paper中的keyframe並不是用shot detection等方法做出來的,而是一秒取一張,所以讓他取出來的top rank的幾張圖都很接近,造成precision很高,但recall很低的現象。如果能用shot detection去取keyframe的話,感覺也更具有semantic的meaning。而只用同部電影內的object去query也會覺得有點偷吃步,因為這樣可能無法反映出一些跨影片的問題(例如不同色調造成的影響...等),但總結來說這篇paper提出的這套系統化的方式還是很值得學習的。

看完這篇paper後也有一些想法,如果能把visual word跟text再combine在一起的話,或許就能讓user使用text去描述一個場景,進而去搜尋。畢竟,人們對一些想找的場景,可能只有依稀的記得一些片段,或是已經轉化成文字的描述,如果能將visual word都再賦予一個text的semantic meaning的話,或許又能激盪出許多不同的火花。

 
over 3 years ago
split.cpp
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}


std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}

Don't forget to include string, sstream and vector.

Reference: http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c

 
over 3 years ago
using System.Windows.Forms;

FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "Select Color Image folder";
DialogResult result = fbd.ShowDialog();
if (result.ToString() != "OK")
    return;
selectImagePath = fbd.SelectedPath; 
List<string> colorlist = new List<string>();
// use Directory.GetFiles to get the list of files in selected folder.
colorlist = Directory.GetFiles(selectImagePath, "*.jpg").ToList();

We can use the code above to get the selected folder path.

 
over 3 years ago
 Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
        dlg.DefaultExt = ".txt";
        string path;
        Nullable<bool> result = dlg.ShowDialog();
        if (result == true)
        {
            path = dlg.FileName;
            // do something further
        }
 
over 3 years ago
gaussian.m
myfilter = fspecial('gaussian',[3 3], 0.5);
myfilteredimage = imfilter(unfilteredimage, myfilter, 'replicate');

Reference: http://stackoverflow.com/questions/2771114/gaussian-smoothing-in-matlab
http://www.mathworks.com/help/images/ref/fspecial.html