From ed28f5251d1b8cb3ca9fd46e39e8811b219ef166 Mon Sep 17 00:00:00 2001 From: Simon Nilsson Date: Mon, 3 Feb 2025 15:59:14 -0500 Subject: [PATCH 1/7] Create mitra_clfs.md --- docs/mitra_clfs.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 docs/mitra_clfs.md diff --git a/docs/mitra_clfs.md b/docs/mitra_clfs.md new file mode 100644 index 000000000..6b9a1593f --- /dev/null +++ b/docs/mitra_clfs.md @@ -0,0 +1,54 @@ +# Steps to run grooming, rearing, and Straub tail classifiers. + +## 1) PRE-PROCESSING: Egocentric alignment and background subtraction for Straub tail classification. + +#### Egocentric alignment + +For accurately classyifing Straub tail, we need features constructed from **images** of the animals tail (not, as done by default, features constructed from the **pose-estimated locations** of the animal). In order to do this, we first need to create copies of the original videos +which are [egocentrically align](https://simba-uw-tf-dev.readthedocs.io/en/latest/simba.data_processors.html#simba.data_processors.egocentric_aligner.EgocentricalAligner). This means that we spin the videos around so that the animal is always faacing in the same direction (e.g., east), +as in the example below. We do this to remove any variability associated with animal direction: i.e., the animal direction in itself should can not change how the tail looks like. + +[EgocentricalAligner.webm](https://github.com/user-attachments/assets/7caf920b-0e86-49c2-bfde-2b606de6d6d8) + +As we know the location of the animal snout and center through the pose-estimated locations from SLEAP/DLC to, we can rotate the images so that the center body-part is always located in near the center of the video, +and the nose is always pointing 0 degrees axis-aligned of the center. Note, as we are rotating the images, we should also create copies of the original pose-estimation data where the same rotation factors have been applied. This ensures that we still know where the body-parts are +located in the rotated videos, and we can perform any calculations from the body-parts in the rotated data the same way as we could in the original, un-rotated, data. + +To perform pose-estimation based video and data rotation, use [THIS](https://simba-uw-tf-dev.readthedocs.io/en/latest/nb/egocentric_align.html) notebook. + +#### Background subtraction + +As we are constructing features from images of the animal and its tail, we don't want the background (i.e., the arena floor) to be visable. If it was, then pixel values around and under the tail would influence the feature values. To remove the background, +we compute the average frame pixel values, and remove the mean from each image as below. + +[docs__static_img_bg_removed_ex_2_clipped.webm](https://github.com/user-attachments/assets/261c36e0-c59d-4f57-9422-430277d3b78b) + +To create copies of videos where the background is removed, use [THIS](https://simba-uw-tf-dev.readthedocs.io/en/latest/nb/bg_remove.html) notebook. + + +## 2) DATA IMPORT: Interpolation and smoothing. + +When importing the SLEAP pose-estimation data into SimBA, perform `Body-part: Nearest` interpolation. This ensures that for any frame a body-part is missing in, the body-part will take the location of when the body-part was last visibale. + +Also, perform Savitzky-Golay smoothing using a 500ms time-window to remove pose-estimation jitter. + +Do not perform any outlier correction. + + +## CUSTOM FEATURE EXTRACTION. + +We will compute a bunch of features that measures the animals hull, and parts of the hull (e.g., lower body, upper body, head) and how their shapes and sizes vary in sliding time-windows. To do this, we will use the +custom feature extraction script in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/extractFeatures.md). The feature extraction script that we will be using, is called `MitraFeatureExtractor`, +and is located [HERE](https://github.com/sgoldenlab/simba/blob/master/simba/sandbox/MitraFeatureExtractor.py). + +To do this, navigate to the + + + + + + + + + + From aa6e527838ac6918e53f8ca27d97ed6be9b8bc84 Mon Sep 17 00:00:00 2001 From: sronilsson Date: Mon, 3 Feb 2025 20:15:12 -0500 Subject: [PATCH 2/7] mitra_clfs --- docs/mitra_clfs.md | 69 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/docs/mitra_clfs.md b/docs/mitra_clfs.md index 6b9a1593f..da7e8f1d5 100644 --- a/docs/mitra_clfs.md +++ b/docs/mitra_clfs.md @@ -2,9 +2,20 @@ ## 1) PRE-PROCESSING: Egocentric alignment and background subtraction for Straub tail classification. +For accurately classyifing Straub tail, we need features constructed from **images** of the animals tail (not, as done by default, features constructed from the **pose-estimated locations** of the animal). + +#### Background subtraction + +As we are constructing features from images of the animal and its tail, we don't want the background (i.e., the arena floor) to be visable. If it was, then pixel values around and under the tail would influence the feature values. To remove the background, +we compute the average frame pixel values, and remove the mean from each image as below. + +[docs__static_img_bg_removed_ex_2_clipped.webm](https://github.com/user-attachments/assets/261c36e0-c59d-4f57-9422-430277d3b78b) + +To create copies of videos where the background is removed, you can use [THIS](https://simba-uw-tf-dev.readthedocs.io/en/latest/nb/bg_remove.html) notebook. + #### Egocentric alignment -For accurately classyifing Straub tail, we need features constructed from **images** of the animals tail (not, as done by default, features constructed from the **pose-estimated locations** of the animal). In order to do this, we first need to create copies of the original videos +In order to do this, we first need to create copies of the original videos which are [egocentrically align](https://simba-uw-tf-dev.readthedocs.io/en/latest/simba.data_processors.html#simba.data_processors.egocentric_aligner.EgocentricalAligner). This means that we spin the videos around so that the animal is always faacing in the same direction (e.g., east), as in the example below. We do this to remove any variability associated with animal direction: i.e., the animal direction in itself should can not change how the tail looks like. @@ -16,15 +27,8 @@ located in the rotated videos, and we can perform any calculations from the bod To perform pose-estimation based video and data rotation, use [THIS](https://simba-uw-tf-dev.readthedocs.io/en/latest/nb/egocentric_align.html) notebook. -#### Background subtraction - -As we are constructing features from images of the animal and its tail, we don't want the background (i.e., the arena floor) to be visable. If it was, then pixel values around and under the tail would influence the feature values. To remove the background, -we compute the average frame pixel values, and remove the mean from each image as below. - -[docs__static_img_bg_removed_ex_2_clipped.webm](https://github.com/user-attachments/assets/261c36e0-c59d-4f57-9422-430277d3b78b) - -To create copies of videos where the background is removed, use [THIS](https://simba-uw-tf-dev.readthedocs.io/en/latest/nb/bg_remove.html) notebook. - +> [!NOTE] +> I can insert GUI options for doing these operations (background subtraction and egocentric alignment) if you prefer! ## 2) DATA IMPORT: Interpolation and smoothing. @@ -34,14 +38,53 @@ Also, perform Savitzky-Golay smoothing using a 500ms time-window to remove pose- Do not perform any outlier correction. - -## CUSTOM FEATURE EXTRACTION. +## 3) CUSTOM FEATURE EXTRACTION. We will compute a bunch of features that measures the animals hull, and parts of the hull (e.g., lower body, upper body, head) and how their shapes and sizes vary in sliding time-windows. To do this, we will use the custom feature extraction script in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/extractFeatures.md). The feature extraction script that we will be using, is called `MitraFeatureExtractor`, and is located [HERE](https://github.com/sgoldenlab/simba/blob/master/simba/sandbox/MitraFeatureExtractor.py). -To do this, navigate to the +## 4) RUN REARING AND GROOMING CLASSIFIERS + +After feature extraction, your good to go and run the `grooming` and `rearing` classifier. Run the classifiers +in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/Scenario2.md#part-3-run-the-classifier-on-new-data). + +GROOMING THRESHOLD: XX +GROOMING MINIMUM BOUT LENGTH: XX +REARING THRESHOLD: XX +REARING MINIMUM BOUT LENGTH: XX + +## COMPUTE ADDITIONAL STRAUB TAIL FEATURES + +Now, in order to run the Straub tail classifier, we need to compute some additional features, and combine them with the +features computed in the prior step, to create the final feature set for the Straub tail classifier. + +**Step i**: To compute these features, use [THIS](https://github.com/sgoldenlab/simba/blob/master/simba/sandbox/mitra_tail_analyzer.py) +script. This produces a set of files, one for each of the videos, inside your chosen ``save_dir`` + +**Step ii**: In step 2, we need to combine these features created in (i) with some features created in step `"3) CUSTOM FEATURE EXTRACTION"` to create the final +feature set for the tail classifier. To do this, run [THIS](https://github.com/sgoldenlab/simba/blob/master/simba/sandbox/mitra_appand_additional.py) scrip. +This produces a final set of files inside the chosen ``SAVE_DIR``. + +**Step ii**: Move these files ouputted in Step (ii) to the ``project_folder/csv/features_extracted`` directory of your SimBA project (move the files you have used for the grooming/rearing classifications first). + +## 4) RUN STRAUB TAIL CLASSIFIER + +Run the straub tail classifier in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/Scenario2.md#part-3-run-the-classifier-on-new-data). + +STRAUB TAIL THRESHOLD: XX +STRAUB TAIL MINIMUM BOUT LENGTH: XX + + + + + + + + + + + From cabc9ca682cf34e69c8dcaba6c7c106ad6828baf Mon Sep 17 00:00:00 2001 From: Simon Nilsson Date: Tue, 4 Feb 2025 12:26:23 -0500 Subject: [PATCH 3/7] Update mitra_clfs.md --- docs/mitra_clfs.md | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/docs/mitra_clfs.md b/docs/mitra_clfs.md index da7e8f1d5..fcc6493da 100644 --- a/docs/mitra_clfs.md +++ b/docs/mitra_clfs.md @@ -2,7 +2,10 @@ ## 1) PRE-PROCESSING: Egocentric alignment and background subtraction for Straub tail classification. -For accurately classyifing Straub tail, we need features constructed from **images** of the animals tail (not, as done by default, features constructed from the **pose-estimated locations** of the animal). +For accurately classyifing Straub tail, we need features constructed from **images** of the animals tail (not, as done by default, features constructed from the **pose-estimated locations** of the animal). To get standardized images of the animals +tails, we need to create copies of the original videos and original pose-estimation data where the background have been subtracted and the videos have been egocentrically aligned. + +For these steps, I have jupyter notebook examples below, but please let me know if your prefer to go through these steps by clicking in a graphical user interface and I can make it available. #### Background subtraction @@ -15,9 +18,8 @@ To create copies of videos where the background is removed, you can use [THIS](h #### Egocentric alignment -In order to do this, we first need to create copies of the original videos -which are [egocentrically align](https://simba-uw-tf-dev.readthedocs.io/en/latest/simba.data_processors.html#simba.data_processors.egocentric_aligner.EgocentricalAligner). This means that we spin the videos around so that the animal is always faacing in the same direction (e.g., east), -as in the example below. We do this to remove any variability associated with animal direction: i.e., the animal direction in itself should can not change how the tail looks like. +After peforming the background subtraction, we need to [egocentrically aligned](https://simba-uw-tf-dev.readthedocs.io/en/latest/simba.data_processors.html#simba.data_processors.egocentric_aligner.EgocentricalAligner) copies of the background subtracted videos. +This means that we spin the videos around so that the animal is always faacing in the same direction (e.g., east), as in the example below. We do this to remove any variability associated with animal direction: i.e., the animal direction in itself should can not change how the tail looks like. [EgocentricalAligner.webm](https://github.com/user-attachments/assets/7caf920b-0e86-49c2-bfde-2b606de6d6d8) @@ -28,13 +30,13 @@ located in the rotated videos, and we can perform any calculations from the bod To perform pose-estimation based video and data rotation, use [THIS](https://simba-uw-tf-dev.readthedocs.io/en/latest/nb/egocentric_align.html) notebook. > [!NOTE] -> I can insert GUI options for doing these operations (background subtraction and egocentric alignment) if you prefer! +> Again I can insert GUI options for doing these operations (background subtraction and egocentric alignment) if you prefer! ## 2) DATA IMPORT: Interpolation and smoothing. -When importing the SLEAP pose-estimation data into SimBA, perform `Body-part: Nearest` interpolation. This ensures that for any frame a body-part is missing in, the body-part will take the location of when the body-part was last visibale. +Next, import the raw, original pose-estimation data into SimBA, perform `Body-part: Nearest` interpolation. This ensures that for any frame a body-part is missing in, the body-part will take the location of when the body-part was last visibale. -Also, perform Savitzky-Golay smoothing using a 500ms time-window to remove pose-estimation jitter. +Also perform Savitzky-Golay smoothing using a 400ms time-window to remove pose-estimation jitter. Do not perform any outlier correction. @@ -49,10 +51,10 @@ and is located [HERE](https://github.com/sgoldenlab/simba/blob/master/simba/sand After feature extraction, your good to go and run the `grooming` and `rearing` classifier. Run the classifiers in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/Scenario2.md#part-3-run-the-classifier-on-new-data). -GROOMING THRESHOLD: XX -GROOMING MINIMUM BOUT LENGTH: XX -REARING THRESHOLD: XX -REARING MINIMUM BOUT LENGTH: XX +GROOMING THRESHOLD: 0.35 +GROOMING MINIMUM BOUT LENGTH: 200ms +REARING THRESHOLD: 0.30 +REARING MINIMUM BOUT LENGTH: 200ms ## COMPUTE ADDITIONAL STRAUB TAIL FEATURES @@ -60,20 +62,21 @@ Now, in order to run the Straub tail classifier, we need to compute some additio features computed in the prior step, to create the final feature set for the Straub tail classifier. **Step i**: To compute these features, use [THIS](https://github.com/sgoldenlab/simba/blob/master/simba/sandbox/mitra_tail_analyzer.py) -script. This produces a set of files, one for each of the videos, inside your chosen ``save_dir`` +script. This produces a set of files, one for each of the videos, inside your passed ``save_dir`` **Step ii**: In step 2, we need to combine these features created in (i) with some features created in step `"3) CUSTOM FEATURE EXTRACTION"` to create the final feature set for the tail classifier. To do this, run [THIS](https://github.com/sgoldenlab/simba/blob/master/simba/sandbox/mitra_appand_additional.py) scrip. -This produces a final set of files inside the chosen ``SAVE_DIR``. +This produces a final set of files inside the passed ``SAVE_DIR``. -**Step ii**: Move these files ouputted in Step (ii) to the ``project_folder/csv/features_extracted`` directory of your SimBA project (move the files you have used for the grooming/rearing classifications first). +**Step ii**: Move the files ouputted in step (ii) to the ``project_folder/csv/features_extracted`` directory of your SimBA project (move the files you have used for the grooming/rearing classifications first). +Alternatively, place thse files inside the ``project_folder/csv/features_extracted`` directory of a new SimBA project only designed to classify Straub tail. ## 4) RUN STRAUB TAIL CLASSIFIER Run the straub tail classifier in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/Scenario2.md#part-3-run-the-classifier-on-new-data). -STRAUB TAIL THRESHOLD: XX -STRAUB TAIL MINIMUM BOUT LENGTH: XX +STRAUB TAIL THRESHOLD: 0.30 +STRAUB TAIL MINIMUM BOUT LENGTH: 200ms From 3bf0c131a41ff4653789efcefccec9c8a32bd44f Mon Sep 17 00:00:00 2001 From: Simon Nilsson Date: Tue, 4 Feb 2025 13:09:26 -0500 Subject: [PATCH 4/7] Update mitra_clfs.md --- docs/mitra_clfs.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/mitra_clfs.md b/docs/mitra_clfs.md index fcc6493da..cb1c48651 100644 --- a/docs/mitra_clfs.md +++ b/docs/mitra_clfs.md @@ -51,9 +51,12 @@ and is located [HERE](https://github.com/sgoldenlab/simba/blob/master/simba/sand After feature extraction, your good to go and run the `grooming` and `rearing` classifier. Run the classifiers in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/Scenario2.md#part-3-run-the-classifier-on-new-data). -GROOMING THRESHOLD: 0.35 +GROOMING THRESHOLD: 0.35 + GROOMING MINIMUM BOUT LENGTH: 200ms + REARING THRESHOLD: 0.30 + REARING MINIMUM BOUT LENGTH: 200ms ## COMPUTE ADDITIONAL STRAUB TAIL FEATURES @@ -76,6 +79,7 @@ Alternatively, place thse files inside the ``project_folder/csv/features_extract Run the straub tail classifier in SimBA as documented [HERE](https://github.com/sgoldenlab/simba/blob/master/docs/Scenario2.md#part-3-run-the-classifier-on-new-data). STRAUB TAIL THRESHOLD: 0.30 + STRAUB TAIL MINIMUM BOUT LENGTH: 200ms From b462062969d5bfd774882d1b23d56112f660ed8c Mon Sep 17 00:00:00 2001 From: Simon Nilsson Date: Wed, 5 Feb 2025 09:01:28 -0500 Subject: [PATCH 5/7] Add files via upload --- images/bg_removal_directory.webp | Bin 0 -> 15506 bytes images/bg_removal_single.webp | Bin 0 -> 13938 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/bg_removal_directory.webp create mode 100644 images/bg_removal_single.webp diff --git a/images/bg_removal_directory.webp b/images/bg_removal_directory.webp new file mode 100644 index 0000000000000000000000000000000000000000..fe9ff76b6cb438e601c1a8585b6fbddf9704a732 GIT binary patch literal 15506 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 w`$0s?ANu-{-jYhnMv~+kHU% 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 M%b5|MH~;_u08-^NasU7T literal 0 HcmV?d00001 From 36ca6127b94dabaa677faac38ad1e8ecb8c43b52 Mon Sep 17 00:00:00 2001 From: Simon Nilsson Date: Wed, 5 Feb 2025 09:22:55 -0500 Subject: [PATCH 6/7] Update Tutorial_tools.md --- docs/Tutorial_tools.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/Tutorial_tools.md b/docs/Tutorial_tools.md index f1079f60c..b441f8aa1 100644 --- a/docs/Tutorial_tools.md +++ b/docs/Tutorial_tools.md @@ -647,6 +647,40 @@ iv) Click the `RUN` button. You can follow the progress in the main SimBA termin v) Once complete, new videos will be stored in your selected output directory. +### REMOVE BACKGROUND FROM A SINGLE VIDEO + +

+ +

+ +* In `VIDEO PATH`, click BROWSE and select the file you which to remove the background from. +* OPTIONAL: In `BACKGROUND REFERENCE VIDEO PATH`, click BROWSE and select a video file that represents the background (has no animals visible but otherwise representative / near identical copy of video selected in `VIDEO PATH`) +> [!NOTE] +> `BACKGROUND REFERENCE VIDEO PATH` can often be left blank (do not select any video). If no video is selected, the background with be computed from the `VIDEO PATH`. +* `COMPUTE BACKGROUND FROM ENTIRE VIDEO`: The background can be computed from the entire video, of a segment of the video. If you want to compute it from teh entire video, check the `COMPUTE BACKGROUND FROM ENTIRE VIDEO` checkbox. + - `BACKGROUND VIDEO START (FRAME # OR TIME)`: If **un-checking** the `COMPUTE BACKGROUND FROM ENTIRE VIDEO`, we need to select a segment of the background video which we will use to compute the background. Enter the **START** time (e.g., `00:00:00`) or or start frame (e.g., `0`) of the segment here. + - `BACKGROUND VIDEO END (FRAME # OR TIME)`: If **un-checking** the `COMPUTE BACKGROUND FROM ENTIRE VIDEO`, we need to select a segment of the background video which we will use to compute the background. Enter the **END** time (e.g., `00:00:20`) or or start frame (e.g., `1200`) of the segment here. +* `MULTIPROCESS VIDEO (FASTER): To use multiprocessing, and process each image of the video in parallel on each of your available CPU cores, check this box and select how many cores you want to use in the `CPU cores` dropdown. + +Once complete, hit the RUN button. You can follow the progress in the main SimBA terminal window and the operating system terminal window. The background removed video will be saved in the same directory as the `VIDEO PATH` with the `_bg_subtracted` suffix. + +### REMOVE BACKGROUND FROM ALL VIDEOS IN A DIRECTORY + +

+ +

+ +* In `VIDEO DIRECTORY`, click BROWSE and select the directory containing videos you want to remove the background from. +* OPTIONAL: In `BACKGROUND VIDEO DIRECTORY`, click BROWSE and select a directory containing videos mirring the filenames of the videos in the `VIDEO DIRECTORY` but have animals visible but otherwise representative / near identical copy of video selected in `VIDEO DIRECTORY`. +> [!NOTE] +> `BACKGROUND VIDEO DIRECTORY` can most often be left blank (do not select any directory). If no directory is selected, the background with be computed from the videos in `VIDEO DIRECTORY` themselves. +* `COMPUTE BACKGROUND FROM ENTIRE VIDEO`: The background can be computed from the entire videos, of a segment of the videos. If you want to compute it from the entire videos, check the `COMPUTE BACKGROUND FROM ENTIRE VIDEO` checkbox. + - `BACKGROUND VIDEO START (FRAME # OR TIME)`: If **un-checking** the `COMPUTE BACKGROUND FROM ENTIRE VIDEO`, we need to select a segments of the background videos which we will use to compute the background. Enter the **START** time (e.g., `00:00:00`) or or start frame (e.g., `0`) of the segment here. + - `BACKGROUND VIDEO END (FRAME # OR TIME)`: If **un-checking** the `COMPUTE BACKGROUND FROM ENTIRE VIDEO`, we need to select a segments of the background videos which we will use to compute the background. Enter the **END** time (e.g., `00:00:20`) or or start frame (e.g., `1200`) of the segment here. +* `MULTIPROCESS VIDEO (FASTER): To use multiprocessing, and process each image of the video in parallel on each of your available CPU cores, check this box and select how many cores you want to use in the `CPU cores` dropdown. + +Once complete, hit the RUN button. You can follow the progress in the main SimBA terminal window and the operating system terminal window. The background removed video will be saved in the same directory as the `VIDEO PATH` with the `_bg_subtracted` suffix. + ## Author [Simon N](https://github.com/sronilsson), [JJ Choong](https://github.com/inoejj) From ef002a5073e144f07d53a2de4b125c3e86c37408 Mon Sep 17 00:00:00 2001 From: Simon Nilsson Date: Wed, 5 Feb 2025 09:23:56 -0500 Subject: [PATCH 7/7] Update Tutorial_tools.md --- docs/Tutorial_tools.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Tutorial_tools.md b/docs/Tutorial_tools.md index b441f8aa1..248df3f47 100644 --- a/docs/Tutorial_tools.md +++ b/docs/Tutorial_tools.md @@ -40,6 +40,7 @@ We have developed video and image processing tools and incorporated them into th - [Extract ROI definitions to human-readable format](https://github.com/sgoldenlab/simba/blob/master/docs/Tutorial_tools.md#extract-roi-definitions-to-human-readable-format) - [Temporally join videos](https://github.com/sgoldenlab/simba/blob/master/docs/Tutorial_tools.md#temporal-join-videos) - [Extract project annotation counts](https://github.com/sgoldenlab/simba/blob/master/docs/Tutorial_tools.md#extract-project-annotation-counts) +- [Remove video backgrounds](https://github.com/sgoldenlab/simba/blob/master/docs/Tutorial_tools.md#remove-background-from-all-videos-in-a-directory) ## Shorten Videos This is a tool used to trim video lengths. The tool contains two different methods: