tensornets
tensornets 是一个基于 TensorFlow 构建的高层神经网络定义库,旨在让开发者轻松调用带有预训练权重的经典模型。它主要解决了在现有机器学习工作流中集成新模型时面临的代码冗余、版本兼容困难以及中间层访问复杂等痛点。
这款工具非常适合需要在 TensorFlow 环境中快速验证想法的 AI 研究人员和工程师。与传统的类封装方式不同,tensornets 采用简洁的函数式接口,直接接收并返回张量(Tensor),能够无缝嵌入任何现有的 TensorFlow 流程。其核心亮点在于极高的代码可读性与可维护性:例如,它将原本需要两千多行代码实现的 Inception 系列模型精简至约五百行。此外,tensornets 提供了便捷的 API,让用户不仅能一键加载预训练权重进行推理,还能轻松提取任意中间层的特征输出,或保存与恢复模型参数。无论是复现论文结果还是部署生产环境,tensornets 都能提供轻量、透明且高效的解决方案。
使用场景
某计算机视觉团队正在构建一个工业缺陷检测系统,需要快速集成 ResNet50 等预训练模型作为特征提取器,以便在少量样本上进行微调。
没有 tensornets 时
- 代码冗余严重:复现官方 Inception 或 ResNet 架构需编写上千行嵌套代码,结构复杂且难以阅读维护。
- 权重加载繁琐:手动匹配预训练权重与模型层名称极易出错,常因版本不兼容导致加载失败。
- 中间层获取困难:若想提取特定卷积层的特征图,必须修改原模型类定义或重新构建计算图,流程断裂。
- 部署灵活性差:模型被封装在自定义类中,难以无缝插入团队现有的 TensorFlow 工作流。
使用 tensornets 后
- 架构即函数:ResNet50 等模型仅需一行函数调用即可生成,代码量缩减至几百行,逻辑清晰易读。
- 一键加载权重:调用
model.pretrained()即可自动对齐并加载预训练参数,完美复现原始论文结果。 - 灵活提取特征:通过
model.middles()和model.outputs()可直接获取任意中间层张量,无需修改模型结构。 - 原生无缝集成:模型输入输出均为标准
tf.Tensor,能直接嵌入现有数据处理流水线,无额外适配成本。
tensornets 通过将复杂的预训练模型转化为简洁的函数式接口,极大降低了高性能视觉模型的研发门槛与集成成本。
运行环境要求
- 未说明
- 非必需
- 若需性能测试或加速,文档提及测试环境为 NVIDIA Tesla P100 (16GB 显存),搭配 CUDA 8.0 和 cuDNN 6.0
- FasterRCNN 模型需要额外编译 roi_pooling 组件
未说明

快速开始
TensorNets 
在 TensorFlow 中提供带有预训练权重的高级网络定义(经测试与 2.1.0 >= TF >= 1.4.0 兼容)。
指导原则
- 适用性。 许多人已经有自己的机器学习工作流,并希望在其工作流中加入新模型。TensorNets 可以轻松集成,因为它被设计为简单的函数式接口,而不使用自定义类。
- 可管理性。 模型使用
tf.contrib.layers编写,其轻量级特性类似于 PyTorch 和 Keras,便于访问每个权重和输出端点。此外,部署和扩展预处理及预训练权重的集合也非常容易。 - 可读性。 借助最新的 TensorFlow API,可以实现更多的代码模块化和更少的缩进。例如,所有 Inception 变体在 TensorNets 中仅用约 500 行代码实现,而在 官方 TensorFlow 模型 中则需要 2000 多行。
- 可复现性。 您始终可以通过包括特征提取在内的简单 API 复现原始结果。此外,您无需担心 TensorFlow 的版本问题,因为与不同版本 TensorFlow 的兼容性已通过 Travis 进行了验证。
安装
您可以从 PyPI (pip install tensornets) 或直接从 GitHub (pip install git+https://github.com/taehoonlee/tensornets.git) 安装 TensorNets。
快速示例
每个网络(参见完整列表)都不是自定义类,而是一个以 tf.Tensor 作为输入和输出的函数。以下是 ResNet50 的示例:
import tensorflow as tf
# import tensorflow.compat.v1 as tf # 适用于 TF 2
import tensornets as nets
# tf.disable_v2_behavior() # 适用于 TF 2
inputs = tf.placeholder(tf.float32, [None, 224, 224, 3])
model = nets.ResNet50(inputs)
assert isinstance(model, tf.Tensor)
您可以使用 utils.load_img 加载示例图像,该函数返回一个 NHWC 格式的 np.ndarray:
img = nets.utils.load_img('cat.png', target_size=256, crop_size=224)
assert img.shape == (1, 224, 224, 3)
一旦创建了您的网络,就可以使用常规的 TensorFlow API 运行 😊,因为 TensorNets 中的所有网络始终返回 tf.Tensor。使用预训练权重和预处理非常简单,只需调用 pretrained() 和 preprocess(),即可复现原始结果:
with tf.Session() as sess:
img = model.preprocess(img) # 等同于 img = nets.preprocess(model, img)
sess.run(model.pretrained()) # 等同于 nets.pretrained(model)
preds = sess.run(model, {inputs: img})
您可以查看最可能的类别:
print(nets.utils.decode_predictions(preds, top=2)[0])
[(u'n02124075', u'Egyptian_cat', 0.28067636), (u'n02127052', u'lynx', 0.16826575)]
您还可以轻松获取中间层的值,使用 middles() 和 outputs():
with tf.Session() as sess:
img = model.preprocess(img)
sess.run(model.pretrained())
middles = sess.run(model.middles(), {inputs: img})
outputs = sess.run(model.outputs(), {inputs: img})
model.print_middles()
assert middles[0].shape == (1, 56, 56, 256)
assert middles[-1].shape == (1, 7, 7, 2048)
model.print_outputs()
assert sum(sum((outputs[-1] - preds) ** 2)) < 1e-8
借助 load() 和 save(),您的权重值可以恢复:
with tf.Session() as sess:
model.init()
# ... 您的训练 ...
model.save('test.npz')
with tf.Session() as sess:
model.load('test.npz')
# ... 您的部署 ...
TensorNets 使我们能够更快地部署知名架构并对其进行基准测试 ⚡️。有关更多信息,请查看 实用工具、示例 和 架构 列表。
目标检测示例
每个目标检测模型都可以与 TensorNets 中的任何网络结合使用(参见 性能),并接受两个参数:占位符和充当茎层的函数。以下是用于 PASCAL VOC 的 YOLOv2 示例:
import tensorflow as tf
import tensornets as nets
inputs = tf.placeholder(tf.float32, [None, 416, 416, 3])
model = nets.YOLOv2(inputs, nets.Darknet19)
img = nets.utils.load_img('cat.png')
with tf.Session() as sess:
sess.run(model.pretrained())
preds = sess.run(model, {inputs: model.preprocess(img)})
boxes = model.get_boxes(preds, img.shape[1:3])
与其他模型一样,检测模型也会返回 tf.Tensor 作为输出。您可以使用 model.get_boxes(model_output, original_img_shape) 查看边界框预测 (x1, y1, x2, y2, score),并可视化结果:
from tensornets.datasets import voc
print("%s: %s" % (voc.classnames[7], boxes[7][0])) # 7 是猫
import numpy as np
import matplotlib.pyplot as plt
box = boxes[7][0]
plt.imshow(img[0].astype(np.uint8))
plt.gca().add_patch(plt.Rectangle(
(box[0], box[1]), box[2] - box[0], box[3] - box[1],
fill=False, edgecolor='r', linewidth=2))
plt.show()
更多检测示例,例如 VOC2007 上的 FasterRCNN,可在这里找到 😎。请注意:
检测模型的 API 略有不同:
YOLOv3:sess.run(model.preds, {inputs: img}),YOLOv2:sess.run(model, {inputs: img}),FasterRCNN:sess.run(model, {inputs: img, model.scales: scale}),
FasterRCNN需要roi_pooling:git clone https://github.com/deepsense-io/roi-pooling && cd roi-pooling && vi roi_pooling/Makefile并根据此处进行编辑,python setup.py install。
工具函数
除了 pretrained() 和 preprocess() 之外,输出的 tf.Tensor 还提供了以下有用的方法:
logits:返回tf.Tensor形式的 logits(即 softmax 之前的值);middles()(=get_middles()):返回所有代表性端点的tf.Tensor列表;outputs()(=get_outputs()):返回所有端点的tf.Tensor列表;weights()(=get_weights()):返回所有权重矩阵的tf.Tensor列表;summary()(=print_summary()):打印层数、权重矩阵数和参数量;print_middles():打印所有代表性端点;print_outputs():打印所有端点;print_weights():打印所有权重矩阵。
打印方法的示例输出如下:
>>> model.print_middles()
Scope: resnet50
conv2/block1/out:0 (?, 56, 56, 256)
conv2/block2/out:0 (?, 56, 56, 256)
conv2/block3/out:0 (?, 56, 56, 256)
conv3/block1/out:0 (?, 28, 28, 512)
conv3/block2/out:0 (?, 28, 28, 512)
conv3/block3/out:0 (?, 28, 28, 512)
conv3/block4/out:0 (?, 28, 28, 512)
conv4/block1/out:0 (?, 14, 14, 1024)
...
>>> model.print_outputs()
Scope: resnet50
conv1/pad:0 (?, 230, 230, 3)
conv1/conv/BiasAdd:0 (?, 112, 112, 64)
conv1/bn/batchnorm/add_1:0 (?, 112, 112, 64)
conv1/relu:0 (?, 112, 112, 64)
pool1/pad:0 (?, 114, 114, 64)
pool1/MaxPool:0 (?, 56, 56, 64)
conv2/block1/0/conv/BiasAdd:0 (?, 56, 56, 256)
conv2/block1/0/bn/batchnorm/add_1:0 (?, 56, 56, 256)
conv2/block1/1/conv/BiasAdd:0 (?, 56, 56, 64)
conv2/block1/1/bn/batchnorm/add_1:0 (?, 56, 56, 64)
conv2/block1/1/relu:0 (?, 56, 56, 64)
...
>>> model.print_weights()
Scope: resnet50
conv1/conv/weights:0 (7, 7, 3, 64)
conv1/conv/biases:0 (64,)
conv1/bn/beta:0 (64,)
conv1/bn/gamma:0 (64,)
conv1/bn/moving_mean:0 (64,)
conv1/bn/moving_variance:0 (64,)
conv2/block1/0/conv/weights:0 (1, 1, 64, 256)
conv2/block1/0/conv/biases:0 (256,)
conv2/block1/0/bn/beta:0 (256,)
conv2/block1/0/bn/gamma:0 (256,)
...
>>> model.summary()
Scope: resnet50
Total layers: 54
Total weights: 320
Total parameters: 25,636,712
示例
- 不同网络的比较:
inputs = tf.placeholder(tf.float32, [None, 224, 224, 3])
models = [
nets.MobileNet75(inputs),
nets.MobileNet100(inputs),
nets.SqueezeNet(inputs),
]
img = utils.load_img('cat.png', target_size=256, crop_size=224)
imgs = nets.preprocess(models, img)
with tf.Session() as sess:
nets.pretrained(models)
for (model, img) in zip(models, imgs):
preds = sess.run(model, {inputs: img})
print(utils.decode_predictions(preds, top=2)[0])
- 迁移学习:
inputs = tf.placeholder(tf.float32, [None, 224, 224, 3])
outputs = tf.placeholder(tf.float32, [None, 50])
model = nets.DenseNet169(inputs, is_training=True, classes=50)
loss = tf.losses.softmax_cross_entropy(outputs, model.logits)
train = tf.train.AdamOptimizer(learning_rate=1e-5).minimize(loss)
with tf.Session() as sess:
nets.pretrained(model)
for (x, y) in your_NumPy_data: # the NHWC and one-hot format
sess.run(train, {inputs: x, outputs: y})
- 使用多 GPU:
inputs = tf.placeholder(tf.float32, [None, 224, 224, 3])
models = []
with tf.device('gpu:0'):
models.append(nets.ResNeXt50(inputs))
with tf.device('gpu:1'):
models.append(nets.DenseNet201(inputs))
from tensornets.preprocess import fb_preprocess
img = utils.load_img('cat.png', target_size=256, crop_size=224)
img = fb_preprocess(img)
with tf.Session() as sess:
nets.pretrained(models)
preds = sess.run(models, {inputs: img})
for pred in preds:
print(utils.decode_predictions(pred, top=2)[0])
性能
图像分类
- Top-k 准确率是在 ImageNet 验证集 上使用 TensorNets 测得的,可能与原始结果略有不同。
- 输入:输入到模型中的图像尺寸
- Top-1:单中心裁剪,Top-1 准确率
- Top-5:单中心裁剪,Top-5 准确率
- MAC:使用 tf.profiler 对浮点运算次数进行四舍五入
- Size:对参数总数(包括全连接层)进行四舍五入
- Stem:对参数总数(不包括全连接层)进行四舍五入
- 计算时间是在 NVIDIA Tesla P100(3584 核,16 GB 全局内存)上,使用 cuDNN 6.0 和 CUDA 8.0 测得的。
- 速度:100 张图像推理所需的时间(毫秒)
- 摘要图由 此脚本 生成。
| 输入大小 | Top-1准确率 | Top-5准确率 | MAC数 | 参数量 | Stem参数量 | 推理速度 | 参考文献 | |
|---|---|---|---|---|---|---|---|---|
| ResNet50 | 224 | 74.874 | 92.018 | 51.0M | 25.6M | 23.6M | 195.4 | [论文] [tf-slim] [PyTorch-FB] [Caffe] [Keras] |
| ResNet101 | 224 | 76.420 | 92.786 | 88.9M | 44.7M | 42.7M | 311.7 | [论文] [tf-slim] [PyTorch-FB] [Caffe] |
| ResNet152 | 224 | 76.604 | 93.118 | 120.1M | 60.4M | 58.4M | 439.1 | [论文] [tf-slim] [PyTorch-FB] [Caffe] |
| ResNet50v2 | 299 | 75.960 | 93.034 | 51.0M | 25.6M | 23.6M | 209.7 | [论文] [tf-slim] [PyTorch-FB] |
| ResNet101v2 | 299 | 77.234 | 93.816 | 88.9M | 44.7M | 42.6M | 326.2 | [论文] [tf-slim] [PyTorch-FB] |
| ResNet152v2 | 299 | 78.032 | 94.162 | 120.1M | 60.4M | 58.3M | 455.2 | [论文] [tf-slim] [PyTorch-FB] |
| ResNet200v2 | 224 | 78.286 | 94.152 | 129.0M | 64.9M | 62.9M | 618.3 | [论文] [tf-slim] [PyTorch-FB] |
| ResNeXt50c32 | 224 | 77.740 | 93.810 | 49.9M | 25.1M | 23.0M | 267.4 | [论文] [PyTorch-FB] |
| ResNeXt101c32 | 224 | 78.730 | 94.294 | 88.1M | 44.3M | 42.3M | 427.9 | [论文] [PyTorch-FB] |
| ResNeXt101c64 | 224 | 79.494 | 94.592 | 0.0M | 83.7M | 81.6M | 877.8 | [论文] [PyTorch-FB] |
| WideResNet50 | 224 | 78.018 | 93.934 | 137.6M | 69.0M | 66.9M | 358.1 | [论文] [PyTorch] |
| Inception1 | 224 | 66.840 | 87.676 | 14.0M | 7.0M | 6.0M | 165.1 | [论文] [tf-slim] [Caffe-Zoo] |
| Inception2 | 224 | 74.680 | 92.156 | 22.3M | 11.2M | 10.2M | 134.3 | [论文] [tf-slim] |
| Inception3 | 299 | 77.946 | 93.758 | 47.6M | 23.9M | 21.8M | 314.6 | [论文] [tf-slim] [Keras] |
| Inception4 | 299 | 80.120 | 94.978 | 85.2M | 42.7M | 41.2M | 582.1 | [论文] [tf-slim] |
| InceptionResNet2 | 299 | 80.256 | 95.252 | 111.5M | 55.9M | 54.3M | 656.8 | [论文] [tf-slim] |
| NASNetAlarge | 331 | 82.498 | 96.004 | 186.2M | 93.5M | 89.5M | 2081 | [论文] [tf-slim] |
| NASNetAmobile | 224 | 74.366 | 91.854 | 15.3M | 7.7M | 6.7M | 165.8 | [论文] [tf-slim] |
| PNASNetlarge | 331 | 82.634 | 96.050 | 171.8M | 86.2M | 81.9M | 1978 | [论文] [tf-slim] |
| VGG16 | 224 | 71.268 | 90.050 | 276.7M | 138.4M | 14.7M | 348.4 | [论文] [Keras] |
| VGG19 | 224 | 71.256 | 89.988 | 287.3M | 143.7M | 20.0M | 399.8 | [论文] [Keras] |
| DenseNet121 | 224 | 74.972 | 92.258 | 15.8M | 8.1M | 7.0M | 202.9 | [论文] [PyTorch] |
| DenseNet169 | 224 | 76.176 | 93.176 | 28.0M | 14.3M | 12.6M | 219.1 | [论文] [PyTorch] |
| DenseNet201 | 224 | 77.320 | 93.620 | 39.6M | 20.2M | 18.3M | 272.0 | [论文] [PyTorch] |
| MobileNet25 | 224 | 51.582 | 75.792 | 0.9M | 0.5M | 0.2M | 34.46 | [论文] [tf-slim] |
| MobileNet50 | 224 | 64.292 | 85.624 | 2.6M | 1.3M | 0.8M | 52.46 | [论文] [tf-slim] |
| MobileNet75 | 224 | 68.412 | 88.242 | 5.1M | 2.6M | 1.8M | 70.11 | [论文] [tf-slim] |
| MobileNet100 | 224 | 70.424 | 89.504 | 8.4M | 4.3M | 3.2M | 83.41 | [论文] [tf-slim] |
| MobileNet35v2 | 224 | 60.086 | 82.432 | 3.3M | 1.7M | 0.4M | 57.04 | [论文] [tf-slim] |
| MobileNet50v2 | 224 | 65.194 | 86.062 | 3.9M | 2.0M | 0.7M | 64.35 | [论文] [tf-slim] |
| MobileNet75v2 | 224 | 69.532 | 89.176 | 5.2M | 2.7M | 1.4M | 88.68 | [论文] [tf-slim] |
| MobileNet100v2 | 224 | 71.336 | 90.142 | 6.9M | 3.5M | 2.3M | 93.82 | [论文] [tf-slim] |
| MobileNet130v2 | 224 | 74.680 | 92.122 | 10.7M | 5.4M | 3.8M | 130.4 | [论文] [tf-slim] |
| MobileNet140v2 | 224 | 75.230 | 92.422 | 12.1M | 6.2M | 4.4M | 132.9 | [论文] [tf-slim] |
| 75v3large | 224 | 73.754 | 91.618 | 7.9M | 4.0M | 2.7M | 79.73 | [论文] [tf-slim] |
| 100v3large | 224 | 75.790 | 92.840 | 27.3M | 5.5M | 4.2M | 94.71 | [论文] [tf-slim] |
| 100v3largemini | 224 | 72.706 | 90.930 | 7.8M | 3.9M | 2.7M | 70.57 | [论文] [tf-slim] |
| 75v3small | 224 | 66.138 | 86.534 | 4.1M | 2.1M | 1.0M | 37.78 | [论文] [tf-slim] |
| 100v3small | 224 | 68.318 | 87.942 | 5.1M | 2.6M | 1.5M | 42.00 | [论文] [tf-slim] |
| 100v3smallmini | 224 | 63.440 | 84.646 | 4.1M | 2.1M | 1.0M | 29.65 | [论文] [tf-slim] |
| EfficientNetB0 | 224 | 77.012 | 93.338 | 26.2M | 5.3M | 4.0M | 147.1 | [论文] [TF-TPU] |
| EfficientNetB1 | 240 | 79.040 | 94.284 | 15.4M | 7.9M | 6.6M | 217.3 | [论文] [TF-TPU] |
| EfficientNetB2 | 260 | 80.064 | 94.862 | 18.1M | 9.2M | 7.8M | 296.4 | [论文] [TF-TPU] |
| EfficientNetB3 | 300 | 81.384 | 95.586 | 24.2M | 12.3M | 10.8M | 482.7 | [论文] [TF-TPU] |
| EfficientNetB4 | 380 | 82.588 | 96.094 | 38.4M | 19.5M | 17.7M | 959.5 | [论文] [TF-TPU] |
| EfficientNetB5 | 456 | 83.496 | 96.590 | 60.4M | 30.6M | 28.5M | 1872 | [论文] [TF-TPU] |
| EfficientNetB6 | 528 | 83.772 | 96.762 | 85.5M | 43.3M | 41.0M | 3503 | [论文] [TF-TPU] |
| EfficientNetB7 | 600 | 84.088 | 96.740 | 131.9M | 66.7M | 64.1M | 6149 | [论文] [TF-TPU] |
| SqueezeNet | 224 | 54.434 | 78.040 | 2.5M | 1.2M | 0.7M | 71.43 | [论文] [Caffe] |

目标检测
- 目标检测模型可以与任何网络结合使用,但仅能对具有预训练权重的模型计算 mAP。请注意:
YOLOv3VOC是由 taehoonlee 使用 此配置文件 训练的,该配置文件已修改为max_batches=70000, steps=40000,60000。YOLOv2VOC等价于YOLOv2(inputs, Darknet19)。TinyYOLOv2VOC:TinyYOLOv2(inputs, TinyDarknet19)。FasterRCNN_ZF_VOC:FasterRCNN(inputs, ZF)。FasterRCNN_VGG16_VOC:FasterRCNN(inputs, VGG16, stem_out='conv5/3')。
- mAP 值是通过 TensorNets 获得的,可能与原始值略有不同。测试输入尺寸采用论文中报告的最佳数值:
YOLOv3、YOLOv2: 416x416FasterRCNN: min_shorter_side=600, max_longer_side=1000
- 计算时间是在 NVIDIA Tesla P100(3584 核,16 GB 全局内存)上测量的,使用 cuDNN 6.0 和 CUDA 8.0。
- 大小:四舍五入参数数量。
- 速度:仅针对单张 416x416 或 608x608 图像的网络推理耗时(毫秒)。
- FPS:1000 / 速度。
| PASCAL VOC2007 测试 | mAP | 大小 | 速度 | FPS | 参考文献 |
|---|---|---|---|---|---|
| YOLOv3VOC (416) | 0.7423 | 62M | 24.09 | 41.51 | [论文] [darknet] [darkflow] |
| YOLOv2VOC (416) | 0.7320 | 51M | 14.75 | 67.80 | [论文] [darknet] [darkflow] |
| TinyYOLOv2VOC (416) | 0.5303 | 16M | 6.534 | 153.0 | [论文] [darknet] [darkflow] |
| FasterRCNN_ZF_VOC | 0.4466 | 59M | 241.4 | 3.325 | [论文] [caffe] [roi-pooling] |
| FasterRCNN_VGG16_VOC | 0.6872 | 137M | 300.7 | 4.143 | [论文] [caffe] [roi-pooling] |
| MS COCO val2014 | mAP | 大小 | 速度 | FPS | 参考文献 |
|---|---|---|---|---|---|
| YOLOv3COCO (608) | 0.6016 | 62M | 60.66 | 16.49 | [论文] [darknet] [darkflow] |
| YOLOv3COCO (416) | 0.6028 | 62M | 40.23 | 24.85 | [论文] [darknet] [darkflow] |
| YOLOv2COCO (608) | 0.5189 | 51M | 45.88 | 21.80 | [论文] [darknet] [darkflow] |
| YOLOv2COCO (416) | 0.4922 | 51M | 21.66 | 46.17 | [论文] [darknet] [darkflow] |
新闻 📰
- MobileNetv3 的六种变体发布,2020年3月12日。
- EfficientNet 的八种变体发布,2020年1月28日。
- TensorNets 现已支持 TF 2,2020年1月23日。
- MS COCO 工具发布,2018年7月9日。
- PNASNetlarge 发布,2018年5月12日。
- MobileNetv2 的六种变体发布,2018年5月5日。
- YOLOv3 用于 COCO 和 VOC 的版本发布,2018年4月4日。
- YOLOv2 和 FasterRCNN 的通用目标检测模型发布,2018年3月26日。
未来工作 🔥
- 添加训练代码。
- 添加图像分类模型。
- PolyNet: 非常深的网络中结构多样性的探索,CVPR 2017,Top-5 4.25%。
- 挤压与激励网络,CVPR 2018,Top-5 3.79%。
- GPipe: 使用流水线并行高效训练巨型神经网络,arXiv 2018,Top-5 3.0%。
- 添加目标检测模型(MaskRCNN、SSD)。
- 添加图像分割模型(FCN、UNet)。
- 添加图像数据集(OpenImages)。
- 添加风格迁移示例,这些示例可以与 TensorNets 中的任何网络结合使用。
- 添加语音和语言模型,并配备代表性数据集(WaveNet、ByteNet)。
版本历史
0.4.62020/03/310.4.52020/03/130.4.32020/01/290.4.22020/01/230.4.12019/10/130.4.02019/03/080.3.62018/11/100.3.52018/09/010.3.42018/05/120.3.12018/03/270.3.02018/03/270.2.02018/02/16常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。