And I'm sure there's a whole range in between. Perception of ones skills don't always (may I say rarely) match up with their actual skills.
Personally, I think I'm average. There are moments where I think I did something smart, but they are fleeting. Is my perception accurate? I have no idea, I've never been graded by someone with far superior skills than myself. I'd consider myself insecure with my skills, but always striving to do the best I can.
However I will say, your ability to admit insecurity about your skills/acknowledging you could be better probably places you _above_ average! The scariest devs are the ones who think they're very good, but in reality are poor. For example I know something I'm really weak at is writing good multi-threaded code, I try and keep things as simple as possible, but I know other people who think they can write great multi-threaded code, but spend vast amounts of time debugging deadlocks.. Hmmm
I'm convinced that we all eventually learn enough to realize we simply don't know anything :)