# CS50X - Research Resources

## Google Developers Documentation

A great place to start learning about machine learning: it contains multiple courses to understand the theory and practices of machine learning.

[Google's Machine Learning Documentation](https://developers.google.com/machine-learning/foundational-courses)

## Youtube Courses

While searching on the web about pytorch, I stumbled upon Murtaza's Workshop course, Object Detection 101, which helped me understand object detection with Python and YOLO.

%[https://www.youtube.com/watch?v=WgPbbWmnXJ8&t=8280s&ab_channel=Murtaza%27sWorkshop-RoboticsandAI] 

After watching the course, I decided to build a web app with a pre-trained model. This will make the completion of the project in a logical time frame possible.

## Handling Video Feed

At first, I was thinking about building my project for image analysis only. But it's a bit boring. I decided to change to a video feed to make it more interesting. So, the user will be able to use a camera to identify objects around them. This lets the user use the app even with their phone.

The problem here is that I must send the stream to the back end, analyze the stream, and then send back the data needed to create the bounding boxes.  
  
I've found an interesting video made by **Muhammad Moin** which should be very helpful in completing the video**.**

%[https://www.youtube.com/watch?v=xzN_aG917-8&t=3653s&ab_channel=MuhammadMoin] 

## Single Page Application

Single-page applications have been getting popular lately. I decided to build such an application to make a nice dynamic and interactive website without loading alternative websites.

## Training

Training is an important part of machine learning. Learning how to create a model and train it for my own purposes will be a great way to dwell deeper into machine learning.

First, we need a data set to train our model. A good source of common objects is Microsoft's Coco(**C**ommon **Objects** in **Co**ntext). It is important to train nano, small and medium models to achieve optimal performance.

While training, we can use a clearml integration to monitor the process of the training. Using it is quite straightforward, first install clearML, on the project's environment by running **"pip install clearml"**, then run **clearml-init**, generate new credentials for the project on the **clearml website**(It needs an account), and then copy the credentials to the CLI.

## This should be everything

I think I have everything I need to complete the project. Time to start writing some code!
