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。要点是:保证图像在进入网络前的图像通道顺序一致,最后测试精度就会保持一致了。