Aside

由於Robot Operating System(ROS)的中文資源還幾乎不存在,決定先撒下一點麵包屑,之後有寫出新的也會依序整理到這上面.

我覺得機器人很有可能是未來崛起的一個領域,而要在這個領域做出能推動世界進步的成果,我認為ROS是一個很重要的工具.

希望之後有心做ROS的人學習愉快: D

———————————————–
ROS tutorials系列(適用於ROS Fuerte之前的版本,目前還沒時間寫新的版本)

我的tutorial不詳細go through整個tutorial原文,而是就我認為重要之處詳加說明,而且有些東西原文寫得很清楚我不重複寫,換句話說,我仍預期看這些tutorial時要搭配看原文, 會比較完整

此外我重視連貫性,所以一些零碎的細節觀念我也不會寫,如果重要我會補在最後的tips裡

0. 什麼是ROS?要怎麼做ROS? (做ROS前必看!我盡量寫得淺顯,不是工程師應該也看得懂XD)

1. 淺談ROS file system

2. 新增ROS packages

3. 立ROS packages

4. 了解ROS Nodes

———————————————–

ROS觀念文

簡介CRAM(Cognitive Robot Abstract Machine)

Knowrob簡單概念

Topic, Service和Actionlib的用途與差別

認識ROS stack & package (剛接觸ROS寫的,沒什麼見地Orz)

ROS message serialization (1) (剛接觸ROS時寫的,頗混亂,真的需要message傳輸機制再看)

ROS message serialization (2) (看了可能造成混亂,真的有興趣再看看)

———————————————–

ROS細節實作文

改launch file中的參數值

如何安裝Household object database

launch file的if, unless條件用法

———————————————–

ROS散文(散亂的雜文,不是散文XD)

PR2開箱文

ROS tutorial 之 Don’t repeat yourself

———————————————–

補個關鍵字

ROS(Robot operating system), 機器人作業系統, 教學文章, 範例, 說明

AMMAI(Week 7) – Online dictionary learning for sparse coding

Paper Info

Mairal et al. Online dictionary learning for sparse coding. ICML 2009.

Motivation

Sparse representation是一個應用很廣的技術,不僅可以用在image retrieval上,也可以應用在去雜訊、壓縮(例如JPEG的字典其實就是一堆cosine function)等等。但是這個問題本身是NP-Hard的問題,所以要怎麼做最佳化學到好的字典就可以有很多種做法,所以這篇論文嘗試提出一種做法來作到online dictionary learning。

Technical Summary

學習dictionary的這個問題本身可以表達成下面的式子

1

2

其中要注意的是,我們不能讓字典裡面的term無限大,如果字典裡的向量很大,那α會變得很小,所以要加上下面的條件。

3

這篇論文的演算法

基本上我們在學習sparese representation的過程中,需要學到的一個重點是好的字典D,但是這個字典沒有辦法一步到位的學到,所以過程中我們會先得到暫時的α來幫助我們學到更好的D。在這篇論文提出的演算法(Algorithm 1)中,我們可以看到第4行先暫時得到α,然後第7行再利用Algorithm 2來更新字典,更新完字典後,α又會因為字典更換而改變,所以可以iteratively更新字典。

1

更新字典的意義在於讓字典裡的每一個column vector(或你可以說是字典裡的詞)的表達能力更強,所以Algorithm 2的設計必須要做到這件事。

2

Experiment

這篇論文提出方法的一個特性就是online,所以當然要跟傳統的batch learning來作比較,另外他們也跟SGD的學習效率來比較。

1

另外他們也測試一個inpainting的應用,就是假設拿到一張被雜訊破壞的影像,利用sparse coding的技巧,利用字典只表示出整體影像,而會忽略雜訊(但如果overfitting就會把雜訊也一併重建出來),下圖是結果。

1

Contribution

這篇論文提出了一個使用stochastic approximation的方式,具有online learning特性的方法來做 sparse coding, 並大幅減少 memory 及 computation cost 。

Question

1.有沒有什麼好方法來得到initial dictionary?

Tools Learned

Basis pursuit(Lasso)

AMMAI(Week 6) – To aggregate or not to aggregate: selective match kernels for image search

Paper Info

To aggregate or not to aggregate: selective match kernels for image search. Giorgos Tolias, Yannis Avrithis and Hervé Jégou. Proc. ICCV‘13, December 2013.

Motivation

這篇論文希望結合image match的方法(如Hamming Embedding)跟aggregated的方法(如VLAD)來做到更好的image search效果。

Technical Summary

Match Kernel

這一個部分很嚴謹地討論了目前幾個常見的match kernel(也就是M(X,Y)這個function),整體來說,所有matching的方法都是要計算兩張影像的相似程度:

1

1. Bag of word

因為這個方法只是把兩張影像分別用visual word的histogram表示,所以只要去計算兩張影像的histogram有多相似即可。計算方法就是把X跟Y兩張影像中同屬於一個visual word的descriptor數相乘,把每一組相成的結果都相加即可,所以kernel可以用下式表示:

2

2. Hamming Embedding(HE)

embedding的意思是把descriptor用binary code表示(但不是做完quantize才變成code,所以一張影像中的descriptor的code會有很多種),所以M(X,Y)就要分別把所有X、Y中同屬於第C個vocabulary的descriptor彼此的距離都加總。所以如果X中屬於C的descriptor有5個、Y中屬於C的descriptor有10個,那光一個M(Xc, Yc)就要加總50項。

3

其中weighting function的定法也很有邏輯,理論上相近的code會有小的h,所以weight會高。

4

3. Vector of Locally Aggregated Descriptors (VLAD)

這個方法有趣的地方是他用殘餘誤差來當作特徵,這個方法乍看之下感覺沒什麼直觀的意義,但是他有一個功能是可以把feature的長度變成一樣長,換句話說,他是有concatenation的功能。

5

1

4. SMK

2

其中:3

Aggrergated kernel

比起純粹matching的方法,aggregated kernel的會多做一層ψ的轉換。

1

1.ASMK

4

5

Binarization

因為使用全部的feature vector很浪費記憶體,所以這篇paper又提出binarized版本的SMK*跟ASMK*,基本精神跟HE的方法一樣,都是把feature變成binary code,再利用code去計算similarity。

1

2

Experiment

他們的實驗做得算是滿完整的,我覺得看別人怎麼驗證自己的方法是好的也可以學到很多。

α的影響

1

τ的影響

2

SMK跟ASMK的memory使用差異

3

vocabulary size的影響

4

feature數量的影響

6

跟目前state-of-the-art方法的比較

5

Contribution

他們整合了純matching的方法跟aggregated的方法,而且驗證了效果會比state-of-the-art的方法好。

Question

1.Burstiness發生的原因能不能直觀裡解?為什麼visual word出現的次數要符合statistical independent?

2.aggregated的意思感覺是有結合多種方法來讓效果更好,但從aggregated vector representation(下式)看起來只是多做一層轉換,沒辦法跟直觀的意義相接。

1

Tools Learned

Hamming Embedding, VLAD, SMK, ASMK

AMMAI(Week 5) – Nonlinear dimensionality reduction by locally linear embedding

Paper Info

“Nonlinear dimensionality reduction by locally linear embedding,” Roweis & Saul, Science, 2000.

Motivation

這篇論文希望處理在許多學科都會用到的一個問題-降維。

Technical Summary

主要概念

我們在現實生活中所看到的很多資料都是相當高維度的(比如影像、聲音等等),且通常是非線性的。但是,如果我們一次只看一個區塊,我們大致上可以說這個區塊是線性的。例如下圖中的B是我們原始的資料(三維),我們把每一個區塊用一個顏色來表示,可以看出每個區塊有點像是一個平面。

好,這時我們可以用最簡單的方法來把資料從三維降到二維,直接把所有資料的z值丟掉、也就是投影到XY平面上。如果只是把B圖中所有資料投影到XY平面,那麼紅色、藍色、黃色的資料都會混在一起,失去原本的幾何結構。(下圖的說明中也claim PCA或是MDS也會做得很糟)

這篇論文提出的LLE就避免這個問題,因為每個資料點都是由附近的資料點表示,所以把局部的特性保留起來。所以降維就會得到類似C圖的資料分佈,可以看出相同顏色的區塊仍然是在一起,並沒有因為降維而亂掉。

1

演算法

主要就是三個步驟

(1)找資料點附近的鄰居

(2)將下面的cost function最小化以找出適當的權重

1

(3)根據找出的權重,計算出降維後的資料Y

2

整個演算法步驟見下圖。

2

在實作上也滿簡單的,只要先取K mearest neighbor(K是唯一要自己決定的參數),利用least square error的解法解出權重,最後解出Y就好(用線性代數的方法)。

Experiment

在這邊他們驗證了兩種資料,分別是人臉的資料跟關鍵字的資料。從下圖中我們可以看出相似的人臉pose會形成一個類似直線的結構。而從文字的圖中我們可以看出相似的詞(例如有一群是fought, fighting, captured, killed, defeated等)會被分到鄰近的區塊。

1

2

Contribution

這篇論文提出一個叫做Locally Linear Embedding的方法來降維,這個方法的特別之處在於他利用neighbor來表示資料點,藉以保留局部的資料分佈特性(帶有幾何的結構),而這個方法在人臉資料或是文字資料都證明了其效果。

Question

1.怎麼直觀地理解manifold的意思?

2.如果每個點都只用neighbor表示,怎麼重建出降維資料的絕對座標值?

3.為什麼取最小的(但要非0)d個eigenvector表示降維後的資料可以保留資料點的semantic association?

4.為什麼相似意思的詞可以被分到鄰近區塊?是不是原始的高維資料就已經是semantic feature了?

5.為什麼PCA跟MDS都做得不好?

Tools Learned

LLE

AMMAI(Week 4) – Iterative Quantization: A Procrustean Approach to Learning Binary Codes

Paper Info

Yunchao Gong and S. Lazebnik. Iterative Quantization: A Procrustean Approach to Learning Binary Codes. CVPR 2011.

Motivation

隨著我們要處理的資料量越來越大(例如要訓練物體辨識的分類器可能需要幾千萬張的影像),需要發展出方法來儲存這麼多的資料、並且要能快速地取出想要的資料。所以這篇論文希望發展出一種方法來把資料編碼,並希望編出來的code能夠只用很少的bit、將相似的資料編成相似的code、新的資料進來也可以很容易算出這個資料的code。

Technical Summary

這篇論文主要的步驟有兩個,假設輸入是n個d維的資料向量,第一步是先把這n個d維的資料向量變成c維的code(每個code要不是1就是-1),第二步再用他們提出的Iterative Quantization(ITQ)演算法把quantization loss化到最小。

為什麼可以把error再變小,我們可以從下圖的範例中看出來,(c)的error比(a)的error還要來得小。原因在於PCA算出的前c個eigenvector所構成的space有個特性,就是資料點在每軸的variance是不斷遞減的,也就是說每軸區分資料的能力有高有低,所以有的bit比較好、有的較差。但如果我們把這個space旋轉,讓每軸的variance更平均,那就可以提升code的表現。

1

第一步-降維(Dimensionality Reduction)

這一步主要的概念用下圖呈現:

1

其中用來產生code的w向量就是資料向量X的covariance matrix的前c個eigenvector。這一步做的事情滿直覺的,就是把資料重新分佈在eigenvectors建構出來的空間裡,實際上這樣的技巧(也就是PCA)用在很多資料維度太高的問題上,是未來可以使用的一個降維工具。

第二步-優化

第一步求出來的code實際上可以看成分佈在c維的{-1,1}hypercube,這時候就可以得到quantization loss是||sgn(ν)-ν||^2。這邊有一個有趣的推想,如果我們求得的W已經是最佳解(把code建得最好),那WR也會是最佳解(R是orthogonal的cxc矩陣,我想應該是可以由線性代數來證),所以就可以把quantization loss的式子變成:

1

接下來的步驟就是iteratively做(1)固定R,更新B (2)固定B,更新R 來降低quantization loss。而因為他們做過實驗發現不需要解到收斂就可以有不錯的表現,所以只用50次iteration,過程大概像下圖呈現的那樣。

1

Experiment

這篇論文使用到兩個dataset(CIFAR跟Tiny Image)來驗證,而且不管在supervised learning或是unsupervised learning的情況下都樂勝當時的方法。

Unsupervised Learning

1

1

Supervised Learning (有使用到部分的label來幫助code的學習)

1

從上面的結果中可以看出這篇論文提出的方法確實可以把code的表現優化。

Contribution

這篇論文提出一個ITQ的演算法來優化supervised或是unsupervised的code learning表現。

Question

1.ITQ是不是可以用在純粹的資料降維?例如我只是想用PCA把資料維度降低,降完之後用ITQ跑是不是有意義?還是這個方法只能用在把資料變成c個{-1,1}的這種編碼問題上?

2.這個方法能不能改良成online的方法? 而不是只要有新的資料進來,整個程序就得重做

Tools Learned

PCA、ITQ

高等電腦視覺心得

這學期修高等電腦視覺我覺得是個不錯的選擇(雖然因為seminar衝到不能修VFX有點可惜),一方面是可以對整個電腦視覺領域重新go through一次,另一方面是笑話很紓壓(?)。

這學期修這門課的目標就是要讓自己對傳統電腦視覺的方法有完整的概念,因為做研究常會需要用到很多種方法的混搭,如果能有完整的基礎,之後做起研究才會順,總是需要的時候才學其實挺痛苦的。所以上課的時候我其實不太在意助教講得是不是夠深入,因為我的重點是要讓自己對這個領域有一次完整的overview。另外,我有事先掃過投影片來設定一些我希望自己這學期能夠學會的問題,所以如果助教有講到、或是他講到一些我沒先設定好但重要的觀念,我就會想辦法問清楚,所以我覺得上課的過程滿輕鬆愉快的,而且經過幾周,一周都可以學到幾個我覺得不錯的新觀念(包含把之前不太懂的重新想一次,突然就會了),算是很超值。

另外我覺得笑話也挺不錯的,有些笑話是很紓壓、有些可以開我眼界、讓我知道原來世界上還有這麼有趣的東西,像是Zach King的特效就超酷的啊~讓我也很想在未來也學更多VFX和CG的東西(不過重點還是機器人的視覺啦)。

AMMAI(Week 3) – Efficient visual search of videos cast as text retrieval

Paper Info

Efficient visual search of videos cast as text retrieval,” J. Sivic, and A. Zisserman, IEEE TPAMI, 2009.

Motivation

這篇論文的目標是希望利用已經發展得很不錯的text retrieval技術,快速地在影片中搜尋到指定的物體。他們嘗試將影片類比成文件,物體類比成關鍵字。

Technical summary

主要流程

輸入灰階Frame =>  取出特徵區域(SA, MS region) =>使用SIFT descriptor表示 => 用K-means演算法做VQ來產生視覺詞典 => 用詞典計算出向量vd來描述影像(向量中每個維度的值使用tf-idf算得)=> 之後就可以去計算query image的向量vq跟vd之間的相似度

**visual word 示意圖

1

優化表現

1.用stop list去除掉太常見的visual word

optimize by stop list& spatial freq

2.用spatial consistency voting的方式確保找到的feature有在原本的影片中

1

Experiment

他們使用了三部影片構成database,並測試了滿多不同部份的表現,我覺得他們的實驗做得算是相當完整。

Retrieval performance

1

Retrieval Time

平均0.82 sec on 2GHz Pentium.

Contribution

這篇論文主要的貢獻在於他把text retrieval mapping到image object retrieval,也將text retrieval中已經應用成熟的技術例如stop list, tf-idf的各種similarity評估方式都對應到object retrieval上,是很有貢獻的研究。

Question

1.怎麼創造出一個可以適用於各種影片的視覺詞典?

AMMAI(Week2) – Fine-Grained Crowdsourcing for Fine-Grained Recognition

Paper Info

Jia Deng, et al., Fine-Grained Crowdsourcing for Fine-Grained Recognition. CVPR 2013

Motivation

這篇論文的目標是希望利用人類分辨同一類但不同種物體的知識來訓練detector。進而做到讓電腦自己區分出細微的同類間差異。

1

Technical summary

示意圖

1

The Bubbles Game

這種遊戲的設計是讓玩家不斷地在兩種類別中區分出差異,並透過幾個步驟讓此遊戲可以提供有效的線索:

1.把答錯的扣分設得很重、並允許pass => 玩家不會亂回答

2.選取bubble看得更清楚也會被扣分 => 玩家會慎選可以幫助分辨的特徵

3.放在AMT上,並只取分數高的結果 => 控制特徵的品質

遊戲介面:

3

The BubbleBank Algorithm

他們主要是把每個得到的bubble都用descriptor來描述,所以根據遊戲回傳的結果,就可以得到很多種bubble,形成bubble bank,然後再用1-vs-all的linear SVM來訓練分類器(所以如果有n個bubble、就有n個分類器)。之後在testing階段,就用這些detector當作filter來尋找影像中有沒有相似的特徵。此外,他們也運用了空間中的關係,也就是只在test image中,bubble原本出現的位置附近搜尋,而非搜尋整張影像。

Experiment

他們使用了兩種Database來測試performance,結果都勝過目前的方法。

CUB-14

1

CUB-200

2

Contribution

1.提出一個簡單的遊戲設計來有效地運用人類的知識,也就是human-in-the-loop的方法。

2.使用BubbleBank演算法來運用人類貢獻的知識,做到很不錯的辨識結果

Question

1.這種方法是否已經可以完全解決Fine-Grained Recognition的問題,假如再讓多一點玩家來玩、並改進descriptor,是不是就不必再研究新的方法?

2.是否能夠把bubble內的特徵用更高階的方式來表達?例如我們看到某個bubble內的特徵是黑色的鳥嘴,但是他們用SIFT等descriptor似乎並沒有很貼切地表達出黑色鳥嘴的意義,如果descriptor能更加貼近我們真實理解物體的意義,或許可以有更好的效果。

3.為什麼使用spatial relation的結果會比搜尋整張影像的結果好?不是只差在效率而已嗎?

git入門

查了一些資源,但有些看了反而混淆視聽,

把我學習過程中有幫助記下來。

1.快速抓到git概念跟使用git的方法

http://tech.marsw.tw/blog/2013/08/16/git-notes-github

2.Fork別人的東西

http://site.douban.com/196781/widget/notes/12161495/note/269163206/

現在會用到的指令:

1.產生一個新的repository

mkdir <new dir>

cd <new dir>

git init

2.要把東西push到repository

git add <edited file>

git commit -m “comment about this version”

git push

控制系統的幾個重要觀念

今天跟同學聊天又重新複習了一下當初學控制的幾個重點,身為控制組的學生還是應該要會一下.

1.Laplace轉換到底是用來解什麼?

通常,我們可以去建立一個系統的方程式. 舉例來說,如果我有一個系統是x”=3,x(0)=1

要解這樣的一個微分方程式就可以用Laplace轉換快速地解出來.

2.Root locus是用來做什麼的?

如果我的系統方程式是固定的,那求出來的根就會是固定的,

如果我的系統方程式中有一些變數(例如騎腳踏車載人,人的體重會變),那我求出來的根就會因為變數的值不同而不同,

如果我可以把隨著變數變化而變的所有根畫出來,就會得到root locus,

3.Lyapunov穩定性判斷法的主要概念?

當系統具備耗散能量的性質,例如摩擦力,則系統是穩定的.

系統從一開始,隨著時間的進行,若系統能量減小(因為有非保守力存在),則系統穩定.

//TODO

4.頻率響應是什麼?

5.Bode plot是用來做什麼的?

6.Nyquistplot又是什麼?

各種控制,一個overview

我覺得對於控制和系統有完整的概觀很重要,剛好這週上到連豊力老師的課,他講的例子非常好懂,所以我整理起來,幫助大家入門。

適應控制(Adaptive Control)
假設我騎一台腳踏車,但不知道後座載的人是誰,我只知道他的體重不變,所以我可以慢慢調整我踩踏板的力道、轉彎控制龍頭的幅度等等(這些就對應到控制系統的各種增益),讓我在載這個人的途中不斷讓騎車變得更順。

強健控制(Robust Control)
假設我騎一台腳踏車,後座載的人重量已知,但是這個人會隨著我騎的過程不斷晃動。我只知道他的體重不變,但他一晃動就會導致我的重心改變,假設我也知道他晃動的幅度,那我的技術就需要夠robust以確保在他的晃動範圍內不管他怎麼晃動,我都不會跌倒。

最佳控制(Optimal Control)
將我騎腳踏車這個系統完全用微分方程式來表示,只要我能夠把model建立起來,最佳控制就能幫我找到我踏板該踩多大力、轉彎時怎麼控制龍頭跟踏板等等。
最簡單的建模方法就是假設我踩踏板的力道是F,假設把腳踏車當作一質量為m的質點,那F=ma,那我就得到一個二次微分的方程式(因為加速度是位置的二次微分)。

隨機控制(Stochastic Control)
我騎一台腳踏車,可能因為有颱風或是萬里無雲導致我的空氣阻力是一個隨機變化的變數,但是空氣阻力大小會影響我的控制,因為阻力大我就得更用力地踩踏板以維持不會跌倒的速度,而隨機控制就提供一些方法讓我們可以合理地將空氣阻力model成一個隨機變數,用一個機率密度函數來表示,再併入控制器的設計。