DexiNed

DexiNed (Dense Extreme Inception Network) — свёрточная сеть, которая по одному RGB-изображению предсказывает плотную карту вероятности границ. LibreYOLO использует её архитектуру только для выделения границ; чекпойнт с библиотекой не поставляется.

Задачи
edge
Размеры
b at 352 px
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
DexiNed от Xavier Soria, MIT. Статья, исходный код
Лицензии
Код: MIT, веса: MIT. Коммерческое использование

Установка

DexiNed не требует установки дополнительных extra-пакетов. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Предсказание

LibreYOLO не поставляет чекпойнт DexiNed. Официально выпущенные веса обучены на BIPED, а опубликованные условия использования этого датасета ограничивают его некоммерческими целями, поэтому LibreYOLO не размещает у себя их копию. Конвертируйте чекпойнт, на который у вас есть лицензия, скриптом weights/convert_dexined_weights.py: он сверяет ключи тензоров с архитектурой среды выполнения и только после этого записывает файл, который LibreYOLO загружает напрямую:

bash
python weights/convert_dexined_weights.py upstream.pth weights/LibreDexiNedb-edge.pt --verify

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("weights/LibreDexiNedb-edge.pt")result = model(SAMPLE_IMAGE, save=True) edges = result.edgesprint(edges.array.shape)        # (H, W) float32 в [0, 1]print(edges.binary(0.5).sum())  # число пикселей границ после порога
CLI
libreyolo predict model=weights/LibreDexiNedb-edge.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

В result.edges лежит результат — массив (H, W) типа float32 со значениями в [0, 1], а .binary(threshold) возвращает булеву маску границ. Рамок здесь нет, поэтому conf, iou и max_det ни на что не влияют. Об источниках, стриминге и обработке результатов — в разделе предсказание.

Варианты

В LibreYOLO у DexiNed один размер. Бенчмарк-стенд LibreYOLO это семейство не измерял, поэтому опубликованных цифр для сравнения нет.

Валидация

val() считает F-меры ODS и OIS в стиле BSDS по парному датасету границ: изображения и лежащие рядом одноимённые карты границ, плюс необязательная маска валидности, чтобы пиксели дополнения никогда не учитывались. imgsz должен делиться на суммарный шаг понижения разрешения сети, и LibreYOLO выдаёт понятную ошибку, если это не так.

Python
from libreyolo import LibreYOLO model = LibreYOLO("weights/LibreDexiNedb-edge.pt")metrics = model.val(data="my-dataset.yaml", imgsz=352) print(metrics["metrics/ODS"])   # F-мера при оптимальном пороге для датасетаprint(metrics["metrics/OIS"])   # F-мера при оптимальном пороге для изображения
CLI
libreyolo val model=weights/LibreDexiNedb-edge.pt data=my-dataset.yaml imgsz=352

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
edgeedge to ONNX: поддерживаетсяedge to TorchScript: поддерживаетсяedge to ExecuTorch: поддерживаетсяedge to TensorRT: поддерживаетсяedge to OpenVINO: поддерживаетсяedge to Paddle: не поддерживаетсяedge to MNN: не поддерживаетсяedge to RKNN: не поддерживаетсяedge to ncnn: не поддерживаетсяedge to TFLite: поддерживаетсяedge to CoreML: не поддерживаетсяedge to Core AI: не поддерживается

Экспорт границ работает по контракту среды выполнения с фиксированным разрешением и batch=1: dynamic и batch, отличный от 1, отклоняются, а экспортированный граф выдаёт одну объединённую карту вероятности. Экспортированный артефакт загружается обратно через LibreYOLO() по суффиксу файла, поэтому файл .onnx ведёт себя как чекпойнт и возвращает тот же Results.

Python
from libreyolo import LibreYOLO model = LibreYOLO("weights/LibreDexiNedb-edge.pt")model.export(format="onnx", imgsz=352)model.export(format="tensorrt", imgsz=352, half=True)
CLI
libreyolo export model=weights/LibreDexiNedb-edge.pt format=onnx imgsz=352libreyolo export model=weights/LibreDexiNedb-edge.pt format=tensorrt imgsz=352 half=True
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("weights/LibreDexiNedb-edge.onnx")result = model(SAMPLE_IMAGE) print(result.edges.array.shape)

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
DexiNed, Xavier Soria
Лицензия исходного проекта
MIT
Исходный код проекта
github.com/xavysp/DexiNed
Код LibreYOLO
MIT
Веса
MIT, распространяются авторами. LibreYOLO не размещает и не зеркалирует их.
Толкование
MIT is a permissive license, so the DexiNed architecture LibreYOLO ports can be used in commercial and closed-source products, with the license text and copyright notice kept alongside any copy you redistribute. LibreYOLO ships no checkpoint for this family: the officially released weights are trained on BIPED, whose published dataset terms restrict use to non-commercial purposes, and mirroring them would carry that restriction into a nominally MIT-licensed download. Convert a checkpoint you hold a license for with `weights/convert_dexined_weights.py`; the MIT code license does not change the terms attached to whatever checkpoint you convert.

LibreYOLO не публикует чекпойнт DexiNed. В организации LibreYOLO не размещено ни одной копии; вместо этого конвертируйте скриптом weights/convert_dexined_weights.py чекпойнт, на который у вас есть лицензия.

Цитирование

@INPROCEEDINGS {xsoria2020dexined,
author = {X. Soria and E. Riba and A. Sappa},
booktitle = {2020 IEEE Winter Conference on Applications of Computer Vision (WACV)},
title = {Dense Extreme Inception Network: Towards a Robust CNN Model for Edge Detection},
year = {2020},
volume = {},
issn = {},
pages = {1912-1921},
keywords = {image edge detection;convolution;training;feeds;machine learning;task analysis;kernel},
doi = {10.1109/WACV45572.2020.9093290},
url = {https://doi.ieeecomputersociety.org/10.1109/WACV45572.2020.9093290},
publisher = {IEEE Computer Society},
address = {Los Alamitos, CA, USA},
month = {mar}
}

@article{soria2023dexined_ext,
title = {Dense extreme inception network for edge detection},
journal = {Pattern Recognition},
volume = {139},
pages = {109461},
year = {2023},
issn = {0031-3203},
doi = {https://doi.org/10.1016/j.patcog.2023.109461},
url = {https://www.sciencedirect.com/science/article/pii/S0031320323001619},
author = {Xavier Soria and Angel Sappa and Patricio Humanante and Arash Akbarinia},
keywords = {Edge detection, Deep learning, CNN, Contour detection, Boundary detection, Segmentation}
}

Скопировано из блока цитирования авторов на странице github.com/xavysp/DexiNed#citation.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.