Experienced engineer / tech lead in the fields of computer vision, machine learning and robotics. I find the most fun in solving real-world problems and building real-time systems. I enjoy doing it in the team in a hands-on way, with a mixture of individual contributions and technical/product lead. Technologies I have used extensively include C, Java, C++, Python, and tensorflow.
Large-scale prediction and recommendation for online advertising (2015-)
In January 2015, I joined Criteo as an Engineering Program Manager to work on prediction and recommendation at scale. People were so confused about what an EPM is (both inside and outside the company) that I decided to write a blog post about it. I hope it helped. Criteo delivers 3 billion ads a day, which makes for a bunch of exciting engineering challenges. We are building the next generation of machine learning algorithms to predict what people will want to buy. I gave a talk at a RecSys meetup in 2015 and at ICML 2016.
Navigating the world using uncalibrated cameras (2007-2009)
Can we help humans and robots navigate unknown environments using just a set of uncalibated cameras? In this project, I built upon statistical matching of images features across multiple cameras to provide navigation guidance in real, cluttered environments. The approach requires no camera calibration and does not rely on building a metric map of the world. I implemented the approach in real-time using Pointgrey Firefly cameras and conducted studies with humans and robots across the MIT campus. This work was published at ICCV 2009 [youtube] and ICRA 2010 [youtube]
Building an autonomous vehicle at the DARPA Urban Challenge (2006-2007)
In 2007, MIT filled a team to participate in the DARPA Urban Challenge. We were thrilled to be one of six teams to go to finale, ranking fourth in the competition. I was in charge of the backend for mapping and route files processing (scrapping satellite imagery from Google without getting blacklisted was a lot of fun) and built some of the algorithms used for obstacle avoidance. We published our work at IJFR 2008 [race highlights on youtube]
3D localization in indoor environments using an omnidirectional camera (2005-2006)
This work was mostly focused on 2D/3D geometry. I designed algorithms for precise 3D location of a camera in an indoor environment, given a rough 3D map of the building. This input seems like a big constraint, but isn't that much when you know that most modern buildings come with a digital 3D map these days. We can then detect edges in images and match them with the building structure. Given the nature of the problem, it made a lot of sense to use an omnidirectional camera. We used a beautiful piece of hardware known as the Pointgrey Ladybug camera -- btw, thanks Pointgrey folks for answering so many of my requests! The novelty of this work lied in two key contributions : first, I solved the initialization problem (i.e. given a first image, where was it captured in the building) and second, I built a method that was robust to clutter and lighting. This work was published at CVPR 2007. [real-time demo on youtube, a 3D sphere on youtube]
Real-time control of a Xray imaging system (2002-2004)
I spent the first two years of my career at General Electric Healthcare, developing new features for the real-time control system of an X-ray imaging device called Innova 4100. The code was written in C++ and CORBA. The forced use of code generation based on UML design on Rational Rose left unforgettable scars in the part of my brain that does software engineering. Honk if you've been there. The rest of the job was fun, though.
Parallelizing the City Scanning Project using MPI (2002)
Even though this project is now fairly old, I like to mention it as a cornerstone of my career as a software engineer. The goal of my work was to parallelize the core algorithms of the City Scanning Project (an ancestor of Google Street View) using MPI. I took the processing time down from 7 hours on a single machine to approximately 30 minutes on a dozen machines. The fun part was that I was using a bunch of Silicon Oxygen stations spread throughout the lab that could inadvertently be turned off by lab members, so my method had to be robust to node failures. I spent a big chunck of my time grasping this gigantic piece of code but thanks to the help of my advisor Seth Teller, I made it on time and even had extra time to suggest new features for the project. I published a report at the end of my internship.
The following code is released as libre software.
https://github.com/oakfr/navguide - navigation using uncalibrated cameras (PhD work)
https://github.com/oakfr/omni3d - 3D localization using omnidirectional images (MS work)
Introduction to Python and Algorithms, a 12-week introduction class to beginners, 10 students (mostly recruiters at Criteo), 2015
The goal of this class was to introduce the fundamentals of computer science and programming to recruiters at Criteo, in order to make their job more efficient and more fun. Ten volunteers signed up, and none of them gave up, which I read as a sign of success!
6.01 Introduction to EECS 1, Teaching Assistant (Prof. L. Kaebling, T. Lozano-Perez), Spring 2008 [class link]
An introduction to the main computer science concepts through robotics: software engineering, feedback and control, circuits, probability and planning. 300+ students! Very intensive class involving a lot of student-teacher interaction in labs.
6.092 Introduction to Software Engineering in Java, Instructor, January 2008 and 2009 [class link]
A hands-on introductory class to Java over four weeks in January. Two instructors, 60 students.
Machine learning for online advertising
MIT Machine Learning Tea, Sept 2016
ICML workshop on online advertising, New York, May 2016 [slides]
Tektos Data Meetup, Paris, June 2016 [slides]
Rythm Meetup, Paris, June 2016 [slides]
MIT Machine learning Tea, September 2015
RecSys meetup, NL, May 2015, [slides]
Body-relative Navigation Guidance using Uncalibrated Cameras
PhD Thesis defense, MIT CSAIL, January 2010 [slides]
ICCV, Kyoto, Japan, 2009 [poster]
Scene Understanding Symposium (SUNS), MIT, 2009
CSAIL Student Workshop, 2008
Intelligent Robots and Systems (IROS), Workshop on 3D Mapping, 2008 [slides]
European Conference on Computer Vision (ECCV), Workshop on Computer Vision Applications to the Visually Impaired, 2008 [slides]
Wide-Area Egomotion Estimation from Omnidirectional Video
MIT EECS Research Qualifying Exam, Feb 2007 [slides]
Computer Vision and Pattern Recognition (CVPR), Minneapolis, USA, 2007 [poster]
INRIA Rhones-Alpes, Perception team, 2007 (invited talk) [slides]
CSAIL Student Workshop 2006 [slides]
The war for talents in the digital age (in French), invited talk at ACADI, October 10, 2016 [slides]
Industrial Expectations and Technological Challenges, ICIP Workshop on Image and Video Processing for Defense, Transportation, Homeland Security, and Observation from Space, Paris, Oct 2014
ICRA 2010 Olivier Koch, Matthew R. Walter, Albert S. Huang, and Seth Teller, Ground robot navigation using uncalibrated cameras [pdf]
ICCV 2009 Olivier Koch, Seth Teller, Body-relative navigation using uncalibrated cameras [pdf] [PhD thesis]
IJFR 2008 John Leonard et al., A Perception Driven Autonomous Urban Robot [pdf]
CVPR 2007 Olivier Koch, Seth Teller, Wide-area egomotion estimation from known 3D structure [pdf] [MS thesis]
PhD thesis, MIT EECS, 2010 [PDF]
MS thesis, MIT EECS, 2007 [PDF]
ScalableMachine Learning, BerkeleyX -CS190.1x (certified, Aug 2015)
Machine learning Stanford/Coursera by Andrew Ng (certified, May 2015)
MIT Coursework (Cumulative GPA 4.6/5.0)
6.866 Computer Vision (Prof. BKP Horn) [class link]
This class introduces the concept of Robot Vision, BKP Horn, MIT Press, 1986.
6.840 Theory of Computation (Prof M. Sipser) [class link]
An extensive and theoretical treatment of computability and computational complexity theory. Regular and context-free languages. Decidable and undecidable problems, reducibility, recursive function theory. Time and space measures on computation, completeness, hierarchy theorems, inherently complex problems, oracles, probabilistic computation, and interactive proof systems.
6.824 Distribute Systems (Prof R. Morris) [class link]
This class presents abstractions and implementation techniques for engineering distributed systems. Topics include multithreading, remote procedure call, client/server designs, peer-to-peer designs, consistency, fault tolerance, and security, as well as several case studies of distributed systems.
6.839 Advanced Computer Graphics (Prof. F. Durand) [class link]
A graduate level course investigates computational problems in rendering, animation, and geometric modeling. The course draws on advanced techniques from computational geometry, applied mathematics, statistics, scientific computing and other.