我做了下面的python層並將它添加到LeNet架構中。但是在構建模型時會出現錯誤。我要使用Numpy來應用我的Python圖層,但是當我使用OpenCV時,會出現錯誤。 以下我從日誌文件中添加我的代碼和相應的錯誤。OpenCV python層不能與caffe/digits框架一起工作
import cv2 import caffe import randomdef doEqualizeHist(img): img = img.astype(np.uint8) img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) return cv2.equalizeHist(img)
class EqualizeLayer(caffe.Layer): def setup(self, bottom, top): assert len(bottom) == 1, 'requires a single layer.bottom' assert bottom[0].data.ndim >= 3, 'requires image data' assert len(top) == 1, 'requires a single layer.top'
def reshape(self, bottom, top): # Copy shape from bottom top[0].reshape(*bottom[0].data.shape) def forward(self, bottom, top): # Copy all of the data top[0].data[...] = bottom[0].data[...] for ii in xrange(0, top[0].data.shape[0]): imin = top[0].data[ii, :, :, :].transpose(1, 2, 0) top[0].data[ii, :, :, :] = doEqualizeHist(imin).transpose(2, 0, 1) def backward(self, top, propagate_down, bottom): pass
錯誤消息:0812 06:41:53.452097 14355 net.cpp:723]將忽略源層列車數據 OpenCV的錯誤:斷言失敗(SCN == 3 || SCN == 4)在cvtColor中,文件/build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp,第3737行 回溯(最近調用最後一次): 文件「/ var/lib /數字/作業/ 20170812-064148-f44d/digits_python_layers.py「,第27行,轉發 top [0] .data [ii,:,:,:] = doEqualizeHist(imin).transpose(2,0,1) 文件「/ var/lib/digits/jobs/20170812-0641 48-f44d/digits_python_layers.py「,第8行,在doEqualizeHist img = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) cv2.error:/build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc /src/color.cpp:3737:錯誤:(-215)scn == 3 || scn == 4函數cvtColor
爲什麼不做一些調試,並且可能在傳入導致錯誤的語句之前檢查'img'? –
我嘗試了獨立的Python代碼,然後運行正常,但在Caffe模型運行期間導致錯誤。現在,我試圖使用skimage而不是OpenCV,然後運行正常。我知道這不是一個解決方案,而是一種解決方法。 –