JDA icon indicating copy to clipboard operation
JDA copied to clipboard

Possible future enhancement NPD

Open inspirit opened this issue 9 years ago • 7 comments

i think you can try to use recently introduced Normalised Pixel Difference features instead of existing. You can read more here: http://www.cbsr.ia.ac.cn/users/scliao/papers/Liao-PAMI15-NPD.pdf I'm currently doing some tests using NPD for facial landmarks alignment and it clearly outperforms classical pixel difference features.

inspirit avatar Oct 23 '15 08:10 inspirit

Thanks a lot!

luoyetx avatar Oct 23 '15 08:10 luoyetx

@inspirit Hi, I'm studying face alignment now. I have replaced conventional pixel difference by normalized pixel difference. However, it seems that NPD made no contribution to accuracy. Is there any part I need to modify to match the new feature? Thanks!

prayshe avatar Oct 29 '15 04:10 prayshe

this is not that easy as just using NPD instead of pixel diffs. you should take into account that response values will be different so you should select threshold more careful. please refer to the paper i mentioned above

inspirit avatar Oct 29 '15 07:10 inspirit

Actually, I have selected threshold from -0.25 to 0.25 when using NPD, while -64 to 64 when using PD. But I made no improvement. Anyway, thanks!

prayshe avatar Oct 29 '15 08:10 prayshe

in my implementation i'm generating random splits with 2 thresholds one negative and one positive. threshold values are in range -127 to 127. so for each split i try 10 random thresholds * 30 random pixel positions, and then select the one that reduce the error better than others. the split check against 2 thresholds is:

const float npd = response(feature_responses);
// thresh1 is negative, thresh2 is positive in [0,127) range
return npd < thresh1 || npd > thresh2;

inspirit avatar Oct 29 '15 09:10 inspirit

Thank you very much, I have read the paper. Originally I thought that double thresholds were only used in duadratic tree. Now I figure it out. Thanks!

prayshe avatar Oct 29 '15 10:10 prayshe

I have some questions too..: const float npd = response(feature_responses); Do you used response (f1-f2)/ (f1+f2) or more complicated function?

// thresh1 is negative, thresh2 is positive in [0,127) range return npd < thresh1 || npd > thresh2; What scale is used for npd weighing?

lieff avatar Feb 16 '18 08:02 lieff