First off, let me introduce myself. I am Matias Perez, a computer vision consultant. I graduated from the Georgia Intisitute of Technology with a B.S. in Biomedical Engineering and a B.S. in Applied Mathematics, although I spent most of my undergradute studies working on computer vision and machine learning.
One thing I have learned during my studies is that the best way to advance and not commit the same mistakes is to document everything. That's exactly what this website does. On this site you will find most of my work, as well as some tips and tricks on how to approach research and programming that I have learned along the way. However, documentation without organization is useless. In what follows you will find posts on how this website is laid out as well as, more information about me.
I have always had an interest in mathematics but it wasn't until my first year of college that I learned about the applications of higher level mathematics to solving computer vision problems. I started studying computer vision when I joined Dr. Allen Tannenbaum's Minerva lab. There I learned about the application of differential equations to image processing as well as Active contours, a strategy used to segment the foreground of an image from the background by evolving a contour.
In the Minerva lab I met a former post Doc of Dr. Tannenbaum, Dr. Patricio Vela. He was then, and still is, head of the IVA Lab. It was in the IVA lab where I met Hassan Kingravi. Hassan introduced me to machine learning, specifically Kernel Methods in Machine Learning, a method used to extend linear learning algorithms to nonlinear problems by embedding the data in a Reproducing Kernel Hilbert Space (RKHS). One of my projects in the IVA lab was to try to extend this method to the particle filter.
Mathematics, Computer Vision, and Machine Learning
I have realized that most problems in engineering are reduced to optimization problems. However, what makes a solution a good solution in engineering is how one formulates the problem and thats where the higher level mathematics comes in. If the structures and properties of abstract spaces are understood, it becomes easier to relate a real life problem to an abstract mathematical problem. Once the problem has been formulated mathematically, an efficient algorithm to solve it can be found. To do this one must consider the aspect of speed, accuracy and storage that underlines the application of ones solution.
My studies of higher level mathematics have allowed me to understand how computer vision and machine learning problems are formulated. This has allowed me to formulate my own models, as well as, create or use algorithms that will solve them. In this site I have documented most of the techniques and algorithms I have learned as well as the mathematical background needed to understand them. I have also written a C++ library that contains most of the algorithms I have learned in the Minerva and IVA lab.
In my project section you will find posts about projects I have worked on and am currently working on. This inculdes algorithms such as the Kernel Particle Filter, computer vision problems such as 2D segmentation/3D pose estimation of articulated models or stuff that I have done for fun. Consider this section to be my portfolio, were I have put together a compilation of problems and solutions. If there is no restriction from my clients/collaborators/employers the code of the project will be posted. All documentation for each project will also be posted.
Like I mentioned above, documentation and organization is the key to success in research. That is why I have built the IVALib. When I was working as a Research Assistant at the Minerva and IVA Lab I noticed that code sharing and collaboration was inhibited by the lack of organization and structure. In fact, there is a piece of code that no one has been able to use after, the last student that used it, left the lab. IVALib is a compilation of all of the algorithms I have learned in both the Minerva Lab and the IVA Lab. The point is to make a well documented C++ library with examples of the algorithms developed or useed in both Labs so others can use them as well.
This C++ library contains many classes that implement different algorithms usefull in computer vision and machine learning. In this section you will find a tutorial on how to use the classes in IVALib, as well as, the documentation created by Doxygen. The code can be found at my github repository. Enjoy!
When you learn something you usually remember only the big picture and tend to forget the small details. I think every mathematician has had a moment in their life where they remember how a proof goes but can't remember a particular step. Sometimes one works with such high level abstractions that the basic concepts are forgotten which leads to very stupid mistakes. That is why I have documented the theory that I have learned. So the next time that I am plugging and chugging theorems (like must engineers do) and I start getting unexpected results, I can go back to my notes to make sure that I am correctly applying the theorem and not making a fundamental mistake.
The notes that you will find in this section cover topics from mathematics, computer vision, and machine learning. Mostly you will find reviews on courses I believe every engineer should take such as real analysis, functional analysis, and algebra. You will also find reviews on algorithms used in computer vision and machine learning and the theory behind them. Pleasse let me know if you find any mistakes in them.
This section contains posts on links that I find useful. Normaly there will be links to profesors web pages, libraries that I use, and blogs about programing or mathematics. Each link will have a post associated to it explaining what you can find on that link and some kind of review.
The title pretty mcuh says it all. What you will find here are posts on coding. Mostly you will find how to solve common mistakes that people make when coding such as ignoring the rule of three in C++ coding or bad practices like using a namespace in the header file. I'm doing this mostly because I am perpetually switching coding languages an I sometimes forget the little idiosincracys of each language. So this way when I face any type of error that I reconice I can go to this section and look at the post of how I fixed this error before. Each post will contain a snippet of code that will contain an example of how to correctly code what is intended.