Closed ghost closed 6 years ago
Hi, Thanks for your comments. I think you could play around with lambda and p. As I mentioned in my paper the formula in lambda works for images, but I am not sure about audio signal.
OK, thank you! This is solved now with recent update! :)
I saw your algorithm and tried to implement it for singing voice separation, basing myself on this framework here that uses RPCA: https://github.com/posenhuang/singingvoiceseparationrpca
I managed to make it work, but there seems to be a problem with the convergence.
For example, the above framework converges like so:
svd 1 r(A) 1 |E|_0 3793 stopCriterion 0.60764
svd 2 r(A) 1 |E|_0 11232 stopCriterion 0.38103
svd 3 r(A) 2 |E|_0 18770 stopCriterion 0.3114
svd 4 r(A) 5 |E|_0 34614 stopCriterion 0.2292
svd 5 r(A) 6 |E|_0 59132 stopCriterion 0.17137
svd 6 r(A) 13 |E|_0 93413 stopCriterion 0.12746
svd 7 r(A) 14 |E|_0 137827 stopCriterion 0.096347
svd 8 r(A) 26 |E|_0 199421 stopCriterion 0.071432
svd 9 r(A) 27 |E|_0 279301 stopCriterion 0.05258
svd 10 r(A) 48 |E|_0 386258 stopCriterion 0.037128
svd 11 r(A) 49 |E|_0 510472 stopCriterion 0.025737
svd 12 r(A) 75 |E|_0 652179 stopCriterion 0.017178
svd 13 r(A) 101 |E|_0 792653 stopCriterion 0.011
svd 14 r(A) 127 |E|_0 926794 stopCriterion 0.0069285
svd 15 r(A) 153 |E|_0 1048442 stopCriterion 0.0042441
svd 16 r(A) 179 |E|_0 1150908 stopCriterion 0.0025258
svd 17 r(A) 203 |E|_0 1229675 stopCriterion 0.0014821
svd 18 r(A) 220 |E|_0 1287725 stopCriterion 0.00087056
svd 19 r(A) 233 |E|_0 1329522 stopCriterion 0.00051671
svd 20 r(A) 242 |E|_0 1359715 stopCriterion 0.0003143
svd 21 r(A) 250 |E|_0 1381840 stopCriterion 0.00020072
svd 22 r(A) 255 |E|_0 1399396 stopCriterion 0.00013996
svd 23 r(A) 262 |E|_0 1418600 stopCriterion 0.00010511
svd 24 r(A) 266 |E|_0 1451709 stopCriterion 7.896e-05
svd 25 r(A) 272 |E|_0 1503676 stopCriterion 5.5009e-05
svd 26 r(A) 284 |E|_0 1561965 stopCriterion 3.4305e-05
svd 27 r(A) 293 |E|_0 1612167 stopCriterion 2.0438e-05
svd 28 r(A) 302 |E|_0 1651121 stopCriterion 1.1918e-05
svd 29 r(A) 309 |E|_0 1679130 stopCriterion 6.9242e-06
svd 30 r(A) 312 |E|_0 1698572 stopCriterion 4.04e-06
svd 31 r(A) 317 |E|_0 1711883 stopCriterion 2.365e-06
svd 32 r(A) 319 |E|_0 1720785 stopCriterion 1.3858e-06
svd 33 r(A) 321 |E|_0 1726094 stopCriterion 8.1867e-07
svd 34 r(A) 322 |E|_0 1729221 stopCriterion 4.85e-07
svd 35 r(A) 322 |E|_0 1730822 stopCriterion 2.9231e-07
svd 36 r(A) 322 |E|_0 1731616 stopCriterion 1.8024e-07
svd 37 r(A) 322 |E|_0 1731884 stopCriterion 1.1316e-07
svd 38 r(A) 322 |E|_0 1732006 stopCriterion 7.1357e-08
stops at iteration 38 in this example.
The problem in your framework is the convergence doesn't stop, and it always shows 1:
svd 1 r(A) 1 |E|_0 3437 stopCriterion 0.59698
svd 2 r(A) 1 |E|_0 3402 stopCriterion 0.47427
svd 3 r(A) 1 |E|_0 3402 stopCriterion 0.46594
svd 4 r(A) 1 |E|_0 3402 stopCriterion 0.46579
svd 5 r(A) 1 |E|_0 3402 stopCriterion 0.46574
svd 6 r(A) 1 |E|_0 3402 stopCriterion 0.46573
svd 7 r(A) 1 |E|_0 3402 stopCriterion 0.46573
svd 8 r(A) 1 |E|_0 4113 stopCriterion 0.49547
svd 9 r(A) 1 |E|_0 7524 stopCriterion 0.51422
svd 10 r(A) 1 |E|_0 14601 stopCriterion 0.45775
svd 11 r(A) 1 |E|_0 27366 stopCriterion 0.38711
svd 12 r(A) 1 |E|_0 48116 stopCriterion 0.31185
svd 13 r(A) 1 |E|_0 79464 stopCriterion 0.24355
svd 14 r(A) 1 |E|_0 122918 stopCriterion 0.18293
svd 15 r(A) 1 |E|_0 178534 stopCriterion 0.1334
svd 16 r(A) 1 |E|_0 248066 stopCriterion 0.096221
svd 17 r(A) 1 |E|_0 335173 stopCriterion 0.06919
svd 18 r(A) 1 |E|_0 442585 stopCriterion 0.050089
svd 19 r(A) 1 |E|_0 572411 stopCriterion 0.036618
svd 20 r(A) 1 |E|_0 715577 stopCriterion 0.027437
svd 21 r(A) 1 |E|_0 860662 stopCriterion 0.020809
svd 22 r(A) 1 |E|_0 977219 stopCriterion 0.015702
svd 23 r(A) 1 |E|_0 1072115 stopCriterion 0.010624
svd 24 r(A) 1 |E|_0 1160153 stopCriterion 0.0071855
svd 25 r(A) 1 |E|_0 1239728 stopCriterion 0.0050583
svd 26 r(A) 1 |E|_0 1307063 stopCriterion 0.003512
svd 27 r(A) 1 |E|_0 1362674 stopCriterion 0.0023725
svd 28 r(A) 1 |E|_0 1407706 stopCriterion 0.0015847
svd 29 r(A) 1 |E|_0 1443447 stopCriterion 0.0010511
svd 30 r(A) 1 |E|_0 1471956 stopCriterion 0.00069296
svd 31 r(A) 1 |E|_0 1494359 stopCriterion 0.00046334
svd 32 r(A) 1 |E|_0 1512571 stopCriterion 0.00031531
svd 33 r(A) 1 |E|_0 1528835 stopCriterion 0.0002254
svd 34 r(A) 1 |E|_0 1546749 stopCriterion 0.00017068
svd 35 r(A) 1 |E|_0 1571254 stopCriterion 0.00013673
svd 36 r(A) 1 |E|_0 1606670 stopCriterion 0.00011182
svd 37 r(A) 1 |E|_0 1655765 stopCriterion 8.9459e-05
svd 38 r(A) 1 |E|_0 1714910 stopCriterion 6.8998e-05
I can stop it manually by limiting iterations to for example 40, but the results are not exactly great. So there is a problem somewhere, I am not sure where. If you can maybe help me figure out why it keeps showing 1 instead of incremented values, maybe that is the problem? Thanks a lot!