小编Mob*_*Mob的帖子

语义图像分割NN(DeepLabV3 +)的内存过多问题

我首先解释一下我的任务:我从两条不同的绳索上获得了近3000张图像。它们包含绳索1,绳索2和背景。我的标签/遮罩是图像,例如像素值0表示背景,像素值1表示第一根绳子,而2表示第二根绳子。您可以在下面的图片1和2中看到输入图片和地面真理/标签。请注意,我的地面真相/标签只有3个值:0、1和2。我的输入图片是灰色的,但对于DeepLab,我将其转换为RGB图片,因为DeepLab是在RGB图片上训练的。但是我转换后的图片仍然不包含颜色。

这是我的网络的输入图片 这是基本事实 原始彩色图像

该任务的思想是神经网络应该从绳索中学习结构,因此即使有knote,它也可以正确标记绳索。因此颜色信息并不重要,因为我的绳索具有不同的颜色,因此可以很容易地使用KMeans创建地面真相/标签。

为此,我在Keras中选择了一个名为DeepLab V3 +的语义分割网络,并以TensorFlow作为后端。我想用我的近3000张图像训练NN。图片的大小小于100MB,均为300x200像素。也许DeepLab并不是我的任务的最佳选择,因为我的图片不包含颜色信息并且图片的尺寸很小(300x200),但是到目前为止,我没有找到更好的语义分割NN。

从Keras网站,我知道如何使用flow_from_directory加载数据以及如何使用fit_generator方法。我不知道我的代码是否逻辑正确...

这里是链接:

https://keras.io/preprocessing/image/

https://keras.io/models/model/

https://github.com/bonlime/keras-deeplab-v3-plus

我的第一个问题是:

在我的实现中,我的图形卡几乎使用了所有内存(11GB)。我不知道为什么 DeepLab的权重可能有那么大吗?我的Batchsize默认为32,我所有的近300张图像都小于100MB。我已经使用过config.gpu_options.allow_growth = True代码,请参见下面的代码。

一般问题:

有人知道我的任务有很好的语义分割NN吗?我不需要经过彩色图像训练的神经网络。但是我也不需要NN,它是用二进制地面真实图片训练的...我用DeepLab测试了我的原始彩色图像(图片3),但是我得到的结果标签不好...

到目前为止,这是我的代码:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "3"

import numpy as np
from model import Deeplabv3
import tensorflow as tf
import time
import tensorboard
import keras
from keras.preprocessing.image import img_to_array
from keras.applications import imagenet_utils
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import TensorBoard


config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config)

from keras import backend as K
K.set_session(session)

NAME = "DeepLab-{}".format(int(time.time()))

deeplab_model = Deeplabv3(input_shape=(300,200,3), classes=3) …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow semantic-segmentation deeplab

5
推荐指数
1
解决办法
641
查看次数

使用出现次数最多的像素值的图像过滤器

我想使用一个图像过滤器,它应该替换它正在处理的邻居出现次数最多的像素。例如,如果像素的值为 10,而 8 个邻居的值分别为 9、9、9、27、27、200、200、210,那么它应该选择 9,因为 9 在邻居中的出现次数最多。它还应该考虑像素本身。因此,例如,如果像素的值为 27,而 8 个相邻像素的值为 27、27、30、30、34、70、120、120,那么它应该选择 27,因为 27 出现了 3 次,包括像素本身。我还应该可以选择内核的大小。我没有找到这样的过滤器。有吗?还是我必须自己创建它?我在 python 中使用 opencv。

背景信息:我不能只使用中值过滤器,因为我的图像不同。我有 3 到 6 个不同灰度值的灰度图像。因此我不能使用一些形态变换。我没有得到我想要的结果。中值滤波器会选择中值,因为这个想法是这些值以正确的方式表示图像。但我的图像是 kmeans 的结果,3-6 个不同的灰度值没有逻辑联系。

opencv image image-editing python-3.x imagefilter

2
推荐指数
1
解决办法
982
查看次数

Matterport Mask-R-CNN的确切损失是什么?

我使用Mask-R-CNN来训练我的数据。当我使用TensorBoard查看结果时,我损失了 mrcnn_bbox_lossmrcnn_class_lossmrcnn_mask_lossrpn_bbox_lossrpn_class_loss以及所有相同的6个损失用于验证:val_loss, val_mrcnn_bbox_loss等。

我想确切地知道每项损失。

我也想知道前6次损失是火车损失还是什么?如果不是火车失窃,我怎么看火车失窃?

我的猜测是:

损失:这是所有5个摘要(但我不知道TensorBoard如何总结它)。

mrcnn_bbox_loss:边框的大小是否正确?

mrcnn_class_loss:该类正确吗?像素正确分配给类别了吗?

mrcnn_mask_loss:实例的形状是否正确?像素正确分配给实例了吗?

rpn_bbox_lossbbox的大小正确吗?

rpn_class_lossbbox的类别正确吗?

但是我很确定这是不对的...

如果我只有1个班级,是否会失去一些无关紧要的东西?例如仅背景和另外1个课程?

我的数据只有背景和另外1个类别,这是我在TensorBoard上获得的结果:

结果1:结果2:结果3:结果:4

我的预测是可以的,但是我不知道为什么最终由于验证而造成的一些损失会不断上升……我认为必须首先下降,然后过度拟合。我使用的预测是TensorBoard上出现次数最多的绿线。我不确定我的网络是否过拟合,因此我想知道为什么验证中的某些损失看起来像它们的样子...

这是我的预测: 我的训练集示例: 这是我的测试集示例的基本事实: 这是来自Testset示例的预测:

instance loss image-segmentation keras faster-rcnn

2
推荐指数
1
解决办法
1434
查看次数