In the previous post I talked about how video games can be used as a resource for building general machine learning models. Today I want to walk through building an object detection model using the Watson Machine Learning service to identify and track objects in Fortnite. Let's jump right in!
We'll be using a few different services available on IBM Cloud, so first you'll want to create a new account, or log in to your existing account.
The services that we'll be using are:
- Cloud Object Storage: To store our data and models
- Watson Machine Learning: Environment to train our model
- Cloud Annotations: To quickly label our training data
You will also need to have a video of Fortnite gameplay that you can use as training and test data (I have provided one, here, but the more, the better).
Once you have logged into IBM Cloud, simply click on "Create Resource" and search for
"object storage", give your instance a name, I chose
"couch-fortnite-object-storage" and select the Lite plan (the lite plan is free and allows up to 25GB of storage). Once the service is created, we need to create credentials so that we can use our object storage to store both our test data and model files. Click New Credential and make sure that the role is set to Writer and the option to include HMAC credential is checked.
Once created, click View Credential, you will see a JSON output of your credential, we need a few elements:
You can either keep this open in a second tab, or save the JSON in a text file to use in a few moments.
The last service we need to use is Watson Machine Learning - follow the same steps as above, searching for
"watson machine learning", give it a name and select the lite plan. We need to create credentials for this service as well. Click New Credential and again make sure to select Writer as the role. Click View Credentials and again, make a note of some of the elements that we will need later:
The goal here will be to train a model that can both identify and track an object in videos of Fortnite gameplay. We'll use a tool called Cloud Annotations to simplify this process. Navigate to cloud.annotations.ai – we'll use our object storage credentials to login. Enter your
apikey, select US as the region.
Next, click add media and select your Fortnite video (video files will be split into individual frames). Now, click add label, let's name it baller so that we can label ballers in the video (the Fortnite vehical).
Now we can go through our images, drawing boxes around each baller that we see.
You may label as many or as few images as you would like. Only images that have labels will be used in training.
As a general note about machine learning, and Fortnite specifically, you should use training data that incorporates all spectrums of environments that you anticipate using in testing and general use of your mode;. What I mean specifically in Fortnite is that there are many different environments you can encounter (city-scapes, trees, snow, lava, etc.), and you should try to encorporate at least a few different environments in your training data to build the best possible model.
We will be using a CLI tool to interface with our labeled training images and train/download our model. The CLI requires Node 10.13.0 or later.
npm install -g cloud-annotations
Once installed, you will have access to a command,
cacli in your terminal.
I suggest creating a new directory where we can run our training operations and eventually download our model (I created a directory called
fortnite-obj-detection). From that directory run the command
cacli train, the first time you run this command it will prompt you for credentials for both your Watson Machine Learning and object storage instances, this allows the tool to access the training data and then train our model.
cacli will also ask about training params, using the
k80 gpu is what we will be using and is included in the lite plan of Watson Machine Learning. The steps, I suggest using
20 * [number of training images] as a general rule of thumb.
Once run, a configuration file will be created so in the future you can simply retrain the model with new data without providing the service credentials.
Once all of the parameters have been filled in, we're ready to train! The CLI tool should automatically initiate the training job and join the queue, it will provide for you a
model_id, we will need this to both monitor and download the model. The CLI will ask if you would like to monitor the job once it has started, but if you close the terminal or would like to monitor elsewhere, you can also run
cacli progress [model_id].
Once the job has finished, we're ready to use the model, but first we need to download it! Simply run
cacli download [model_id] and it will retrieve the trained model from our object storage bucket and download it locally. The tool will download 3 versions of the model, ready to deploy in various environments. We will be using the model_web version, ready to use in a tensorflow.js application.
A standalone react app is available for you to clone and use already! Once you've cloned the repository, simply copy the model_web directory (the whole directory), and put it in the public directory of the react app. Finally, add a video to the public, called video.mov. Finally, run the app! If all goes well, the video will play and display bounding boxes around the objects that it has identified.
Hopefully this is a great starting point for you to build your own object detection models! Like I said before, I think that video games create a great environment for developing general purpose machine learning model.