torchood 使用文档
2024-12-16技术python 我的开源作品 技术文档
前言
这个项目最早源于我对 OOD 一类方法在医学图像分类任务上的探索,下面是这个过程中诞生的一篇博客。

EDL(Evidential Deep Learning) 原理与代码实现
OOD 指这么一类任务 ...
支持的模型
| 支持的模型 | 来源 | 
|---|---|
| Robust Classification with Convolutional Prototype Learning (Prototype Networks) | CVPR 2018: Rbust classification with convolutional prototype learning | 
| Predictive Uncertainty Estimation via Prior Networks(Prior Networks) | NeurIPS 2018: Predictive Uncertainty Estimation via Prior Networks | 
| Evidential Deep Learning to Quantify Classification Uncertainty (EDL) | NeurIPS 2018: Evidential Deep Learning to Quantify Classification Uncertainty | 
| Posterior Network (PostNet) | NeurIPS 2020: Posterior Network: Uncertainty Estimation without OOD Samples via Density-Based Pseudo-Counts | 
| Evidential Neural Network (ENN) | NeurIPS 2018: Evidential Deep Learning to Quantify Classification Uncertainty | 
| Evidence Reconciled Neural Network(ERNN) | MICCAI 2023: Evidence Reconciled Neural Network for Out-of-Distribution Detection in Medical Images | 
| Redundancy Removing Evidential Neural Network(R2ENN) | - | 
使用方法
安装
pip install torchood
将分类器模型转换为能够输出不确定度的模型
import torchood
class UserDefineModel(nn.Module):
    ...
classifier = UserDefineModel(...)
classifier = torchood.EvidenceNeuralNetwork(classifier)
训练
for data, label in train_loader:
    # 将 data & label 转换到对应的 device 上面
    # ...
    _, evidence, _ = classifier(data)
    loss = classifier.criterion(evidence, label)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
推理
prob, uncertainty = classifier.predict(inputs)
INFO
uncertainty 可以作为系统的拒答流的响应阈值进行使用.
实践场景
下面罗列使用了这套方法的项目:

LSTM-Kirigaya/Lagrange.RagBot
基于 ENN 的客服机器人
