首页 > 解决方案 > 在 Keras(tf 后端)中在较大图像上训练滑动窗口模型

问题描述

伙计们。

我对 Keras/Tensorflow 中的机器学习和编程比较陌生。我已经参加了机器学习图像分析课程,但我正在努力解决一个相当简单的问题(我相信)。我的任务是检测通常大小为 2200x630 的图像上的噪声,给定或取几百个像素。这太大了,无法输入转换层,我无法真正调整它的大小。这是因为我(稍后)要在没有噪音的情况下重现图像。

我研究了具有多层等的标准 CNN。我在 Keras 中创建这些没有问题,但是当我尝试使用滑动窗口时问题就来了。

如何在使用滑动窗口时训练网络?

我似乎无法绕过它。就我而言,我只是想让网络决定图像中是否存在噪声。所以这是一个简单的真/假问题,一个有 2 个类的 cnn。在使用滑动窗口将图像“分解”成多个部分之后,如何调整整个图像的标签以进行反向传播和后续训练?甚至有可能在 Keras 中做到这一点吗?我没有任何代码,因为我不知道如何进一步推进。因此我在这里发布一个伪代码:

Class Network():
      def __init__(self):
          .......


      def model(self):
          img = Input(self.img_shape)
          model.add(Conv2D(........)
          ......
          ......
          model.add(Dense(nclasses))
          return model

上面的部分有点正常(我希望如此),但我正在努力解决的部分如下:

class Network......

    def sliding_window(self):
        for i in range(start, stop):
            for j in range(start, stop):
                 img = data[window_size*i:window_size*(i+1)][window_size*j:window_size*(j+1)]

    def training(self):
        .....
        .....
        for X_target, labels in generator():
             window = sliding_window(X_target)
             self.autoencoder.train_on_batch(X_train,X_target)

我现在如何让程序理解 20 张图像等于一张图像,并且必须组合最后 20 张图像的所有标签才能为实际图像制作一个健康的标签。这些层本身是为小盒子定义的,那么我该如何训练网络呢?我对这一切都错了吗?我应该使用滑动窗口以外的其他东西吗?我感到很困惑....

标签: pythontensorflowmachine-learningkerasconvolutional-neural-network

解决方案


推荐阅读