DexiNed
O DexiNed (Dense Extreme Inception Network) é uma rede convolucional que prediz um mapa denso de probabilidade de bordas a partir de uma imagem RGB. O LibreYOLO envolve a arquitetura dele apenas para detecção de bordas; nenhum checkpoint acompanha a biblioteca.
- Tarefas
- edge
- Tamanhos
- b at 352 px
- Instalação
pip install libreyolo- Nível de suporte
- Somente inferência, desde a v. Somente predição, validação e exportação. Os recursos de treinamento não se aplicam.
- Origem
- DexiNed por Xavier Soria, MIT. Artigo, código-fonte
- Licenças
- Código MIT, pesos MIT. Uso comercial
Instalação
O DexiNed não precisa de nenhum extra opcional. Tudo o que ele importa está na instalação base.
pip install libreyoloPredição
O LibreYOLO não inclui nenhum checkpoint do DexiNed. Os pesos lançados
oficialmente são treinados no BIPED, cujos termos publicados de dataset
restringem o uso a fins não comerciais, então o LibreYOLO não os espelha.
Converta um checkpoint que você tenha licença para usar com
weights/convert_dexined_weights.py, que confere as chaves dos tensores
contra a arquitetura de runtime antes de escrever um arquivo que o LibreYOLO
consegue carregar diretamente:
python weights/convert_dexined_weights.py upstream.pth weights/LibreDexiNedb-edge.pt --verifyfrom 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 em [0, 1]print(edges.binary(0.5).sum()) # contagem de pixels de borda após o limiarlibreyolo predict model=weights/LibreDexiNedb-edge.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Trueresult.edges guarda o resultado: um array float32 (H, W) em [0, 1], com
.binary(threshold) retornando uma máscara booleana de bordas. Não há
bounding boxes, então conf, iou e max_det não têm efeito. Veja
predição para fontes, streaming e tratamento dos resultados.
Variantes
O DexiNed vem em um único tamanho no LibreYOLO. O harness de benchmark do LibreYOLO não mediu essa família, então não há números publicados para comparação.
Validação
val() reporta as F-measures ODS e OIS no estilo BSDS contra um dataset
pareado de bordas: imagens ao lado de mapas de bordas de mesmo nome-base, com
uma máscara de validade opcional para que pixels de padding nunca contem.
imgsz precisa ser divisível pelo stride de downsample da rede, e o LibreYOLO
levanta um erro claro se não for.
from libreyolo import LibreYOLO model = LibreYOLO("weights/LibreDexiNedb-edge.pt")metrics = model.val(data="my-dataset.yaml", imgsz=352) print(metrics["metrics/ODS"]) # F-measure na escala ótima do datasetprint(metrics["metrics/OIS"]) # F-measure na escala ótima da imagemlibreyolo val model=weights/LibreDexiNedb-edge.pt data=my-dataset.yaml imgsz=352Exportação
| Tarefa | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| edge | edge to ONNX: compatível | edge to TorchScript: compatível | edge to ExecuTorch: compatível | edge to TensorRT: compatível | edge to OpenVINO: compatível | edge to Paddle: incompatível | edge to MNN: incompatível | edge to RKNN: incompatível | edge to ncnn: incompatível | edge to TFLite: compatível | edge to CoreML: incompatível | edge to Core AI: incompatível |
A exportação de bordas usa um contrato de runtime de resolução fixa e batch 1:
dynamic e um batch diferente de 1 são rejeitados, e o grafo exportado gera
um único mapa de probabilidade fundido. Um artefato exportado é carregado de
volta pelo LibreYOLO() a partir do sufixo do arquivo, então um arquivo
.onnx se comporta como um checkpoint e retorna os mesmos Results.
from libreyolo import LibreYOLO model = LibreYOLO("weights/LibreDexiNedb-edge.pt")model.export(format="onnx", imgsz=352)model.export(format="tensorrt", imgsz=352, half=True)libreyolo export model=weights/LibreDexiNedb-edge.pt format=onnx imgsz=352libreyolo export model=weights/LibreDexiNedb-edge.pt format=tensorrt imgsz=352 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("weights/LibreDexiNedb-edge.onnx")result = model(SAMPLE_IMAGE) print(result.edges.array.shape)Licenciamento
Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.
Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.
- Trabalho original
- DexiNed, Xavier Soria
- Licença original
- MIT
- Código-fonte original
- github.com/xavysp/DexiNed
- Código do LibreYOLO
- MIT
- Pesos
- MIT, distribuído pelos autores. O LibreYOLO não hospeda nem espelha esses pesos.
- Interpretação
- 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.
O LibreYOLO não publica nenhum checkpoint do DexiNed. Nada é espelhado na
organização LibreYOLO; em vez disso, converta um checkpoint para o qual você
tenha licença com weights/convert_dexined_weights.py.
Citação
@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}
}Copiado do bloco de citação dos autores em github.com/xavysp/DexiNed#citation.