1

我正在做一个“情绪检测”项目。

作为制作完整产品的第一步,我们从图像处理开始。我从互联网上了解到卷积神经网络是最好的方法。

import cv2
import numpy as np
def sum_cnn(image,x,y):
    x1,y1=np.shape(image)
    temp=image

    for i in range(0,x1-x):
        for j in range(0,y1-y):
            temp1=np.sum(image[i:i+x,j:j+y])/(x*y)
            if temp1 in range(850000,1100000):
                cv2.rectangle(temp, (i, j), (i+20, j+20), (0, 255, 0), 2)
                print "\n"


    return temp


image =cv2.imread('test.jpg')
image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image=np.matrix(image)

temp=sum_cnn(image,95,95)

cv2.imshow('Processed Video', temp)
cv2.imwrite('1.jpg',temp)

print "Done"

上面是我写的代码——值(850000,1100000)是矩阵的卷积范围之和的值(抱歉代码很粗糙,我今天早上开始写)。

那么我要问的问题是如何设计或获得将存储权重的矩阵。

1)对于每种对象检测,我可以只使用一个矩阵(即粗略的单层 CNN,它将为“汽车”和“人脸”提供不同的值)还是应该为“车”和“脸”?

2)如何处理同一物体的不同尺寸?我在 Internet 上看到的一种解决方案是不断调整原始图像的大小。我想知道是否有更快的方法?

3)在反向传播中,我们给出的获得优化权重矩阵的粗略条件是什么?

4

1 回答 1

1

首先,如果您认真计划使用神经网络,我建议您从基础开始。我想说的是,该页面非常适合开始使用神经网络。一旦对神经网络有了基本的了解,您就可以尝试使用框架或Theano之类的东西来尝试构建 CNN。

老实说,我不太确定您的代码是关于什么的,但我会尽力回答您的问题。

  1. 我猜你在这里谈论的是权重矩阵。CNN 在其卷积层中所做的是:“提取特征”。这就是大家所说的。但是 tbh... 这不是一个容易量化的值。因此,您需要多少个过滤器映射(权重矩阵在 CNN 中称为过滤器映射)取决于您的用例。因此,您可能必须坚持使用测试和验证集来跟踪和错误,以调整过滤器映射的数量,或者更确切地说是一般的超参数。

  2. 这是 Krizhevsky、Sutskever 和 Hinton 的一篇很酷的论文,他们用 GPU 做了一些疯狂的事情,他们确实将他们的图像固定到一定的大小。如果您找到绕过此限制的好方法,请告诉我。

  3. 您通常想要做的是防止过度拟合。研究人员想到了多种方式和方法来实现这一目标。辍学,保持低权重或预训练仅举几例。

我再次建议您从给定的来源开始。与您听我漫谈一些我自己可能无法完全理解的技术术语相比,它会更容易理解。

亲切的问候,

PS:欢迎指正

于 2016-02-11T12:35:22.987 回答