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 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成一個隨機變數,用一個機率密度函數來表示,再併入控制器的設計。

學著看別人的動機

最近因為比賽的一些事情,必須努力地去猜測對方在想什麼,對看動機這件事的體會又更深了.

直接舉個例子,假設一位指導教授今天看到自己的一個學生能力不錯,希望鍛鍊他獨當一面做研究的能力,

那他最直接的方法可能就是先放著這個學生不管,然後看看他會怎麼成長,

但是對學生來說,他最直覺的感覺可能是-啊老師怎麼都不理我?

=============================

第一種發展:不看老師動機

這個學生只覺得老師都不關心他,而且也不好意思或不想跟老師反映自己的不高興,

反而對老師有了一個不信任感,所以即使遇到真的需要尋求老師協助的情況,他也不願意去找老師.

最後就是諸多抱怨+自認倒楣,然後可能還會跟大家說老師的不好.

=============================

第二種發展:嘗試去看老師的動機

一開始學生也覺得老師不太關心他,但學生仔細去觀察老師,

發現老師不像是不關心學生的那種老師,

於是他再更深入思考為什麼老師會這麼做?

他想到另一種可能性,也許老師是故意要訓練他找到方向跟做研究的能力,

於是他開始練習自己做研究,而且漸漸地也發現,

當他遇到真的不會的問題時,去問老師都能獲得很詳盡的回答,

更證實了他對老師動機的“猜測”.

最後畢業時他不但讓自己獨立研究的能力成長,

也學習到去看別人動機的重要性,而不是看到某人做了某件事就急著認定想必是怎樣怎樣.

=============================

當然,那位指導教授的動機也可能是真的不想管,

但是你真正去看別人的動機才會有稍微深入一點的想法,

不然說真的,你只看表面怎麼分辨這個人是好心還是壞心?

再進階一點,如果你看得清楚別人的動機,甚至能從他講的話透漏的訊息進一步看出對方想要的利益是什麼,不能讓步的是什麼,你豈不是談判大師?

Link

ROS Kong 2014照片集

這次去ROS Kong,見到很多厲害的人們啊~~包含MoveIt!的開發者、OpenCV跟ORK的開發者等等,還有岡田慧教授的演講也超猛= =
因為剛好卡到期末,又有比賽、展覽跟研究要忙,實在沒心力好好寫個心得文。

一言以蔽之,心得就是會讓人興起見賢而思齊之感吧。