Ứng dụng học sâu phân tích tín hiệu Điều khiển tự Động sử dụng Âm thanh phương án nghiên cứu ứng dụng cao củ âm thanh trong phát tín hiệu
Âm thanhĐịnh nghĩaÂm thanh là các dao động cơ học của các phân tử, nguyên tử hay các hạt làm nên vật chất và lan truyền trong vật chất như các sóng Âm thanh, giống như nhiều sóng, được đặc trưng bởi tần số, bước sóng, chu kỳ, biên độ và vận tốc lan truyền [2]
Hình 1.1: Âm thanh 1 Đối với thính giác của người, âm thanh nghe được thường dao động trong dải tần số từ khoảng 16 Hz đến khoảng 20 000 Hz Tuy nhiên âm thanh cũng có thể được định nghĩa rộng hơn, tuỳ vào ứng dụng, bao gồm các tần số cao hơn hay thấp hơn tần số mà tai người có thể nghe thấy, không chỉ lan truyền trong không khí mà còn truyền trong bất cứ vật liệu nào Cả tiếng ồn và âm nhạc đều là các âm thanh.
Trong việc truyền tín hiệu bằng âm thanh, tiếng ồn là các dao động ngẫu nhiên không mang tín hiệu.
Tín hiệu âm thanhÂm thanh là một dạng tín hiệu mang tính liên tục, đặt ra thách thức khi chúng ta muốn biểu diễn và xử lý trên máy tính, một hệ thống làm việc với các giá trị số rời rạc Để vượt qua rào cản này và tận dụng các ưu điểm của xử lý số, chúng ta cần chuyển đổi tín hiệu âm thanh sang dạng số Các tập tin âm thanh phổ biến như MP3, WAV không chỉ đơn thuần là các định dạng dữ liệu mà chúng ta thường gặp trên máy tính và thiết bị di động, mà còn là biểu diễn số hóa của các tín hiệu
1 https://www.freepik.com âm thanh, giúp thuận tiện trong việc lưu trữ, truyền tải và xử lý các thông tin âm thanh.
Hình 1.2: Chuyển đổi âm thanh từ tín hiệu liên tục sang tín hiệu số 2
Quá trình chuyển đổi tín hiệu từ dạng liên tục sang dạng số được gọi là quá trìnhAnalog-to-Digital Conversion (ADC) Đây là quá trình chuyển đổi dữ liệu thường được sử dụng trong nhiều thiết bị điện tử hiện đại.
Trích chọn đặc trưng của âm thanhĐặc trưng của âm thanhCác đặc trưng âm thanh là mô tả về âm thanh hoặc tín hiệu âm thanh có thể được đưa vào các mô hình thống kê hoặc học máy để xây dựng các hệ thống âm thanh thông minh Các ứng dụng âm thanh sử dụng các đặc trưng như vậy bao gồm phân loại âm thanh, nhận dạng tiếng nói, gắn thẻ âm nhạc tự động, phân đoạn và phân tách nguồn âm thanh, làm sạch nhiễu âm thanh, truy xuất thông tin âm nhạc và nhiều ứng dụng khác.
Các đặc trưng khác nhau ghi lại các khía cạnh khác nhau của âm thanh Ở trong nghiên cứu này, ta tập trung vào các đặc trưng âm thanh trong miền tín hiệu Bao gồm:
Miền thời gian: Đây là những đặc trưng được trích xuất từ dạng sóng của âm thanh gốc Ví dụ: Năng lượng, năng lượng Root Mean Square(RMS) và tỷ lệ vượt qua 0.
Miền tần số: Những đặc trưng này tập trung vào các thành phần tần số của tín hiệu âm thanh Tín hiệu thường được chuyển đổi từ miền thời gian sang miền tần số bằng cách sử dụng biến đổi Fourier Ví dụ: Tỷ lệ năng lượng dải tần, trọng tâm phổ, và lưu lượng phổ.
2 https://dewesoft.com/blog/what-is-adc-converter
Các đặc trưng âm thanh trong miền thời gianBiểu diễn tín hiệu âm thanh trong miền thời gian hoặc miền thời gian - biên độ, đại diện cho kỹ thuật biểu diễn cơ bản nhất, trong đó tín hiệu được thể hiện thông qua sự biến đổi của biên độ theo thời gian [3].
Hình 1.3 minh họa một ví dụ về biểu diễn âm thanh trong miền thời gian - biên độ Trạng thái im lặng (câm) được biểu diễn dưới dạng giá trị 0 Giá trị của tín hiệu âm thanh có thể âm hoặc dương, phụ thuộc vào áp suất âm thanh có cao hơn hay thấp hơn so với áp suất cân bằng trong trạng thái im lặng Đoạn âm thanh trong hình đã được mã hóa với độ phân giải 16 bit, với tốc độ lấy mẫu là 16000Hz, và được chuẩn hóa để biên độ nằm trong khoảng từ -1.0 đến 1.0.
Hình 1.3: Tín hiệu âm thanh “Lên” theo miền thời gian a) Năng lượng
Năng lượng của một tín hiệu âm thanh là tổng cường độ của tín hiệu đó theo miền thời gian [2] Được cho bởi công thức:
|x(N)| 2 trong đó,E là năng lượng của đoạn âm thanh, x(N) là giá trị biên độ của mẫu thứ N. b) Root Mean Square Energy
Root Mean Square Energy (RMSE) là một chỉ số thống kê dùng để đo mức độ năng lượng hoặc công suất tổng cộng chứa trong một tín hiệu âm thanh trong một khoảng thời gian [3] Công thức toán học để tính RMSE của một chuỗi tín hiệu âm thanh xvới N mẫu là:
|x(N)| 2 c) Zero Crossing RateZero Crossing Rate (ZCR) chỉ ra tần số thay đổi của dấu biên độ tín hiệu Nói cách khác, nó chỉ ra tần số trung bình của tín hiệu [4] Công thức tính ZCR được biểu diễn như sau:
2N trong đó,sgn[x(N)] là dấux(N)và có giá trị là 1 nếu x(N)nhận giá trị dương, giá trị là -1 nếux(N) nhận giá trị âm.
Các đặc trưng âm thanh trong miền tần sốCác đặc trưng âm thanh trong miền tần số được suy diễn từ phổ âm thanh của tín hiệu âm thanh Phổ âm thanh hiển thị các tần số khác nhau có trong âm thanh.
Hầu hết các âm thanh được tạo thành từ một hỗn hợp rung động phức tạp [1] Hình 1.4 bên dưới biểu diễn tín hiệu âm thanh 3 được tọa thành từ hỗn hợp hai tín hiệu 1 và 2.
Hình 1.4: Tín hiệu âm thanh là sự kết hợp của các sóng hình sin và cosin 3
Biểu diễn miền thời gian không chỉ ra được các thành phần tần số và phân bổ tần số của tín hiệu âm thanh Biểu diễn miền tần số được suy diễn từ biểu diễn miền thời gian bằng biến đổi Fourier Biến đổi Fourier tách tín hiệu thành cách thành phần tần số riêng lẻ Trong miền tần số, tín hiệu được biểu diễn bởi biến độ biến đổi theo tần số, chỉ ra tổng năng lượng tại các tần số khác nhau Biểu diễn miền tần số của tín hiệu âm thanh được gọi là phổ của tín hiệu âm thanh.
Hình 1.5 là phổ của tín hiệu âm thanh Xuất phát từ phổ tín hiệu, ta có thể dễ dàng nhận ra ra phân bổ năng lượng theo dải tần số Ta sử dụng biến đổi Fourier rời rạc (Discrete Fourier Transform - DFT) để suy diễn ra phổ tín hiệu:
N =0 x(n)e jn ω k trong đó, ω k = 2πk N ,x(n)là tín hiệu rời rạc với N mẫu, k là DFT bin.
Nếu tần số lấy mẫu tín hiệu là f s Hz thì tần số f k của bin k sẽ là: f k =f s ω k
Nếux(n)có giới hạn thời gian là N thì nó có thể khôi phục hoàn toàn IDFT của N mẫu tần số như sau: x(n) = 1
Các giá trị DFT và IDFT được tính toán hiệu quả bằng thuật toán biến đổi Fourier nhanh (Fast Fourier Transform - FFT).
Hình 1.5: Tín hiệu âm thanh “Lên” theo miền tần số
Như đã nói ở trên, DFT làm việc với tín hiệu rời rạc có giới hạn độ dài N Tuy nhiên, trong thực tế, rất nhiều tín hiệu trong khoảng thời gian dài, rất khó để tính toán với N lớn Để giải quyết vấn đề này, người ta sử dụng STFT (Short-time Fourier Transform) Trong đó, tín hiệu và độ dài lớn được chia thành các khối gọi là khung dữ liệu (frame) và DFT áp dụng cho từng khung Khung được hình thành bằng cách nhân tín hiệu gốc với hàm cửa sổ (windowing) Thông thường độ dài khung khoảng 10 đến 20ms [8]. a) Băng thông (Bandwidth)
Băng thông của tín hiệu âm thanh là dải tần số của tín hiệu âm thanh đó Tín hiệu nhạc thường có băng thông cao hơn tín hiệu tiếng nói Để tính băng thông người ta lấy chênh lệch tần số giữa tần số cao nhất với tần số thấp nhất của các thành phần phổ khác không Trong một số trường hợp, “nonzero” được xác định khoảng 3dB trên mức câm [1].
Băng thông quan trọng trong việc xác định chất lượng âm thanh và cũng ảnh hưởng đến cách mà thông tin âm thanh được truyển tải và xử lý trong các hệ thống âm thanh. b) Phân bổ năng lượng
Phân bổ năng lượng của dữ liệu âm thanh là cách mà năng lượng được phân phối trên các tần số khác nhau trong tín hiệu âm thanh Thông thường, phân bổ năng lượng được biểu thị dưới dạng biểu đồ và đồ thị, thể hiện mức độ đóng góp của mỗi tần số đến tổng năng lượng của tín hiệu Đặc trưng này rất có ích trong việc phân loại và nhân dạng âm thanh vì câu lệnh hay tín hiệu khác nhau sẽ có những dải tần số khác nhau [1].
Việc tính toán năng lượng dải tần số cao và tần số thấp là cần thiết Ví dụ tần số tín hiệu tiếng nói ít khi vượt qua 7kHz Do vậy, ta có thể chia toàn bộ phổ theo đường ngang 7kHz: nửa dưới thuộc tần số thấp và nửa trên thuộc tần số cao Tổng năng lượng của tệp âm thanh được tính bằng tổng năng lượng của mỗi mẫu trong tệp đó. c) Điều hòa (Harmonicity) Đặc trưng thứ ba trong miền tần số của âm thanh là điều hòa Điều hòa của âm thanh liên quan đến tính chất của âm thanh khi các tần số là các bội số của một tần số cơ bản nào đó Cụ thể, khi một âm thanh có tính điều hòa cao, có nghĩa là âm thanh này chứa đáng kể các thành phần tần số là các bội số nguyên của tần số cơ bản Các thành phần tần số này được gọi là harmonics, và chúng tạo nên cấu trúc âm thanh có âm điệu và âm sắc phong phú [1].
Một ví dụ rõ ràng về âm thành điều hòa cao là tiếng hát của con người hoặc âm nhạc được chơi trên các nhạc cụ cổ điển Trong các trường hợp này, các tần số xuất hiện trong giọng hát hoặc âm nhạc là các bội số nguyên của tần số cơ bản tọa nên âm điệu dễ nhận diện Ví dụ, phổ âm thanh của nốt G4 trên tiếng sáo có dải tần số cao độ (pitch) như sau: 400Hz, 800Hz, 1200Hz, 1600Hz, Ta có thể dễ dàng nhận thấy f 0 = 400Hz là tần số cơ bản của âm thanh Các thành phần có tần số nf được gọi là điều hòa của nốt nhạc.Tuy nhiên đối với các âm thanh không điều hòa, tần số các bước không phải là các bội số nguyên của các tần số cơ bản, dẫn đến âm thanh có cấu trúc tần số phức tạp và không có âm điệu dễ nhận diện. Điều hòa là một thuộc tính quan trọng trong việc phân tích và xử lý tín hiệu âm thanh, đặc biệt là trong các ứng dụng như nhận diện giọng nói hay nghiên cứu âm thanh. d) Cao độ (Pitch) Đặc trưng thứ tư của miền tần số trong dữ liệu âm thanh là cao độ Cao độ của âm thanh là thuộc tính mà người nghe cảm nhận các tần số của một âm thanh Nó liên quan đến cảm giác về sự “cao thấp” của âm thanh [1].
Cao độ thấp: Âm thanh có tần số thấp tạo ra cảm giác của một cao độ thấp, thường được miêu tả như “âm thanh trầm” hoặc “âm thanh thấp”.
Cao độ cao: Âm thanh có tần số cao tạo ra cảm giác của một cao độ cao, thường được miêu tả như “âm thanh bổng” hoặc “âm thanh cao”.
Tần số càng cao thì cao độ càng cao và bước sóng càng ngắn Cao độ là đặc trưng chủ quan, nó có quan hệ nhưng không tương đương với tần số cơ bản Tuy nhiên, trong thực tế, chúng ta sử dụng các tần số cơ bản để xấp xỉ cao độ. e) Ảnh phổ (Spectrogram) Ảnh phổ của âm thanh là một biểu đồ hai chiều mà trên trục hoành thể hiện thời gian và trục tung thể hiện tần số Màu sắc hoặc cường độ của các điểm ảnh trên biểu đồ đại diện cho mức năng lượng của âm thanh tại một thời điểm và tần số cụ thể [1].
Thông quả ảnh phổ, có thể hiểu được cách năng lượng của âm thanh được phân phối trên các tần số và thay đổi theo thời gian Điều này cho phép phân tích và biểu đồ hóa các yếu tố âm thanh như cao độ, độ lớn và các tần số cơ bản.
Hình 1.6 chỉ ra ảnh phổ của một tín hiệu âm thanh Ảnh phổ mô tả rõ ràng các quan hệ giữa thời gian, tần số và biên độ.
Hình 1.6: Ảnh phổ của tín hiệu âm thanh “Lên”
Đặc trưng âm thanh MFCCMFCC là một phương pháp để trích xuất các đặc trưng âm thanh thường được sử dụng trong các mô hình nhận dạng giọng nói hay phân loại giọng nói MFCC cho ra kết quả là các hệ số cepstral từ bộ lọc Mel trên phổ lấy được từ các file âm thanh chứa giọng nói Quá trình trích chọn đặc trưng MFCC như sau [5] [6]:
Hình 1.7: Quy trình xử lý của phương pháp MFCC 4
Do âm thanh là dạng tín hiệu liên tục, ta cần lấy mẫu tại các khoảng thời gian cách đều nhau với một tần số lấy mẫu xác định (sample rate) để chuyển từ dạng tín hiệu liên tục về dạng rời rạc VD: sample_rate = 8000 →trong 1s lấy 8000 giá trị.
Hình 1.8: Số hóa dữ liệu âm thanh với tần số lấy mẫu xác định 4
Tai người nghe được âm thanh trong khoảng 16Hz → 20.000Hz Theo định lý lấy mẫu Nyquist–Shannon: Với một tín hiệu có các tần số thành phần≤f m , để đảm bảo việc lấy mẫu không làm mất mát thông tin, tần số lấy mẫuf s phải đảm bảof s
≥ 2fm. Vậy để đảm bảo việc lấy mẫu không làm mất mát thông tin, tần số lấy mẫu f s
= 44100Hz Tuy nhiên trong nhiều trường hợp, người ta chỉ cần lấy f s = 8000Hz hoặc fs = 16000Hz.
Do đặc điểm cấu tạo thanh quản và các bộ phận phát âm nên tiếng nói có đặc điểm: các âm ở tần số thấp có mức năng lượng cao và các âm ở tần số cao lại có mức năng lượng khá thấp Trong khi đó, các tần số cao này vẫn chứa nhiều thông tin về âm vị Vì vậy chúng ta cần 1 bước pre-emphasis để kích thích các tín hiệu ở tần số cao.
Hình 1.9: Pre-emphasis một đoạn âm thanh 4
Bước 3: Cửa sổ hóa (Windowing)
Thay vì biến đổi Fourier trên cả đoạn âm thanh dài, ta trượt 1 cửa sổ dọc theo tín hiệu để lấy ra các khung rồi mới áp dụng biến đổi Fourier rời rạc (Discrete
4 https://jonathan-hui.medium.com
4 https://jonathan-hui.medium.com
Fourier Transform - DFT) trên từng khung này Tốc độ nói của con người trung bình khoảng 3, 4 từ mỗi giây, mỗi từ khoảng 3-4 âm, mỗi âm chia thành 3-4 phần, như vậy 1 giây âm thanh được chia thành 36 - 40 phần, ta chọn độ rộng mỗi khung khoảng 20 - 25ms là đủ rộng để bao 1 phần âm thanh Các khung được xếp chồng lên nhau khoảng 10ms để có thể thu lại sự thay đổi về nội dung.
Hình 1.10: Các khung dữ liệu được xếp chồng lên nhau 4
Tuy nhiên, việc cắt khung sẽ làm các giá trị ở 2 biên của khung bị giảm đột ngột về giá trị 0, điều đó sẽ dẫn tới hiện tượng: khi DFT sang miền tần số sẽ có rất nhiều nhiễu ở tần số cao Để khắc phục điều này, ta cần làm mượt bằng cách nhân khung dữ liệu với một vài loại cửa sổ Có một vài loại cửa sổ phổ biến là Hamming window, Hanning window có tác dụng làm giá trị biên khung giảm xuống từ từ.
Hình 1.11: Các loại cửa sổ phổ biến 4
Hình 1.12: Tín hiệu âm thanh khi chập với các loại cửa sổ khác nhau 4
Hình 1.12 sẽ cho ta thấy rõ được tác dụng của các sửa sổ này Trong các hình nhỏ, hình 1 là khung được cắt ra từ âm thanh gốc, âm thanh gốc là sự kết hợp của hai sóng của hình 2 Nếu cắt trực tiếp, tín hiệu miền tần số tương ứng là hình 3, ta có thể thấy tín hiệu này chứa rất nhiều nhiễu Nếu áp dụng các cửa sổ như Hanning, Hamming, Blackman, tín hiệu miền tần số thu được mượt hơn và tương ứng sóng gốc ở hình 2.
4 https://jonathan-hui.medium.com
Bước 4: Biến đổi Fourier rời rạc
Trên từng khung, ta áp dụng DFT - Discrete Fourier Transform theo công thức dưới đây:
Mỗi khung ta thu được một danh sách các giá trị độ lớn tương ứng với từng tần số từ 0 → N Áp dụng trên tất cả các khung, ta đã thu được 1 ảnh phổ như hình dưới đây Trục x là trục thời gian, trụcy thể hiện dải tần số từ 0→ 10000Hz, giá trị biên độ tại từng tần số được thể hiện bằng màu sắc Qua quan sát ảnh phổ này, ta nhận thấy các tại các tần số thấp thường có biên độ cao và ngược lại.
Hình 1.13: Ảnh phổ của tín hiệu âm thanh lên
Tuy nhiên trong nhiều bài toán, đặc biệt là trong bài toán nhận dạng giọng nói, ảnh phổ không phải là sự lựa chọn hoàn hảo Vì vậy ta cần thêm vài bước tính toán để có thể thu được dạng MFCC, tốt hơn, phổ biến hơn, hiệu quả hơn ảnh phổ.
Chúng ta đều biết cách cảm nhận của tai người là phi tuyến tính, không giống các thiết bị đo Tai người cảm nhận tốt ở các tần số thấp, kém nhạy cảm với các tần số cao Vì vậy, ta cần một cơ chế để máy tính có thể xử lý âm thanh tương tự như vậy.
Bộ lọc Mel được thiết kế dựa trên nguyên lý về cách con người cảm nhận và xử lý âm thanh trong một phạm vi tần số cụ thể Đặc điểm quan trọng của bộ lọc Mel là nó tập trung vào các khoảng tần số quan trọng mà con người cảm nhận tốt hơn, thay vì phân chia tần số theo cách đều nhau Quá trình tạo ra bộ lọc Mel thường bắt đầu bằng việc chuyển đổi từ tần số Hertz sang đơn vị Mel bằng công thức:
700)Trong đó, f là tần số trong đơn vị Hertz và M el(f) là tần số tương ứng trong đơn vị Mel.
Hình 1.14: Bộ lọc thông dải Mel 4
Sau đó, ta bình phương các giá trị trong ảnh phổ thu được DFT power spectrum.
Sau đó, ta áp dụng một tập các bộ lọc thông dải Mel trên từng khoảng tần số Giá trị đầu ra của từng bộ lọc là năng lượng dải tần số mà bộ lọc đó bao phủ được.
Ta thu được Mel-scale power spectrum Ngoài ra, các bộ lọc dùng cho dải tần thấp thường hẹp hơn các bộ lọc dùng cho dải tần cao.
Bộ lọc Mel trả về phổ công suất của âm thanh, hay còn gọi là phổ năng lượng.
Thực tế rằng con người kém nhạy cảm trong sự thay đổi năng lượng ở các tần số cao, nhạy cảm hơn ở tần số thấp Vì vậy ta sẽ tính log trên Mel-scale power spectrum. Điều này còn giúp giảm các biến thể âm thanh không đáng kể để nhận dạng giọng nói.
4 https://jonathan-hui.medium.com
Bước 6.2: Biến đổi ngược Fourier rời rạc
Bước tiếp theo của việc trích chọn đặc trưng MFCC là áp dụng biến đổi ngược Fourier rời rạc (Inverse Dicrete Fourier Transform - IDFT) với đầu vào là các hệ số phổ mel của bước trước, từ đó ta sẽ thu được ở đầu ra là các hệ số cepstrum Như đã mô tả ở phần trước, giọng nói của chúng ta có tần số F0 - tần số cơ bản và các formant F1, F2, F3 Tần số F0 này đặc trưng cho cao độ giọng nói ở từng người.
Học sâu (Deep learning)Định nghĩaHọc sâu là một tập con của các phương pháp học máy, dựa trên các mạng neural nhân tạo với việc học biểu diễn Tính từ “sâu” trong học sâu liên quan đến việc sử dụng nhiều lớp trong mạng neural Các phương pháp sử dụng có thể là học có giám sát, học bán giám sát hoặc học không giám sát Dưới đây là cách thức hoạt động của một mạng học sâu:
Học sâu hoạt động bằng cách khám phá các cấu trúc phức tạp trong dữ liệu mà chúng trải nghiệm Cụ thể là xây dựng các mô hình tính toán bao gồm nhiều lớp xử lý, mạng có thể tạo ra nhiều mức trừu tượng để biểu diễn dữ liệu.
Ví dụ, một mô hình học sâu được gọi là mạng neural phức hợp có thể được đào tạo bằng cách sử dụng số lượng lớn (hàng triệu) hình ảnh, chẳng hạn như những hình ảnh có chứa mèo Mạng neural này sẽ học hỏi từ các điểm ảnh có trong hình ảnh mà nó thu được Nó có thể phân loại các nhóm điểm ảnh đại diện cho các đặc điểm của mèo, với các nhóm đặc điểm như móng vuốt, tai và mắt cho biết sự hiện diện của mèo trong hình ảnh. Đối với nhiều tác vụ, chẳng hạn như thị giác máy tính, nhận dạng giọng nói hay xử lý ngôn ngữ tự nhiên, dịch máy và robot, hiệu suất của các hệ thống học sâu vượt xa so với các hệ thống học máy truyền thống.
Cũng bởi những khả năng vượt trội, việc xây dựng các hệ thống học sâu yêu cầu nhiều hơn so với các hệ thống học máy thông thường Trong mô hình học sâu có hàng nghìn siêu tham số (hyperparameter) cần được điều chỉnh để mô hình có được hiệu quả cao và áp dụng vào những bài toán thực tế.
Ưu điểm của phương pháp học sâuTương thích tốt với kiểu dữ liệu phi cấu trúc: Ưu điểm lớn nhất của học sâu là khả năng hoạt động tốt với dữ liệu phi cấu trúc Điều này đặc biệt phù hợp khi phần lớn dữ liệu kinh doanh hiện nay đều không có cấu trúc Hình ảnh, văn bản và giọng nói được cho là những định dạng dữ liệu phổ biến nhất được các doanh nghiệp sử dụng.
Hình 1.17: Các kiểu dữ liệu phi cấu trúc phổ biến 5
Tự động hóa các tính năng: Một trong những lợi thế khi sử dụng học sâu là khả năng tự động hóa các tính năng, các thuật toán học sâu có thể tự tạo ra các tính năng mới từ một số lượng hạn chế ngay trong dữ liệu đào tạo mà không cần con người can thiệp Điều này đồng nghĩa với việc học sâu có thể thực hiện những nhiệm vụ phức tạp đòi hỏi yêu cầu kỹ thuật cao với các tính năng mở rộng.
Khả năng tự học tốt hơn: Các lớp mạng neural trong học sâu cho phép mô hình trở nên hiệu quả hơn, thực hiện được các tính năng phức tạp, tác vụ tính toán chuyên sâu Điều này cũng giúp cho mô hình có thể thực hiện đồng thời nhiều hoạt động phức tạp Học sâu thể hiện sự vượt trội hơn, đặc biệt trong các nhiệm vụ nhận thức máy, còn được gọi là khả năng hiểu được các dữ liệu đầu vào như: hình ảnh,âm thanh và video giống như con người, liên quan đến các bộ dữ liệu phi cấu trúc.
Một số thuật toán nhân dạng và phân loại âm thanhTín hiệu âm thanh là một lĩnh vực quan trọng trong học sâu, và có nhiều thuật toán phức tạp và đa dạng được phát triển để xử lý và hiểu tín hiệu âm thanh Dưới đây, chúng ta sẽ xem xét một số thuật toán học sâu phổ biến và quan trọng trong xử lý âm thanh:
Mạng neural tích chập (Convolutional Neural Networks - CNN):
CNN ban đầu được phát triển cho xử lý hình ảnh, nhưng chúng cũng được
5 https://www.techtarget.com/searchbusinessanalytics/definition/unstructured-data áp dụng thành công trong xử lý âm thanh CNN có khả năng trích xuất đặc trưng từ tín hiệu âm thanh bằng cách sử dụng các lớp tích chập, giúp nhận dạng mẫu âm thanh và phát hiện cạnh.
Mạng neural đệ quy (Recurrent Neural Networks - RNN): RNN là mạng neural có khả năng xử lý dãy thời gian, thường được sử dụng trong việc xử lý giọng nói Long Short-Term Memory (LSTM) và Gated Recurrent Unit (GRU) là biến thể phổ biến của RNN.
Deep Speech: Deep Speech là một kiến trúc học sâu đặc biệt được phát triển để nhận dạng giọng nói Nó sử dụng LSTM hoặc GRU để biểu diễn âm thanh và thường cung cấp hiệu suất rất cao trong các nhiệm vụ nhận dạng giọng nói.
Cơ chế Attention: Cơ chế attention đang được sử dụng rộng rãi trong các kiến trúc xử lý âm thanh, đặc biệt là trong các mô hình dựa trên Transformers.
Nó giúp mô hình tập trung vào các phần quan trọng của tín hiệu âm thanh.
Mạng neural tích chậpMô hình mạng neural tích chập (CNN) là một trong những mô hình được sử dụng chủ yếu để giải quyết các bài toán nhận dạng và phân loại hình ảnh Tuy nhiên với sự phát triển của các phương pháp trích chọn đặc trưng âm thanh, mô hình CNN cũng có thể sử dụng trong các bài toàn nhận dạng và phân loại âm thanh.
Mô hình CNN huấn luyện và kiểm tra, mỗi dữ liệu đầu vào sẽ được chuyển qua một loạt các lớp tích chập với các bộ lọc nhân (Kernals), tổng hợp lại các lớp được kết nối đầy đủ (Full Connected) và áp dụng hàm kích hoạt (Activation function) để phân loại đối tượng [9]
Hình 1.18: Luồng xử lý của mạng CNN 6 b) Lớp tích chập
Lớp tích chập (Convolution Layer) là lớp đầu tiên để trích xuất các tính năng từ dữ liệu đầu vào Tích chập duy trì mối quan hệ giữa các phần tử thông qua các đặc trưng âm thanh bằng cách sử dụng các bộ lọc nhân nhỏ trượt qua dữ liệu âm thanh đầu vào Mỗi phép tích chập áp dụng một bộ lọc nhân lên một phần của dữ liệu âm thanh để trích xuất thông tin đặc trưng từ âm thanh đó.
6 https://towardsdatascience.com/basics-of-the-classic-cnn-a3dce1225add
Hình 1.19: Dữ liệu đầu vào và đầu ra của một lớp tích chập 7 c) Bước nhảy
Bước nhảy (Stride) là số phần tử thay đổi trên ma trận đầu vào Khi bước nhảy là 1 thì ta di chuyển các nhân 1 phần tử Khi bước nhảy là 2 thì ta di chuyển các bộ lọc nhân đi 2 phần tử và tiếp tục như vậy.
Hình 1.20: Lớp tích chập hoạt động với bước nhảy là 2 8 d) Đường viền Đường viền (Padding) là một tham số quan trọng được sử dụng để kiểm soát kích thước của đầu ra sau khi áp dụng lớp tích chập Có hai loại đường viền chính:
Valid Padding: Không có đường viền được thêm vào xung quanh biểu diễn đầu vào trước khi áp dụng phép tích chập Trong trường hợp bộ lọc nhân không phù hợp với dữ liệu đầu vào, phép tích chập sẽ loại bỏ một số phần tử ở sát bên phải.
Same Padding: Same padding thêm các giá trị đường viền (thường là giá trị 0) vào xung quanh biểu diễn đầu vào trước khi tích hợp phép tích chập Same padding thường được sử dụng khi bạn muốn duy trì kích thước của đầu ra sao cho nó giống với đầu vào.
7 https://towardsdatascience.com/beginners-guide-to-understanding-convolutional-neural- networks-ae9ed58bb17d
8 https://medium.com/@RaghavPrabhu/understanding-of-convolutional-neural-network-cnn- deep-learning-99760835f148
Hình 1.21: Valid và Same Padding e) Hàm kích hoạt
Trong một mạng neural nhân tạo, hàm kích hoạt (activation function) đóng vai trò là thành phần phi tuyến tại đầu ra của các neural Một số hàm kích hoạt phổ biến trong mạng tích chập: hàm Sig- moid, hàm Tanh, hàm ReLu,
Hàm ReLU được sử dụng phổ biến trong các tầng tích chập và tầng kết nối đầy đủ, có dạng: f(x) =max(0, x) Hình 1.22: Các hàm kích hoạt 9 Ưu điểm:
– Tính đơn giản của ReLU giúp tăng tốc quá trình huấn luyện.
– ReLU không bị chặn như hàm Sigmoid hay Tanh nên sẽ không có hiện tượng vanishing gradient.
– Nếu input nhỏ hơn 0 thì ouput của ReLU sẽ bằng 0 (dying relu) dẫn đến hiện tượng mạng neural không hoạt động và không học được gì hoặc học rất chậm.
– ReLu do không bị chặn trên nên có thể gây ra hiện tượng exploding gradient, gradient của mạng neural trở nên quá lớn, đôi khi đạt đến giá trị vô cùng, làm cho quá trình đào tạo mạng trở nên không ổn định và thậm chí không thể thực hiện được.
Vì những nhược điểm trên, người ta đã phát triển thêm những hàm khác dựa trên ReLU:
9 https://medium.com/@shrutijadon/survey-on-activation-functions-for-deep-learning-9689331ba092
Hàm ReLU6: ReLu6 đã giới hạn bên trên của hàm ReLU là 6 đối với input lớn hơn 6 Công thức hàm ReLu6 như sau: f(x) = min(max(0, x),6)
Hàm LeakyReLU: LeakyReLU khăc phục nhược điểm dying relu bằng cách sử dụng một siêu tham sốα Công thức hàm LeakyReLU như sau: f(x) = max(αx, x)
Hình 1.23: Hàm ReLU6 và LeakyReLU
Mạng neural đệ quyMô hình mạng neural đệ quy được thiết kế để xử lý dãy dữ liệu theo dạng chuỗi thời gian Đặc điểm quan trọng của mạng RNN là khả năng duy trì trạng thái bên trong mạng và chia sẻ trạng thái đó qua các bước thời gian khác nhau Điều này cho phép xử lý dữ liệu bằng cách giữ lại thông tin từ các bước trước đó và sử dụng nó để ảnh hưởng đến các bước sau này [10]
Hình 1.24: Luồng xử lý của RNN 10
Mạng đệ quy LSTMMạng RNN thường không hiệu quả trong việc xử lý các chuỗi dài hạn trong dữ liệu chuỗi vì vật mạng đệ quy Long Short-term memory được xây dựng để có thể xử lý vấn đề này Mạng LSTM được thiết kế để lọc đi những thông tin không cần thiết và một kiến trúc có thể nhớ dài hạn hơn [11]
10 https://dominhhai.github.io/vi/2017/10/what-is-rnn/
Hình 1.25: Luồng xử lý của LSTM 11
Input gatei: Cổng vào giúp quyết định bao nhiêu lượng thông tin đầu vào sẽ ảnh hưởng đến trạng thái mới Quyết định bằng cách nào, thông qua đặc điểm của hàm sigmoid (đầu ra nằm trong khoảng [0,1]), như vậy khi một vector thông tin đi qua đây, nếu nhân với 0, vector sẽ bị triệt tiêu hoàn toàn Nếu nhân với 1, hầu hết thông tin sẽ được giữ lại.
Forget gatef: Cổng quên là cổng quyết định sẽ bỏ đi bao nhiêu lượng thông tin đến từ trạng thái trước đó.
Output gate o: Cổng ra là cổng điều chỉnh lượng thông tin có thể ra ngoài yt và lượng thông tin truyền tới trạng thái tiếp theo.
Tiếp theo, g thực chất cũng chỉ là một trạng thái ẩn được tính dựa trên đầu vào hiện tại x t và trạng thái trước ht−1 Tính hoàn toàn tương tự như input gate, chỉ thay vì dùng sigmoid, ta dùng tanh Kết hợp hai điều này lại để cập nhật trạng thái mới.
Cuối cùng, ta có ct là bộ nhớ trong của LSTM Nhìn vào công thức, có thể thấy nó là tổng hợp của bộ nhớ trước ct−1 đã được lọc qua cổng quên f, cộng với trạng thái ẩn g đã được lọc bởi cổng vào i Cell state sẽ mang thông tin nào quan trọng truyền đi xa hơn và sẽ được dùng khi cần Đây chính là long term memory.
Sau khi cóc t , ta sẽ đưa nó qua cổng ra để lọc thông tin một lần nữa, thu được trạng thái mới h t
Các độ đo đánh giá mô hìnhConfusion MatrixConfusion matrix là một công cụ được sử dụng để đánh giá hiệu suất của một mô hình phân loại Nó thường được sử dụng để so sánh dự đoán của một mô hình với thực tế Confusion matrix bao gồm các phần chính sau:
True Positive (TP): Số lượng các trường hợp được dự đoán đúng là positive.
True Negative (TN): Số lượng các trường hợp được dự đoán đúng là negative.
False Positive (FP): Số lượng các trường hợp được dự đoán là positive nhưng thực tế là negative.
False Negative (FN): Số lượng các trường hợp được dự đoán là negative nhưng thực tế là positive.
Accuracy score (Độ chính xác)Cách đơn giản và hay được sử dụng nhất là Accuracy score (độ chính xác) Ta chỉ cần tính tỉ lệ giữa số dự đoán đúng và tổng số dữ liệu cần dự đoán trong tập dữ liệu kiểm thử Accuracy score được tính theo công thức sau:
T P +F P +F N +T N trong đó, n là số mẫu nhận dạng đúng và N là tổng số mẫu cần nhận dạng Từ đó, ta có thể thấy, mô hình có Accuracy score càng cao thì càng tốt vì sẽ nhận dạng chính xác nhiều nhất.
12 https://medium.com/@cngnguyn_82011/deep-learning-với-tensorflow-2-0-992e42a84049
Precision và RecallCách tính sử dụng Accuracy score ở trên chỉ cho chúng ta biết được bao nhiêu phần trăm lượng dữ liệu được phân loại đúng mà không chỉ ra được cụ thể mỗi loại được phân loại như thế nào, lớp nào được phân loại đúng nhiều nhất, và dữ liệu thuộc lớp nào thường bị phân loại nhầm vào lớp khác Ta có thể tính toán các giá trị Precison và Recall để giải quyết vấn đề trên Hai đại lượng này được tính theo công thức sau:
Precision cao đồng nghĩa với việc độ chính xác của các điểm tìm được là cao.
Recall cao đồng nghĩa với việc True Positive Rate cao, tức tỉ lệ bỏ sót các điểm thực sự positive là thấp.
Bài toán thực nghiệmLưu đồ thuật toán và xây dựng hệ thốngHình 2.1: Nguyên lý hoạt động của hệ thống
Hệ thống sẽ được chia làm 2 khối khi sử dụng:
Khối 1: Máy tính hoặc thiết bị điều khiển của người dùng Người dùng ra lệnh bằng giọng nói, câu lệnh sẽ được thiết bị thu âm và xử lý Kết quả đầu ra là chuỗi văn bản tương ứng với câu lệnh.
Khối 2: Raspberry nhận tín hiệu thông qua giao tiếp socket và mạng internet để thực hiện các thao tác điều khiển. b) Lưu đồ thuật toán hệ thống Hệ thống hoạt động theo lưu đồ sau:
Hình 2.2: Lưu đồ thuật toán hoạt động của hệ thống
Sau các bước thu thập, tiền xử lý, trích xuất đặc trưng của dữ liệu cũng như chọn được mô hình học sâu phù hợp với nghiên cứu, hệ thống sẽ hoạt động với 7 bước sau:
Bước 1: Khởi động hệ thống bao gồm: Máy tính hoặc thiết bị điều khiển của người dùng và xe robot.
Bước 2: Thực hiện việc kết nối giữa thiết bị điều khiển và xe thông qua giao tiếp socket và mạng internet.
Bước 3: Người dùng ra lệnh bằng giọng nói thông qua giao diện người dùng GUI của thiết bị điều khiển.
Bước 4: Máy tính hoặc thiết bị điều khiển xử lý giọng nói và chuyển đổi thành văn bản.
Bước 5: Máy tính hoặc thiết bị điều khiển gửi chuỗi văn bản đến xe robot thông qua giao tiếp socket và mạng internet.
Bước 6: Chương trình trên xe robot điều khiển động cơ tương ứng với câu lệnh được gửi đến.
Phần cứng hệ thốngRaspberry PiRaspberry Pi là một dòng vi xử lý mạnh mẽ và thiết bị máy tính nhỏ gọn có kích thước gần bằng một thẻ tín dụng Nó được phát triển bởi Raspberry Pi Foundation với mục đích giúp người dùng tiếp cận công nghệ và học tập về lập trình, điện tử ngay từ những giai đoạn ban đầu.
Raspberry Pi chủ yếu là một bo mạch tích hợp CPU, RAM, cổng kết nối và các cổng I/O, cung cấp môi trường phát triển linh hoạt để người dùng có thể thực hiện nhiều dự án khác nhau.
Hình 2.3: Bo mạch đơn Raspberry Pi 13 b) Ưu điểm & nhược điểm Ưu điểm:
– Kích thước nhỏ gọn: Raspberry Pi có kích thước gần bằng một thẻ tín dụng, dễ dàng để lắp đặt và tích hợp vào nhiều dự án.
– Giá cả phải chăng: Raspberry Pi là một lựa chọn phổ biến cho người dùng muốn tiếp cận công nghệ với chi phí thấp.
– Hỗ trợ đa hệ điều hành: Raspberry Pi có thể chạy nhiều hệ điều hành khác nhau, từ các phiên bản tùy chỉnh của Linux đến Windows 10 IoT.
– Cộng đồng lớn và hỗ trợ mạnh mẽ: Cộng đồng người dùng năng động và diễn đàn để hỗ trợ người dùng mới.
– Hiệu suất có hạn: Raspberry Pi có hạn chế về hiệu suất xử lý và bộ nhớ, không phù hợp cho các ứng dụng đòi hỏi sức mạnh tính toán cao.
– Khả năng xử lý đa nhiệm: Đối với công việc yêu cầu xử lý đa nhiệm nặng, Raspberry Pi có thể gặp hạn chế và chậm hơn so với các máy tính mạnh mẽ hơn.
– Giới hạn của cổng kết nối: Mặc dù có nhiều cổng kết nối, nhưng Raspberry Pi có thể gặp hạn chế với số lượng cổng và tốc độ truyền dữ liệu so với máy tính cỡ lớn.
Nhờ những ưu điểm tuyệt vời, Raspberry Pi vẫn là một công cụ rất mạnh mẽ và linh hoạt cho nhiều ứng dụng Đặc biệt là trong việc học tập, thử nghiệm và phát triển các dự án điện tử và IoT.
13 https://fptshop.com.vn/tin-tuc/danh-gia/raspberry-pi-172935
Module L298NModule L298N là một loại mạch cầu H điều khiển động cơ, được sử dụng rộng rãi trong các ứng dụng điều khiển động cơ DC Nó là một thành phần điện tử phổ biến và hữu ích trong việc điều khiển động cơ và motor DC hai chiều.
Cầu H là một kiến trúc điều khiển cho phép đảo ngược hướng chuyển động của động cơ DC bằng cách điều chỉnh dòng điện thông qua nó Module L298N thường đi kèm với hai cầu H độc lập, cho phép điều khiển độc lập hai động cơ DC hoặc một động cơ có hai cực (ví dụ như động cơ servo). b) Ưu điểm & nhược điểm Ưu điểm:
– Điều khiển động cơ hai chiều: L298N cho phép điều khiển động cơ DC theo cả hai hướng, cho phép chuyển động tiến và lùi.
– Cấp dòng lớn: Nó có khả năng cấp dòng lên đến 2A cho mỗi đường điều khiển, giúp điều khiển đa dạng loại động cơ DC.
– Dễ sử dụng: L298N có giao diện điều khiển đơn giản, dễ lắp đặt.
– Mất năng lượng: Do cấu trúc của cầu H, L298N có thể tiêu tốn một lượng năng lượng khá lớn, gây ra sự lãng phí năng lượng trong quá trình điều khiển.
– Kích thước và trọng lượng: So với các phương pháp điều khiển động cơ khác như driver đa chức năng, L298N có thể lớn và nặng hơn, không phù hợp cho các ứng dụng yêu cầu kích thước nhỏ gọn.
Bỏ qua một số nhược điểm, L298N là một giải pháp điều khiển động cơ DC phổ biến và được sử dụng rộng rãi trong nhiều ứng dụng điện tử, đặc biệt là trong các dự án mà không yêu cầu hiệu suất cao.
14 https://hshop.vn/products/mach-dieu-khien-dong-co-dc-l298
Motor DCMotor DC là một loại động cơ hoạt động từ nguồn điện xoay chiều Đây thường là một loại động cơ nhỏ, thường được sử dụng trong các dự án điện tử như robot nhỏ, mô hình, hoặc các thiết bị cần động cơ để thực hiện các chuyển động cơ bản.
Loại động cơ sử dụng trong nghiên cứu này có có điện áp hoạt động từ 3V đến 6V Điều này làm cho nó trở nên phù hợp với nhiều ứng dụng cần động cơ nhỏ, yếu và tiết kiệm năng lượng.
Hình 2.5: Động cơ motor DC 3-6V 15 b) Ưu điểm & nhược điểm Ưu điểm:
– Đơn giản và dễ sử dụng: Motor DC 3-6V thường có cấu trúc đơn giản, dễ lắp đặt và sử dụng.
– Điều chỉnh tốc độ dễ dàng: Có thể điều chỉnh tốc độ quay của motor DC thông qua việc thay đổi điện áp đưa vào.
– Kích thước nhỏ gọn: Loại motor này thường nhỏ gọn, phù hợp với các ứng dụng yêu cầu không gian nhỏ.
– Hiệu suất tốt ở mức điện áp thấp: Motor này có khả năng hoạt động tốt ở mức điện áp thấp, từ 3-6V, giúp tiết kiệm năng lượng.
– Không có hệ thống điều khiển tích hợp: Motor DC 3-6V thường cần sử dụng thêm các linh kiện khác để điều khiển tốc độ, hướng di chuyển hoặc các chức năng khác.
– Không giữ tốc độ ổn định: Tốc độ quay của motor có thể bị ảnh hưởng bởi nhiều yếu tố như tải trọng, điện áp đưa vào, và ma sát.
Mặc dù có một vài nhược điểm, tuy nhiên motor DC 3-6V vẫn là lựa chọn phổ biến và hữu ích trong nhiều ứng dụng Điều này đặc biệt đúng khi cần một giải pháp linh hoạt, dễ sử dụng và không yêu cầu quá nhiều công suất Nhưng ưu điểm của motor này giúp nó phù hợp cho nhiều dự án điện tử, robo, và các ứng dụng nhỏ khác.
15 https://www.amazon.com/Electric-Magnetic-Gearbox-Plastic-Yeeco/dp/B07DQGX369
Dữ liệu thực nghiệmThu thập và tiền xử lý dữ liệuTrong nghiên cứu này, ta sẽ xem xét việc xây dựng một mô hình học sâu để điều khiển một xe robot thông qua bốn câu lệnh đơn giản: “Lên”, “Xuống”, “Trái”, “Phải”.
Tập dữ liệu bao gồm các mẫu thu âm của bốn lệnh điều khiển này Để đảm bảo tính khách quan, các file audio được thu âm từ nhiều người khác nhau, và trong điều kiện môi trường bên ngoài khác nhau, tạo thành tổng cộng 100 mẫu dữ liệu cho mỗi lệnh, và tổng cộng 400 mẫu dữ liệu sẽ được sử dụng để huấn luyện và đánh giá mô hình.
Trước khi có thể trích chọn các đặc trưng từ các mẫu dữ liệu, ta cần thực hiện các bước tiền xử lý để đảm bảo rằng dữ liệu đều có cùng một định dạng và các thông số chung Cụ thể, các thông số cần được chuẩn hóa gồm:
Tần số lấy mẫu (sample_rate): Đảm bảo rằng tất cả các tệp WAV đều sử dụng cùng một tần số lấy mẫu là 16 kHz. Độ bit: Tất cả các tệp WAV có cùng độ bit là 16-bit.
Kênh âm thanh: Các tệp âm thanh phải là đơn kênh (mono), và đảm bảo rằng tất cả các tệp WAV có cùng số lượng kênh. Độ dài: Mỗi tệp có độ dài 1 giây, ta có thể thêm khoảng lặng để đảm bảo độ dài của tất cả các tệp âm thanh là như nhau.
Hình 2.6: Các tệp âm thanh xử lý được chia vào các thư mục riêng
Trích chọn đặc trưng với MFCCSau quá trình chuẩn hóa dữ liệu, ta tiến hành trích chọn các đặc trưng sử dụng phương pháp MFCC Như đã được đề cập trước đó, với bài toán nghiên cứu có số lượng nhãn cần phân loại ít (4 nhãn), tôi quyết định chỉ trích chọn 13 đặc trưng MFCC từ tín hiệu âm thanh Quyết định này nhằm mục đích giảm chiều dữ liệu và tối ưu hóa tài nguyên tính toán, đồng thời vẫn giữ được thông tin quan trọng cần thiết cho quá trình phân loại và nhận diện.
Ta sử dụng thư viện librosa với phương thức librosa.feature.mfcc để có thể trích chọn các đặc trưng bằng phương pháp MFCC Các tham số đầu vào bao gồm: signal: Tín hiệu đầu vào, ở đây là 1 khung. sample_rate: Tần số lấy mẫu của khung audio chung Trong ng- hiên cứu này ta lấy sample_rate 16000. n_mfcc: Số lượng hệ số MFCC được trích chọn từ tín hiệu âm thanh (mặc định là 13). n_fft: Chiều dài cửa sổ FFT (mặc định là 2048) được sử dụng để chuyển đổi tín hiệu âm thanh từ miền thời gian sang miền tần số. hop_length: Khoảng cách giữa các khung trong quá trình biến đổi Fourier (mặc định là 512).
Hình 2.7: Các đặc trưng được lưu vào tệp JSON
Ta khởi tạo một hàm với đầu vào là đường dẫn tới nơi chứa dữ liệu âm thanh và kết quả đầu ra là các đặc trưng được trích chọn lưu vào một tệp đuôi json (Xem phụ lục A) như trên hình 2.7 Sau khi đã trích chọn được các đặc trưng từ tập dữ liệu ban đầu, phần tiếp theo ta sẽ tiến hành thử nghiệm với các mô hình học sâu khác nhau để có thể tìm ra mô hình hiệu quả nhất cho bài toán.
Huấn luyện mô hình học sâuỞ phần này, ta thực hiện xây dựng các mô hình học sâu khác nhau để tiến hành huấn luyện với các đặc trưng đã trích chọn từ phần trước. a) Mô hình 1: Mô hình CNN
Mô hình mạng CNN được khai báo sử dụng keras.Sequential(), một phương thức giúp thêm các lớp mạng neural theo tuần tự Cụ thể, mô hình được xây dựng với các lớp sau (Xem phụ lục A):
Hai lớp đầu tiên là lớp tích chập (convolutional layer) với hàm kích hoạt ReLU Kích thước của đầu vào phụ thuộc vào dữ liệu và đã được xác định trước đó. Đầu ra của mô hình được làm phẳng (Flatten) để chuẩn bị cho lớp fully connected (dense layer) tiếp theo.
Lớp Dense có hàm kích hoạt ReLU và tiếp theo là một lớp dropout được sử dụng để ngăn chặn việc quá mức hóa và cải thiện khả năng tổng quát hóa của mô hình.
Cuối cùng, lớp đầu ra có 4 đơn vị(dự đoán cho 4 lớp) với hàm kích hoạt softmax, được sử dụng để tính xác suất cho mỗi lớp Hình 2.8: Mô hình mạng CNN b) Mô hình 2: Mô hình LSTM
Mô hình mạng LSTM được khai báo sử dụng keras.Sequential(), một phương thức giúp thêm các lớp mạng neural theo tuần tự Cụ thể, mô hình được xây dựng với các lớp sau (Xem phụ lục A): Đâu tiên là hai lớp LSTM, đây là những lớp thích hợp cho việc xử lý chuỗi dữ liệu Tham số input_shape được sử dụng để chỉ định kích thước đầu vào của mô hình Ở lớp thứ nhất re- turn_sequences=True được sử dụng để trả về toàn bộ chuỗi đầu ra từ lớp LSTM thay vì chỉ trả về đầu ra cuối cùng Trong khi đó, lớp LSTM thứ hai chỉ trả về kết quả đầu ra.
Lớp kết nối đầy đủ (fully connected) với hàm kích hoạt ReLU.
Lớp dropout được sử dụng để ngăn chặn việc quá mức hóa và cải thiện khả năng tổng quát hóa của mô hình.
Lớp kết nối đầy đủ với 4 đơn vị và hàm kích hoạt softmax, được sử dụng để tính xác suất cho mỗi lớp Hình 2.9: Mô hình mạng LSTM c) Mô hình 3: Mô hình Hybrid
Trong mô hình này, chúng tôi đã phát triển một mô hình tích hợp, kết hợp cả hai kiến trúc mô hình trước đó Mô hình được xây dựng bằng cách kết hợp ba nhánh, mỗi nhánh sử dụng các lớp Convolutional 2D với các kernel có kích thước và số lượng bộ lọc khác nhau Sau đó, các đầu ra của các nhánh này được hợp nhất thông qua lớp Concatenate() Cụ thể, mô hình bao gồm các lớp sau đây (Xem phụ lục A):
Nhánh 1, 2, 3: Sử dụng lớp Conv2D với hàm kích hoạt là ’re- lu’, padding là ’same’.
Ghép các nhánh lại với nhau:
Sử dụng lớp Concatenate() để kết hợp đầu ra của ba nhánh thành một tensor duy nhất.
Sử dụng lớp TimeDistribu- ted(Flatten()) để chuyển đổi đầu ra của lớp Concatenate() thành dạng phù hợp cho LSTM Sử dụng lớp LSTM với cài đặt re- turn_sequences=True.
Lớp dropout được sử dụng để ngăn chặn việc quá mức hóa và cải thiện khả năng tổng quát hóa của mô hình.
Output layer (output): Sử dụng lớp Dense với 4 nơ-ron(tương ứng với số lớp đầu ra) và hàm kích hoạt ’softmax’ Hình 2.10: Mô hình mạng Hybrid
Hệ thống điều khiển xe robotHệ thống ghi âm và chuyển đổiĐể thiết lập một hệ thống ghi âm và chuyển đổi tín hiệu âm thành dạng văn bản, ta khai báo và xây dựng các hàm để thực hiện những nhiệm vụ này (Xem phụ lục B).
Hàm split_audio: Hàm này có nhiệm vụ chia một tệp âm thanh thành các đoạn nhỏ dựa trên yếu tố khoảng lặng giữa các đoạn âm thanh.
Hàm edit_chunk: Không thể đảm bảo rằng các đoạn âm thanh được cắt ra sẽ có độ dài chính xác là 1 giây, đủ để trích xuất các đặc trưng Do đó, ta sử dụng hàm này để tự động thêm một khoảng thời gian im lặng vào cuối của mỗi đoạn âm thanh Điều này đảm bảo rằng mỗi đoạn âm thanh có độ dài chính xác 1 giây mà không ảnh hưởng đến kết quả dự đoán của mô hình trong quá trình trích xuất đặc trưng.
Hàm process_input: Hàm này được dùng để trích xuất các đặc trưng MFCC của các tệp âm thanh vừa được xử lý trước đó.
Hàm speech_to_text: Sau khi tiến hành xử lý tín hiệu âm thanh đầu vào, ta sử dụng hàm này để thực hiện quá trình chuyển đổi âm thanh thành văn bản Biến length, là kết quả trả về từ hàm split_audio, được sử dụng để xác định số lượng đoạn âm thanh cần được xử lý Điều này giúp hàm speech_to_textbiết được tổng số đoạn âm thanh mà nó cần xử lý Kết quả trả về là chuỗi văn bản sau khi đã xử lý tất cả các đoạn âm thanh.
Hàm delete_files_in_directory: Ta tạo thêm một hàm mới để tự động xóa các tệp âm thanh sau khi chương trình đã hoàn tất xử lý tất cả các đoạn âm thanh Việc này giúp tiết kiệm không gian bộ nhớ của thiết bị và tránh trường hợp dữ liệu từ câu lệnh trước ảnh hưởng đến dữ liệu của câu lệnh sau (trong trường hợp độ dài các câu lệnh khác nhau).
Tải mô hình phân loại: Sử dụng thư viện Keras để tải một mô hình đã được lưu trữ từ đường dẫn đã chỉ định và gán nó cho biếnreconstructed_model.
Thu âm, xử lý và kết nối socket: Ta cũng cần tạo ra một giao diện người dùng (GUI), cho phép người dùng thu âm câu lệnh Sau khi thu âm thành công, chương trình sẽ gọi các hàm đã được khởi tạo từ trước, chuyển đổi âm thanh thành văn bản và truyền đến bộ xử lý của xe robot thông qua kết nối socket.
Phương thức kết nối SocketSocket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận dữ liệu trên internet Giữa hai chương trình chạy trên mạng cần có một liên kết giao tiếp hai chiều để kết nối với nhau Điểm cuối của liên kết này được gọi là socket.
Hình 2.11: Mô hình kết nối Socket 16
Trước tiên ta tạo ra một máy chủ (server) bằng cách mở một socket - Socket()
Sau đó ta sẽ liên kết nó với một máy khách (client) và một cổng (port) - Bind()
Tiếp theo server sẽ bắt đầu kết nối đến port đó - Listen()
Yêu cầu kết nối từ client được gửi tới server - Connect()
Bây giờ cả hai đều có thể gửi và nhận tin tại thời điểm đó - Read()/Write()
Cuối cùng khi hoàn thành server và client tiến hành ngắt kết nối - Close()
Trong nghiên cứu này, ta sử dụng kết nối socket để truyền câu lệnh đã được xử lý từ thiết bị máy tính đến bo điều khiển Raspberry.
Hệ thống điều khiển xe robotTa cũng cần phát triển hai chương trình để điều khiển hệ thống của xe robot (Xem phụ lục B) Trong đó:
Chương trình 1: Sử dụng các chân GPIO trên Raspberry Pi để điều khiển động cơ của xe robot.
Chương trình 2: Nhận dữ liệu thông qua kết nối socket để điều khiển hướng di chuyển của xe robot.
16 https://topdev.vn/blog/socket-la-gi-websocket-la-gi/ b) Điều khiển động cơ với GPIO
Ta kết nối các thiết bị phần cứng bao gồm: Bo mạch Raspberry Pi, module L298N và các motor DC để tạo thành một xe robot đơn giản giống như hình dưới đây:
Hình 2.12: Kết nối động cơ 17
Ta cần khai báo 6 chân GPIO được sử dụng để điều khiển xe robot, trong đó:
Bốn chân GPIO để điều khiển các mức điện áp để bánh xe xoay thuận chiều hoặc ngược chiều kim đồng hồ Điều này giúp xe robot có thể di chuyển tiến lên hoặc lùi xuống.
Hai chân GPIO để điều khiển tốc độ của các bánh xe, giúp xe có thể di chuyển trái phải.
17 https://pivietnam.com.vn/huong-dan-cach-dieu-khien-xe-mo-hinh-co-ban-voi-raspberry-pi- pivietnam-com-vn.html
Kết quả và nhận xét
Kết quả trích chọn đặc trưngTín hiệu âm thanh “Lên”Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Lên”:
Hình 3.1: Ảnh phổ của tín hiệu “Lên”
Hình 3.2: Ảnh phổ Mel của tín hiệu “Lên”
Hình 3.3: Đặc trưng MFCC của tín hiệu “Lên”
Tín hiệu âm thanh “Xuống”Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Xuống”:
Hình 3.4: Ảnh phổ của tín hiệu “Xuống”
Hình 3.5: Ảnh phổ Mel của tín hiệu “Xuống”
Hình 3.6: Đặc trưng MFCC của tín hiệu “Xuống”
Tín hiệu âm thanh “Trái”Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Trái”:
Hình 3.7: Ảnh phổ của tín hiệu “Trái”
Hình 3.8: Ảnh phổ Mel của tín hiệu “Trái”
Hình 3.9: Đặc trưng MFCC của tín hiệu “Trái”
Tín hiệu âm thanh “Phải”Dưới đây là các ảnh phổ và đặc trưng MFCC của tín hiệu âm thanh “Phải”:
Hình 3.10: Ảnh phổ của tín hiệu “Phải”
Hình 3.11: Ảnh phổ Mel của tín hiệu “Phải”
Hình 3.12: Đặc trưng MFCC của tín hiệu “Phải”
Tổng hợp đặc trưng MFCCTa trích xuất các đặc trưng của 400 tệp âm thanh từ bộ dữ liệu và lưu các đặc trưng MFCC vào một tập tin json Tập tin này sẽ được dùng để huấn luyện các mô hình sau này.
Hình 3.13: Các đặc trưng được lưu lại
Nhận xétTừ ảnh phổ, quan sát bằng mắt thường có thể phát hiện sự khác nhau trong việc phân bổ tần số của các tín hiệu điều khiển khác nhau Tuy nhiên, để đạt được độ chính xác cao trong mô hình hóa, việc sử dụng các đặc trưng MFCC thu được từ quá trình trích chọn đặc trưng là cần thiết.
Kết quả đánh giá mô hìnhĐánh giá với AccuracyVới bộ dữ liệu âm thanh 400 mẫu ta thực hiện việc chia tập dữ liệu thành hai phần, trong đó 20% của bộ dữ liệu sử dụng để kiểm tra và 80% được dùng để huấn luyện Áp dụng các mô hình đã xây dựng trong chương trước với các Learning Rates (LR), ta thu được kết quả như sau:
Mô hình Accuracy (LR = 0.001) Accuracy (LR = 0.0001)
Bảng 3.1: Accuracy của các mô hình với LR khác nhau
Mô hình CNN Mô hình LSTM
Mô hình Hybrid Hình 3.14: Accuracy và Loss của các mô hình với LR=0.001
Mô hình CNN Mô hình LSTM
Mô hình HybridHình 3.15: Accuracy và Loss của các mô hình với LR=0.0001
So sánh giữa các mô hình với LR = 0.001:
– Mô hình Hybrid có độ chính xác (Accuracy) cao nhất (0.9475), theo sau là mô hình LSTM (0.925550), và cuối cùng là mô hình CNN (0.8250).
– Tính đến chỉ số Loss, mô hình Hybrid có giá trị thấp nhất (0.2478), theo sau là mô hình LSTM (0.2591), và mô hình CNN có giá trị cao nhất (0.2823).
So sánh giữa các mô hình với LR = 0.0001:
– Tính đến độ chính xác, thứ tự vẫn giữ nguyên: Hybird (0.9625), LSTM (0.9375) và CNN (0.8750).
– Tính đến chỉ số Loss, mô hình Hybird vẫn có giá trị thấp nhất (0.2053), theo sau là LSTM (0.2328), và mô hình CNN có giá trị cao nhất (0.2647).
Có thể thấy rằng giảm LR từ 0.001 xuống 0.0001 đã cải thiện độ chính xác và giảm giá trị Loss của tất cả các mô hình.
Mô hình Hybird thường có hiệu suất tốt hơn so với mô hình đơn lẻ (CNN hoặcLSTM) ở cả hai giá trị LR.
Đánh giá với Precision và RecallĐể dễ dàng theo dõi và phân tích kết quả của mô hình, ta áp dụng một Confusion Matrix để đánh giá hiệu suất phân loại, từ đó ta có thể dễ dang tính toán được các chỉ Precision và Recall của các mô hình khác nhau Bảng dưới đây trình bày các chỉ số Precision và Recall của ba mô hình khác nhau: CNN, LSTM, và Hybrid.
Bảng 3.2: Precision và Recall của các mô hình với LR = 0.001
Bảng 3.3: Precision và Recall của các mô hình với LR = 0.0001
Nhận xét Đối với Precision (độ chính xác), mô hình Hybrid có kết quả tốt nhất với giá trị lần lượt là 0.9475 và 0.9625 Tiếp theo là LSTM với giá trị 0.9283 và 0.9458.
CNN có giá trị Precision thấp nhất là 0.8250 và 0.8750 Điều này cho thấy mô hình Hybrid có khả năng phân loại chính xác cao hơn so với hai mô hình khác.
Về Recall (độ nhớ), mô hình Hybrid cũng đạt được kết quả tốt nhất với giá trị là 0.9375 và 09625 Tiếp theo là LSTM với giá trị 0.9250 và 0.9375 CNN có giá trị Recall là 0.8250 và 0.8750 tương ứng Kết quả này cho thấy mô hìnhHybrid không chỉ có khả năng phân loại chính xác mà còn có khả năng bao quát, nhớ lại các mẫu dữ liệu tốt hơn so với các mô hình còn lại.
Tổng quan, mô hình Hybrid có hiệu suất cao nhất cả về độ chính xác và độ nhớ trong việc phân loại dữ liệu LSTM đứng ở vị trí thứ hai trong cả hai chỉ số, trong khi CNN có hiệu suất thấp nhất trong bảng Tuy nhiên, đối với các bài toán thực tế, để có thể hiểu rõ hơn về hiệu suất của mỗi mô hình, chúng ta cần xem xét kết quả từ nhiều góc độ khác nhau và kết hợp với các chỉ số khác để có cái nhìn toàn diện về hiệu suất của mô hình.
Kết quả hệ thống phần cứngTa thiết lập hệ thống phần cứng như đã trình bày ở mục 2.4.3 thu được kết quả như sau:
Hình 3.16: Hệ thống phần cứng
Thành phần 1: Nguồn 12V - 2A được sử dụng để cấp nguồn cho 4 motor DC 3-6V và module L298N.
Thành phần 2: Module L298N được sử dụng để thay đổi tốc độ và chiều quay của bánh xe.
Thành phần 7: Bo mạch Raspberry được kết nối với module L298N để điều khiển các động cơ.
Thành phần 8: Nguồn 5V - 2A được sử dụng để cấp nguồn cho bo mạch.
Kết quả kết nốiTiến hành chạy đồng thời hai chương trình thu âm, gửi dữ liệu và chương trình nhận dữ liệu thông qua socket Dưới đây là hình ảnh minh họa kết quả khi chạy trên hai thiết bị khác nhau Màn hình máy tính thứ 2 hiển thị thông tin tín hiệu mà bộ xử lý Rasphberry của xe robot nhận được.
Hình 3.17: Kết quả hoạt động trên hai thiết bị
Kết quả thực tếKết quả thực tế của hệ thống được thể hiện qua video trong đường dẫn sau: https://drive.google.com/file/d/11b4lwMeoq329lyWYXWpnNy1ROzNczhhh/ view?usp=sharing
Nhận xét chungTừ quá trình huấn luyện và kết quả thu được, ta có những nhận xét sau:
– Tốc độ huấn luyện: Do bộ dữ liệu hiện tại có kích thước nhỏ và số lượng nhãn cần phân biệt không đặc biệt lớn, mô hình được huấn luyện một cách nhanh chóng, phù hợp cho mục đích nghiên cứu.
– Chất lượng mô hình: Mô hình Hybrid thể hiện độ chính xác cao, đáp ứng tốt yêu cầu của bài toán là phân loại các câu lệnh điều khiển khác nhau.
– Tuy nhiên, trong những bài toán cần phân loại nhiều nhãn hơn, đòi hỏi sự cần thiết của một bộ dữ liệu lớn hơn và sự áp dụng các phương pháp tăng cường dữ liệu để cải thiện hiệu suất của mô hình.
– Độ trễ gửi tin: Hệ thống gần như không trải qua độ trễ đáng kể do dung lượng thông tin truyền đi nhỏ.
– Bo mạch Raspberry xử lý tốt các câu lệnh được gửi xuống để điều khiển xe Tuy nhiên, trong trường hợp bài toán yêu cầu cần tích hợp mô hình vào bo mạch, ta cần sử dụng nhưng bo mạch có cấu hình cao hơn.
– Xe robot di chuyển đúng hướng theo các câu lệnh khác nhau Tuy nhiên do động cơ không có sẵn chức năng xoay bánh nên việc rẽ trái rẽ phải còn gặp nhiều khó khăn Trong những bài toán thực tế cần độ chính xác cao trong việc di chuyển, ta có thể cân nhắc sử dụng các motor khác có nhiều chứ năng hơn
Thông qua nghiên cứu này, tôi đã thành công trong việc phát triển một hệ thống điều khiển xe robot thông qua giọng nói Trong đó, hệ thống bao gồm những thành phần quan trọng sau:
Mô hình học sâu: Được áp dụng để phân loại các câu lệnh khác nhau dựa trên giọng điều khiển của người sử dụng Mô hình ổn định, tốc độ xử lý nhanh, và đạt được độ chính xác cao.
Phương thức truyền tin: Hệ thống được thiết kế để sử dụng giao tiếp socket, nhằm truyền các chuỗi văn bản đến bộ xử lý trên xe robot với độ trễ thấp.
Trong tương lai, hệ thống trên hoàn toàn có thể xây dựng thêm những cải tiến khác như:
Tăng cường độ chính xác: Nâng cao mô hình Speech-to-Text để có độ chính xác cao hơn, đặc biệt là trong việc hiểu và chuyển đổi các từ ngữ và giọng địa phương.
Xử lý hiệu năng: Tối ưu hóa thuật toán và cấu trúc mô hình để giảm độ trễ và tăng hiệu suất, đồng thời đảm bảo tính ổn định trong môi trường thời gian thực.
Hỗ trợ nhiều ngôn ngữ: Mở rộng hệ thống để hỗ trợ nhiều ngôn ngữ khác nhau, tạo ra một giao diện đa ngôn ngữ cho người sử dụng để điều khiển xe robot. Điều chỉnh tương thích nguồn âm thanh: Cải thiện khả năng xử lý và chuyển đổi giọng từ các nguồn âm thanh khác nhau, bao gồm cả âm thanh trong điều kiện nhiễu loạn hoặc môi trường ồn ào.
Xử lý lệnh phức tạp: Mở rộng khả năng của mô hình để hiểu và xử lý các lệnh phức tạp, ví dụ như chuỗi lệnh hoặc chỉ đạo chi tiết.
Học từ dữ liệu thực tế: Sử dụng dữ liệu thực tế từ môi trường thực tế của xe robot để huấn luyện mô hình, giúp cải thiện khả năng đối mặt với các tình huống thực tế.
Bảo mật và riêng tư: Tăng cường các biện pháp bảo mật và quyền riêng tư để đảm bảo an toàn và sự yên tâm khi sử dụng hệ thống.
[1] Phạm Văn Sự, Trương Xuân Thành (2014), “Giáo trình xử lý tiếng nói”, Học viện công nghệ Bưu chính Viễn thông.
[2] J T Geiger, M Hofmann, B Schuller and G Rigoll (2013), “Gait-based per- son identification by spectral, cepstral and energy-related audio features”,2013 IEEE International Conference on Acoustics, Speech and Signal Processing, pp.
[3] Paulo Hubert, Rebecca Killick, Alexandra Chung and Linilson R Padovese (2019), “A Bayesian binary algorithm for root mean squared-based acoustic signal segmentation”,The Journal of the Acoustical Society of America, 146(3), 1799 - 1807.
[4] F Gouyon, F Pachet and O Delerue (2000), “On the Use of Zero-Crossing Rate for an Application of Classification of Percussive Sounds”,Proceedings of the COST G-6 Conference on Digital Audio Effects (DAFX-00), Vol 5.
[5] Wei Han; Cheong-Fat Chan; Chiu-Sing Choy; Kong-Pang Pun (2006), “An effi- cient MFCC extraction method in speech recognition”,2006 IEEE International Symposium on Circuits and Systems (ISCAS).
[6] Shikha Gupta, Jafreezal Jaafar, Wan Fatimah wan Ahmad and Arpit Bansal (2013), “Feature Extraction Using MFCC”, Signal & Image Processing : An International Journal (SIPIJ), 4(4), pp 101 - 108.
[7] D Sundararajan (2001), The Discrete Fourier Transform: Theory, Algorithms and Applications, World Scientific.
[8] M Portnoff (1980), “Time-frequency representation of digital signals and sys- tems based on short-time Fourier analysis”, IEEE Transactions on Acoustics, Speech, and Signal Processing, 28(1), pp 55 -69.
[9] F Demir, D A Abdullah, A Sengur (2020), “A New Deep CNN Model forEnvironmental Sound Classification”, IEEE Access, 8, pp 66529-66537.
Cardiology Conference (CinC 2016),Vancouver, BC, Canada, pp 625-628.
[11] I Lezhenin, N Bogach and E Pyshkin (2019) “Urban Sound Classification using Long Short-Term Memory Neural Network”,2019 Federated Conference on Computer Science and Information Systems (FedCSIS), Leipzig, Germany,2019, pp 57-60.
Chương trình trích xuất đặc trưng với MFCC
2 JSON_PATH = "model_robot/data_sound.json"
3 SAMPLE_RATE = 16000 4 TRACK_DURATION = 1 # measured in seconds 5 SAMPLES_PER_TRACK = SAMPLE_RATE * TRACK_DURATION
Khởi tạo hàm trích xuất đặc trưng
1 def save_mfcc(dataset_path, json_path, num_mfcc, n_fft 48, hop_lengthQ2):
8 9 samples_per_segment = int(SAMPLES_PER_TRACK) 10 num_mfcc_vectors_per_segment = math.ceil(samples_per_segment / hop_length) 11
12 for i, (dirpath, dirnames, filenames) in enumerate(os.walk( dataset_path)):
13 if dirpath is not dataset_path:
15 data["mapping"].append(semantic_label) 16 print("\nProcessing: {}".format(semantic_label)) 17
19 file_path = os.path.join(dirpath, f) 20 signal, sample_rate = librosa.load(file_path, sr=SAMPLE_RATE) 21
22 mfcc = librosa.feature.mfcc(signal, sample_rate, n_mfcc num_mfcc, n_fft=n_fft, hop_length=hop_length)
25 if len(mfcc) == num_mfcc_vectors_per_segment:
26 data["mfcc"].append(mfcc.tolist()) 27 data["labels"].append(i-1)
30 with open(json_path, "w") as fp:
31 json.dump(data, fp, indent=4)
1 save_mfcc(DATASET_PATH, JSON_PATH)
Nhập và phân chia tập dữ liệu
Khởi tạo hàm nhập dữ liệu
1 DATA_PATH = "model_robot/data_sound.json"
2 3 def load_data(data_path):
4 with open(data_path, "r") as f:
7 X = np.array(data["mfcc"]) 8 y = np.array(data["labels"]) 9
10 print("Data succesfully loaded!") 11 return X, y
Phân chia tập dữ liệu
3 # create train, validation and test split 4 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size
=0.2) 5 X_train, X_validation, y_train, y_validation = train_test_split(
7 # add an axis to input sets 8 X_train = X_train[ , np.newaxis]
Huấn luyện mô hình học sâu