我正在尝试在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 } }
}
我做错了什么?
我不确定您是否已经设法解决了这个问题,并且我不是专家,但是我发现很奇怪,在创建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实现中使用它们的参数。