Как использовать MFCC в Weka для классификации аудио?
Я пытаюсь разработать метод классификации аудио с использованием MFCC в Weka. Имеющиеся у меня MFCC генерируются с размером буфера 1024, поэтому для каждой аудиозаписи существует ряд коэффициентов MFCC. Я хочу преобразовать эти коэффициенты в формат данных ARFF для Weka, но я не уверен, как решить эту проблему.
Я также задал вопрос о слиянии данных, потому что я чувствую, что это может повлиять на преобразование данных в формат ARFF.
Я знаю, что для ARFF данные должны быть перечислены через атрибуты. Должен ли каждый коэффициент MFCC быть отдельным атрибутом или массивом коэффициентов как одним атрибутом? Должны ли каждые данные представлять один MFCC, окно времени или весь файл или звук? Ниже я написал, как, по моему мнению, должно выглядеть, если бы учитывался только один MFCC, который, я думаю, не смог бы классифицировать весь звук.
@relation audio
@attribute mfcc1 real
@attribute mfcc2 real
@attribute mfcc3 real
@attribute mfcc4 real
@attribute mfcc5 real
@attribute mfcc6 real
@attribute mfcc7 real
@attribute mfcc8 real
@attribute mfcc9 real
@attribute mfcc10 real
@attribute mfcc11 real
@attribute mfcc12 real
@attribute mfcc13 real
@attribute class {bark, honk, talking, wind}
@data
126.347275, -9.709645, 4.2038302, -11.606304, -2.4174862, -3.703139, 12.748064, -5.297932, -1.3114156, 2.1852574, -2.1628475, -3.622149, 5.851326, bark
Любая помощь будет оценена.
Редактировать: Я сгенерировал некоторые ARFF-файлы, используя Weka, используя openSMILE, следуя методу с этого сайта, но я не уверен, как эти данные будут использоваться для классификации аудио, потому что каждая строка данных составляет 10 миллисекунд аудио из одного и того же файла. Атрибут имени каждой строки "неизвестен", который, как я полагаю, является атрибутом, который данные будут пытаться классифицировать. Как я смогу классифицировать общий звук (а не 10 миллисекунд) и сравнить его с несколькими другими общими звуками?
Редактировать № 2: Успех!
После более тщательного изучения найденного веб-сайта я увидел скрипт Accumulate и файлы данных Test и Train. Сценарий накопления объединяет все файлы, сгенерированные каждым набором данных MFCC из отдельных аудиофайлов, в один файл ARFF. Их файл состоял из около 200 атрибутов со статистикой для 12 MFCC. Хотя я не смог получить эту статистику с помощью OpenSmile, я использовал библиотеки Python для этого. Статистика была максимальная, минимальная, эксцесс, диапазон, стандартное отклонение и так далее. Я точно классифицировал свои аудиофайлы, используя BayesNet и Multilayer Perceptron в Weka, что дало мне 100% точность.
1 ответ
Я не знаю много о MFCC, но если вы пытаетесь классифицировать аудиофайлы, то каждая строка @data
должен представлять один аудиофайл. Если вы использовали окна времени или только один MFCC для каждой строки в @data
тогда классификаторы Weka будут пытаться классифицировать окна времени или MFCC, а это не то, что вам нужно. На всякий случай, если вы не знакомы с форматом (просто ссылки, потому что я видел, что вы поместили функции аудиофайла в ту же строку, что и @data
), вот пример, где каждая строка представляет растение ириса:
% 1. Title: Iris Plants Database
%
% 2. Sources:
% (a) Creator: R.A. Fisher
% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
% (c) Date: July, 1988
%
@RELATION iris
@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}
@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
С точки зрения решения вашего вопроса о том, какие атрибуты вы должны использовать для своего аудиофайла, это звучит (не каламбур), как если бы использование коэффициентов MFCC могло работать (при условии, что каждый аудиофайл имеет одинаковое количество MFCC, потому что каждый фрагмент данных / аудиофайл должен имеют одинаковое количество атрибутов). Я бы попробовал это и посмотрел, как это происходит.
РЕДАКТИРОВАТЬ: Если аудио файлы не одного размера, вы можете:
- Вырезать аудиофайлы длиннее самого короткого аудио. По сути, вы будете выбрасывать данные в конце аудиофайлов.
- Сделайте количество атрибутов достаточно большим, чтобы соответствовать самому длинному аудиофайлу, и поместите любые коэффициенты MFCC, представляющие молчание для незаполненных атрибутов аудиофайлов, которые закорочены, чем самый длинный аудиофайл.
- Если значения MFCC всегда находятся в определенном диапазоне (например, от -10 до 10 или что-то в этом роде), то, возможно, используйте модель "мешок слов". Ваши атрибуты будут представлять количество раз, когда коэффициент MFCC попадает в определенный диапазон для аудиофайла. Таким образом, первый атрибут может представлять число коэффициентов MFCC, которые находятся в диапазоне от -10 до -9,95, второй атрибут - от -9,95 до -9,90. Таким образом, если у вас был очень короткий аудиофайл с двумя MFCC (маловероятно, только для примера), и один коэффициент был 10, а другой - -9,93, тогда ваш последний атрибут будет иметь значение 1, ваш второй атрибут будет иметь значение 1, но все остальные атрибуты будут иметь значение 0. Недостатком этого метода является то, что порядок коэффициентов MFCC не учитывается. Тем не менее, этот метод хорошо работает для классификации текста, даже если порядок слов игнорируется, поэтому, кто знает, может быть, он будет работать для аудио.
- Кроме этого, я бы посмотрел, получишь ли ты хорошие ответы на свой вопрос о слиянии.