Giúp bảo vệ Great Barrier Reef với TensorFlow trên Kaggle Tham Challenge

Tích hợp bộ phân loại âm thanh

Phân loại âm thanh là một trường hợp sử dụng phổ biến của Học máy để phân loại các loại âm thanh. Ví dụ, nó có thể xác định các loài chim bằng giọng hót của chúng.

Task Thư viện AudioClassifier API có thể được sử dụng để triển khai phân loại âm thanh tùy chỉnh của bạn hoặc những người pretrained vào ứng dụng di động của bạn.

Các tính năng chính của API AudioClassifier

  • Xử lý âm thanh đầu vào, ví dụ như chuyển đổi mã hóa PCM 16 bit sang mã hóa PCM Float và thao tác với bộ đệm chuông âm thanh.

  • Nhãn bản đồ địa phương.

  • Hỗ trợ mô hình phân loại nhiều đầu.

  • Hỗ trợ cả phân loại nhãn đơn và nhiều nhãn.

  • Ngưỡng điểm để lọc kết quả.

  • Kết quả phân loại top-k.

  • Nhãn danh sách cho phép và danh sách từ chối.

Các mô hình phân loại âm thanh được hỗ trợ

Các mô hình sau đây chắc chắn sẽ rất phù hợp với AudioClassifier API.

Chạy suy luận trong Java

Xem các ứng dụng tài liệu tham khảo âm thanh Phân loại cho một ví dụ sử dụng AudioClassifier trong một ứng dụng Android.

Bước 1: Nhập phần phụ thuộc Gradle và các cài đặt khác

Sao chép .tflite tập mô hình để các tài sản thư mục của module Android nơi mô hình sẽ được chạy. Xác định rằng các tập tin không nên nén, và thêm thư viện TensorFlow Lite để của mô-đun build.gradle file:

android {
    // Other settings

    // Specify that the tflite file should not be compressed when building the APK package.
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Audio Task Library dependency (NNAPI is included)
    implementation 'org.tensorflow:tensorflow-lite-task-audio:0.3.0'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.3.0'
}

Bước 2: Sử dụng mô hình

// Initialization
AudioClassifierOptions options =
    AudioClassifierOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setMaxResults(1)
        .build();
AudioClassifier classifier =
    AudioClassifier.createFromFileAndOptions(context, modelFile, options);

// Start recording
AudioRecord record = classifier.createAudioRecord();
record.startRecording();

// Load latest audio samples
TensorAudio audioTensor = classifier.createInputTensorAudio();
audioTensor.load(record);

// Run inference
List<Classifications> results = audioClassifier.classify(audioTensor);

Xem mã nguồn và javadoc cho các tùy chọn hơn để cấu hình AudioClassifier .

Chạy suy luận trong C ++

// Initialization
AudioClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<AudioClassifier> audio_classifier = AudioClassifier::CreateFromOptions(options).value();

// Create input audio buffer from data.
int input_buffer_size = audio_classifier->GetRequiredInputBufferSize();
const std::unique_ptr<AudioBuffer> audio_buffer =
    AudioBuffer::Create(audio_data.get(), input_buffer_size, kAudioFormat).value();

// Run inference
const ClassificationResult result = audio_classifier->Classify(*audio_buffer).value();

Xem mã nguồn cho các tùy chọn hơn để cấu hình AudioClassifier .

Yêu cầu về tính tương thích của mô hình

Các AudioClassifier API hy vọng một mô hình TFLite với bắt buộc TFLite Mẫu Metadata . Xem ví dụ về việc tạo ra siêu dữ liệu cho phân loại âm thanh bằng cách sử dụng Writer API TensorFlow Lite Metadata .

Các mẫu bộ phân loại âm thanh tương thích phải đáp ứng các yêu cầu sau:

  • Bộ căng âm thanh đầu vào (kTfLiteFloat32)

    • clip âm thanh kích thước [batch x samples] .
    • đợt suy luận không được hỗ trợ ( batch phải là 1).
    • đối với mô hình đa kênh, các kênh cần được xen kẽ.
  • Điểm số đầu ra tensor (kTfLiteFloat32)

    • [1 x N] mảng với N đại diện cho số lớp.
    • (các) bản đồ nhãn tùy chọn (nhưng được khuyến nghị) dưới dạng AssociatedFile-s với loại TENSOR_AXIS_LABELS, chứa một nhãn trên mỗi dòng. Các AssociatedFile ví dụ đầu tiên (nếu có) được sử dụng để lấp đầy label trường (có tên là class_name trong C ++) của các kết quả. Các display_name trường được điền từ AssociatedFile (nếu có) mà locale phù hợp với display_names_locale lĩnh vực AudioClassifierOptions sử dụng vào thời điểm sáng tạo ( "en" theo mặc định, tức là tiếng Anh). Nếu không ai trong số đó là có sẵn, chỉ có index lĩnh vực kết quả sẽ được lấp đầy.