#100DaysOfCode 22/100: Oh boy, here comes Computer Vision
Ok, this is the first time I'm using the article thing on LinkedIn, and it's for a DayOfCode! You may think that it's an overkill, and ofc it is. But trust me, it's so wirth it. As I'm writing this article, I haven't coded yet, but by the end of today, I'll have more than 5 hours of coding! Hopefully, I'll also have an AI that will do some Computer Vision stuff! How? Why? Let's find out together.
I have found out about a week ago about an event that will happen at my uni: "Deep Learning for Computer Vision with NVidia". They also specified the time this workshop will go on: 5 hours! 5! As a person that participated to hackathons and competitions without any preparation (at ChainHack, a hackathon whose main topic was BlockChain, I went there without knowing what a blockchain was :), I belive in learning fast and efficient under time pressure and, as I felt that things were going to slow and steady at uni (every coursework done in time, no exam in the near future...boring), I thought it would be a great idea to actually change the scenery. While I was working on the Huawei Denoising competition, I have learned so much about Neural Networks, Computer Vision, I implemented my own Denoising Autoencoder through a CNN using Keras...I felt like cheating, but nonetheless, I did code my own NN. I missed that feeling of learning A LOT of information at once. So I said "why not?" and just blindly got the ticket. I didn't know what I would go through the next week.
I could have sworn that the workshop would be tomorrow. I was wondering whether I should go or not, as it would have been through some of my Uni courses. Anyway, today I taught that I had nothing to worry about, it was Wednesday after all. Just one class starting at 11, then gym, then home. Here is where I did the stupid thing: I thought to myself "do I really need my laptop today?". Well, I thought I didn't... FYI, I have a Dell XPS 13 9370, the 2018 version. In other words, an extremely thin laptop. I'm not telling you in order to flex, but so that you realise how insignificant it would have been to just, you know, put it in the bag. You never know when you really need more computing power. Well, in the middle of my Computer Architecture lecture, reality made me realise that I needed that laptop today. I received a reminder, telling me that the event starts at 1:00. The class would end at around 12, my accommodation was 30 minutes of walking away, the bus would get me there in 20 minutes (without taking into consideration the time I'd wait for the bus), the tube would take me even more to arrive and the Uber/Taxi would have been waaay to expensive for a retour trip. In other words, I was out of time and out of options.
When the class ended, I decided to make a run for it. If I would hurry, I would be able to do the trip in less than 25 minutes, which would give me enough time to go home, get the laptop and return to uni. However, as I got out the front door, I was surprised by a better solution: a bike. No, I did not "borrow" a random bike in the street (though that would have been exciting), but I rented one. There is a station of bikes for rental right in front of Imperial. Just 2£ for half the time on the same trip? Count me in!
So yeah, I was lucky. I got the laptop, came back with 30 minutes to spare. I managed to get myself a snack (I didn't think I'd have the time for a proper lunch) and walk around the uni until I found the class I was supposed to be in. At 13:00 was when the real fun began.
The first person speaking was Guillaume Barat, from NVidia. He gave us a very interesting talk about AI and deep learning, a very short video summarising the breakthroughs the field of AI has achieved and the importance of understanding computer architecture for AI. On that last note he talked a bit more, about the importance of good, specialised GPUs in the field, recommending some of the NVidia GPUs (obviously), on which task they would be most beneficial. I noted down this interesting fellow down: the Jetson TK1, which is supposed to be a GPU specialised for robotics. Imagine it as a very high-performance Arduino board. My eyes were getting wide and my wallet was getting scared. Now at least I know what kind of GPUs I should use for each application.
Speaking of those, I found out something beautiful: NVidia offers their own servers to train AI models. If you have the model, you can just send it through their cloud, they will train it on their servers, with all the GPU clusters they can assign you (I suppose, don't quote me on that), and they will send you back the trained model. It's amazing you can actually do that. I understood that you'd need to have an NVidia developer account for that, plus a fee? Don't know exactly. You can google that if you need the extra computing power. For now, I don't. But at least now I know where to look for it, if I ever need it (which, hopefully, I will). This is a useful link if you wish to find out more: https://ngc.nvidia.com/ .
After Guillaume's talk, the head of the Students for AI society came to start the Computer Vision part of the workshop. Unfortunately, I don't recall his surname, but he did present himself as Harry, so I'll go on with that. NVidia gave us all access to their own course, called Fundamentals of Deep Learning in Computer Vision. That would have been a 30$ course, but for us, who participated at the workshop, it was free. We didn't go deep into the programming part of AI, but more into the math, logic and organisation of data for training neural nets. Basically, we learned how to use already created models, like AlexNet (more on that in this research paper: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf), in our own applications. We've done the basics: classify pictures of dogs and cats, find objects (in our case, dogs again), but we trained the models on NVidia's GPU servers! Yeah, nothing took more than 5 minutes to train. We changed AlexNet to be a fully convolutional network using Caffe code and, at the very end, we had to use everything we've learned to create a deep neural network that would correctly classify images that would contain either a whale head coming out of the water or not. We had to set up the dataset, the network itself, and connect it to a Python program that would actually print the result in a way humans could understand (not as a tuple of percentages, but as "whale" or "no whale"). It was somewhat straightforward, but, if I wouldn't have had this experience, I would have had no idea how to do it.
Oh, I forgot to mention that the last network we had to do was basically a "marked" assessment. No help whatsoever. You passed that, you would get a certificate. You didn't pass it, you wouldn't. I passed it. The requirement was for the network to output correctly with an accuracy of at least 80%. Mine had 98% accuracy. I got 100%. Now, the certificate stands nice and comfy with my other accomplishments posted on the LinkedIn profile. Soon enough in my CV as well.
So, all in all, I had a quite exciting day, which I feel that it had everything. There was one recurring theme, though, which I'm not sure if you've noticed or not. If you've spotted it, you deserve a prize: computer architecture. I had a class about it today, at the NVidia talk it was specified as a very important skill for data scientists. Well, it felt like some kind of sign. So, right after the talk, I decided to go to the library to get this book, which the architecture teacher recommended since day 1: Computer Organization and Design. Now it sits safe in my library, waiting to be opened...hopefully tomorrow.