# 從成大測量到台大測量組 -- 修課雜談 # :::danger 長文提醒,包含一點情緒性用詞,個人主觀想法多,專有名詞多 ::: *前情提要* * 成大推甄連備取都沒有之後錄取台大測量組,並成為trouble maker & sorry maker?!* * 大四時其實也修不少碩班的課了,但是好像台大都不能抵,只能重新修24學分...* * **碩一上** 1. **空間資訊平差** :::info  大二時期,我的平差被曾宏正老師當掉,大三時靠專題躲了一年,大四再修平差時也是低空飛過,驚險畢業(歷史總是驚人的相似~)。  來到台大,看大家都有修韓老師的平差,想說就修一下,沒想到還是跟坐隔壁的王小姐一起(再度)考不及格,這個例子說明平差分數具有空間相關性,坐在213研究室門口的是分數冷區。  韓老師上課講得算是很快,直接、間接、條件、Unify等模型都有講,這個課麻煩的是作業,要自己設計網形然後用不同模型解算,非線性模型收斂不了的話,不知道從哪本書裡面提到的"apparent bouncing"就出來扛了。這門課也是我與Matlab最後的邂逅,之後就沒再用過了。  期末專案是給同學自由發揮,我選擇一個跟傳統測量完全沒關係的主題 -- 使用間接觀測平差對影像去模糊。沒辦法,我就是喜歡亂搞。這個項目的核心想法很簡單,假設模糊的像素跟正常像素之間可以用一個簡單的線性式建立關係(y = ax + b之類的),影像有那麼多的像素,代表有那麼多的觀測量(多餘觀測搞定啦~),我甚至只要拿一小部分的模糊像素建立關係後,就可以修正整張影像其他模糊區域。反正最後我就是拿下面這張300x300的"心肥意冷"來做,90000個觀測量夠多了吧,Matlab矩陣reshape變成一維後又是簡單的間接平差搞定,最後做出來去模糊化可以達到99%,甚至只要33%左右的觀測量就可以達到!!!!    ![](https://hackmd.io/_uploads/Hka_SuGh3.jpg)  總之這堂課的作業比較麻煩,但是有交作業跟去考試跟期末報告,不會被當。(雖然我們這屆最後在研究中有用到平差的只有少數人...) ::: 2. **VR/AR** :::info  李老師的VR/AR會提到一些攝影測量和電腦視覺的基礎理論,之後會有三個比較主要的主題: 環景、Unity和期末專案。雖然都是小組作業,但是我看有時候也不是每個人都有做每次作業(我每次都有做,愛拚才會贏)。Unity就是看一個Youtuber的教學,用C#寫一個方塊滑行遊戲。環景部分就是手機拍一拍照,放到一個軟體跑,跑完就結束。AR部分好像全班就兩組有做出來,因為開發條件比較嚴苛(IOS要有開發者帳號、Android的系統版本不能太低,不然SDK會失效)。AR部分就借用王小姐的Pixel手機成功讓一個印度老哥製作的老鷹模型出現相機裡面,另外一組好像也是用那個老鷹,但是我有加一個出現特效,所以我覺得我贏了:100:?!  期末部分我們組選擇開發一個Meta Oculus Quest2上面的"工程應用App" -- 一言以蔽之就是讓用電量在增減房屋的瞬間計算後顯示。反正我們也是拿別人做好的一個遊樂園模型,使用Quest2裡面設置的行走套件,我主要負責的部分就是那個顯示分數跟後面的運算邏輯 -- 當房子加一層樓時,電量就+20,反之-20,差不多就是小學數學,完全不科學。顯示部分就是讓主視角的camera上新增一個View,把計算結果連結到View的C# Script上面。反正最後就是一個有模有樣的沙盒空間,至少我是這麼覺得。  以技術角度來說,我認為我們組的VR技術難度是最高的,因為1. 要用手柄控制舉起房屋,2. 疊上去的瞬間計算,3. 如何判定成功疊上去時不會因為物理碰撞而多次疊加數值。另外一組用哥吉拉的VR地震還是什麼鬼的,基本上只有一個用晃動Camera模擬地震的景象,其他人家都寫好了....,但老師好像很喜歡他們的,我是一個無言以對,就這樣吧。這堂課我認為比較像是通識課,畢竟老師的專業也比較偏向環景,所以AR/VR部分自學的量比較多。 ::: 3. **QGIS防災** :::info  第一次使用QGIS是在大三,洪榮宏老師開設很硬的GIS實作的第一次作業 -- 那瑪夏社區在88風災前後的土地使用變遷。當時好像是ArcGIS暫時用不到所以用QGIS在SPOT衛星上數化河床之類的鬼東西。來自NCDR的蘇老師會教QGIS基本操作跟一些防災應用,由於GIS軟體的基本功能大學都會的差不多了,換個介面很快能上手。期中考用自己的筆電考,也是給個兩大題數個小題,都是出圖。記得要帶充電線,不然中途沒電就尷尬了,有GIS的底還是不一樣,我看有人發現沒給SHP檔只給CSV就愣在那邊(後來老師還是有給她提示~)。期末的時候蘇老師還有帶全班去NCDR校外教學,拿一些紀念品回來(資料夾、錢包、POKER CARD...)。期末報告也是跟防災主題有關就可以,靠學長輕鬆Carry~  以上段落是修課學生視角,以下是課程助教視角。我碩二上就擔任這堂課的助教,我發現QGIS版本真的不太穩定,而且Mac和Windows又有一些差異。去年使用的是3.16版本,今年使用的是3.22,有一些功能直接壞掉,很麻煩。其次是老師是用Mac,計中電腦或同學電腦大多為Windows(畢竟工學院...),所以有些按鍵畫面選像不同。SAGA & GRASS等套件功能也是有些支援以前的3.16,3.22就死去。可能是大家發現這堂課不會太硬又高分,所以多了很多同學來修,要去跟計中換教室,讓我知道計中有一個工程師很混,媽的。想進去測試一下軟體,下午2點就給我搞消失,等1個小時還沒回來...,打工同學也跟我說可以先回去了,他大概又跑去哪混了。這堂課助教不需要批改作業,只要開好設備、Google Meet、作業區跟統計期末報告的順序就行,但是多數時候,我還是會多數時間留到6點解答問題(5:20下課),最後關冷氣門窗離開。這堂課我覺得所有測量組的研究生都應該修,畢竟台大這邊沒有辦法輕易拿到ArcGIS,所以...。 ::: * **碩一下** 1. **科學計算平台** :::info  這堂課的開課老師是陳俊杉教授,但是真正上課的是張慈慰博士(Aires)。這堂課名稱是科學計算平台,但是主要就是教Linux系統的操作,從指令、防火牆、登入、建立使用者、Bash Script,TCP/UDP協議等有稍微提到。這堂課的受眾是想要使用AI中心的伺服器進行Training / Simulation的研究生,因為上面的系統是Linux,大多數土木系的人大學沒學過這些。基本的Linux指令我在大學就有學過,在修這堂課之前那個系統操作我也自己摸會了,所以這堂課基本上就是增加一些使用Linux的經驗。期末考就是一個小時上機考,給一個root帳號,建立50個使用者帳號,並把登入密碼取消,使用RSA密鑰登入,建立一些防火牆規則(允許特定port連線、拒絕某些port訪問等)、修改DNS SERVER...。印象中好像沒有人被當拉,還記得有一個作業是需求評估,反正就是根據需求,列出應該添購的電腦設備,這個大概是比較實用的東西。Bash 語法真的有點艱澀,畢竟還是python script方便:smile:。  AI中心使用排程系統slurm,反正就是把你的job丟上去排隊,資源有就給你,沒有就排隊。運氣差的時候可能要等兩天才輪到,運氣好可以直接佔五個顯卡(V-100 32G)。sbatch、sinfo、scancel三個指令會了,這系統也就這樣了。值得一提的是這邊都是load module進來,所以套件版本不可控,盡量使用基礎的功能,太新的可能沒有。我使用Detectron2裡面竟然沒有DIOU(官網上說有提供),只好用GIOU。pip也是時靈時不靈,反正自己實現總時比較穩,但是去改原始碼什麼的就別想了...。 ::: 2. **合成孔徑雷達(SAR)** :::info  台大蔡老師的SAR跟成大蔡老師的SAR真的是差蠻多的。大四時,有修過成大的SAR,當下覺得數學公式很多,程式作業搞一個鳥叫調頻(chirp signal),後面又在SAR影像的Focusing,Row進行FFT,Column也要進行FFT,之後搞一搞才能成像。但是至少知道SAR的一些特性,側視、Multi-looking、Layover...。我印象深刻的是成大SAR期中考都是名詞解釋,可以帶小抄,但是期中考前要查60、70個專有名詞,每個解釋又都有3、4行英文,真的查到手斷掉(分工合作:smile:)。台大的SAR就是沒有太多數學,比較多的例子跟延伸,作業也沒有程式作業,大多數是申論題,解釋一個現象或是應用。期末報告算是對一個SAR的應用題目做一個回顧,然後以英文進行報告。簡單說就是找到一篇"好的"Review Paper,歸納統整一下,結束。我選的主題是SAR在地震災害的應用,反正也是介紹一些方法、方法的優缺點跟未來可以發展的方向。我是有修過SAR的人,覺得量還在可以接受的範圍,其他沒修過SAR的同學覺得老師講得太多太快了,FYI。 ::: 3. **Python GIS防災** :::info  蘇老師在下學期會開用Python做GIS的課,這堂課的人數跟QGIS相比會少很多。主要使用Geopandas、Rasterio、Xarray,分別處理vector data、raster data和NetCDF。對我來講比較新的東西是NeCDF格式,以前沒用過,但是跟Tensor差不多,就多張二維資訊加上三維時間。這堂課的期中考就比較難了(雖然我是覺得還好),要先request一個json檔,取出一些要用的資料,再做後面的分析,向是找一些最南最北的站、畫分層圖、加上底圖之類的。NetCDF考題則是要分析颱風動向、畫風向標、找特定站點的風速時間序列等等。  期末就是自己一組了,我原本的想法是該搞一搞NLP領域了,畢竟影像都弄那麼久了,想說換換口味。一開始題目是社群資訊應用於防災,就是去FB/PTT/DCARD蒐集跟災難有關的訊息,看有沒有辦法做一些應用,但是結果是太難。比較成氣候的是推特(Twitter or 改名後的X),可是資料要錢,其他不用錢的資料大多沒有原始的坐標,只能靠NLP抽取關鍵字再想辦法定位,太過複雜。所以我又走回老路了,但是我這次想要結合新學到的NetCDF,因此我決定搞一個颱風動向預測,使用NetCDF的時間風速變化圖,用Conv-LSTM做預測。首先,這個想法有結合新東西,其次Conv-LSTM只聽過沒用過。還好會用AI中心系統,不然Conv-LSTM根本超難Train。此外,我也在這時發現NetCDF網站有流量限制,無法下載超過2GB的檔案,所以要多次下載,因此我就寫了一個script來節省時間。搞定動態後還缺少一點感覺,所以我就clone一個repo,增加訓練資料再改點別的,train一個颱風風速預測的CNN模型來收尾。  碩二下當助教時,期末已經改成多人一組了。NetCDF也改到期中後才教,速度有放緩一些。由於python套件經常有版本衝突,所以建議要用全新的虛擬環境來裝上課用到的套件。助教依然不用改作業,但是可能需要留意老師上課是否有給出一些並未清楚解釋的範例,像是有個IOT空氣盒子,他每次request只給100筆,其他資料在其中一個next_url欄位,這樣就要用迴圈解決,老師上課這個例子就提到而已,所以得幫忙提供範例程式給同學準備期中考(有人來問這個會不會考...)。總體來說,這堂課推薦給對程式跟GIS結合有興趣的人。 ::: * **碩二上** 1. **資料科學計算(較為基礎的最佳化演算法課)** :::info  這堂課是電機和統計大數據學程的必修課,修課人數蠻多的,但外系去修的其實不多。老師是香港人,講普通話會有點口音,習慣一下就好。最佳化從統計機率、線性規劃開始,之後講到線代的PCA、SVD等矩陣分解,最後才是啟發式最佳化方法,包含爬山、退火、基因、蟻群、粒子等比較經典的算法。期中考是好幾頁的選擇題、計算題跟最後的程式題。題數比較多,前面有些計算我都寫一半,後面要INVERSE就放棄了,最後的程式題是老師出的最佳化題目,大意是你是一個安保公司的設計師,要幫一個美術館設計安保人員站位,有一些條件,像是每個房間都要至少有一個人看著、一人看多間房安全分數會下降...。房間有20個左右,我使用GA解,但是光是前面的列出每個站點可能的組合就沒時間了,最後我就只能大概寫一寫之後要幹嘛...。大家好像都是跟我一樣情況,根本寫不完整個程式,老師後來才說寫pseudo code就可以 :disappointed_relieved:。  這堂課的作業都是不給解答的,所以我自己寫的那些PCA / SVD / QR / LU / GA / SA等都不知道是不是完全正確的。期末專案也是老師出一個題目,看寫多少就給多少分。有點忘記題目到底是什麼,只記得用到GA跟SA,然後SA屌打。  這堂課算是兩年中第二硬的課,蠻多東西都要自己造輪子(花時間但是可以PO IG限時動態裝B),更硬的是這堂課的進階班。雖然不給解答,但是這也是讓我可以時間思考一下寫出來的到底對在哪,或有可能在錯在哪。尤其老師對題目的敘述有時候並不太嚴謹,所以要自己考慮一些額外的限制場景,算是貼近實際生活會碰到的情形,我覺得蠻好的,至少不會太理論學術。 ::: 2. **雙偏極雷達專題** :::info  先說結論,這堂課不推薦給非理學院的同學。這堂課太多理論了,對於工學院學生來說,看不到到底如何應用,會有點躁。作業就兩個,其中一個就雷達的基本配備的名詞解釋,另外一個就比較抽象了。給定一些雷達的參數,希望算一下造成一定RCS(雷達散射截面),水滴的最大尺寸是多大。這題的公式橫跨好幾頁ppt,又跳來跳去,直接矇逼,最後只好靠科技輔助,修修改改交出去。期末報告我們組報了一篇Deep Learning應用在天氣雷達的文章,老師說Nice Try,看來對外系同學還是友善的。這堂課蠻多大氣系的博士或碩士會去修,有時候真的難懂他們到底在說什麼,只能灰溜溜的下課,哈哈。 ::: * **碩二下** 1. **近期最佳化程序的最新進展** :::info  這堂就是兩年來修過最硬的課,沒有之一。修課人數也直接少到剩下個位數,上課教室也是被分配到一個邊疆地帶(新生大樓5F的角落)。這次課程就不會再講基礎的東西,變成從啟發式算法開始,爬山、GA、SA複習之後,就開始講演化策略(CO-EVOLUTION)、競爭演化、合作演化等等。最後現代最佳化主要是講NSGA2跟CMA-ES,這兩個都是很多頁PPT才能講完pseudo code,這邊我就要抱怨一下,老師的pseudo code都是用R寫的,看上去真的有點詭異。這學期比較專注在算法實現的細節了,像是簡單的爬山算法也可以加入一些自適應的法則(1/5 rule)來挑選子代。好消息是這堂課沒有作業,但是期中跟期末project直接給一個月寫(你就知道難度了 :smile: )。沒作業不代表平常不用試著寫一點,不然期末就會GG,雖然最後提早練習其實也沒啥搞頭。這堂課除了本身難度高之外,上課時間也是9:00 - 13:00,連上四節中午不休息,好幾次12:30都有人==誤闖==我們的教室,以為是空教室可以吃飯睡覺。  期中題目是排班最佳化(15個工人30天班),設定限制一大堆,像是每天早班、晚班、大夜班至少要多少人,每個工人又有各自訂好要休息的日期、夜班又不能連續排三天以上...。目標函數計算也很複雜,每個人都要三套公式要算。最佳化如果想直接兩天交換那就太天真了,隨便交換就會卡到訂好要休息的日期,變成不合格的班表。反正整個就是很複雜,還要比較每個最佳化方式的效率,SA再度證明強悍的性能。  期末題目是要做基因特徵挑選,從9000個columns,5000個rows裡面挑選最適合用來預測5種疾病的columns,預測模型就是簡單的logistic regression。除了GA搭配各種進化策略之外,還要用IF-ELSE TREE直接進行預測(雖然我最後寫成Decision Tree了)、自己寫全部的NSGA2、TRAIN了幾百個小的DNN搭配進化策略進行網路的權重交換(能夠交換的前提是依據我自己的一個假設)。期末中間我又確診,在家裡躺了2個禮拜,最後合作競爭就沒寫完,只寫了pseudo code跟其解釋。  這堂課真的是很累,但是成就感也是最多的,畢竟期末寫了一千多行 :satisfied:。我一拿到作業都會先咒罵一番(媽的,這怎麼搞),然後慢慢突破,寫著寫著就會開始想,這邊是不是這樣寫會更快(不只算法,程式也想最佳化一下)。最佳化的兩堂課讓我體悟,往往需要付出很多努力才能換得一點進步,還有早餐不要吃不然會肚子痛,反而喝可爾必思度過四節課的效果比較好。 ::: * **NCDR暑期實習** :::info  升碩二的暑假去NCDR實習,組別是資訊組。不過實習不是蘇老師來帶,是另外兩位老師。這次給的主題依然是要結合社群資料和防災,反正最後就是看台鐵東部的一些小站,看要不要廢站,廢站理由就可以跟防災扯上一些關係。我負責的是Google Map的評論爬蟲(中心有Dcard/Ptt但沒有Google的)和爬完之後的NLP文字趨勢分析。評論爬蟲的部分有點麻煩,因為每次都只能撈100筆,之後要用一定規律更改url才能繼續撈,但是Map有反爬蟲機制,所以我又設置隨機停止幾秒並且更換HTTP Header,從Chrome換Safari換Firefox,不然一下就爬不動了。NLP部分是使用LDA,原理到現在都不是太懂,但是有做出來一些文字雲,大 guy 就4這樣。整體來說,我覺得NCDR實習比較偏向給大學生的,碩士生來可能就比較學不到太多。 ::: * **地球科學繪圖(退選)** :::danger  主要教授GMT繪圖,反正就是可以出==很精美的地圖==。但是這也是問題所在,我今天是圖出了,有表達到就可以(工學院思維),但是這堂課老師直接講目的是要出==很精美的地圖==,這也代表要花很多時間搞一張圖,這就直接勸退我了。老師人感覺不錯,但就是課程不太符合我的想像而已。 ::: * **結語**  碩班的課其實想修的還有很多,但是時間就是這麼多,如何在有限時間內學到最多想學的也是一個最佳化的問題,只是這個問題的限制不斷變化,研究進度、身體健康、外務等都在互相拉扯。我們追求著最好的自己,而這一過程充滿了各種挑戰和機會。沒人知道自己是否已經達到了「全域最小值」,即我們的最高潛能和真正的目標。我們往往陷入「局部最小值」,即舒適區,感到安逸且滿足於目前的成就,卻可能錯過了更大的可能性。我們需要隨機初始化新的想法、挑戰和目標,透過多次嘗試和不斷學習,以找到我們真正的熱情所在,並逐步朝著全域最小值邁進。有時,我們可能會陷入低谷,感到失敗和挫折,就像算法可能會停滯在局部最小值。但是,正是這些困難和挑戰,塑造了我們的性格,幫助我們成長並找到生命中的真正價值。 以上這些華美的言詞都不是重點,重點是這兩年的過程,還有你的態度。                                  --- 肥貓貓 2023.08.11