[ModelArts昇腾]
Resnet18毒蘑菇预测结果为同一标签的解决方法
近期做了一个实例----使用ModelArts平台的训练作业功能上传使用Resnet50进行毒蘑菇检测的训练检测代码。
我使用的测试图片为如下两张图片:
在最初的预测代码运行后会出现一个BUG,那就是不管图片是什么,他的预测结果永远是一个标签。当初以为是我提交的图片有问题,后来我使用训练集进行训练也是如此。如下图所示:
后来在学习总结帖中写了一个番外篇把这个问题列为了待解决的问题,没想到得到了Mindspore老师的注意,他们检查后找到了问题所在。
ResNet50_predict.py中的
def _normalize(img, mean, std): assert img.dtype != np.uint8 mean = np.float64(mean.reshape(1, -1)) stdinv = 1 / np.float64(std.reshape(1, -1)) cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2.subtract(img, mean) cv2.multiply(img, stdinv) return img
在这段代码中定义的_normalize
方法中,最后三个操作(cvtColor
, subtract
以及multiply
)没有传入img参数导致normalize操作失效,使得img本身的数值没有按照规定格式传入net进行推理,修改完之后的代码如下:
def _normalize(img, mean, std): assert img.dtype != np.uint8 mean = np.float64(mean.reshape(1, -1)) stdinv = 1 / np.float64(std.reshape(1, -1)) cv2.cvtColor(img, cv2.COLOR_BGR2RGB, img) cv2.subtract(img, mean, img) cv2.multiply(img, stdinv, img) return img
这样修改后再重新上传到OBS中进行训练就得到了正常的检测结果了
详细的课程笔记可以参考我博客中我随记的一篇文章:https://bbs.huaweicloud.com/blogs/207724