2025年9月21日 星期日

衡量降噪後的語音品質指標:SNR, PESQ, STOI

 

衡量降噪後的語音品質與可理解度的效能評估指標:

  • 訊噪比(SNR)
  • 語音品質感知評估(PESQ)
  • 短時客觀可懂度(STOI)

SNR → energy ratio (engineering view).

兩個訊號能量比

\[ \text{SNR} = 10 \log_{10} \frac{\|s\|^2}{\|s - \hat{s}\|^2} \]


PESQ 

在 20 世紀 90 年代末至 2000 年 ITU-T 標準化階段,研究人員對大量人類受試者進行了聽覺測試。一段語音會由一群人主觀評分,分數範圍 1 = 差,5 = 優,這種平均分數稱為 MOS(Mean Opinion Score,平均意見分數),代表人耳對語音品質的主觀感受。



PESQ(Perceptual Evaluation of Speech Quality)

目標:  PESQ(x, x′) ≈ MOS(x′), 即   (x, x')  ---> PESQ 模型 --->  MOS-like 的分數 

在當年的人類測試中,受試者只聽 xx′,然後給出 MOS(x′) 作為品質評分。但這種方式需要大量受試者,成本高、速度慢。因此,我們希望有一個模型(例如 PESQ),它能同時利用  做比較,並且自動算出一個與 MOS 接近的分數(MOS-like),就能取代昂貴的主觀實驗


要建立 PESQ,必須先有: clean 語音 xx和經過 degradation 的 xx′,還有 MOS(x′) 作為 ground truth。 這個 PESQ 可以模擬人耳如何聽到「差異」, 並自動輸出一個介於 –0.5 到 4.5 之間的類 MOS 的分數, 數值越高代表語音品質越好(越接近原始乾淨語音)。


 STOI (Short-Time Objective Intelligibility)

STOI 衡量的是 乾淨語音 vs 處理後語音短時頻帶能量包絡 上的相關性
  • 基於短時頻帶的相關性 → 相關係數愈高 → 語音可懂度愈好

  • 分數範圍介於 0 ~ 1

    • 越接近 1 → 表示語音幾乎完全可懂

    • 越接近 0 → 表示語音幾乎無法理解

在頻帶處理上,STOI 使用 1/3-octave band filters,這是一組模仿人耳頻率解析度的濾波器,把語音分解成符合聽覺特徵的頻帶。STOI 並不是直接比較波形,而是比較這些 能量包絡 的相似性。這是因為人耳在理解語音時,主要依靠的是 振幅起伏模式(例如母音的共振峰、子音的爆破音)。這些較慢的振幅變化(約 10–50 Hz 範圍)就是所謂的 能量包絡,而它們正是影響可懂度的關鍵。












2025年9月16日 星期二

YOLO 物件偵測的兩大誤判:漏檢與誤檢

 

模型常見的兩種誤判情況

1. 漏檢 (False Negative)
在標註階段,如果一張圖片中實際有 3 個 A 物件,但標註時只框選了其中 1 個,那麼剩下的 2 個未被標註的 A 物件,在模型訓練時就會被誤當作「背景」。這會造成模型學到錯誤資訊,認為「某些 A 物件其實是背景」,結果在預測時無法正確辨識,導致漏檢的情況發生,並使召回率 (Recall) 顯著下降。

2. 誤檢 (False Positive)
舉例來說,在黑熊偵測任務中,大型黑狗、山豬,甚至陰影下的其他動物,都可能因外觀特徵相似而被模型誤判為黑熊。這就是誤檢 (False Positive)。

為了減少誤檢,可以在訓練過程中加入「負樣本 (Negative Samples)」。所謂負樣本,是指那些容易被誤判成黑熊的圖片(如黑狗、山豬等),但不提供任何標註框。YOLO 的訓練機制中,如果模型讀取到一張圖片(例如 dark_dog.jpg),卻找不到對應的標註檔(.txt 檔),它會自動將該圖片視為「負樣本」。透過學習這些負樣本,模型能更準確地掌握「背景」與「非目標物」的特徵,進而提升判斷力,有效降低誤檢發生率。



2025年9月14日 星期日

在 Google Drive 建立捷徑存取共用資料夾

 

當你在 Google Drive 中,對一個分享的資料夾建立「捷徑」,你的帳號裡就會出現一個檔案,指向該共用資料夾。如此一來,當你在 Google Colab 掛載 Google Drive 時,只要存取這個捷徑,就能直接進入並使用他人分享的資料夾內容。

這樣你mount 了你的google driver 你也可以找到我這裡分享的google drive的內容.



只要存取這個捷徑,就能直接進入並使用他人分享的資料夾內容

2025年9月4日 星期四

[Python硬體控制教學] 如何用 I2C 精準讀寫單一 Bit 或特定位元?

Quesion: 

在GPIO_I2C通訊協定與EEPROM存取"章節中,教的I2C存取是以1個byte(8個bit)為單位做讀及寫,請問有模組(module)或function可以import,只單獨做I2C 1個bit讀寫,或是連續的2或3個bit讀寫嗎?


  沒有這樣的函數, 原因是I2C 傳輸資料的最小的單位就是一個位元組 (8個bits),
  每傳輸完一個位元組,接收方就會回傳一個 ACK/NACK位元
   你要寫入bit, 一般作法都是 將值讀回後, 進行位元運算 bitwise operation, 再將值寫回
  例如:

    original_value = bus.read_byte_data(DEVICE_ADDR, CONFIG_REGISTER)
    new_value = original_value | (1 << 2)
    bus.write_byte_data(DEVICE_ADDR, CONFIG_REGISTER, new_value)

2025年7月21日 星期一

SimCLR : 重複圖片偵測技術

 1.) SimCLR 是一種微調RestNet一種作法,使其 能夠對於類似的圖片產生相同的向量 至於如何"類似" 由自己定義。定義為相似的圖片, 例如把同一個片其經過角度旋轉、平移、亮度不同、加入些許雜點的細微變化, 仍視為相同的,SimCLR 模型必須建立相同的特徵向量。


simclr 的訓練方法其概念同CLIP model





2.) 一旦有了這個模型後接著我們可以利用clustering 方法,如k-means 或HDBSCAN 進行圖片的分群, 同群表示其群內圖片應極為類似。

2025年6月29日 星期日

AI時代的程式學習思維

 在 AI 時代學習程式設計,我認為我們應該建立一種全新的學習心態。像 ChatGPT 這類生成式 AI 工具,雖然已經被廣泛運用在編程中,但這並不表示我們可以完全依賴它。對初學者來說,最重要的是先培養獨立思考與動手實作的能力,透過親自寫程式來熟悉邏輯與架構。當有了一定基礎之後,再適時引入 AI 工具來協助學習與優化,才能真正建立起紮實的能力。

雖然 AI 功能越來越強大,但在處理複雜、非結構化的大型程式碼,或是在除錯過程中,仍然存在許多限制。因此,我們人類的優勢,應該更加著重於高層次的系統思考、問題分析,以及與他人協作與溝通的能力。

我鼓勵每位學習者,不只是把自己當成「寫程式的人」,而是要用「專案經理」的角色來看待自己的學習與應用。學會整合 AI 資源、分析問題、運用適當工具來解決真實世界的挑戰,這才是程式設計的真正價值所在。

至於資料結構與演算法,我更傾向將它們視為一種「解決問題的思維模式」,而不只是考試科目。像是 Google 地圖預測即時交通狀況,就是結合了資料結構、演算法與機器學習的應用範例,充分展現出這些基本功在現實世界中的重要性。

在這個 AI 快速演進的時代,邏輯思考依然是學習程式的核心,我們也必須不斷調整自己的學習方式,與時俱進,才能真正掌握未來的關鍵能力。




2025年6月25日 星期三

YOLO物件偵測的效能指標: mAP@IoU

 

mAP (mean Average Precision) for Object Detection

mAP@0.5 . 0.5 bounding box對Grond Truth 的IoU, 須達到的threshold才認定為物件。該物件為某一類旳預測機率稱為confidence。進行PR-curve 的計算。  

對每一個類別都用 PR-Curve 決定其效能, PR-Curve 底下所圍成的積即為 Average Precision,
  • 針對此類別的所有的bounding box ,計算 Recall 及 Precision
  • 在不同的recall 下(由0到1), 所對應的precision 所形成的面積,即為此類別的Average Precision,面積為 0~1 .
接著將所有類別的Average Precision值加總取平均, 即是mAP ,  此即為模型在預測各種類別的平均能力



https://youtu.be/R8tb0yNr-Qc