YOUNG--future 2020-12-07 19:26 采纳率: 0%
浏览 186

c++调用pytorch深度学习模型 精度下降和精度上升的问题

Python调用及Libtorch (C++ API)调用深度学习模型 测试结果不一致
模型为SE-ResNet50
 
模型一:在第一批次增广后数据集上进行训练(41万样本),图像输入为224*224;
模型二和模型三在第二批次增广后数据集上进行训练(30万),模型二的图像输入为224*224,模型三的图像输入为256*256。
 
     同批次数据测试:训练集和测试集属于同一批次
     不同批次数据测试:训练好的模型在另外的数据集上测试(为了验证模型的鲁棒性或迁移性)
 
三个模型Libtorch (C++ API)及Python调用调用测试结果如下:
     同批次数据测试:
        模型一:C++调用准确率99.94% 【Python调用准确率99.96%】
        模型二:C++调用准确率99.92% 【Python调用准确率99.96%】
        模型三:C++调用准确率99.92% 【Python调用准确率99.96%】
    不同批次数据测试:
        模型一:C++调用准确率99.24% 【Python调用准确率99.34%】
        模型二:C++调用准确率99.45% 【Python调用准确率99.31%】
        模型三:C++调用准确率99.61% 【Python调用准确率99.38%】
 
 请问怎么会出现精度损失和精度上升的问题

 

【解决方法】

是Pytorch读图问题,PyTorch读图使用的是PIL库中的OPEN( )函数,读取的彩色图像的顺序是RGB;OpenCV的读图方式是imread( )函数,读取的彩色图像的顺序是BGR。要想将精度保持一致,需要将通道进行转换,在OpenCV读取BRG图像后加入函数cvtColor(),将通道调整为RGB顺序;或者在Pytorch中使用函数将RGB调整为BGR。要点是:保证图像在进入网络前的图像通道顺序一致,最后测试精度就会保持一致了。

 

 

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 19:30
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要确保在不同批次的数据集上测试时模型的准确性保持一致,可以采取以下步骤:

    1. 使用相同的图像格式:首先,确保所有的图像都是以相同的方式存储和处理,即使用RGB格式而不是其他格式。例如,如果使用Pillow库读取图像,则应使用Image.open()而不是Image.fromarray()来打开图像,并且所有图像都应该具有相同的通道顺序。
    from PIL import Image
    # 假设你的图像文件路径是image_path
    img = Image.open(image_path)
    
    1. 在Pytorch中调整通道顺序:如果你正在使用Pytorch处理图像,请确保你在模型输入之前对图像进行了正确的预处理。例如,你可以使用convert_rgb()函数将RGB图像转换为BGR格式。
    import torch
    from torchvision.transforms import ToTensor, Normalize
    
    # 假设你的图像文件路径是image_path
    img = Image.open(image_path)
    img = img.convert('RGB')  # 将图像从BGR转换为RGB
    img = ToTensor()(img).unsqueeze(0)  # 将图像转换为张量并添加到第一个维度
    
    # 这里你还可以应用正常的归一化操作
    img = Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))(img)
    
    # 保存处理后的图像以便后续使用
    img.save("processed_image.jpg")
    

    通过以上步骤,你可以在不同的批次数据集上测试时,确保模型的准确性保持一致。这样,即使在不同批次的数据集上训练模型,也不会影响其最终的预测结果。

    评论

报告相同问题?

问题事件

  • 修改了问题 8月9日