On the occasion that is Canada's 150th birthday, and a surprise visit from our Prime Minister Justin Trudeau, we are inspired to create this app to showcase our national pride. This app is for any Canadian who wishes to test their patriotism and recieve a rating of their "Canadianess."
What it does
You can submit an image to our website and it will respond to you with a percentage measure of how Canadian your object is.
How we built it
We start with scraping different images off Google Images that corresponds to the different pre-selected categories that we believe to be very Canadian; objects such as Beavers, Tim Hortons, etc. Next, we draft a basic 4 layer convolutional neural network to process our data. We then tweak our model by adding techniques such as data augmentation, data preprocessing, and regularization, etc. We have also tweaked different hyperparameters such as layer and node count, dropout, etc. It was trained on a GTX 1050 Ti on Jaden's home computer. After the model is trained, we set up an N2 Google Cloud Platform instance and developed a backend in Flask to serve our model. A React front-end is created to interface with the backend. The front-end was boot-strapped from the GitHub repo, create-react-app.
Challenges we faced
Being a very niche topic, we don't have anything pre-made that we could really settle for. We usually had to create everything from scratch.
Google Images scraping limits the amount of images you receive drastically (< 100 per category) so we had to cut down on the amount of categories we had to reduce confusion in our neural network. We've only had around 1000 images in total, which definitely reduced the reliability of the model. This also meant we did not have access to images that would represent _ not _ Canadian images, so it would occasionally be confused by something that it has never seen before.
I (Jaden) did not sleep for a single second in the first night so my productivity was decreased heftily. I spent a day wondering why my validation loss/accuracy scores were not up to par, only to realize that I forgot to normalize my validation data and only normalize my training data.
Accomplishments that we're proud of
- Our final validation accuracy was approximately 70% to 80% on our validation set.
- We ended up finishing our project.
What we learned
- This is the first time we used Flask and needed to learn it to put up our backend.
What's next for Mr. Goose
With better computing resources, more time, and most importantly, more data, we would be able to create an even better machine learning model. The front-end could also use a lot of work, the function is not well documented. Further, the GitHub repos have no documentation, which should be corrected for the benefit of all followers of Mr.Goose.