影像處理 | 修課心得

打完這場戰爭, 我就要回鄉去跟我的未婚妻完婚, 寫完這一篇之後, 我就要努力去拚經濟了, 一個立Flag的概念?影像處理這門課程, 相對於其他兩門課程又傳統了一點, 但老師可以是底子相當深厚的大師, 雖然說這是一門歷史悠久的學問, 但也因為博大精深, 總有探究不完的知識在等著你。

soldiers-military-usa-weapons-87772.jpeg
打完這場戰爭, 我就要回鄉去跟我的未婚妻完婚? Photo by Pixabay on Pexels.com

會這麼說是因為, 自第一張相片面世以來, 影像處理的學問早已遍佈你我生活中, 從黑白影像處理, 頻譜分析, 失真還原, 雜訊處理, 甚至假新聞等, 在在都有影像處理的學問在裡面, 甚至自駕車, 無人機攝影等, 你都免不了要影像處理助你一臂之力。

在進入這門課之前, 首先你要知道一張數位影像的組成方式, 像素是什麼樣的概念, 接著知道數位影像跟影片的關係?但那還算其次, 如果可以, 請先大概知道一下Spatial domain和Frequency doamin, 如此將有助你在影像處理中更快上手。

在本課程中, 老師將會從大氣遙測影像開始介紹起, 或是其他比較生活化的例子, 這也是我敬佩老師的地方, 講學問不難, 要講的有感覺, 很不簡單; 接著會介紹影像強化、影像校正等等, 還有雜訊處理, 在學期中, 你將會有幾個課堂作業要繳交, 這些作業會以老師上課講解的方法為主, 你必須用程式去實作概念。

cheese neon light
Photo by Maksim Goncharenok on Pexels.com

在期末時, 還會有個論文報告, 一個期末作業, 最後則是期末筆試。

再多提一點好了, 本次作業的主軸是邊界抽取(Boundary Extraction)、填充(Image Filling), 影像校正, 把扭曲的影像轉為正常影像, 這在車牌辨識非常實用, 至於去雜訊則會在課堂上提, 還有就是影像增強, 將邊緣強化出來。

當然, 隔行如隔山, 不知道怎的, 我對影像就是感到很苦手, 雖說我曾做過影像加密, 把文章藏在圖片內之類的事情, 但畢竟都是10多年前的事情了, 慶幸的是老師沒想過要放棄我們, 不管我們再怎麼樣聽不懂….如果你真心對影像有興趣, 我會建議你一週排兩門課程就好, 這樣你會有更多的時間吸收老師的學問。

man in grey sweater holding yellow sticky note
Photo by hitesh choudhary on Pexels.com

最後, 我是有整理了一些當初的程式出來, 但實際上應該以老師課程的教學為主, 若有機會的話我會放到我的Github上, 也祝福你在這門課程有很多不同以往的收穫!

高等資料探勘與巨量資料分析 | 修課心得

這門課也是在第1學期選的課程, 對比其他課程, 這門課程會和物聯網應用與資料分析的性質比較相近, 或是應該說, 2門課程間可以互補。

從字面上來說, 高等資料探勘述說的會是比較深度的資料探勘科學, 而巨量資料分析則是著重在如何有效率, 並且用什麼工具來做巨量資料處理, 沒錯, 不要說什麼大數據啦, 就是Big Data啊, 有些用詞我們還是精準點, 不要被其他文化圈給影響了。

black farmed eyeglasses in front of laptop computer
當然, 一切聽起來都是那麼酷炫。Photo by Kevin Ku on Pexels.com

在進入這門課程之前, 你可能…可能不知道自己該準備些什麼, 就好比當初的我一樣, 但如果可以的話, 建議你要具備一定的程式能力, 譬如Java、Python, 老師不會特別教你怎麼寫程式, 認真來說的話, 你也不該花研究所學費來學這種東西; 除此之外, 你還需要對一些統計學有基本的概念, 這樣或許會讓你更快上手。

而在這門課程中, 你會有幾個不同的階段要面對, 在前半週, 課程主要是在介紹何謂巨量資料處理, 這裡會用到的工具是Hadoop, 也會提到Reverse-index, 簡單說, 老師在這裡主要是介紹MapReduce, 讓你知道怎麼對巨量資料進行處理、篩選, 在這裡你主要會寫到的語言是Java; 再來是會開始介紹Spark, 主要你會用到Python語言進行開發, 在熟知這些框架和觀念後, 你會有個期中作業要繳交。

接著來到課程的第二段, 這部分主要介紹觀念, 主要是針對高等資料探勘的觀念, 資料探勘的面相很廣, 當然應用也很多, 譬如說你偶爾會在購物網站上看到的「猜你喜歡」, 也許不一定每個人都會用這些技術來達成。

family playing charades at bonfire in garden
Photo by Askar Abayev on Pexels.com

在資料探勘階段, 你會了解到很多新東西, 譬如像 、Gini Index, 再到決策樹, 亂度森林等, 其中和Gini Index用來計算資料中的不純度, 或是分佈程度, 決策樹, 亂度森林則是用來輔助決策, 簡單說就是找出最佳解, 在這裡會建議你不要輕易放過一堂課, 因為每堂課都有相當多的重點要了解, 你甚至需要在課程結束後多多思考, 才能略為瞭解(就我來說是這樣)。

除了上述內容以外, 還會提到貝氏定理, 皮爾森乘績等, 最後你會需要繳交一到兩個期末專題, 還有一個期末筆試在等你。

two man hiking on snow mountain
又冷又高, 爬就對了。Photo by Flo Maderebner on Pexels.com

當然這樣的課程對我來說是相當艱苦又不容易掌握, 但我相當感謝老師的用心教學和指導, 簡單來說, 如果你沒經歷過一下腦力爆炸的過程, 自然很難有較大的收穫, 而我在第1學期的感受是天天都有爆炸感, 仔細回想, 老師總是用相當淺顯易懂的例子和生動的方式來讓我們了解, 只是學問是枯燥的, 理解是痛苦的, 時至今日我仍覺得這門課打開了我一部分竅門, 也開起了我研究的興趣。

最後我要給你的建議是, 掌握了上述的技巧後, 就用心去闖一闖吧, 全力以赴去學習, 你才會得到最大的收穫。

物聯網應用與資料分析 | 修課心得

有些事情可能要一鼓作氣地做完, 才不會顯得特別疲累, 最近寫了109學年度第2學期修的課程, 分別是數位系統測試、計算機網路嵌入式系統原理與應用, 其實真要說的話, 我還有第1學期的三門課沒紀錄, 只是當初可能一放寒假就跑去大吃大喝了, 接著一轉眼又開學, 壓根兒就忘了這件事情這樣。

當然這是個不好的行為, 可以的話建議不要學習, 不可以的話也不要學習。

「物聯網應用與資料分析」是我在第1學期修習的課程之一, 從字面上看來的確多著重在物聯網相關內容, 至於我們怎麼去實現物聯網呢?在這課程使用的是Ardiuno為基底, 語言不拘, 為什麼我會這麼說呢?主要是因為物聯網分為兩塊, 一是每個收集點, 也就是Ardiuno裝置本身, 再來則是接收資料的處理中心, 在這裡會是一個雲端伺服器, 而在這課程, 我們會著重在雲端段的處理和應用, 然後會有一些和深度學習有關的教學, 最後讓你可以做出一個有用的系統。

girl showing bright brainteaser in hands
當然,Useful的定義是因人而異的。 Photo by Monstera on Pexels.com

在進入這門課程之前, 你可能需要具備一些基礎的知識, 譬如Ardiuno是一個怎麼樣的存在, 在這個裝置上可以做些什麼事情, 如果可以寫Sketch語言是最好, 不行的話就是要能寫些C語言, 因為這兩語言是相近的, 只不過一個是古代野蠻人、一個是新生兒這樣。

再來你會需要了解IoT的原理, 清楚知道什麼是感測層, 還有雲端網路的架構, 彼此之間資料如何流動, 如果有這些知識, 接著你就要掌握伺服器端要如何實作, 你可以用PHP、Java、Python等, 重點是如何把資訊收回來, 並整理成你要的資料。

在這門課程, 首先你會先了解到Ardiuno如何運作, 接著學習到如何把資訊從裝置上收回來, 你可能會收到溫度、濕度之類的, 然後做一些轉化後, 再存入資料庫。

你會有一個簡單的Project。

接著有趣的來了, 老師會引導你進入AI的世界, 但先別慌, 你不會一腳就踏上尖峰, 我們會幾本地了解到機器學習、深度學習等, 而比較重要的, 是你會接收到關於Linear Regression, Logistic Regression等的原理, 並能知道如何應用, 譬如知道一些經典例子, 像是鐵達尼號生存預測等, 最後則是NN如何運作, 或許你不會為在學習這門課程後就變成專家, 但是你可以很清楚地了解到原理,把基礎打好。

在這裡你會有許多次的作業要繳交。

最後在期末, 會有個較大型的Project等你完成, 如果你喜歡, 就把你所有的idea都拿出來吧!

adult art awakening black and white
運用你的幻象例。Photo by Pixabay on Pexels.com

這門課相當生動又有趣, 老師很注重彼此之間的互動, 可以說是一個腦力激盪的好時間, 你不會因為課程壓力弄的你喘不過氣, 但你會因為努力思考而感到筋疲力盡, 但結果是好的, 在老師的循循善誘之下, 你能獲得許多以前你從沒想過的知識。

因為這門課的作業大多比較小, 主要用意是讓你把一些知識融會貫通, 所以我不會特別整理程式出來, 若有機會的話, 我會再補充到我的Github中, 祝福你也能像我一樣有許多收穫。

數位系統測試 | 修課心得

先前提到, 本學期修了三門課, 除了計算機網路, 嵌入式系統原理與應用之外, 再來就是數位系統測試了, 之所以最後才提這門課, 是因為我對這門課的掌握度最低, 起初, 剛聽完第一堂課時, 我就覺得我聽不懂。

後來又聽了第二堂, 猛然發現, 我真的聽不懂!?

事後我思考一下我的問題, 主要應該是因為我離開校園之後, 這十多年來接觸的都是High Level的軟工作(相比底層硬體邏輯), 所以猛然一接收到這課程的相關知識時, 就總有一個很大的Gap在前面等我。

back view of a woman standing on brown wooden planks
Photo by Kilian M on Pexels.com

那股仰望高山的感覺, 真的很難形容啊!

不過事情總是會有轉機的, 回到正題, 這門課主要是在講解如何針對積體電路、記憶體等做測試工作, 為什麼呢?因為我們每一個晶片做出來, 裡面其實包含了很多電路、記憶體, 而為了確保晶片可以如我們設計一樣好, 就要去進行驗證, 驗證看是否有什麼異常, 會不會有線路錯誤。

在進入這門課程之前, 你應該先掌握一些事情, 譬如AND、OR等的基本邏輯閘, 再來就是正反器, 除此以外, 你還需要了解序向邏輯電路, 有了這些基礎知識後, 你就更能進入這個世界, 如果可以, 就再多看一下積體電路的介紹, 記憶體如何讀寫。

board chip circuit circuit board
Photo by Pixabay on Pexels.com

而在這門課程中, 主要是介紹Fault model (假定會發生錯誤的狀況, 定義何謂沒有錯誤), Fault simulation 錯誤模擬, Design for testability, 來衡量測試計畫的可靠性, 而且你會學到, Fault coverage(錯誤涵蓋率), 將是用來衡量你的設計是否可以找出最多錯誤的好方法, 接著往下就有很多方法來改善Fault coverage了, D-Algorithm、PODEM都會是這裡的重點, 後面則是BIST和Boundary Scan, 講完這些後, 則看時間安排, 能不能講點Memory測試。

整理來說, 老師的學風很自由, 且總希望用盡任何方法來教會你, 甚至會花一大段時間帶你把整個演算法走一遍, 讓你可以更明白發生了什麼事情, 且上課不要害怕提問, 簡單來說, 我會覺得老師的教法很美式, 也很開放, 因此很注重學生提問, 我也很感謝老師的用心指導, 雖然說隔行如隔山, 但我是對數位系統測試有了基本的了解。

最後, 這門課主要有兩次測驗, 測驗方式很自由, 你可以Open book, 甚至帶自己的小抄, 但我想告訴你的是, 如果把上課內容都搞懂了, 基本上考試題目不算太難, 祝你好運!

計算機網路 | 修課心得

本學期修習了三門課程, 其中兩門會有比較多的實際操作, 除了嵌入式系統原理與應用外, 另一門就是這篇文提到的計算機網路了, 就這門課來說, 主要著重在講解網路的基礎知識, 包含最基本的網路傳輸介質、架構, 再到TCP/IP協定, 最後到DNS概念和原理等。

當然,這門課整體來說會比較乏味一點,但乏味的主因是題材, 而不是授課內容, 要想想, 如果對著你解釋TCP的各個Filed分別代表甚麼意思, 又或著跟你講解Slow-start的變動流程, 如果你本身對網路就沒太多興趣的話, 自然就不容易聽的津津有味, 除非你可以自己找點樂子, 譬如聯想看看, 在CDN架構底下, 若你的看片口味跟別人不一樣, 自然就會覺得影片載入的速度特別慢。

netflix on an imac
Photo by cottonbro on Pexels.com

在開始這課程之前, 你可以做一些準備, 這些資訊可以在搜尋引擎上輕易找到, 譬如像是常見網路架構, 中華電信提供的ADSL和第四台業者提供的Cable Modem是甚麼東西? 再來則是網路5層的定義, HTTP協定和TCP/IP協定的介紹等, 若是你對上述內容有一定了解的話, 自然可以跟上老師的腳步。

而課程的主要內容大概會分為幾個綱要: 首先是介紹常見的網路架構, 譬如區域網路、網域網路,甚至到衛星網路等, 他們之間有甚麼差異, 再到網路傳輸介質, 常見網路介質可能是雙絞線、銅線和光纖等, 這裡提到的網路, 其實跟你熟知的上網那種網路不完全相同, 因為你平常接觸的網路是屬於多媒體內容, 而這裡要告訴你的是我們應該怎麼用機器去傳輸這些內容, 將他從世界上其他不同地方蒐集起來, 塞到你手上的小盒子裡。

整體來說, 課程的介紹方式會由粗到細, 先告訴你這個世界的網路有多大, 再往下解釋E-Mail的機制, 是透過 SMTP、POP3來傳遞資料, 再來則是HTTP協定, 怎麼讓你可以看到網頁。

white printed label
Photo by Ethan Wilkinson on Pexels.com

講完HTTP之後, 則會開始解釋TCP和UDP差異, 相信到這裡, 如果你沒有相關工作經驗, 應該會覺得眼花撩亂, 但其實你只要記得, 這些協定, 不過就是確保機器和機器之間有共同的溝通方式和溝通語言罷了。

在講完TCP和UDP, 也會提到DNS的應用, 如何建置CDN, CDN是確保你可以好好看Netflix的好東西, DNS則是你上網的必備步驟, 打上一串網址, 然後進到那個網站。

當然, 上面講的都是屬於應用層的事情, 要記得前面我講過, 課程也會介紹到網路5層, 這5層分別負擔一些工作, 讓你的資料可以從你的應用程式, 怎麼到網路卡轉成電器訊號, 傳到另外一台電腦上。

而除了這些事情以外, 也會開始講解TCP如何進行3-Way HANDSHAKE, 4-WAY HANDSHAKE等等, 如果你要說聽到這裡就好…那我跟你說好沒好透呢!

後面則是TCP如何進行Slow-start, 再到 Router如何進行封包轉送, 如何把封包存在Queue裡面,當Queue滿了之後又會發生甚麼事情?最後則是NAT的概念和SDN的簡單介紹。

當然不能忘記怎麼切子網路, 還有Longest prefix match。

如果你要問我這是一門甚麼樣的課程, 那我會告訴你, 你每一次上課都不該錯過, 因為老師講課是會環環相扣, 在起初起初會講一個現象, 再細細往下解析為什麼會造成這個現象, 譬如說Router的Packet loss是怎麼造成, 又為什麼會發生這種狀況。

unrecognizable hacker with smartphone typing on laptop at desk
Photo by Sora Shimazaki on Pexels.com

在這門課程中, 老師講課方式相當明快, 且有一定節奏感, 但不會漏掉任何細節, 對我來說, 聽老師講課是相當有趣, 就像在陳述相當龐大的故事, 即便我曾在大學時修過相關課程, 但我仍深感到收穫良多, 也感謝老師細心準備課程, 讓我能夠快速吸收。

而在最前面提到,這門課也有一些實務內容, 但不外乎就是利用Wireshark來擷取封包, 幫助你更快了解實際網路裡面在收送封包是怎麼一回事, 大概會收到甚麼樣的封包這一類的, 這些都會歸在上課實作中, 一學期結束, 大概會有5次的實作要完成, 而除了這個以外, 還有回家作業, 也是幫助你更瞭解上課內容, 約莫也是有5次的回家作業要完成。

至於其他程式面的東西就沒有了, 這課程多著重在理論和實際操作, 跟程式較無關係, 以上, 希望對即將修課的你有所幫助。