ককটেল পার্টি অ্যালগরিদম এসভিডি বাস্তবায়ন… কোডের এক লাইনে?


89

স্টোরফোর্ডের অ্যান্ড্রু এনগের কোরসেরে মেশিন লার্নিংয়ের প্রারম্ভিক বক্তৃতার একটি স্লাইডে তিনি অডিও উত্স দুটি স্থান পৃথক পৃথক মাইক্রোফোনের দ্বারা রেকর্ড করা ককটেল পার্টি সমস্যার জন্য নিম্নলিখিত এক লাইন অক্টাভা সমাধান দিয়েছেন:

[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

স্লাইডের নীচে রয়েছে "উত্স: স্যাম রোয়েস, ইয়ার ওয়েইস, ইরো সাইমনসেলি" এবং আগের স্লাইডের নীচে রয়েছে "টি-ওন লির অডিও ক্লিপস সৌজন্যে"। ভিডিওতে অধ্যাপক এনজি বলেছেন,

"সুতরাং আপনি এটির মতো নিরীক্ষণযোগ্য শিক্ষার দিকে নজর দিতে পারেন এবং জিজ্ঞাসা করতে পারেন, 'এটি বাস্তবায়ন করা কতটা জটিল?' দেখে মনে হচ্ছে এই অ্যাপ্লিকেশনটি তৈরি করার জন্য, এই অডিও প্রসেসিংটি করার মতো মনে হচ্ছে, আপনি এক টন কোড লিখবেন, অথবা অডিও প্রসেসিং করে সি ++ বা জাভা লাইব্রেরিগুলির একটি গোছায় লিঙ্ক করবেন। মনে হচ্ছে এটি সত্যিই হবে এই অডিওটি করার জটিল প্রোগ্রাম: অডিওকে আলাদা করে দেওয়া ইত্যাদি .এটি আপনি যা শুনেছেন তা করতে অ্যালগরিদম বেরিয়েছে, এটি কোডের এক লাইন দিয়েই করা যেতে পারে ... ঠিক এখানে দেখানো হয়েছে। এটি গবেষকদের অনেক সময় নিয়েছে কোডের এই লাইনের সাথে আসতে হবে। সুতরাং আমি বলছি না এটি একটি সহজ সমস্যা But তবে এটি প্রমাণিত হয়েছে যে আপনি যখন সঠিক প্রোগ্রামিং পরিবেশটি ব্যবহার করবেন তখন অনেক শিখনের অ্যালগরিদমগুলি সত্যই সংক্ষিপ্ত প্রোগ্রাম হবে ""

ভিডিও লেকচারে খেলানো পৃথক অডিও ফলাফলগুলি নিখুঁত নয় তবে আমার মতে আশ্চর্যজনক। সেই এক লাইনের কোডটি কীভাবে এত সুন্দরভাবে সম্পাদন করে সে সম্পর্কে কি কারও অন্তর্দৃষ্টি আছে? বিশেষত, এমন একটি রেফারেন্সের কথা কি কেউ জানেন যা এই এক লাইনের কোডটির সাথে সম্পর্কিত তে-ওয়ান লি, স্যাম রোয়েস, ইয়ার ওয়েইস এবং ইরো সাইমনসিলির কাজ ব্যাখ্যা করে?

হালনাগাদ

অ্যালগরিদমের সংবেদনশীলতা মাইক্রোফোন বিচ্ছিন্নতার দূরত্বের প্রতি প্রদর্শন করতে, নিম্নলিখিত সিমুলেশন (অক্টাভেতে) দুটি স্থান পৃথক পৃথক টোন জেনারেটর থেকে টোনগুলি পৃথক করে।

% define model 
f1 = 1100;              % frequency of tone generator 1; unit: Hz 
f2 = 2900;              % frequency of tone generator 2; unit: Hz 
Ts = 1/(40*max(f1,f2)); % sampling period; unit: s 
dMic = 1;               % distance between microphones centered about origin; unit: m 
dSrc = 10;              % distance between tone generators centered about origin; unit: m 
c = 340.29;             % speed of sound; unit: m / s 

% generate tones
figure(1);
t = [0:Ts:0.025];
tone1 = sin(2*pi*f1*t);
tone2 = sin(2*pi*f2*t);
plot(t,tone1); 
hold on;
plot(t,tone2,'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -1 1]); legend('tone 1', 'tone 2');
hold off;

% mix tones at microphones
% assume inverse square attenuation of sound intensity (i.e., inverse linear attenuation of sound amplitude)
figure(2);
dNear = (dSrc - dMic)/2;
dFar = (dSrc + dMic)/2;
mic1 = 1/dNear*sin(2*pi*f1*(t-dNear/c)) + \
       1/dFar*sin(2*pi*f2*(t-dFar/c));
mic2 = 1/dNear*sin(2*pi*f2*(t-dNear/c)) + \
       1/dFar*sin(2*pi*f1*(t-dFar/c));
plot(t,mic1);
hold on;
plot(t,mic2,'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -1 1]); legend('mic 1', 'mic 2');
hold off;

% use svd to isolate sound sources
figure(3);
x = [mic1' mic2'];
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
plot(t,v(:,1));
hold on;
maxAmp = max(v(:,1));
plot(t,v(:,2),'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -maxAmp maxAmp]); legend('isolated tone 1', 'isolated tone 2');
hold off;

আমার ল্যাপটপ কম্পিউটারে প্রায় 10 মিনিটের মৃত্যুর পরে, সিমুলেশনটি দুটি পৃথক টোনকে সঠিক ফ্রিকোয়েন্সি সহ চিত্রিত করে নিম্নলিখিত তিনটি চিত্র তৈরি করে।

চিত্র 1 চিত্র ২ চিত্র 3

যাইহোক, মাইক্রোফোন বিচ্ছিন্নতা দূরত্বকে শূন্যে স্থাপন করা (অর্থাত্ dMic = 0) সিমুলেশনটির পরিবর্তে সিমুলেশনটি নিম্নলিখিত তিনটি চিত্রের উত্পন্ন করে যা সিমুলেশনটি দ্বিতীয় টোনকে বিচ্ছিন্ন করতে পারে না (একক তাৎপর্যপূর্ণ তির্যক শব্দটি দ্বারা নিশ্চিত হওয়া যা এসভিডি এর ম্যাট্রিক্সে ফিরে এসেছে)।

চিত্র 1 মাইক বিচ্ছেদ ছাড়া চিত্র 2 মাইক বিচ্ছেদ ছাড়া চিত্র 3 মাইক বিচ্ছেদ ছাড়া

আমি আশা করছিলাম যে কোনও স্মার্টফোনে মাইক্রোফোন বিচ্ছেদের দূরত্ব ভাল ফলাফলের পক্ষে যথেষ্ট হবে তবে মাইক্রোফোন বিচ্ছেদের দূরত্ব 5.25 ইঞ্চি (যেমন, dMic = 0.1333 মিটার) নির্ধারণের ফলে সিমুলেশনটি নিম্নলিখিত উত্সাহিত করে, উত্সাহ দেওয়ার চেয়ে কম, চিত্রগুলি উচ্চতর চিত্রিত করে প্রথম বিচ্ছিন্ন স্বরে ফ্রিকোয়েন্সি উপাদান।

স্মার্টফোনে চিত্র 1 স্মার্টফোনে চিত্র 2 স্মার্টফোনে চিত্র 3


4
আমার এই বক্তৃতার অস্পষ্ট স্মৃতি আছে, তবে কী তা মনে করতে পারছি না x; এটি কি তরঙ্গরূপের বর্ণালী, বা কী?
আইজাক

অধ্যাপক এনজি, অবাস্তব না করা শিক্ষার 4 প্রারম্ভিক ভিডিওতে t = 5: 30 এ, মনে হয় যে এক্স অডিও নমুনার ভেক্টর। সম্ভবত এসভিডি আর্গুমেন্টে এই পুনঃনির্মাণ বিভাগটি সিগন্যালের এক ধরণের পাওয়ার নরমালাইজেশন প্রয়োগ করছে।
গ্রেগস

উত্তর:


30

আমি 2 বছর পরে, এটিও বের করার চেষ্টা করছিলাম। তবে আমি আমার উত্তর পেয়েছি; আশা করি এটি কাউকে সাহায্য করবে

আপনার 2 টি অডিও রেকর্ডিং দরকার। আপনি http://research.ics.aalto.fi/ica/cocktail/cocktail_en.cgi থেকে অডিও উদাহরণগুলি পেতে পারেন ।

বাস্তবায়নের জন্য রেফারেন্সটি হল http://www.cs.nyu.edu/~roweis/kica.html

ঠিক আছে, এখানে কোড -

[x1, Fs1] = audioread('mix1.wav');
[x2, Fs2] = audioread('mix2.wav');
xx = [x1, x2]';
yy = sqrtm(inv(cov(xx')))*(xx-repmat(mean(xx,2),1,size(xx,2)));
[W,s,v] = svd((repmat(sum(yy.*yy,1),size(yy,1),1).*yy)*yy');

a = W*xx; %W is unmixing matrix
subplot(2,2,1); plot(x1); title('mixed audio - mic 1');
subplot(2,2,2); plot(x2); title('mixed audio - mic 2');
subplot(2,2,3); plot(a(1,:), 'g'); title('unmixed wave 1');
subplot(2,2,4); plot(a(2,:),'r'); title('unmixed wave 2');

audiowrite('unmixed1.wav', a(1,:), Fs1);
audiowrite('unmixed2.wav', a(2,:), Fs1);

এখানে চিত্র বর্ণনা লিখুন


4
আপনি কি এমন একটি রেফারেন্স সনাক্ত করতে সক্ষম হয়েছেন যা কোডটির এই লাইনটির জন্য আরও স্পষ্টভাবে যুক্তি ব্যাখ্যা করে?
হান্স

আপনি কী দয়া করে ব্যাখ্যা করতে পারেন যে আপনার দেওয়া লিঙ্কটির মধ্যে সিগন্যাল মিশ্রণ কীভাবে কাজ করে? আপনার কোড ব্যবহার করে সাইট থেকে ডাউনলোড করা দুটি মিশ্র ফাইল থেকে দুটি শব্দ উত্স আহরণ করা ভাল good যাইহোক, আমি যখন নিজের সাথে দুটি পৃথক সিগন্যাল একসাথে মেশানোর চেষ্টা করি তখন মনে হয় অ্যালগরিদম সঠিক ফলাফল আউটপুট করতে পারে না। আমি মিশ্রিত সংকেতগুলি পাওয়ার জন্য নির্দোষ উপায়টি ব্যবহার করছি: mic1 = 0.3 * ট্র্যাক 1 + 0.5 * ট্র্যাক 2, মাই 2 = 0.5 * ট্র্যাক 1 + 0.3 * ট্র্যাক 2। এই আমি সিগন্যালটিই আমি অ্যালগরিদমকে খাওয়ানোর চেষ্টা করেছি। আপনাকে অনেক ধন্যবাদ!
yc2986

আমি মতলব থেকে নতুন নতুন। লাইন 3-এ আমার ত্রুটি হচ্ছে যে এটিতে 2 টি ম্যাট্রিক্সকে বিভিন্ন মাত্রার সাথে যুক্ত করতে সমস্যা হয়েছে। আমার এই সমস্যাটি কীভাবে পরিচালনা করা উচিত?
mshrestha

4
আমি যে কোড চেষ্টা করেছিলেন কিন্তু এটা খুব ভাল কাজ করে না ... (আপনি অনুযোগ না !!)
anderstood

17

x(t) একটি চ্যানেল / মাইক্রোফোন থেকে আসল ভয়েস।

X = repmat(sum(x.*x,1),size(x,1),1).*x)*x'এর পাওয়ার স্পেকট্রামের একটি অনুমান x(t)। যদিও X' = Xসারি এবং কলামগুলির মধ্যে অন্তরগুলি মোটেও এক রকম নয়। প্রতিটি সারি সংকেতের সময়কে উপস্থাপন করে, যখন প্রতিটি কলামটি ফ্রিকোয়েন্সি। আমার ধারণা এটি স্পেকট্রগ্রাম নামে আরও কঠোর অভিব্যক্তির অনুমান এবং সরলকরণ

বর্ণালী সংক্রান্ত তথ্যের উপর ভিত্তি করে সিগন্যালকে বিভিন্ন উপাদানগুলিতে সংশ্লেষ করতে স্পেকট্রগ্রামে একক মান ভলন ব্যবহার করা হয়। এর মধ্যে তির্যক মানগুলি হ'ল sবিভিন্ন বর্ণালী উপাদানগুলির দৈর্ঘ্য। সারি uএবং কলামগুলির সারিগুলি v'অরথোগোনাল ভেক্টর যা Xস্থানের সাথে সম্পর্কিত প্রস্থের সাথে ফ্রিকোয়েন্সি উপাদান ম্যাপ করে ।

আমার কাছে পরীক্ষার জন্য ভয়েস ডেটা নেই, তবে আমার বোঝার ভিত্তিতে এসভিডি এর মাধ্যমে উপাদানগুলি অনুরূপ অরথোগোনাল ভেক্টরগুলিতে পড়বে আশা করি নিরীক্ষণযোগ্য শিক্ষার সাহায্যে ক্লাস্টার করা হবে। বলুন, s থেকে প্রথম 2 টি তীক্ষ্ণ মাত্রা যদি ক্লাস্টার করা হয়, তবে u*s_new*v'এক-ব্যক্তি-ভয়েস তৈরি হবে, যেখানে সমস্ত উপাদান বাদ দেওয়া ছাড়া s_newএকই sহবে (3:end,3:end)

শব্দ-গঠিত ম্যাট্রিক্স এবং এসভিডি সম্পর্কে দুটি নিবন্ধ আপনার রেফারেন্সের জন্য।


4
গ্রেগস, গাণিতিকভাবে একটি এন বাই বাই 2 ম্যাট্রিক্স এক্স এখনও পুনঃনির্মাণ অপারেশন সহ একটি এক্স গঠন করতে পারে। তবে বর্ণালীটি প্রতিটি সময় কেবল চ্যানেল প্রদর্শন করতে পারে। সুতরাং আমি মনে করি প্রতিবার এন-বাই -১ এক্স ব্যবহার করা আরও সমস্যাযুক্ত এবং সমস্যাটিকে লিনিয়ার রিগ্রেশন (দুটি ম্যাট্রিক্স সমীকরণ) হিসাবে বিবেচনা করুন treat আরও দুটি সম্ভাব্য পন্থা হ'ল (i) এন-বাই -2 এক্স হিসাবে দুটি চ্যানেল গড়ে গড়ে; বা (ii) একটি 2 * এন বাই বাই 2 এক্স নির্মাণের জন্য তাদের একত্রে আবদ্ধ করা।
lennon310

4
গ্রেগস, আমি আপনার প্রশ্নটি পুনর্বিবেচনা করেছি। যদি আপনি এন-বাই -2 এক্সে রেপ্যাটটি প্রয়োগ করেন তবে এটি কাজ করতে পারে। শারীরিকভাবে এটি প্রতিটি চ্যানেল থেকে প্রতিটি সময়ে এবং প্রতিটি ফ্রিকোয়েন্সি থেকে গড় পাওয়ার হিসাবে দেখা যায়।
lennon310

মেশিন লার্নিংয়ের প্রবর্তন ভিডিও দেখার পরে আমি এই পোস্টটি পেয়েছি (অবশ্যই আবার শুরু হয়েছে)। আমি ভাবছিলাম যে আপনি ভিডিওতে প্রদর্শিত অডিও বিভাজনটি পুনরুত্পাদন করতে সক্ষম হয়েছেন বা কোর্সের সময় এটি বিকাশ হয়েছে কিনা।
সিরিটিং

@ সিরিটিং দয়া করে অডিওতে নিরীক্ষণ / গভীর শিক্ষার বিষয়ে অ্যান্ড্রু এনগের প্রকাশনাটি সন্ধান করুন, ধন্যবাদ
লেনন ৩১০

4
$ X কেন $ x spect এর বর্ণালীটির শক্তি? এছাড়াও জ্যাক জেড এর উত্তর অনুসারে, $ x রেকর্ডিং থেকে আসল ভয়েস নয় তবে মূল কন্ঠের covariance এর কিছুটা প্রক্রিয়াকৃত পারস্পরিক ক্রিয়াকলাপ।
হান্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.