用于神经网络迁移学习的 python 库。
项目描述
关于
我们提供了一组基于迁移学习的模型训练和评估功能。使用 ImageNet 预训练的权重。
支持Efficient Net系列机型。模型大小和准确性之间总是需要权衡取舍。我们的指导方针如下:
对于 tfjs 应用,使用 EfficientNetB0 或 EfficientNetB1;对于 tf-lite 应用,使用 EfficientNetB2 ~ B4;对于桌面应用程序,请使用 EfficientNetB5 及更高版本。
下表来自 keras 网站:
模型 | 大小 (MB) | 前一精度 | 前 5 名的准确性 | 参数 | 深度 | 每个推理步骤 (CPU) 的时间 (ms) | 每个推理步骤的时间 (ms) (GPU) |
---|---|---|---|---|---|---|---|
异常 | 88 | 79.0% | 94.5% | 22.9M | 81 | 109.4 | 8.1 |
VGG16 | 528 | 71.3% | 90.1% | 138.4M | 16 | 69.5 | 4.2 |
VGG19 | 549 | 71.3% | 90.0% | 143.7M | 19 | 84.8 | 4.4 |
ResNet50 | 98 | 74.9% | 92.1% | 25.6M | 107 | 58.2 | 4.6 |
ResNet50V2 | 98 | 76.0% | 93.0% | 25.6M | 103 | 45.6 | 4.4 |
资源网101 | 171 | 76.4% | 92.8% | 44.7M | 209 | 89.6 | 5.2 |
ResNet101V2 | 171 | 77.2% | 93.8% | 44.7M | 205 | 72.7 | 5.4 |
ResNet152 | 232 | 76.6% | 93.1% | 60.4M | 311 | 127.4 | 6.5 |
ResNet152V2 | 232 | 78.0% | 94.2% | 60.4M | 307 | 107.5 | 6.6 |
盗梦空间V3 | 92 | 77.9% | 93.7% | 2390万 | 189 | 42.2 | 6.9 |
InceptionResNetV2 | 215 | 80.3% | 95.3% | 55.9M | 449 | 130.2 | 10.0 |
移动网络 | 16 | 70.4% | 89.5% | 4.3M | 55 | 22.6 | 3.4 |
MobileNetV2 | 14 | 71.3% | 90.1% | 3.5M | 105 | 25.9 | 3.8 |
密集网121 | 33 | 75.0% | 92.3% | 8.1M | 242 | 77.1 | 5.4 |
密集网169 | 57 | 76.2% | 93.2% | 14.3M | 338 | 96.4 | 6.3 |
密集网201 | 80 | 77.3% | 93.6% | 20.2M | 402 | 127.2 | 6.7 |
NASNetMobile | 23 | 74.4% | 91.9% | 5.3M | 389 | 27.0 | 6.7 |
NASNetLarge | 343 | 82.5% | 96.0% | 88.9M | 533 | 344.5 | 20.0 |
高效网B0 | 29 | 77.1% | 93.3% | 5.3M | 132 | 46.0 | 4.9 |
高效网络B1 | 31 | 79.1% | 94.4% | 7.9M | 186 | 60.2 | 5.6 |
高效网络B2 | 36 | 80.1% | 94.9% | 9.2M | 186 | 80.8 | 6.5 |
高效网络B3 | 48 | 81.6% | 95.7% | 12.3M | 210 | 140.0 | 8.8 |
高效网络B4 | 75 | 82.9% | 96.4% | 19.5M | 258 | 308.3 | 15.1 |
高效网络B5 | 118 | 83.6% | 96.7% | 30.6M | 312 | 579.2 | 25.3 |
高效网络B6 | 166 | 84.0% | 96.8% | 43.3M | 360 | 958.1 | 40.4 |
高效网络B7 | 256 | 84.3% | 97.0% | 66.7M | 438 | 1578.9 | 61.6 |
高效网络V2B0 | 29 | 78.7% | 94.3% | 7.2M | - | - | - |
高效网络V2B1 | 34 | 79.8% | 95.0% | 8.2M | - | - | - |
高效网络V2B2 | 42 | 80.5% | 95.1% | 10.2M | - | - | - |
高效网络V2B3 | 59 | 82.0% | 95.8% | 14.5M | - | - | - |
高效网络V2S | 88 | 83.9% | 96.7% | 21.6M | - | - | - |
高效网络V2M | 220 | 85.3% | 97.4% | 54.4M | - | - | - |
高效网络V2L | 479 | 85.7% | 97.5% | 119.0M | - | - | - |
安装
pip install tensorflow-gpu >= 2
pip install tlearner
如何使用
-
初始化
from tlearner.efficientnet import transfer_learner learner = transfer_learner("my_model", W = 224) # my_model.h5df 将是模型名称
-
加载数据
learner.load_dataset('my_data_folder', PKL_PATH = "my_dataset.pkl") # my_data_folder 的每个子文件夹中的图像被视为一个类。如果指定了PKL_PATH,则会生成一个包含X_train、y_train、X_val、y_val等的pkl。
print(learner.class_names) # 打印类名 -
训练一个新模型
hist = learner.train_custom_model("EfficientNetB1", batch = 8, epochs = [10,0], optimizer = "adam") # 可以使用 EfficientNetB0-B7。
plot_history(hist) # 绘制训练曲线 -
评估
learner.evaluate(N = 30) # 预测 X_val 中的前 N 个样本
-
预测
learner.predict_file('my_image.jpg')
-
转换 [可选]
learner.convert_to_tflite(v1 = True) # 转换为本地 tflite 模型
-
加载现有模型
learner.load_best_model() # 如果你有一个现有的本地模型
learner.get_best_model().summary() # 打印模型架构
learner.plot_best_model() # 将模型架构保存到本地图像文件
Jupyter 笔记本
在 /notebooks 下,我们提供了两个示例。一是花卉图像分类;另一种是眼底图像分类。
部署
训练完成后会得到一个keras h5模型文件。您可以进一步将其转换为 tflite 格式或 tfjs 格式(尚不支持高效网络)。
然后,您可以在移动设备或基于浏览器的应用程序上进行部署。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。