YAPAY SİNİR AĞLARIYLA MÜZİKAL TÜR TANIMA Gözde

advertisement
Fırat Üniversitesi-Elazığ
YAPAY SİNİR AĞLARIYLA MÜZİKAL TÜR TANIMA
Gözde Kumaşoğlu1, Bülent Bolat2
Multimedya Sinyal Analiz Laboratuarı,
Elektronik ve Haberleşme Mühendisliği Bölümü, Elektrik Elektronik Fakültesi
Yıldız Teknik Üniversitesi
1
[email protected], [email protected]
türü 3-NN ile %88,36 oranında doğru sınıflamıştır. Paradzinets
ve arkadaşları [3] yeni önerdikleri bir grup öznitelikle 6 farklı
türü uzman sistemlerden oluşan bir komiteyle %80,9 oranında
sınıflamayı başarmışlardır. Panagakis ve diğerleri [4]
MARSYAS [5] veri setinin tamamını kullandıkları
çalışmalarında 10 türü %92.4 başarıyla sınıflandırmıştır.
Tsunoo ve diğerleri [6] aynı veri setini MFCC temelli
özniteliklerle Destek Vektör Makineleri kullanarak %76.2
başarımla sınıflandırmışlardır.
Bu çalışmada sunulan sistemin gerçekleştirilmesi iki
aşamadan oluşur. İlk aşama, ses dosyalarının işlenerek müzik
türlerinin kendine özgü karakteristik özeliklerini belirleyen
özniteliklerin çıkarılmasıdır. İkinci aşama ise çıkarılan
öznitelikler yardımıyla insan algısına yakın bir sınıflandırma
mekanizması oluşturulmasıdır [7].
Çalışmada kullanılan öznitelikler ikinci bölümde ele
alınmıştır. Üçüncü bölüm, kullanılan yapay sinir ağlarına
ayrılmıştır. Dördüncü bölümde uygulama sonuçları üzerinde
durulurken bu sonuçların değerlendirmesi beşinci bölümde
yapılmıştır.
ÖZET
Bu çalışmada, insan algısını taklit ederek müzik parçalarını
müzikal türlerine göre sınıflandıran bir sistem gerçeklenmiştir.
Çalışma kapsamında, 4 farklı türden (pop, klasik, metal ve
disco) müzik parçaları Mel frekans kepstrum katsayıları ve
doğrusal öngörü katsayıları kullanılarak Çok Katmanlı Almaç
(MLP), Elman Ağı, Olasılıksal Sinir Ağı (Probabilistic Neural
Network, PNN), Genelleştirilmiş Regresyon Sinir Ağı
(Generalised Regression Neural Network, GRNN) ve en yakın
komşu sınıflandırıcısı (K-Nearest Neighbour, KNN) ile
sınıflandırılmıştır. Yapılan çalışmada, en iyi performans
%95,83doğru sınıflama yüzdesi ile MLP kullanılarak elde
edilmiştir.
Anahtar Kelimeler: Mel frekans kepstrum katsayıları (MFCC),
doğrusal öngörü katsayıları (LPC), k-en yakın komşu
sınıflandırıcısı (KNN), çok katmanlı almaç, Elman ağı,
olasılıksal sinir ağı (PNN), genelleştirilmiş regresyon sinir ağı
(GRNN)
1.
2.
GİRİŞ
ÖZNİTELİK ÇIKARMA
Öznitelik, bir sinyalin sahip olduğu başlıca karakteristik
özelliklerin bir özeti niteliğindeki verilerin genel adıdır. Ses
işleme alanında en çok kullanılan ve daha önce yapılan
çalışmalarda en iyi sonuç vermiş olan öznitelikler Mel frekans
kepstrum katsayıları (Mel-Frequency Cepstrum Coefficients,
MFCC) ve Doğrusal Öngörü Katsayılarıdır (Lineer Prediction
Coefficients, LPC). Bu ndenle, bu çalışmada öznitelik olarak
MFCC ve LPC kullanılmıştır.
Günümüz teknolojisinde, sayısallaştırılmış müzik yaygın
olarak
kullanılmaktadır.
Müziğin
sayısal
ortamda
yaygınlaşmasına paralel olarak, müzik eserlerinin müzik
türlerinin çeşitli özellikleri temel alınarak gruplanabilmesi
önemli bir problem haline gelmiştir. Kullanıcının istediği türde
müzik parçalarının veri tabanından seçilmesi ya da hangi türe
ait olduğu bilinmeyen müzik parçasının ait olduğu türün
belirlenmesi müzik türleri sınıflandırıcılarının kullanım
amaçlarına örnek olarak gösterilebilir [1].
Sayısal ortamda müzikal tür tanımlama sistemlerinin
gerçeklenmesinde, insanların müzikal tür algılama şekli model
alınmıştır. İnsanların müzikal türleri tanımlayabilme yetisi
müzikal altyapılarına ya da müzik tecrübelerine göre
değişkenlik göstermektedir. Örneğin, jazz müzikle tanışıklığı
pek fazla olmayan birine jazz parçası dinletildiğinde türünü
tanımlamakta zorluk çekebilir. Aynı şekilde, çoğunlukla pop
müzik dinleyen birinin bu türü tanımlaması bir hayli kolay
olacaktır. Bu fikirden hareketle, türler ile ilgili edinilen bilgi
birikiminin tür tanımlama için gerek ve yeter koşul olduğu
kanısına varılabilir.
Müzik türlerinin sayısal ortamda belirlenmesinde, tıpkı
insanlardaki algıda görülen çeşitlilikler gibi, kesin bir
doğruluk oranı elde etmek zordur. Bu sebeple müzikal tür
tanımlayan sistemin tasarım aşamasında kullanılan sabit, tek
bir yöntem yerine, farklı performans katkıları sağlayan birçok
yöntem mevcuttur. Bunların arasından en uygun yöntem
seçilmeli ve yöntemlerin performans üzerindeki etkisi
karşılaştırmalı olarak test edilmelidir.
Literatürde bu alanda çok sayıda çalışma mevcuttur.
Kosina [2] insan kulağının müzikal tür tanımadaki başarısını
%70 civarında olarak belirtmiştir. Kosina bu çalışmada 3 farklı
2.1. Mel Frekansı Kepstrum Katsayıları
Mel frekans kepstrum katsayıları insan kulağının
fizyolojik özelliklerinden esinlenen bir öznitelik türüdür.
MFCC’ler hesaplanırken ilk aşamada ses sinyali istatistiksel
özelliklerinin sabit kabul edilebildiği kısa zaman aralıklarına
bölünür, bir başka deyişle pencerelenir. Fourier dönüşümü
yardımıyla pencerelenmiş sinyalin logaritmik genlik
spektrumu hesaplanır. Logaritmik spektrum doğrusal olmayan
aralıklarla dizilmiş bir dizi üçgen süzgeç yardımıyla doğrusal
frekans skalasından Mel frekans skalasına çevrilir. Süzgeç
bankası çıkışında kosinüs dönüşümü uygulanarak MFCC
katsayıları elde edilir [8, 9, 10].
2.2. Doğrusal Öngörü Katsayıları
İleri yönde doğrusal öngörüde amaçlanan, sinyalin bir
sonraki örneğini daha önceki değerlerinin doğrusal bir
kombinasyonu ile elde etmektir.
p
yˆ ( n) = ∑ ai y ( n − i )
i =1
61
(1)
Elektrik-Elektronik ve Bilgisayar Sempozyumu 2011
Burada ai ile gösterilen katsayılar öngörü ya da doğrusal
öngörü katsayıları, p ise öngörü süzgecinin derecesidir.
LPC’ler hesaplanırken amaç ortalama karesel hata e(n)’i en
küçük yapan süzgeç katsayılarını bulmaktır:
2
p


e ( n ) = E  y ( n) − ∑ a i y ( n − i ) 
i =1


3.2. Elman Sinir Ağı
Elman sinir ağı üç katmandan oluşan, gizli katman ile giriş
katmanı arasında geri besleme içeren bir geri yayılım ağıdır.
Kolay kullanımı ve başarılı sonuçlar vermesi sebebiyle tercih
edilen bir ağdır. Elman ağı, yapısal olarak MLP’ye
benzemektedir. Elman ağı da MLP gibi hatanın geri yayılımı
algoritması ile eğitilmektedir
Elman ağının katmanlı yapısında MLP’den farklı olarak
gizli katmandan girdi alan içerik elemanları bulunmaktadır.
İçerik elemanları bir önceki iteasyondaki aktivasyon değerini
bir sonraki iterasyona taşımakla görevlidir [14].
(2)
Burada E{.}, ortalama (beklendik değer) operatörüdür. Bu
eşitliği minimize etmek için literatürde çeşitli algoritmalar
tanımlanmıştır. Bu çalışmada Levinson-Durbin Yinelemesi
[10, 11, 12] kullanılmıştır.
3.3. Olasılıksal Sinir Ağı
2.3. Veri Kümesinin Oluşturulması
Olasılıksal Sinir Ağı (Probabilistic Neural Networks,
PNN) radyal temelli bir sinir ağıdır. Danışmanlı öğrenmeye
dayalıdır. PNN, Bayes Teoremi kullanarak karar veren bir
sinir ağıdır. Bayes teoremine göre herhangi bir x vektörü (4)
eşitliği doğru ise 1. sınıfa, değilse 2. sınıfa aittir [15]:
MFCC ve LPC katsayıları hesaplandıktan sonra, bu
katsayıların ortalaması, değişintisi, birinci dereceden ayrık
zamanlı türevi (deltası) ve ikinci dereceden ayrık zamanlı
türevi (delta-deltası) olarak sıralanabilecek yüksek dereceli
istatistikleri hesaplanarak öznitelik vektörünün son hali
oluşturulmuştur.
Öznitelik vektörüne karar verildikten sonra,
kullanılacak 4 farklı müzik türünden yüzer adet şarkı
belirlenmiş ve sınıflandırma işleminde kullanılmak üzere
öznitelik vektörleri çıkarılmıştır. İşlenen müzik dosyaları 30’ar
saniyelik au uzantılı dosyalardır. Dosyalar 22050 Hz
frenkansında örneklenmiş ve 16 bitle kodlanmıştır. Her bir
dosya 1,5 saniyelik 20 parçaya ayrılarak işlenmiştir.
3.
F1 ( x ) L1 P2
>
F2 ( x) L 2 P1
(4)
Burada Fi(x) x’in i. sınıfa ait olma olasılığı, Pi i. sınıfın
görülme olasılığı, Li ise i. sınıfın önem derecesini belirten bir
maliyet katsayısıdır. Olasılık yoğunluk fonksiyonları ise (5)
eşitliği ile bulunur:
SINIFLANDIRICILAR
F (x) =
1
m 2
( 2π ) σ m
n

i =1

∑ exp  −
n
( x − xi ) ( x − xi ) 
T
2σ 2
 (5)

Bu çalışmada sınıflandırıcı olarak çok katmanlı almaç ağı,
Elman ağı, olasılıksal sinir ağı, genelleştirilmiş regresyon ağı
ve k en yakın komşuluk algoritması kullanılmıştır. Yapay sinir
ağları eğitme verisi ile eğitilmiş, her bir ağın parametreleri ayrı
ayrı en iyileştirilmiş ve daha sonra ağların başarımlar test
verileri ile tespit edilmiştir.
Burada σ yayılım katsayısı veya açıklık olarak adlandırılan,
radyal fonksiyonların genişliğini belirleyen bir parametredir.
PNN, diğer ağlara göre daha fazla hesaplama karmaşıklığı
içerdiğinden daha yavaş çalışır [16].
3.1. Çok Katmanlı Almaç
3.4. Genelleştirilmiş Regresyon Sinir Ağı
Çok katmanlı almaç (MLP), ileri beslemeli, çok katmanlı
ve doğrusal olmayan ayrıştırma yapabilen bir yapay sinir ağı
türüdür. MLP, bir giriş katmanı, bir çıkış katmanı ve bu ik
katman arasında yer alan bir veya birden fazla gizli katmandan
oluşur [9].
MLP’nin çalışma yapısını iki bölümde incelemek
mümkündür. Birincisi ileri yönde gerçekleşen iletim, diğeri ise
hatanın geri yayılması algoritmasıdır. Ağa bir giriş
uygulandığında uygulanan girişler bir önceki katmandan bir
sonraki katmana doğru çıkış katmanına kadar iletilir. Bu ileri
yöndeki iletimdir. Eğitme aşamasında uygulanan giriş sinyali
çıkış katmanına ulaştığında, elde edilen çıkış ile istenen çıkış
arasındaki fark, yani hata sinyali geri yayılım ile giriş
katmanına doğru sırasıyla iletilir. Bu çalışmada hatanın geriye
yayılımı Delta kuralına göre yapılmıştır. Bu kurala göre, elde
edilen çıkış sinyalinden elde edilmek istenen sinyalin
çıkarılması ile hata hesaplanır ve ağırlıklar aşağıdaki formüle
göre güncellenir:
Genelleştirilmiş Regresyon Sinir Ağı (Generalised
Regression Neural Networks, GRNN), PNN gibi radyal
temelli bir yapay sinir ağıdır. Nöron yapısında radyal temelli
katmanın yanı sıra özel bir doğrusal katman bulunur. Az
sayıda eğitim örneğinden bile fonksiyon üretebilme
yeteneğinden dolayı tercih edilen bir sinir ağıdır. PNN’den
farklı olarak sürekli çıkış verebildiğinden regresyon için de
kullanılır [17]. Herhangi bir giriş vektörü x için i. radyal
biriminin çıkışı şu şekilde hesaplanır:
 ( x − xi ) T ( x − xi ) 

2σ 2


β i = exp −
Burada σ, PNN’de olduğu gibi, kullanıcı tarafından belirlenen
yayılım katsayısıdır. Herhangi bir x girişi için ağın çıkışı y şu
şekilde hesaplanır:
K
(3)
Burada µ öğrenme oranı, δj(n) yerel değişim, zi(n)
nöronun girdi sinyalidir.
(6)
y=
∑α y
i
i
i =1
j.
Burada α katsayıları şu şekilde hesaplanır:
62
(7)
Fırat Üniversitesi-Elazığ
αi =
βi
K
∑β
tarafından oldukça başarılı bir şekilde tanınabilmiştir. MLP
dışındaki ağlar, disko türünü sınıflamada genel olarak
başarısız kalırken özellikle k-NN %31,31 performansla
yapılan tüm denemelerin içinde en kötü başarımı vermiştir.
(8)
i
i =i
5.
3.5. k-En Yakın Komşuluk Sınıflandırıcısı
Bu çalışmada, insanların algısı taklit edilerek müzik
parçalarını müzikal türlerine göre sınıflandıran bir sistem
gerçeklenmiştir. Çalışma kapsamında, 4 farklı türden (pop,
klasik, metal ve disko) müzik dosyası, Mel frekans kepstrum
katsayıları ve doğrusal öngörü katsayılarından yararlanılarak
sınıflandırılmıştır. Öznitelik olarak MFCC ve LPC’lerin yanı
sıra bunların ortalaması, değişintisi, birinci dereceden ayrık
zamanlı türevi (deltası) ve ikinci dereceden ayrık zamanlı
türevi (delta-deltası) kullanılmıştır.
Yapılan denemeler sonucunda en yüksek genel başarım
MLP ile %95,83 olarak gerçekleşmiştir. Bu sonuç ortalama bir
insanın performansından daha yüksektir. Elde edilen
sonuçların genel bir değerlendirmesi yapıldığında pop türü
tüm sınıflandırıcılar tarafından başarıyla tanınırken disko türü
MLP dışındaki sınıflandırıcılar tarafından başarıyla
sınıflandırılamamıştır. k-NN bu tür için oldukça başarısız
kalmıştır. Buradan, k-NN’in bu tür sınıflama problemleri için
uygun bir sınıflandırıcı olmadığı söylenebilir.
Bu çalışmada müzik parçalarının türlerine göre
sınıflandırılması amaçlanmıştır. Yapılan çalışma sonucunda
insan performansından daha başarılı bir sistem elde edilmiş ve
amaca ulaşılmıştır. Gelecekteki çalışmalarda tür sayısının
arttırılması, farklı özniteliklerin performansa etkisi ve
performansı en fazla etkileyen özniteliklerin tespit edilmesi
gibi konular üzerinde durulması planlanmaktadır.
k-En Yakın Komşuluk (k-Nearest Neighbour, k-NN)
sınıflandırıcısı, eğiticili bir sınıflandırma algoritmasıdır. M
farklı sınıfa ait N adet eğitim verisi olsun. Eğitme kümesine ait
olmayan herhangi bir x verisi, eğitim kümesindeki N adet
veriden kendisine en yakın k adet komşusu arasında en sık
görülen sınıfa dahil varsayılır [18]. Burada komşu terimi
eğitme kümesindeki verileri, yakınlık ise Öklid, Mahalanobis
gibi bir uzaklık ölçütünü belirtir.
4.
SONUÇLAR
UYGULAMA
Bu çalışmada 4 farklı müzik türü seçilerek çeşitli
öznitelikler
yardımıyla
sınıflandırmaya
çalışılmıştır.
Çalışmada kullanılan türler pop, klasik, metal ve disko olarak
belirlenmiştir. Çalışmanın ilk adımında ses işaretlerinin MFCC
ve LPC katsayıları çıkarılmış, daha sonra bu katsayılardan
çeşitli öznitelikler çıkarılmıştır. İlk aşamada elde edilen
öznitelik vektörleri kullanılarak ikinci aşamada dört farklı
yapay sinir ağının (ileri beslemeli geri yayılım ağı, Elman sinir
ağı, olasılıksal sinir ağı ve genelleştirilmiş regresyon ağı) ve
bir sınıflandırıcının (k-en yakın komşu sınıflandırıcısı) eğitimi
ve testi gerçekleştirilmiş, karşılaştırmalı performans analizleri
yapılmıştır.
Çalışmada kullanılan 30 sn’lik müzik parçaları 1,5’ar
saniyelik 20 bölüme ayrılmış ve her bir bölüm için ayrı ayrı
MFCC ve LPC katsayıları hesaplanmıştır. Hesaplanan değerler
kullanılarak katsayıların ortalama, varyans, ayrık zamanlı
türev (delta) ve ayrık zamanlı ikinci dereceden türevleri (deltadelta) alınarak öznitelik vektörü oluşturulmuştur. Müzik
parçaları MARSYAS [5] veri kümesinden derlenmiştir. Her
türden 100 adet şarkı seçilmiş, bunların 70 tanesi eğitimde, 30
tanesi ise test işleminde kullanılmıştır.
Sınıflandırıcılardaki değişken parametreler her bir
sınıflandırıcı için en yüksek performansı elde edecek şekilde
deneme yanılma ile tespit edilmiştir.
Yapılan denemeler sonucunda MLP için 3 ara katman ve
her bir katmanda 8’er nöron kullanılması gerektiğine karar
verilmiştir. Aktivasyon fonksiyonu olarak tanjant sigmoid
fonksiyonu kullanılmıştır. Öğrenme oranı da yine deneme
yanılma yöntemiyle 0,3 olarak belirlenmiştir.
Elman ağı üç ara katmana sahip olarak tasarlanmış, ilk iki
katmanda 7 nöron, son katmanda ise 4 nörona sahip ocak
şekilde oluşturulmuştur. Yapılan denemeler sonucunda en iyi
performans öğrenme oranının 0,5 alındığı durumda elde
edilmiştir.
Olasılıksal sinir ağında yayılım katsayısının en uygun
değeri deneme yanılma yöntemiyle 0,7 olarak bulunurken
GRNN için en uygun σ değeri 0,6 olarak belirlenmiştir.
k-NN
sınıflandırıcı
için,
mevcut
sınıflandırma
probleminde en iyi performans gösterecek k değeri 10 olarak
belirlenmiştir.
Tüm sınıflandırıcılar belirlenen bu parametreler ile
eğitildikten sonra test verisi ile test edilmiştir. Tablo 1 elde
edilen test sonuçlarını göstermektedir. Buradan da
görülebileceği gibi, en yüksek genel performans MLP
ile %95,83 olarak elde edilirken en düşük performans k-NN
ile %71,46 olarak elde edilmiştir. Pop türü tüm ağlar
Tablo 1. Kullanılan
karşılaştırması (%)
Pop
sınıflandırıcıların
performans
Metal
Klasik
Disko
90
93,3
100
100
95,83
Elman
60
86,6
100
76
88,15
PNN
93,3
86,6
96,6
70
86,63
GRNN
93,3
80
96,6
70
84,97
k-NN
100
78,8
75,8
31,31
71,46
MLP
6.
Toplam
KAYNAKLAR
[1] Avcu, N, Alpkoçak, A, “Yüksek Dereceli İstatistikler
Kullanılarak Müzik Türü Sınıflandırılması” IEEE 15
Sinyal İşleme ve Uygulamaları Çalıştayı, 2007.
[2] Kosina, K., “Music genre recognition”, Medientechnik
und Design in Hagenberg, Lisans Tezi, 2002.
[3] Paradzinets, A., Harb, H., Chen, L.,"Multiexpert System
for Automatic Music Genre Classification", Teknik
Rapor, Ecole Centrale de Lyon, Departement MathInfo,
2009.
[4] Panagakis, Y., Kotropoulos,C., Arce, G. R., "Music
Genre Classification using Locality Preserving Nonnegative
Tensor
Factorization
and
Sparse
Representations", 10th International Society for Music
Information Retrieval Conference, 2010.
63
Elektrik-Elektronik ve Bilgisayar Sempozyumu 2011
[5] Tzanetakis, G., Cook, P., “Musical Genre Classification
of Audio Signal”, IEEE Transactions on Speech and
Audio Processing, Vol. 10,No.3,pp.293–302, 2002.
[6] Tsunoo, E., Tzanetakis, G., Onon, N., Sagayama, S.,
"Audio Genre Classification Using Percussive Pattern
Clustering Combined with Timbral Features" Proc. Int.
Conf. on Multimedia and Expo (ICME), 2009.
[7] Bolat, B, Küçük, Ü, "Olasılıksal Sinir Ağları İle Müzikal
Enstrüman Ailelerinin Tanınması" EMO 2005 EMO
Elektrik - Elektronik - Bilgisayar 11. Ulusal Kongresi,
İstanbul, 2005.
[8] Demirci, M, D, Öztaş, O, “MFCC ve Vektör
Kuantizasyonı Kullanılarak Konuşmacı Tanıma”, II.
Mühendislik Bilimleri Genç Araştırmacılar Kongresi
MBGAK, İstanbul, sf.132-133, 2005.
[9] Tunalı, V., “A Speaker Dependent, Large Vocabulary,
Isolated Word Speech Recognation System For Turkish”,
Marmara Üniversitesi FBE Yüksek Lisans Tezi, 2005.
[10] Rabiner, L.R, Schafer, R.W., Digital Processing of
Speech Signals, Prentice-Hall, Englewood Cliffs, 1978.
[11] Öcal, K., “Otomatik Konuşma Tanıma Algoritmalarının
Uygulamaları”, Ankara Üniversitesi Fen Bilimleri
Enstitüsü Yüksek Lisans Tezi, 2005.
[12] Baygün, M. K., Yaldır, A. K, "Lineer Predictive Coding
Ve Dynamic Time Warping Teknikleri Kullanılarak Ses
Tanıma Sistemi Geliştirilmesi", Akademik Bilişim
Konferansı 2006, Denzili, Şubat 2006.
[13] Tozkan, S., “Yapay Sinir Ağları”, Fırat Üniversitesi
Mühendislik Fakültesi Elektrik Elektronik Mühendisliği
Bölümü Bitirme Ödevi, 2004.
[14] Yurtoğlu, H., ”Yapay Sinir Ağları Metodolojisi ile
Öngörü Modellemesi: Bazı Makroekonomik Değişkenler
İçin Türkiye Örneği”, Devlet Planlama Teşkilatı
Ekonomik Modeller ve Stratejik Araştırmalar Genel
Müdürlüğü, Uzmanlık Tezi, 2005.
[15] Specht, D. F., "Probabilistic neural networks", Neural
Networks, Vol. 3 (1), pp 109-118, 1990.
[16] Engin, E., Kuyucuoğlu, F., “Sayısal Ses İşlemenin Tıbbi
Alanda Kullanılması”, Ege Üniversitesi Mühendislik
Fakültesi Elektrik Elektronik Mühendisliği Bölümü
Bitirme Projesi Tezi, 2003.
[17] Fırat, U., “Yapay Sinir Ağı Kullanarak Deprem
Eğiliminin Kestirimi”, Deprem Sempozyumu, Kocaeli, sf.
1348-1352, 2005.
[18] Kırmızıgül Çalışkan, S, Soğukpınar, İ, “KxKNN: KMeans ve K En Yakın Komşu Yöntemleri ile Ağlarda
Nüfuz Tespiti”, 2. Ağ ve Bilgi Güvenliği Sempozyumu,
Girne, 16-18 Mayıs 2008.
64
Download