Open
Description
- TIA Toolbox version: 1.3.3
- Python version: 3.10.8
Description
Tiatoolbox has several pre-trained models helpful for data processing. However, models differ in how they handle input and output, making them confusing to use (especially when customizing):
- Activation functions apply at different steps for different models. Sometimes in
forward
method (e.g.CNNModel
), sometimesforward
returns a raw layer output and the transformation applies ininfer_batch
(e.g.UNetModel
). - Moreover, activation functions are hardcoded. To customize, you can't simply change an attribute; you must overwrite the whole method (different for each model).
- Data normalization distributes across methods:
HoVerNet
uses it inforward
,UNetModel
in_transform
,MicroNet
inpreproc
, and vanilla models rely on the user to do so. - Data preprocessing also lacks consistency. Even though it should happen in
preproc_func
/_preproc
functions,UNetModel
uses its own_transform
, unrelated to the standard methods. Yet, its behavior could implement in_preproc
.
What to do
Refactoring the code will significantly improve readability:
- Decompose the pipeline into small granular methods in
ModelABC
: one method for normalization, activation function as an attribute, etc. - Explain
ModelABC
methods in their documentation: doesinfer_batch rely
onpostproc_func
? Caninfer_batch
be used for training? How? - Reorganize custom model methods to match the new
ModelABC
structure. - Add a new page to the documentation explaining the Tiatoolbox models pipeline: how is it related to the PyTorch pipeline? How to evaluate a model? How to train a model?