私は30秒の音楽サンプルを4つのジャンルの1つに分類しています:["electronic"、 "hip hop"、 "jazz"、 "rock"]助けの一種。ScikitlearnとkNearestNeighborクラシファイアで音楽を分類する際に問題が発生する
私は自分のデータセットをmp3ファイルから生成しました。私の "dataset"ディレクトリ内ではジャンルごとに100曲を並べ、各ジャンルのサブディレクトリに25を置いています(つまり、私は "電子"、 "ヒップホップ"などのサブディレクトリを持っています)。
これまでは、これらのmp3ファイルのそれぞれ30秒のサンプルを抽出し、サンプルが-32または-18dBを超えないように正規化し、モノにミックスしてwav(pyDub) 。
次に、私はlibrosaを使って各曲の1292フレームのmfccs(メル周波数ケプストラム係数)を抽出しました。次に、sklearnの前処理モジュールを使用してデータの平均と単位分散がゼロになるようにデータをスケーリングしました。
私はこれらの値をとり、それぞれの行がフレームであり、各列が12個の係数の1つであるMFFCsのcsvファイルに保存しました。 - 金Seve.mp3
1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
-1.6792870551627723,-0.3842983399875271,-0.4027844785642914,0.7165034707424635,-0.6823681099880697,0.8160136728323858,-1.5263184054951733,1.1145290823984928,-0.21784328023531235,0.047527570975473235,0.32866412875434237,1.869661743729989
2.4841536110972022,-0.5831476248573247,0.37058328670683277,-1.4599220579565508,-0.35449671920732007,-1.1326787825224918,0.5880762356956317,-0.8108172607843107,0.010134004741811507,-0.14931018884055094,0.8707111843072819,0.1667143116197902
2.0939135826765907,-0.4778720879089441,0.26530387765936375,-1.7076132053582773,0.11305806361775678,-1.310823349961563,1.1669240812438573,-0.8627333493359391,-0.19252158214293175,-0.039523355794829566,0.6658161856594883,0.2860711396454278
1.0127547898943148,-0.6547501371081066,-0.202002065081406,-1.7889468252345162,1.1632837017143651,-0.9288351063974712,2.070078331574107,-0.7601750354687623,-0.27909671541985936,-0.13713166210030908,0.2267359005199065,0.27808482310773774
0.06572087004052392,-1.8740496505118946,-0.9604185325425617,-1.0163364869696865,1.5840872642483552,-0.16659361108422382,1.7806813371087853,0.055159751832777354,0.6842054675590546,0.42350598071605017,-0.3324771084186967,-0.24348528197848257
0.7159690101152768,-2.6235135217332606,-0.9099658866643047,-0.19653348650619468,1.0348534863167884,-0.6771927176675163,1.0703663687805878,0.3981886714210787,0.8503521825769755,0.4055860454830591,-0.11841556456925736,0.05030541244676532
0.8810398765824345,-2.7727001749452045,-0.8484274387283207,0.14839104995756489,0.9124992899968386,-0.5987705973726993,0.6471053665081234,0.43190059553550836,0.9028748015921237,0.3425604687141461,-0.20209176692016032,0.15561852907964296
1.5217565976091,-2.5946551685896044,-0.3924558895014341,0.36743931340001096,0.9126773048246598,-0.7581004315396501,0.4463892360730688,0.42969123923287,0.7276796949470707,-0.0079165602005986,-0.580154306587985,-0.07235102966750707
2.08861621898524,-1.2804976691396324,0.46640912894919145,0.14007051920782673,0.9100754665932002,-1.51168507329552,0.7161640071116147,0.34780954351977644,0.3,-1.103443008391695,-0.7900432022174468,-0.2847124076141728
1.300078728794466,-0.6136862665584394,0.5321920666343034,-0.25881789165042973,1.2648582642185016,-1.7504670292559645,1.4050993480861744,0.354988549965
私は単に一つの大きなベクターに、各曲の1292個のフレームベクトルをコンパイルしようとした フリオBashmore:
だから、アイデア、最初の20のフレームに続いて曲を取得することができます各ジャンルについて、それをscikitlearnのkNNアルゴリズムの入力として使用します。私は非常に不幸な結果を得ている、私はちょうど "ロック"でいっぱいのベクトルを取得
私は本当にそれをまったく正確に行くつもりはないと確信しているが、 私は以下の2つの機能があります。最初のものは、各ジャンルごとにこの特徴ベクトルを作成する。 2番目の方法は、各ジャンルのベクトルと、そのジャンルのラベルで満たされたベクトルを使用して、単にそれを訓練します。
def create_np_vector(db_read, start_row):
num_frames = 1292
num_songs = 25
num_coefs = 12
#vector for all features of every song/sample of that genre
genre_vec = np.empty([(num_frames * num_songs), num_coefs])
db_reader = csv.reader(db_read)
for row in itertools.islice(db_reader, start_row, start_row + 25):
id = row[0]
path = row[2]
mfcc_file = path + "/csv/" + id + ".csv"
mfcc_reader = csv.reader(open(mfcc_file, 'r'))
frame_num = 0
for mfcc_row in mfcc_reader:
frame_vec = np.array(mfcc_row)
genre_vec[frame_num] = frame_vec
frame_num = frame_num + 1
return genre_vec
def train_knn(db_read, knn):
genres = ["electronic", "hip hop", "jazz", "rock"]
line_num = [0, 26, 51, 76]
x = 0
for genre in genres:
vec = create_np_vector(db_read, line_num[x])
x = x + 1
print(genre)
knn.fit(vec, [genre for x in range(25*1292)])
私はここで何をしていますか?私はリソースとしてこれを使用しようとしています:http://modelai.gettysburg.edu/2012/music/、しかし私はまだかなり失われています。各オーディオファイルの平均ベクトルと共分散行列を計算する必要がありますか?
私がそれを行ったとしても、各ファイルの2つのベクトルはどうしたらよいですか?
マシンの学習コードは完全にうまくいき、MFCCはジャンルの分類にはあまり適していない可能性があります。 MFCCはおそらく鍵、スペクトルバランス、オーバーミックスなどの特性をキャプチャする方が良くなるでしょう。ジャンルは、リズム、コード、および楽器によってはるかに決定されますが、MFCCによって実際には取り込まれません。 – Linuxios
MFCCは長時間ジャンルのクラスに使用されていますが... – ohbrobig
多分私は間違っていますが、ジャンルに関連する情報をどのように取り込むのか分かりません – Linuxios