Сегодня машинное обучение — горячая тема для обсуждения. Я обычно использую Python для создания моделей машинного обучения. Однако недавно я реализовал машинное обучение в своем приложении с помощью Create ML. Итак, я хочу поделиться своим опытом в процессе построения моделей машинного обучения с помощью Create ML и применения их в своем приложении.

Я использую классификацию звуков для создания своего приложения под названием Cry Cry Baby. Мобильное приложение Cry Cry Baby предназначено для того, чтобы помочь родителям понять потребности своего ребенка и отреагировать на них, используя алгоритмы машинного обучения для анализа и интерпретации плача ребенка.

Но прежде чем мы начнем, убедитесь, что вы уже скачали XCode и собрали нужные вам наборы данных. Если все настроено, приступим.

Подготовьте свой набор данных

Прежде всего, поместите файлы набора данных в соответствующие папки и пометьте их в соответствии с их классификацией. Например, в «Плачь, детка». Я использую наборы данных, основанные на исследованиях, в которых говорится, что существует несколько типов детского плача, которые можно идентифицировать, включая плач, сопровождаемый:

  • Звук «нэ», указывающий на голод.
  • Звук «Ой», указывающий на сонливость.
  • Звук «Хе», указывающий на дискомфорт.
  • Звук «воздух», предполагающий наличие нижнего газа.
  • Звук «Эх», указывающий на необходимость отрыгнуть.

Однако из-за ограничений в наборе данных я использовал только 4 типа детского плача. Каждая папка содержит звуковые файлы, которые будут использоваться для обучения машинному обучению.

После этого объедините все созданные вами папки классификации в одну папку.

Создание модели машинного обучения

  1. Сначала откройте Xcode и щелкните правой кнопкой мыши значок Xcode. Затем нажмите «Открыть инструменты разработчика», а затем «Создать ML». Затем выберите «Новый документ», и вы увидите такой экран.

2. Затем выберите «Классификация звука» и введите название своей модели машинного обучения. Затем выберите место хранения вашей модели машинного обучения. После этого вы увидите такой дисплей.

3. После этого нажмите кнопку «+» в разделе обучающих данных и выберите папку созданного набора данных.

Например, мой набор данных содержит 5 классов и всего 21 элемент. Из-за сложности поиска наборов данных для детского плача я использовал только 21 образец. Тем не менее, я рекомендую иметь набор данных из более чем 50 образцов, чтобы обеспечить лучшую точность и надежность модели машинного обучения. Для данных проверки я использовал автоматическую функцию Create ML, чтобы автоматически нарезать часть обучающих данных для целей проверки.

Вы также можете настроить количество итераций, которые будут выполняться при обучении машинному обучению. Как правило, увеличение количества итераций позволяет модели подвергаться большему количеству обновлений и корректировок, что потенциально повышает ее производительность.

4. После этого нажмите «Обучить», и вы увидите такие результаты.

По результатам обучения вы можете увидеть процент точности проверки. Чем выше процент, тем выше точность модели машинного обучения.

5. Чтобы дополнительно оценить производительность модели машинного обучения, вы можете щелкнуть вкладку «Оценка» и ввести тестовые данные. Это будет отображать процент выполненного тестирования. Кроме того, доступна вкладка «Предварительный просмотр» для тестирования модели машинного обучения, на которой будут показаны результаты машинного обучения и процентное соотношение для каждой метки.

6. После выполнения всех шагов вы можете перейти на вкладку «Вывод», затем нажать «Получить» и указать имя для файла модели машинного обучения. Файл будет сохранен с расширением .mlmodel. Файл .mlmodel будет использоваться внутри приложения.

Соедините модель машинного обучения с кодом приложения в Xcode

1. Добавьте файл .mlmodel в свой проект Xcode. Вы можете перетащить файл в навигатор проекта или использовать опцию «Добавить файлы в…».

2. После этого импортируйте необходимые библиотеки, которые вы будете использовать.

import AVFoundation
import CoreML

В своем приложении я импортирую библиотеку AVFoundation, чтобы записать звук плача ребенка и сохранить его для последующего доступа к модели машинного обучения. Помимо этого, я также использую библиотеку CoreML в контексте приложения для классификации звуков, которое позволяет мне интегрировать обученную модель машинного обучения (в формате .mlmodel) в свое приложение. Он обеспечивает удобный способ загрузки и использования модели для прогнозирования новых звуковых данных.

3. Создание классов и переменных для использования.

class SoundClassifier: ObservableObject {
    private let model: BabiesCrying
    var audioURL = ""
    @Published var result : String? = ""
}

Класс SoundClassifier определен как ObservableObject, что означает, что его можно использовать для публикации и наблюдения за изменениями его свойств. Внутри класса SoundClassifier объявляется частное свойство model типа BabiesCrying (класс модели Core ML), а свойство audioURL инициализируется пустой строкой. Свойство result помечено как @Published, чтобы его можно было наблюдать.

4. Внутри класса создайте метод init(), в котором загружается и инициализируется модель Core ML.

    init() {
        guard let mlModel = try? BabiesCrying(configuration: MLModelConfiguration()) else {
            fatalError("Failed to load the model.")
        }
        model = mlModel
    }

Если модель не загружается, возникает фатальная ошибка.

5. Внутри класса создайте функцию, которая будет определена для выполнения звуковой классификации с использованием загруженной модели Core ML. Затем загрузите модель Core ML, чтобы убедиться, что она правильно инициализирована.

    func performSoundClassification() {
        
        // Load the Core ML model
        guard let model = try? BabiesCrying(configuration: MLModelConfiguration()) else {
            fatalError("Failed to load the model.")
        }
    }

6. Внутри функции звуковые данные подготавливаются для классификации путем извлечения URL-адреса аудиофайла.

        // Prepare your sound data for classification
        let fileManager = FileManager.default
        let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let audioURL = documentDirectory.appendingPathComponent("babiesCrying.m4a")

7. Внутри функции создайте AVAudioFile, созданный из URL-адреса аудио, для чтения аудиоданных. Затем получают информацию о аудиоформате, включая аудиоформат и количество кадров.

        // Create an AVAudioFile from the audio URL
        guard let audioFile = try? AVAudioFile(forReading: audioURL) else {
            fatalError("Failed to create AVAudioFile.")
        }

        // Get the audio format information
        let audioFormat = audioFile.processingFormat
        let frameCount = AVAudioFrameCount(audioFile.length)

8. Внутри функции создается AVAudioPCMBuffer для хранения аудиоданных. Затем аудиофайл считывается в аудиобуфер.

        // Create an AVAudioPCMBuffer to hold the audio data
        guard let audioBuffer = AVAudioPCMBuffer(pcmFormat: audioFormat, frameCapacity: frameCount) else {
            fatalError("Failed to create AVAudioPCMBuffer.")
        }
        
        do {
            try audioFile.read(into: audioBuffer)
        } catch {
            fatalError("Failed to read audio file into buffer.")
        }

9. Внутри функции будут извлечены данные канала с плавающей запятой, а затем преобразованы в MLMultiArray.

        // Extract the float channel data
        guard let floatChannelData = audioBuffer.floatChannelData else {
            fatalError("Failed to get float channel data from audio buffer.")
        }
        
        // Convert the float channel data into an MLMultiArray
        let channelCount = Int(audioFormat.channelCount)
        let inputSize = Int(frameCount)
        let inputArray = try! MLMultiArray(shape: [1, NSNumber(value: channelCount), NSNumber(value: inputSize)], dataType: .float32)
        
        for channel in 0..<channelCount {
            let channelData = floatChannelData[channel]
            let channelDataArray = stride(from: 0, to: inputSize, by: 1).map { channelData[$0] }
            for (index, element) in channelDataArray.enumerated() {
                inputArray[[0, NSNumber(value: channel), NSNumber(value: index)]] = NSNumber(value: element)
            }
        }

Цикл перебирает каналы и аудиоданные, чтобы заполнить входной массив данными канала.

10. Внутри функции создайте вход для модели классификации звука. Входные данные для модели классификации звука создаются с использованием класса BabiesCryingInput с аудиосэмплами в качестве входного массива.

        // Create the input for the sound classification model
        let input = BabiesCryingInput(audioSamples: inputArray)

11. Внутри функции сделайте прогнозы с помощью модели на основе уже заданных вами входных данных.

        // Make predictions with the model
        if let prediction = try? model.prediction(input: input) {
            // Access the predicted class or probabilities
            let predictedClass = prediction.classLabel
            let probabilities = prediction.classLabelProbs
            
            self.result = predictedClass

            // Process the prediction results as needed
            print("Predicted class: \(predictedClass)")
            print("Probabilities: \(probabilities)")
        } else {
            fatalError("Failed to make a prediction.")
        }

Прогнозы делаются с помощью модели с использованием входных данных. Если прогноз успешен, осуществляется доступ к прогнозируемому классу и вероятностям. Свойство result обновляется предсказанным классом. Результаты прогнозирования распечатываются в целях отладки. Если прогноз терпит неудачу, возникает фатальная ошибка. Затем свойство result можно вызвать в представлении приложения.

Как работает приложение Cry Cry Baby

Когда пользователь входит в приложение, ему будет представлена ​​краткая страница о приложении Cry Cry Baby. После этого пользователь будет перенаправлен на главную страницу, где он сможет получить доступ к различным функциям и функциям. Пользователи могут записывать звуки плача своего ребенка, а машинное обучение предоставит результаты анализа. По результатам анализа пользователи могут понять смысл записанного детского крика. Кроме того, приложение предоставляет дополнительную информацию о том, какие действия пользователи должны предпринять в ответ на ситуацию.

Возможность и улучшение

Возможности Cry Cry Baby безграничны. Благодаря передовым алгоритмам машинного обучения и интуитивно понятным функциям приложение может революционизировать то, как родители понимают потребности своего ребенка и реагируют на них. От точной интерпретации различных криков до предоставления ценной информации и рекомендаций, Cry Cry Baby открывает перед родителями мир возможностей для лучшего общения и заботы о своих малышах. Будь то определение голода, сонливости, дискомфорта или других потребностей, приложение предоставляет родителям инструменты, необходимые им для обеспечения быстрого и эффективного ухода за своими детьми. Благодаря постоянным обновлениям и улучшениям возможности Cry Cry Baby безграничны, что обеспечивает расширенный родительский опыт для опекунов по всему миру.

Основываясь на отзывах, полученных от других учеников и наставников, улучшения, которые можно внести для дальнейшего развития Cry Cry Baby, заключаются в следующем:

  1. Сбор большего количества наборов данных: сбор большего набора данных повысит точность модели машинного обучения, уменьшив вероятность того, что Cry Cry Baby неправильно идентифицирует детские звуки.
  2. Добавление класса «другие»: введение дополнительного класса в модель машинного обучения для определения звуков, не являющихся плачем ребенка, или для определения плача ребенка, не имеющего определенного значения.
  3. Улучшения дизайна и цвета. Домашняя страница может быть разработана для динамической настройки цвета фона на основе результатов машинного обучения. Например, если результат указывает на голод, цвет фона может измениться с фиолетового на красный. Это визуальное представление призвано обеспечить более четкую визуализацию результатов машинного обучения.
  4. Будущее расширение для включения видео: выходя за рамки аудио, Cry Cry Baby может быть дополнительно расширена для включения видеоанализа, что позволит лучше понять потребности ребенка.

Эти улучшения будут способствовать постоянному развитию и эволюции Cry Cry Baby, обеспечивая ее непрерывный рост и эффективность в помощи родителям в уходе за своими детьми.

Заключение

Ключевым уроком создания Cry Cry Baby является то, что машинное обучение можно применять к различным аспектам жизни, чтобы помочь людям в их повседневной деятельности. Благодаря быстрому развитию машинного обучения, особенно CreateML, существует огромный потенциал для разработки инновационных приложений как для настоящего, так и для будущего. Машинное обучение открывает возможности для революционных приложений, которые могут принести большую пользу людям в их повседневной жизни. Он подчеркивает возможности использования технологий для решения реальных проблем и улучшения человеческого опыта. По мере того, как мы продолжаем исследовать и использовать потенциал машинного обучения, мы можем ожидать дальнейших достижений и преобразующих решений, которые будут определять то, как мы живем и взаимодействуем с технологиями.

Я взволнован и очень доволен своим путешествием по созданию Cry Cry Baby, и я надеюсь, что мой текст поможет всем вам в разработке приложений и машинном обучении. Спасибо за чтение, и если у вас есть какие-либо отзывы, пожалуйста, не стесняйтесь обращаться ко мне ☺️

@ 2023 Тереза ​​Тиффани Танаджи. Все права защищены