我正在使用以下python代码'ImageAI'将DenseNet用于我的研究。
ImageAI github:https://github.com/OlafenwaMoses/ImageAI
ImageAI示例:https://towardsdatascience.com/train-image-recognition-ai-with-5-lines-of-code-8ed0bdd8d9ba
我目前正在使用CNN方法(DenseNet)进行与符号识别(2D建筑图纸符号)有关的研究。 VAV框符号的一个示例是:https://ibb.co/cyhwRvf
我正在尝试对39个类别(在这种情况下为对象的数量,即符号的数量)进行分类,并为每个类别提供2,000张图像作为训练数据(2,000 x 39 = 78,000)。我每个测试数据都有1,000张图像(1,000 x 39 = 39,000)。数据集的总大小为1.82 GB(我认为这是一个相对较小的大小,但是如果我写错了,请纠正我的意思。)
但是问题是训练时间要花很多时间。
我已经尝试过使用GPU(Nvidia Geforce RTX 2080 Ti),并且将历元(实验次数)设置为200时需要3天的训练时间。
我想知道是否有减少训练时间的方法。有没有可以更改的参数或其他选项?
还是考虑到我使用的数据集和GPU的大小,这被认为是正常的消耗时间?
用于培训的五行代码如下:
from imageai.Prediction.Custom import ModelTraining
model_trainer = ModelTraining()
model_trainer.setModelTypeAsDenseNet()
model_trainer.setDataDirectory("mechsymbol")
model_trainer.trainModel(num_objects=39, num_experiments=200, enhance_data=True, batch_size=32, show_network_summary=True)
答案 0 :(得分:0)
我对ImageAI / Tensorflow并不陌生,但仍在学习中。
关于使用参数更快地学习,我认为 enhance_data 可以通过将其设置为False来使您更快地学习。 如果您没有大量要训练的图像(小于1000),则应将此参数设置为True。此参数将从现有样本中获取更多样本。
enhance_data = False
还值得一提的是,如果由于模型过拟合,例如在50个时期之后没有得到任何更好的结果,则不必全部进行200代培训。
听说过使用FP16而不是FP32进行“混合精度转换”吗?
我自己没有尝试过,因为它没有张量核心,因此在Nvidia GTX 1080 Ti上将是一个微不足道的区别。但您可以在此处了解更多信息 https://medium.com/tensorflow/automatic-mixed-precision-in-tensorflow-for-faster-ai-training-on-nvidia-gpus-6033234b2540
供参考:
当我对62个类(26GB)的图像数据集进行ResNet训练时,其中包含1000到2000幅图像用于训练,而200幅图像用于验证,每个时期大约需要10分钟。
200代培训大约需要33个小时。
这是我的imageAi python代码行
model_trainer = ModelTraining()
model_trainer.setModelTypeAsResNet()
model_trainer.setDataDirectory('.')
model_trainer.trainModel(num_objects=classes_in_train, num_experiments=100,
enhance_data=False, batch_size=32)
Found 81086 images belonging to 62 classes.
Found 13503 images belonging to 62 classes.
Epoch 38/100
231/2533 [=>............................] - ETA: 10:00 - loss: 2.9065e-04 - acc: 0.9999
希望它会为您提供有用的信息。