Xây dựng mô hình Phân loại âm thanh được đào tạo trước tùy chỉnh

1. Trước khi bắt đầu

Trong lớp học lập trình trước đây, bạn đã xây dựng một ứng dụng cơ bản để phân loại âm thanh.

Nếu bạn muốn tùy chỉnh mô hình phân loại âm thanh để nhận dạng âm thanh từ các lớp không có trên mô hình đã đào tạo trước thì sao? Hoặc nếu bạn muốn tùy chỉnh mô hình bằng dữ liệu của riêng mình thì sao?

Trong Lớp học lập trình này, bạn sẽ tùy chỉnh mô hình Phân loại âm thanh được đào tạo trước để phát hiện âm thanh của chim. Bạn có thể sao chép cùng một kỹ thuật bằng dữ liệu của riêng mình.

Điều kiện tiên quyết

Lớp học lập trình này được thiết kế cho những nhà phát triển thiết bị di động có kinh nghiệm muốn tích lũy kinh nghiệm với công nghệ máy học. Bạn cần thông thạo:

  • Phát triển Android bằng Kotlin và Android Studio
  • Cú pháp Python cơ bản

Kiến thức bạn sẽ học được

  • Cách chuyển yêu cầu học tập về miền âm thanh
  • Cách tạo dữ liệu của riêng bạn
  • Cách triển khai mô hình của riêng bạn trên ứng dụng Android

Bạn cần có

  • Phiên bản Android Studio phiên bản 4.1.2 trở lên gần đây
  • Thiết bị Android thực có phiên bản Android ở API 23 (Android 6.0)
  • Mã mẫu
  • Kiến thức cơ bản về việc phát triển Android trong Kotlin

2. Tập dữ liệu Chim

Bạn sẽ sử dụng một tập dữ liệu Birdsong đã được chuẩn bị để dễ sử dụng hơn. Tất cả các tệp âm thanh đến từ trang web Xeno-canto.

Tập dữ liệu này chứa các bài hát từ:

Tên: House Sparrow

: houspa

Hình ảnh các loài chim tại Nhà Sparrow do Alejandro Bayer Tamayo từ Armenia, Colombia thiết lập.

[âm thanh]

Tên: Red CrossBill

: redcro

Hình ảnh về loài chim thập giới đỏ của Elaine Wilson.

[âm thanh]

Tên: Cây gỗ trắng

: wbwwre1

Hình ảnh về Cây gậy gỗ trắng. Tác giả không xác định.

[âm thanh]

Tên: Antpitta lên hạt dẻ

: chcant2

Hình ảnh về Antpitta đăng quang Hạt dẻ

[âm thanh]

Tên: Quay tròn

: azaspi1

Hình ảnh chim Quay

[âm thanh]

Tập dữ liệu này nằm trong tệp zip và nội dung của tệp này:

  • metadata.csv có tất cả thông tin về từng tệp âm thanh, chẳng hạn như ai đã ghi âm, vị trí ghi âm, giấy phép sử dụng và tên chim.
  • Thư mục tàu hỏa và thử nghiệm.
  • Bên trong các thư mục tàu hỏa/thử nghiệm, có một thư mục cho từng mã chim. Bên trong mỗi tệp đều có tất cả các tệp .wav cho loài chim đó.

Các tệp âm thanh đều ở định dạng wav và tuân theo quy cách sau:

Thông số này rất quan trọng vì bạn sẽ sử dụng một mô hình cơ sở dự kiến dữ liệu ở định dạng này. Để tìm hiểu thêm về vấn đề này, bạn có thể đọc thêm thông tin trong bài đăng trên blog này.

Để làm cho toàn bộ quy trình dễ dàng hơn, bạn sẽ không cần phải tải tập dữ liệu xuống máy của mình, bạn sẽ sử dụng tập dữ liệu đó trên Google Colab (sau này trong hướng dẫn này).

Nếu bạn muốn sử dụng dữ liệu của riêng mình, thì tất cả các tệp âm thanh của bạn cũng phải ở định dạng cụ thể này.

3. Lấy mã mẫu

Tải mã nguồn xuống

Nhấp vào đường liên kết sau đây để tải toàn bộ mã nguồn cho lớp học lập trình này:

Hoặc nếu bạn muốn, hãy sao chép kho lưu trữ:

git clone https://github.com/googlecodelabs/odml-pathways.git

Giải nén tệp zip đã tải xuống. Thao tác này sẽ giải nén thư mục gốc (odml-pathways) chứa tất cả tài nguyên mà bạn cần. Đối với lớp học lập trình này, bạn sẽ chỉ cần các nguồn trong thư mục con audio_classification/codelab2/android.

Thư mục con android trong kho lưu trữ audio_classification/codelab2/android chứa hai thư mục:

  • android_studio_folder.pngbắt đầu – Bắt đầu bằng mã mà bạn xây dựng dựa trên lớp học lập trình này.
  • android_studio_folder.pngfinal – Mã hoàn tất cho ứng dụng mẫu đã hoàn tất.

Nhập ứng dụng dành cho người mới bắt đầu

Bắt đầu bằng cách nhập ứng dụng dành cho người mới bắt đầu vào Android Studio:

  1. Mở Android Studio và chọn Nhập dự án (Gradle, Eclipse ADT, v.v.)
  2. Mở thư mục starter (audio_classification/codelab2/android/starter) từ mã nguồn mà bạn đã tải xuống trước đó.

7c0f27882a2698ac.png

Để đảm bảo tất cả các phần phụ thuộc đều có sẵn cho ứng dụng của bạn, bạn nên đồng bộ hóa dự án với các tệp gradle khi quá trình nhập hoàn tất.

  1. Chọn Đồng bộ hóa dự án với Tệp Gradle ( b451ab2d04d835f9.png) từ thanh công cụ Android Studio.

4. Tìm hiểu ứng dụng khởi động

Ứng dụng này giống với ứng dụng được xây dựng trong lớp học lập trình đầu tiên để phân loại âm thanh: Tạo một ứng dụng cơ bản để phân loại âm thanh.

Để hiểu rõ hơn về mã, bạn nên tham gia lớp học lập trình đó trước khi tiếp tục.

Tất cả các mã đều nằm trong MainActivity (để đơn giản nhất có thể).

Tóm lại, mã này sẽ thực hiện các tác vụ của:

  • Đang tải mô hình
val classifier = AudioClassifier.createFromFile(this, modelPath)
  • Tạo trình ghi âm và bắt đầu ghi
val tensor = classifier.createInputTensorAudio()

val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
       "Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs

val record = classifier.createAudioRecord()
record.startRecording()
  • Tạo một chuỗi đồng hồ hẹn giờ để chạy dự đoán. Các thông số cho phương thức scheduleAtFixedRate là khoảng thời gian sẽ bắt đầu thực thi và thời gian giữa các lần thực thi tác vụ liên tiếp. Trong mã bên dưới, nó sẽ bắt đầu sau 1 mili giây và sẽ chạy lại sau mỗi 500 mili giây.
Timer().scheduleAtFixedRate(1, 500) {
...
}
  • Chạy suy luận về âm thanh đã ghi
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
  • Lọc phân loại để chấm điểm thấp
val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}
  • Hiện kết quả trên màn hình
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
   .joinToString(separator = "\n")

runOnUiThread {
   textView.text = outputStr
}

Bây giờ bạn có thể chạy ứng dụng và chơi như cũ, nhưng hãy nhớ rằng ứng dụng sử dụng mô hình được đào tạo trước.

5. Đào tạo mô hình Phân loại âm thanh tùy chỉnh bằng Trình tạo mô hình

Ở bước trước, bạn đã tải một ứng dụng dùng mô hình đã đào tạo trước để phân loại các sự kiện âm thanh. Nhưng đôi khi bạn cần phải tùy chỉnh mô hình này cho các sự kiện âm thanh mà bạn quan tâm hoặc làm cho nó trở thành một phiên bản chuyên biệt hơn.

Như đã đề cập trước đó, bạn sẽ chuyên về mô hình Âm thanh của chim. Đây là một tập dữ liệu có âm thanh của chim, được tuyển chọn từ trang web Xeno-canto.

Colaboratory

Tiếp theo, hãy truy cập Google Colab để đào tạo mô hình tùy chỉnh.

Bạn sẽ mất khoảng 30 phút để đào tạo mô hình tùy chỉnh.

Nếu muốn bỏ qua bước này, bạn có thể tải xuống mô hình mà bạn đã đào tạo trong phần cộng tác với tập dữ liệu đã cung cấp và chuyển sang bước tiếp theo

6. Thêm mô hình TFLite tùy chỉnh vào ứng dụng Android

Giờ đây, khi đã đào tạo mô hình phân loại âm thanh của riêng mình và lưu trên máy, bạn cần đặt mô hình đó vào thư mục tài sản của ứng dụng Android.

Bước đầu tiên là di chuyển mô hình đã tải xuống từ bước trước đó sang thư mục tài sản trong ứng dụng của bạn.

  1. Trong Android Studio, với chế độ xem Dự án Android, hãy nhấp chuột phải vào thư mục tài sản.

7cca2c22ed8cf4c8.png

  1. Bạn sẽ thấy một cửa sổ bật lên chứa danh sách các lựa chọn. Một trong những tệp này sẽ là mở thư mục trong hệ thống tệp của bạn. Tìm chế độ phù hợp với hệ điều hành của bạn và chọn chế độ đó. Trên máy Mac, thông báo này sẽ là Reveal in Finder (Trình khám phá trong Trình tìm kiếm) trên Windows sẽ là Open in Explorer (Mở trong Explorer) và trên Ubuntu, trình duyệt sẽ hiển thị Show in Files (Hiển thị trong ứng dụng Files).

95e0eca881d35f6b.png

  1. Sao chép mô hình đã tải xuống vào thư mục.

Sau khi bạn hoàn tất việc này, hãy quay lại Android Studio và bạn sẽ thấy tệp của mình trong thư mục tài sản.

52bda66abe201fe5.png

7. Tải mô hình mới trên ứng dụng cơ sở

Ứng dụng cơ sở đã sử dụng mô hình được đào tạo trước. Bạn sẽ thay thế nó bằng thiết bị mà bạn vừa đào tạo.

  1. VIỆC CẦN LÀM 1: Để tải mô hình mới sau khi thêm mô hình đó vào thư mục tài sản, hãy thay đổi giá trị của biến modelPath:
var modelPath = "my_birds_model.tflite"

Mô hình mới có hai đầu ra (đầu):

  • Đầu ra nguyên bản, chung chung hơn từ mô hình cơ sở mà bạn đã sử dụng, trong trường hợp này là YAMNet.
  • Kết quả phụ dành riêng cho các loài chim mà bạn đã sử dụng để huấn luyện.

Điều này là cần thiết vì YAMNet đã làm rất tốt trong việc nhận dạng nhiều lớp phổ biến, ví dụ như Silence. Nhờ đó, bạn không phải lo lắng về tất cả các lớp khác mà bạn không thêm vào tập dữ liệu.

Những gì bạn sẽ làm bây giờ là, nếu phân loại YAMNet hiển thị điểm cao cho lớp chim, thì bạn sẽ xem xét chim nào trong đầu ra khác.

37ce1c14e9e2d1b0.png

  1. VIỆC CẦN LÀM 2: Đọc xem liệu đầu tiên của quy trình phân loại có độ tin cậy cao là Âm thanh của chim không. Tại đây, bạn sẽ thay đổi bộ lọc để lọc ra mọi nội dung không phải Chim:
val filteredModelOuput = output[0].categories.filter {
   it.label.contains("Bird") && it.score > .3
}
  1. VIỆC CẦN LÀM 3: Nếu đầu cơ sở của mô hình phát hiện thấy có một con chim trong âm thanh với xác suất phù hợp, bạn sẽ biết con đó là con chim nào trên đầu thứ hai:
if (filteredModelOutput.isNotEmpty()) {
   Log.i("Yamnet", "bird sound detected!")
   filteredModelOutput = output[1].categories.filter {
       it.score > probabilityThreshold
   }
}

Và đó là kết quả. Việc thay đổi mô hình sử dụng mô hình mà bạn vừa đào tạo rất đơn giản.

Bước tiếp theo là thử nghiệm nó.

8. Thử nghiệm ứng dụng bằng mô hình mới

Bạn đã tích hợp mô hình phân loại âm thanh vào ứng dụng, do đó, hãy để bạn thử nghiệm mô hình đó.

  1. Kết nối thiết bị Android của bạn rồi nhấp vào Chạy ( tức thì.png) trên thanh công cụ của Android Studio.

Ứng dụng có thể dự đoán chính xác âm thanh của các loài chim. Để thử nghiệm dễ dàng hơn, chỉ cần phát một trong số các âm thanh từ máy tính (từ các bước trước đó) và điện thoại của bạn sẽ có thể phát hiện âm thanh. Khi hiển thị, tên đó sẽ hiển thị trên màn hình tên chim và xác suất chính xác.

bec397de3c8aaf32.png

9. Xin chúc mừng

Trong lớp học lập trình này, bạn đã học cách tạo mô hình phân loại âm thanh của riêng mình bằng Model Maker và triển khai mô hình đó cho ứng dụng dành cho thiết bị di động bằng TensorFlow Lite. Để tìm hiểu thêm về TFLite, hãy xem các mẫu TFLite khác.

Những điều chúng tôi đã đề cập

  • Cách chuẩn bị tập dữ liệu của riêng bạn
  • Cách chuyển lịch học tập để phân loại âm thanh thông qua Trình tạo mô hình
  • Cách sử dụng mô hình trên ứng dụng Android

Bước tiếp theo

  • Hãy thử với dữ liệu của riêng bạn
  • Chia sẻ với chúng tôi những gì bạn xây dựng

Tìm hiểu thêm

Bạn có câu hỏi?

Báo cáo sự cố