Да, maxpooling/topkpooling по классике - это слои пулинга (даунсэмплинга признаков). Это широко известно, правда TopkPool в библиотеках не представлены (но я думаю догадаться можно).
Я как-то переосмыслил их как слои аналитико-поисковые - они теперь больше для меня как конкурент свёрточного слоя. Скоро, надеюсь, у меня получится слой GatedTopkPool2D для конкуренции с Conv2D. (LLM, конечно, помогают писать необходимый код для меня. Написать код не мудрено, надо бы его погонять на датасетах, на разных моделях - это занимает времени, ну может пару месяцев, а вообще полгода может длиться, ведь это всего лишь хобби.)
Вот тут нужно пояснение читателям моих портянок, почему называется так тема:
1. Отбор признаков на основе модели (model-based feature selection) - это задача.
2. Криволинейный Topkpooling - а это одно из предполагаемых решений, но это не GatedTopkPool2D, о котором я сказал выше.
Когда вы применяете Conv2D, вы отказываетесь от отбора признаков на основе модели, но может, правда, чистите данные вручную или ещё как-то внешней моделью зачистку делаете... Свёрточный слой утюжит все признаки, которые ему предоставили, без отбора, да ещё не по одному разу в пределах изучения одного примера. Это неизбежно приводит к переобучению, если вы выдаиваете из обучающего датасета весь сок.
Вы можете сунуть в модель Dropout-слой, который обнулит случайно некоторые признаки - это один из простых подходов, чтобы защититься от переобучения. Но этот слой только повышает сам по себе вычислительную сложность, ну короче костыль тот ещё.
Короче, я теперь пытаюсь придумать новый вариант разреженной архитектуры (sparse architecture) - это такая штука, которая работает не со всеми признаками, а только с разреженными. Мне кажется Topkpooling вполне вариант. Берём несколько пикселей в криволинейной линии на изображении и прогоняем через Topkpooling. Позиции две -

- но они выстроены в линию, друг за другом. Какой алгоритм будет делать отбор координат - это пока вопрос...