DeepPlate is a deep learning pipeline for analysing plate images of Arabidopsis and Brachypodium, and this page presents its main segmentation performance, example outputs, and key limitations to guide future improvements.

Author
Affiliation

UniNE

Published

November 7, 2025

Abstract
DeepPlate is a deep learning pipeline designed to analyse plate images of Arabidopsis thaliana and Brachypodium distachyon, including roots, seeds and aerial tissues. Starting from raw time-series images, it performs preprocessing, segmentation and trait extraction to generate quantitative descriptors of plant growth and architecture. On this page, I summarise the main performance metrics and example outputs of DeepPlate. I show how well the models segment different organs, how robust the pipeline is across experiments, and how the extracted traits relate to manual measurements. The goal is to document what works, where the current limitations are, and how these results can guide future improvements of the tool.

Preface

Contributors: Corentin Maslard / Joop E.M Vermeer

This project is an extension of the research work carried out by the Laboratory of cell and molecular biology.

Guide being written

This guide is still incomplete. The complete repository (documentation, data, script for analyse data, etc.) will be available shortly at this link: https://github.com/cmaslard/DeepPlate_analyse.

Important

The code for the DeepPlate algorithm is available here: https://github.com/cmaslard/DeepPlate

Grants and institutional support:

Licence

This document is made available under the terms of the Licence Creative Commons Attribution - Non Commercial Use - Share Alike 4.0 International.

Package used in this quarto document

Code
library(renv) # install.packages("renv")
library(dplyr)

deps <- renv::dependencies(path = ".", progress = F, quiet = T)

unique_packages <- unique(deps$Package)
writeLines(unique_packages, here::here("src/packages_use_in_this_quarto.txt"))

data.frame(
  Package = unique_packages,
  Version = sapply(unique_packages, function(pkg) {
    tryCatch(as.character(packageVersion(pkg)), error = function(e) NA)
  }),
  stringsAsFactors = FALSE
) %>% 
  #knitr::kable(caption = "List of packages used in this document", row.names = FALSE)
  DT::datatable(.,
  filter = "top",
  class = 'cell-border stripe',
  rownames = FALSE
)