我正在尝试在OpenCV中使用yahoo nsfw模型。这是我尝试过的。我刚刚从存储库中复制了deploy.prototxt
和resnet_50_1by2_nsfw.caffemodel
。
import cv2 as cv
cvNet = cv.dnn.readNetFromCaffe('deploy.prototxt','resnet_50_1by2_nsfw.caffemodel')
image_path = 'adult.jpg'
image = cv.imread(image_path)
blob = cv.dnn.blobFromImage(image, 1, (224,224), (0,0,0), True, crop=False)
cvNet.setInput(blob)
detections = cvNet.forward()
print(detections)
无论我有什么图像作为输入,我得到的输出都是这样的[[0.9855554 0.01444463]]
,第一个值总是更大。我之所以选择图像大小(224, 224)
,是因为在deploy.prototxt
中,我发现了以下内容:
name: "ResNet_50_1by2_nsfw"
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 224 dim: 224 } }
}
我做错什么了?
发布于 2019-10-08 11:44:49
我不确定你是否已经解决了这个问题,我也不是这方面的专家,但我发现你在创建blob时不执行均值减法(在你的代码中均值被设置为(0,0,0) ),这是非常奇怪的。查看您链接的Github存储库,作者确实在https://github.com/yahoo/open_nsfw/blob/master/classify_nsfw.py
第114行执行了均值减法:
caffe_transformer.set_mean('data', np.array([104, 117, 123]))
这可能会对网络的分类产生影响。我建议在OpenCV实现中使用它们的参数。
https://stackoverflow.com/questions/56555903
复制