PyTorch 中用于计算机视觉的模块、操作和模型
项目描述
计算机视觉中近期深度学习技巧的实现,可轻松与您最喜欢的框架和模型动物园配对。
资料来源:伍基百科
快速浏览
该项目旨在实现高质量的实施、提高开发人员的灵活性以及与 PyTorch 生态系统的最大兼容性。例如,这里有一个简短的片段来展示如何使用 Holocron 模型:
from PIL import Image
from torchvision.transforms import Compose, ConvertImageDtype, Normalize, PILToTensor, Resize
from torchvision.transforms.functional import InterpolationMode
from holocron.models.classification import repvgg_a0
# Load your model
model = repvgg_a0(pretrained=True).eval()
# Read your image
img = Image.open(path_to_an_image).convert("RGB")
# Preprocessing
config = model.default_cfg
transform = Compose([
Resize(config['input_shape'][1:], interpolation=InterpolationMode.BILINEAR),
PILToTensor(),
ConvertImageDtype(torch.float32),
Normalize(config['mean'], config['std'])
])
input_tensor = transform(img).unsqueeze(0)
# Inference
with torch.inference_mode():
output = model(input_tensor)
print(config['classes'][output.squeeze(0).argmax().item()], output.squeeze(0).softmax(dim=0).max())
安装
先决条件
安装 Holocron 需要Python 3.6(或更高版本)和pip / conda 。
最新稳定版本
您可以使用pypi安装软件包的最后一个稳定版本,如下所示:
pip install pylocron
或使用conda:
conda install -c frgfm pylocron
开发者模式
或者,如果您希望使用尚未发布的项目的最新功能,您可以从源代码安装包(首先安装Git):
git clone https://github.com/frgfm/Holocron.git
pip install -e Holocron/.
论文参考
满足各种需求的 PyTorch 层
- 激活:HardMish、NLReLU、FReLU
- 损失:焦点损失、MultiLabelCrossEntropy、MixupLoss、ClassBalancedWrapper、ComplementCrossEntropy、MutualChannelLoss、DiceLoss、PolyLoss
- 卷积:NormConv2d、Add2d、SlimConv2d、PyConv2d、对合
- 正则化:DropBlock
- 池化:BlurPool2d、SPP、ZPool
- 注意:SAM、LambdaLayer、TripletAttention
视觉任务模型
- 图像分类:Res2Net(基于Ross Wightman的出色实现)、 Darknet-24、Darknet-19、Darknet-53、CSPDarknet-53、ResNet、ResNeXt、TridentNet、PyConvResNet、ReXNet、SKNet、RepVGG。
- 目标检测:YOLOv1、YOLOv2、YOLOv4
- 语义分割:U-Net、 UNet ++、UNet3+
视觉相关操作
尝试亚当以外的其他东西
更多好东西
文档
完整的软件包文档可在此处获取详细规格。
演示应用
该项目包括一个使用Gradio的最小演示应用程序
您可以查看现场演示,托管在 :hugs: HuggingFace Spaces :hugs: 在这里 :point_down:
参考脚本
提供了参考脚本,用于在著名的公共数据集上使用 holocron 训练您的模型。这些脚本目前支持以下视觉任务:
延迟基准
您渴望 SOTA 性能,但您不知道它在延迟方面是否符合您的需求?
在下表中,您将找到所有支持模型的延迟基准:
| 拱 | GPU平均值(标准) | CPU 平均值(标准) |
|---|---|---|
| repvgg_a0 * | 3.14 毫秒(0.87 毫秒) | 23.28 毫秒(1.21 毫秒) |
| repvgg_a1 * | 4.13 毫秒(1.00 毫秒) | 29.61 毫秒(0.46 毫秒) |
| repvgg_a2 * | 7.35 毫秒(1.11 毫秒) | 46.87 毫秒(1.27 毫秒) |
| repvgg_b0 * | 4.23 毫秒(1.04 毫秒) | 33.16 毫秒(0.58 毫秒) |
| repvgg_b1 * | 12.48 毫秒(0.96 毫秒) | 100.66 毫秒(1.46 毫秒) |
| repvgg_b2 * | 20.12 毫秒(0.31 毫秒) | 155.90 毫秒(1.59 毫秒) |
| repvgg_b3 * | 24.94 毫秒(1.70 毫秒) | 224.68 毫秒(14.27 毫秒) |
| rexnet1_0x | 6.01 毫秒(0.26 毫秒) | 13.66 毫秒(0.21 毫秒) |
| rexnet1_3x | 6.43 毫秒(0.10 毫秒) | 19.13 毫秒 (2.05 毫秒) |
| rexnet1_5x | 6.46 毫秒(0.28 毫秒) | 21.06 毫秒(0.24 毫秒) |
| rexnet2_0x | 6.75 毫秒(0.21 毫秒) | 31.77 毫秒(3.28 毫秒) |
| rexnet2_2x | 6.92 毫秒(0.51 毫秒) | 33.61 毫秒(0.60 毫秒) |
| sknet50 | 11.40 毫秒(0.38 毫秒) | 54.03 毫秒(3.35 毫秒) |
| sknet101 | 23.55 毫秒(1.11 毫秒) | 94.89 毫秒(5.61 毫秒) |
| sknet152 | 69.81 毫秒(0.60 毫秒) | 253.07 毫秒(3.33 毫秒) |
| 三叉戟网络50 | 16.62 毫秒(1.21 毫秒) | 142.85 毫秒(5.33 毫秒) |
| res2net50_26w_4s | 9.25 毫秒(0.22 毫秒) | 41.84 毫秒(0.80 毫秒) |
| resnet50d | 36.97 毫秒(3.58 毫秒) | 36.97 毫秒(3.58 毫秒) |
| pyconv_resnet50 | 20.03 毫秒(0.28 毫秒) | 178.85 毫秒(2.35 毫秒) |
| pyconvhg_resnet50 | 38.41 毫秒(0.33 毫秒) | 301.03 毫秒(12.39 毫秒) |
| 暗网24 | 3.94 毫秒(1.08 毫秒) | 29.39 毫秒(0.78 毫秒) |
| 暗网19 | 3.17 毫秒(0.59 毫秒) | 26.36 毫秒(2.80 毫秒) |
| 暗网53 | 7.12 毫秒(1.35 毫秒) | 53.20 毫秒(1.17 毫秒) |
| cspdarknet53 | 6.41 毫秒(0.21 毫秒) | 48.05 毫秒(3.68 毫秒) |
| cspdarknet53_mish | 6.88 毫秒(0.51 毫秒) | 67.78 毫秒(2.90 毫秒) |
RepVGG 模型报告的延迟是重新参数化的版本之一
该基准测试在笔记本电脑上对 (224, 224) 输入执行了 100 多次迭代,以更好地反映普通用户可以预期的性能。硬件设置包括用于 CPU 的Intel(R) Core(TM) i7-10750H,以及用于 GPU的具有 Max-Q 设计的 NVIDIA GeForce RTX 2070。
您可以在硬件上为任何模型运行此延迟基准测试,如下所示:
python scripts/eval_latency.py rexnet1_0x
可以使用检查所有脚本参数python scripts/eval_latency.py --help
码头集装箱
如果你想部署容器化环境,你可以使用提供的 Dockerfile 来构建一个 docker 镜像:
docker build . -t <YOUR_IMAGE_TAG>
最小的 API 模板
正在寻找样板文件以使用 REST API 从 Holocron 部署模型?感谢出色的FastAPI框架,您可以轻松地做到这一点。
在本地部署您的 API
在 docker 容器中运行您的 API,如下所示:
cd api/
make lock-api
make run-api
为了停止容器,使用make stop-api
你部署了什么
您的 API 现在在端口 8080 上运行,其文档http://localhost:8080/redoc和可请求的路由:
import requests
with open('/path/to/your/img.jpeg', 'rb') as f:
data = f.read()
response = requests.post("http://localhost:8080/classification", files={'file': data}).json()
引文
如果你想引用这个项目,请随意使用这个BibTeX参考:
@software{Fernandez_Holocron_2020,
author = {Fernandez, François-Guillaume},
month = {5},
title = {{Holocron}},
url = {https://github.com/frgfm/Holocron},
year = {2020}
}
贡献
非常感谢任何形式的贡献!
你可以找到一个简短的指南CONTRIBUTING来帮助发展这个项目!
执照
根据 Apache 2.0 许可证分发。有关LICENSE更多信息,请参阅。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。