From 6dbc8e1956483a21c798bc25aaa2f83f17a8b13c Mon Sep 17 00:00:00 2001 From: Vincent Chamberland <71802740+vchamberland@users.noreply.github.com> Date: Wed, 26 Jun 2024 10:35:19 -0400 Subject: [PATCH] add VidGame-LLM project (#337) --- content/en/project/VidGame-LLM/index.md | 84 ++++++++++++++++++ ...hinobi_run-01_level-1_rep-01_end_frame.png | Bin 0 -> 42230 bytes 2 files changed, 84 insertions(+) create mode 100644 content/en/project/VidGame-LLM/index.md create mode 100644 content/en/project/VidGame-LLM/sub-01_ses-003_task-shinobi_run-01_level-1_rep-01_end_frame.png diff --git a/content/en/project/VidGame-LLM/index.md b/content/en/project/VidGame-LLM/index.md new file mode 100644 index 00000000..3a939d0a --- /dev/null +++ b/content/en/project/VidGame-LLM/index.md @@ -0,0 +1,84 @@ +--- +type: "project" # DON'T TOUCH THIS ! :) +date: "2024-06-21" # Date you first upload your project. +# Title of your project (we like creative title) +title: "Fine-Tuning a Video Large Language Model (Vid-LLM) for Automatic Annotation of Gameplay" + +# List the names of the collaborators within the [ ]. If alone, simple put your name within [] +names: [Vincent Chamberland, Renaud Dagenais] + +# Your project GitHub repository URL +github_repo: https://github.com/vchamberland/VidGame-LLM + +# If you are working on a project that has website, indicate the full url including "https://" below or leave it empty. +website: + +# List +- 4 keywords that best describe your project within []. Note that the project summary also involves a number of key words. Those are listed on top of the [github repository](https://github.com/brainhack-school2020/project_template), click `manage topics`. +# Please only lowercase letters +tags: [video LLM, automatic annotation, video games, cognitive neuroscience] + +# Summarize your project in < ~75 words. This description will appear at the top of your page and on the list page with other projects.. + +summary: "This project aims to develop a preprocessing pipeline to fine-tune a Video Large Language Model (Vid-LLM) for automatic annotation of gameplay recordings in cognitive neuroscience studies. Leveraging the Gym Retro ecosystem and the Courtois NeuroMod dataset, we convert event logs into video format and generate detailed annotations and timestamps to train the Vid-LLM. Deliverables include cleaned datasets, documentations and Jupyter notebooks." + +# If you want to add a cover image (listpage and image in the right), add it to your directory and indicate the name +# below with the extension. +image: "sub-01_ses-003_task-shinobi_run-01_level-1_rep-01_end_frame.png" +--- + + +## Project definition + +### Background + +Video games provide a controlled and rich environment to observe and modulate human behavior, and have been used in various research fields, such as cognitive neuroscience, psychology, and human-computer interaction. However, analyzing gameplay recordings can be time-consuming and labor-intensive, as it often requires manual annotation of player actions and events, which can be error-prone, subjective, and challenging to scale, especially when dealing with large datasets or complex game dynamics ([Harel et al., 2023](https://osf.io/preprints/psyarxiv/uakq9)). + +Recently, a growing number of large language models (LLMs) have been specialized for video understanding (Vid-LLMs), where they can generate detailed descriptions of video content, such as actions, objects, and events ([Tang et al., 2023](https://arxiv.org/abs/2312.17432)). These models can be fine-tuned on specific tasks to improve their performance and adapt them to new domains. For example, a model fine-tuned with sports videos can be used to analyze player performance, develop gameplay strategies, and provide detailed commentary. + +### Aims +Therefore, this project aims to develop a preprocessing pipeline to fine-tune a Vid-LLM for automatic annotation of gameplay recordings in order to reduce manual annotation and increase efficiency. + +### Brainhack objectives +1. Gain experience with the Gym Retro ecosystem and its Python API for video game analysis +2. Gain experience in manipulation of video data (e.g., conversion, extraction, and processing) +3. Gain experience with project and version management tools (e.g., Git, DataLad) +4. Gain experience in Python scripting (e.g., dataframes, computer vision, automation) +5. Gain experience with LLM training and testing using video data + +### Dataset +The dataset is provided by the [Courtois NeuroMod project](https://www.cneuromod.ca/). It includes behavioral data recorded during gameplay of the retro video game "Shinobi III - Return of the Ninja Master", specifically capturing the movements and actions taken by three subjects. Each subject participated in four gaming sessions, with each session consisting of approximately a dozen runs. For the purposes of this project, we will focus on a subset of this dataset: analyzing runs from a single participant, specifically those in which they played level 1 of Shinobi [i.e., 89 runs]. + +### Tools + +- Python scripting tools & packages + - Jupyter notebooks + - Gym Retro’s Python API (RetroEnv) + - Dataframe handling (e.g., pandas, numpy) + - Computer vision (e.g., OpenCV, moviepy) + - Machine Learning requirements for the Vid-LLM model (pytorch, CUDA, etc.,) +- Project management & versioning + - Version controlling (Git, Github, Datalad) + +## Deliverables (Week 4 results) +- Cleaned-up event dataset (```data/datasets```) +- Formatted question-answers json file for supervised fine-tuning of the Vid-LLM (```data/json_files/custom.json```) +- Jupyter notebooks for data preprocessing and exploration: + - Dataset cleaning (```notebooks/dataset_preprocessing.ipynb```) + - Generating training videos from all Gym Retro's bk2 files (```notebooks/training_video_generator.ipynb```) + - Generating custom question-answers json file (```notebooks/custom_jason_generator.ipynb```) + - Generating short testing videos (```notebooks/testing_video_generator.ipynb```) + - Generating a single short testing video (```notebooks/single_testing_video_generator.ipynb```) + - Generating specific frames and gifs from selected videos (```notebooks/frame_gif_generator.ipynb```) + - Finding specific frames in a video (```notebooks/frame_finder.ipynb```) +- Documentation on the notebooks (```doc/notebook_doc.md```) +- Detailed documentation on how to download the raw dataset (```doc/how-to-download-raw-data.md```) +- Examples of training and testing videos, frames and gifs (```output/```) +- requirements.txt file for the project (```requirements.txt```) + +## Collaborators +* The Pierre/Lune Bellec Lab +* The Courtois NeuroMod Project + +## References +- Harel, Y., Pinsard, B., Boyle, J. A., Cyr, A., Clei, M. L., Mignot, P.-H., St-Laurent, M., Jerbi, K. and Bellec, P. (2023). Gamer in the scanner : Event-related analysis of fMRI activity during retro videogame play guided by automated annotations of game content. https://doi.org/10.31234/osf.io/uakq9 +- Tang, Y., Bi, J., Xu, S., Song, L., Liang, S., Wang, T., Zhang, D., An, J., Lin, J., Zhu, R., Vosoughi, A., Huang, C., Zhang, Z., Zheng, F., Zhang, J., Luo, P., Luo, J. and Xu, C. (2023). Video Understanding with Large Language Models: A Survey. arXiv. https://doi.org/10.48550/arxiv.2312.17432 \ No newline at end of file diff --git a/content/en/project/VidGame-LLM/sub-01_ses-003_task-shinobi_run-01_level-1_rep-01_end_frame.png b/content/en/project/VidGame-LLM/sub-01_ses-003_task-shinobi_run-01_level-1_rep-01_end_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d4fc7f978b465b0363f587440c9c39409677c0 GIT binary patch literal 42230 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

ihU>!a}RLj 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