美文网首页
ImageAI:自定义预测模型训练

ImageAI:自定义预测模型训练

作者: 程序员Ameng | 来源:发表于2020-07-29 15:50 被阅读0次

    ImageAI:自定义预测模型训练

    ImageAI 提供4种不同的算法及模型来执行自定义预测模型训练,通过以下简单几个步骤即可实现自定义预测模型训练。提供用于自定义预测模型训练的4种算法包括 SqueezeNetResNetInceptionV3DenseNet。您可以将其中一种算法加载到imageai.Prediction.Custom.CustomImagePrediction类中,这允许您在任何对象/人的图像集上训练您自己的模型。训练过程生成一个 JSON 文件,用于映射图像数据集和许多模型中的对象类型。然后,您就可以使用生成的 JSON 文进行高精度自定义图像预测。

    由于视频模型训练是非常消耗硬件资源的任务,所以我们建议您使用安装了 NVIDIA GPU 和 GPU 版 Tensorflow 的计算机来完成此实验。因为在 CPU 上执行模型培训将需要数小时或数天,但使用安装了 NVIDIA GPU 的计算机可能只需几个小时。您也可以使用 Google Colab 进行此实验,因为它具有可用的 NVIDIA K80 GPU。

    要进行自定义预测模型训练,您需要准备要用于训练的图像。您需要按如下方式提供图像:

    1. 创建一个数据集文件夹并命名(如 pets)
    2. 在数据集文件中创建一个名称为 train 的子文件夹
    3. 在数据集文件中创建一个名称为 test 的子文件夹
    4. 在 train 文件夹中,为每个你要训练的对象创建文件夹并命名(如 dog,cat,squirrel,snake)
    5. 在 test 文件夹中,为每个你要训练的对象创建文件夹并命名(如 dog,cat,squirrel,snake)
    6. 把每个对象的图像放在 train 文件夹下对应名称的子文件夹,这些图像是用于训练模型的图像,为了训练出精准度较高的模型,我建议每个对象收集大约500张以上图像。
    7. 把每个对象用于测试的图像放在 test 文件夹下对应名称的子文件夹,为了训练出精准度较高的模型,我建议每个对象用于测试的图像在100~200张。
    8. 用于训练模型时在这些图像中识别出要训练的对象。按照上述步骤操作完成后,图像数据集文件夹的结构应如下所示:


    然后您的训练代码如下:

    from imageai.Prediction.Custom import ModelTraining
    model_trainer=ModelTraining()
    model_trainer.setModelTypeAsResNet()
    model_trainer.setDataDirectory("pets")
    model_trainer.trainModel(num_objects=4,num_experiments=100,enhance_data=True,batch_size=32,show_network_summary=True)
    

    没错! 只需 5 行代码,就可以在您的数据集上使用所支持的4种深度学习算法来训练自定义模型。现在让我们来看看上面的代码是如何工作的:

    from imageai.Prediction.Custom import ModelTraining
    
    model_trainer = ModelTraining()
    model_trainer.setModelTypeAsResNet()
    model_trainer.setDataDirectory("pets")
    

    在上面的代码中,第一行导入 ImageAI 的ModelTraining类,第二行创建了ModelTraining类的新实例,第三行将模型类型设置为ResNet,第四行设置我们想要训练的数据集的路径。

    model_trainer.trainModel(num_objects=4,num_experiments=100,enhance_data=True,batch_size=32,show_network_summary=True)
    

    在上面的代码中,我们开始了模型训练,参数如下:

    • num_objects:该参数用于指定图像数据集中对象的数量
    • num_experiments:该参数用于指定将对图像训练的次数,也称为
    • epochsenhance_data(可选):该参数用于指定是否生成训练图像的副本以获得更好的性能。
    • batch_size:该参数用于指定批次数量。由于内存限制,需要分批训练,直到所有批次训练集都完成为止。
    • show_network_summary:该参数用于指定是否在控制台中显示训练的过程。

    当您开始训练时,您应该在控制台中看到类似的内容:



    训练过程开始后,您将在控制台中看到如下结果:


    让我们解释一下上面显示的细节:

    1. Epoch 1/100 这行表示正在进行第100个目标的第1次训练
    2. 1/25 [>………………………..] - ETA: 52s - loss: 2.3026 - acc: 0.2500 表示本实验中正在训练的批次数
    3. Epoch 00000: saving model to C:\Users\Moses\Documents\Moses\W7\AI\Custom Datasets\IDENPROF\idenprof-small-test\idenprof\models\model_ex-000_acc-0.100000.h5是指本实验后保存的模型文件。该 ex_000 表示实验的阶段,而 acc_0.100000 和 val_acc:0.1000 表示本实验完成后测试图像上模型的精准度(最大精准度为1.0)。此结果有助于了解可用于自定义图像预测的最佳模型。

    完成自定义模型的训练后,可以使用CustomImagePrediction类对自定义模型执行图像预测。

    训练完成后,在pets下会生成两个文件夹json和models:
    json文件下有个model_class.json
    models文件下生个了个model_ex-001_acc-0.523810.h5
    测试图:

    1.jpg

    测试代码:

    from imageai.Prediction.Custom import CustomImagePrediction
    import os
    execution_path = os.getcwd()
    prediction = CustomImagePrediction()
    prediction.setModelTypeAsResNet()
    prediction.setModelPath(os.path.join(execution_path, "model_ex-001_acc-0.523810.h5"))
    prediction.setJsonPath(os.path.join(execution_path, "model_class.json"))
    prediction.loadModel(num_objects=10)
    predictions, probabilities = prediction.predictImage(os.path.join(execution_path, "1.jpg"), result_count=5)
    for eachPrediction, eachProbability in zip(predictions, probabilities):
        print(eachPrediction + " : " + eachProbability)
    

    测试结果:


    相关文章

      网友评论

          本文标题:ImageAI:自定义预测模型训练

          本文链接:https://www.haomeiwen.com/subject/wpahrktx.html