The question has been puzzling me for quite a while; How to become an expert in Computer Vision? And by expert I mean as a software engineer aka developer. Should I read more books? enroll in an academic program? online courses? contribute to open source projects? apply for a related internship / job? implement research papers?
It puzzled me to the point that I even doubted whether this was the right question to ask in the first place. I was advised to think in reverse. What am I trying to achieve? What is that I want to build? Then, I should learn along the way the necessary theories and tools i.e. I should become an objective goal driven person [2, 3, 4]. Another piece of advice was to be more specific and rephrase the question; for example, How do I get x job at y company like z person?
On the other hand, it’s necessary to learn the scientific concepts. It’s useless to learn how to code, unless you know when and when not to apply such a knowledge. The science driving all this magic is a bit overwhelming. It wouldn’t fit into the lifetime of a single project neither into the few hours one spares after a long working day.
There is of course no right way of doing it, and every different person sets his own example. So, in this blog post, I’d write the steps I should take in the next few months. It could be the right approach or it could be not. Also, I’d like to make a distinction between the actual plan which I’d follow and the comprehensive resources list which I’m including for the sake of completeness. I’d keep tweaking the plan and appending to the list along the way.
To narrow my search criteria, I decided to rephrase my question.
What are the technical qualifications of a computer vision software engineer?
I looked up some job vacancies and profiles on LinkedIn of professional computer vision software engineers. I could confidently jump to a conclusion;
- there is almost no solid distinction between a development position and a research position; one should be able to exchange hats between both
- a master degree, a PhD, a published paper or a patent would support your job application
- a solid background in machine learning, parallel computing, multi-threading and optical character recognition ocr were common skills
- a working experience with matlab for prototyping and c++ for optimized solutions were necessary
- OpenCV is a must to grasp library
- and ofcourse, experience with real life projects and hard problem solving
A friend Abdelrahman Elogeel helped me get a feedback from two computer vision software engineers on the above points;
My personal advice is that CV is avery large field He should have a good general background and then focus more on a particular area of CV. Also Digital image processing by Gonzalez, is a famous book for basic image processing. It has its using matlab book too. I also agree with what’s said that most companies don’t use Matlab, although they dont mind using it for prototyping, if available, or using its free alternative, Octave. I’m a Matlab expert, but since I joined my company, I didn’t use it.
Another one added;
It seems that there are two kinds of engineers who have to deal with computer vision and they may exist together in the same team:
1. High level engineer and this is somebody with little or no background in CV, but works on systems involving CVs by connecting CV components without dealing with how they work.
2. Core CV engineer and the majority of these have MS/PhD in CV/ML (some great exceptions exist, however) or have done some research in CV during undergrad/internship/job etc.
One more comment: a core CV engineer does not have to be an expert in or even familiar with OpenCV. He just understands the theory well enough. Also CV is a big field and a core CV engineer will not know everything. He just needs to have proven knowledge and experience in one area and this tells that he will be Okay to tackle a similar/different CV problem/project.
I also had a casual conversation with a colleague Ahmed Ibrahem – a former intern at Microsoft Research Labs. – and he added that a research developer focuses on implementing the algorithms prescribed by his team leader. A team leader has a PhD in the area related to their research. He devises the approach to solving the problem, and the expected outcomes. Then, the developer gets acquainted with the tools and libraries to accomplish the task. Finally, he reports the bottlenecks and results back to the team leader.
Hence, I’d just say that passion is the X-factor of any success. I’d just continue working on my Face Hallucination project – a computer vision related project -, and I’d learn as much as possible down the way. I hope this adds a great value to humanity as this is what matters the most above all.
“For the things we have to learn before we can do them, we learn by doing them.” ― Aristotle, The Nicomachean Ethics
A comprehensive list of resources:
Computer Vision: Algorithms and Applications (Texts in Computer Science) by Richard Szeliski
OpenCV Computer Vision with Python by Joseph Howse
Open Source Projects
People to follow
 Are there any open source projects in image processing? https://www.researchgate.net/post/Are_there_any_open_source_projects_in_image_processing1