Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于图像处理的OpenCV神经网络_C++_Opencv_Image Processing_Neural Network_Perceptron - Fatal编程技术网

C++ 用于图像处理的OpenCV神经网络

C++ 用于图像处理的OpenCV神经网络,c++,opencv,image-processing,neural-network,perceptron,C++,Opencv,Image Processing,Neural Network,Perceptron,我对人工智能世界很陌生,并尝试一些实践。 看来我需要一些第三方经验 假设我需要消除图像缺陷(实际上这项任务更棘手)。 我希望经过训练的神经网络能够插值缺陷区域 出于这些原因,我尝试创建简单的神经网络。 输入:灰度图像有缺陷(72*54),同一图像无缺陷。 隐藏层有2*72*54个神经元 主要代码 cv::Ptr<cv::ml::ANN_MLP> ann = cv::ml::ANN_MLP::create(); int inputsCount = imageSizes.w

我对人工智能世界很陌生,并尝试一些实践。 看来我需要一些第三方经验

假设我需要消除图像缺陷(实际上这项任务更棘手)。 我希望经过训练的神经网络能够插值缺陷区域

出于这些原因,我尝试创建简单的神经网络。 输入:灰度图像有缺陷(72*54),同一图像无缺陷。 隐藏层有2*72*54个神经元

主要代码

   cv::Ptr<cv::ml::ANN_MLP> ann = cv::ml::ANN_MLP::create();

   int inputsCount = imageSizes.width * imageSizes.height;
   std::vector<int> layerSizes = { inputsCount, inputsCount * 2, inputsCount};
   ann->setLayerSizes(layerSizes);
   ann->setActivationFunction(cv::ml::ANN_MLP::SIGMOID_SYM);

   cv::TermCriteria tc(cv::TermCriteria::MAX_ITER + cv::TermCriteria::EPS, 50, 0.1);
   ann->setTermCriteria(tc);

   ann->setTrainMethod(cv::ml::ANN_MLP::BACKPROP, 0.0001);

   std::cout << "Result : " << ann->train(trainData, cv::ml::ROW_SAMPLE, resData) << std::endl;
   ann->predict(trainData, predicted);
cv::Ptr ann=cv::ml::ann_MLP::create();
int InputScont=imageSizes.width*imageSizes.height;
std::vector layerSizes={InputScont,InputScont*2,InputScont};
ann->setLayerSizes(layerSizes);
ann->setActivationFunction(cv::ml::ann\u MLP::SIGMOID\u SYM);
cv::TermCriteria tc(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS,50,0.1);
ann->setTermCriteria(tc);
ann->setTrainMethod(cv::ml::ann_MLP::BACKPROP,0.0001);

std::cout似乎终止标准仅适用于两个样本,但在使用大量样本进行训练时不够好。试着调整它们,以及学习速度。
根据已正确恢复的像素质量判断,网络架构似乎适合此任务。一旦网络在10个样本上运行良好,我强烈建议添加更多的训练样本。

主要问题是,对于给定的网络,您只能获得很少的数据

您的NN已完全连接。像素0,0的权重与像素1,0的权重完全不同,像素0,1的权重也不同。你有很多权重,有很多节点。因此,虽然10幅图像中有大量像素,但对于所有权重来说,像素远远不够

卷积神经网络的权值要小得多,因为它的许多权值都是重复使用的。这意味着在训练中,这些权重由来自每个训练图像的多个像素进行训练

并不是说我希望它能很好地处理10张图片。人类的期望源于多年的人类视觉,确切地说是数十亿张图像