Comments (8)
你说的是对的,模型最后可以改为:
o = Conv2D(nClasses, (1, 1), padding="same")(o)
o = BatchNormalization()(o)
# o = Activation("relu")(o)
#
# o = Reshape((-1, nClasses))(o)
o = Activation("softmax")(o)
model = Model(inputs=img_input, outputs=o)
return model
此时模型最后就是(None,320,320,15),注意要修改LoadBatches.py函数getSegmentationArr形如:
def getSegmentationArr(seg, nClasses, input_height, input_width):
seg_labels = np.zeros((input_height, input_width, nClasses))
for c in range(nClasses):
seg_labels[:, :, c] = (seg == c).astype(int)
# seg_labels = np.reshape(seg_labels, (input_height, input_width, nClasses))
return seg_labels
再运行LoadBatches.py应得:(16, 320, 320, 3) (16, 320, 320, 15)。
Activation层按照最后一个维度softmax,交叉熵只要y_1,y_2维度相同,然后求平均。过几日我会修改这些容易混淆的地方。(代码在你手,想咋改就咋改😂)
参考:
https://tensorflow.google.cn/api_docs/python/tf/nn/softmax_cross_entropy_with_logits_v2
from keras-segmentation.
非常感谢!一开始没有注意到LoadBatches.py这个函数中进行了reshape(seg_labels, (-1, nClasses))的操作,现在明白了!
我复现了你代码中的fcn8和segnet,效果很好。我记录一下我过程中遇到的问题,希望能帮助到你后续完善项目,或者帮助别人复现代码。
1.train.py中 from Models import FCN8, FCN32,SegNet 会报错no model named Models,我的解决方法是在Models 文件夹下加了一个__init__.py的空文件
2.SegNet.py中 line90:Vgg_streamlined.load_weights(r"E:\Code\PycharmProjects\keras-segmentation\data\vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5") 使用的是绝对路径,复现的时候要改成自己的路径
3.部分文件中有中文注释,需要添加 # coding=UTF-8 防止字符报错
4.LoadBatches.py中我用的keras版本是2.1.6-tf,其中取消掉了G. next ()方法,需修改为next(G)
from keras-segmentation.
我在使用segnet的时候遇到一个error,最后一层的activation显示
ValueError: Error when checking model target: expected activation to have 4 dimensions, but got array with shape (32, 10)
我的输入是64*64的rgb图像,总共10类,最后一层activation以后应该是(4096,10)没错啊。为什么会报这个错啊?求教大神!
from keras-segmentation.
我在使用segnet的时候遇到一个error,最后一层的activation显示
ValueError: Error when checking model target: expected activation to have 4 dimensions, but got array with shape (32, 10)
我的输入是64*64的rgb图像,总共10类,最后一层activation以后应该是(4096,10)没错啊。为什么会报这个错啊?求教大神!
你有改模型哪里么,更详细地说一下。其次是如果你自己找原因地话,主要检查一下激活层输入和输出地维度。检查是不是改动了哪里造成维度发生了变化
from keras-segmentation.
我在使用segnet的时候遇到一个error,最后一层的activation显示
ValueError: Error when checking model target: expected activation to have 4 dimensions, but got array with shape (32, 10)
我的输入是64*64的rgb图像,总共10类,最后一层activation以后应该是(4096,10)没错啊。为什么会报这个错啊?求教大神!你有改模型哪里么,更详细地说一下。其次是如果你自己找原因地话,主要检查一下激活层输入和输出地维度。检查是不是改动了哪里造成维度发生了变化
模型我没有改动,我把loadbatch这里改了,我是直接用flow_from_directory()读取生成batch的,没有手工读取。总共10类,我把batch_size设置为1以后还特地输出看了一下,是一张图片+它的标签,一个四维的数组。
最开始的input是(None,64,64,3),最后一个激活层前是(None,4096,10),激活层后也是(None,4096,10),如果按照论文理解的话,应该是把一个4096的图像标注清楚类型了吧。。我现在有点不明白,为什么会报错维度错误。。。
我打算尝试一下手工读取数据,就是仿照您的loadbatch函数来读取,我怀疑是flow_from_directory()这个生成器我没有理解透彻,这毕竟是个库函数。
from keras-segmentation.
我在使用segnet的时候遇到一个error,最后一层的activation显示
ValueError: Error when checking model target: expected activation to have 4 dimensions, but got array with shape (32, 10)
我的输入是64*64的rgb图像,总共10类,最后一层activation以后应该是(4096,10)没错啊。为什么会报这个错啊?求教大神!你有改模型哪里么,更详细地说一下。其次是如果你自己找原因地话,主要检查一下激活层输入和输出地维度。检查是不是改动了哪里造成维度发生了变化
模型我没有改动,我把loadbatch这里改了,我是直接用flow_from_directory()读取生成batch的,没有手工读取。总共10类,我把batch_size设置为1以后还特地输出看了一下,是一张图片+它的标签,一个四维的数组。
最开始的input是(None,64,64,3),最后一个激活层前是(None,4096,10),激活层后也是(None,4096,10),如果按照论文理解的话,应该是把一个4096的图像标注清楚类型了吧。。我现在有点不明白,为什么会报错维度错误。。。
我打算尝试一下手工读取数据,就是仿照您的loadbatch函数来读取,我怀疑是flow_from_directory()这个生成器我没有理解透彻,这毕竟是个库函数。
我还是不太确定问题在哪里,不过如果没有改模型的话,那么模型内部是没问题的,需要检查的是模型的输入和输出就好了。
我猜测一个原因。正常情况下,reshape层会导致张量shape变为(None,4096,10),经过激活层后模型的输出shape为(None,4096,10)。那么为模型提供的Label的shape也应该是(None,4096,10),这两个shape要一致才可以计算交叉熵函数。会不会是输出和你提供的Label图像的shape不一致。
from keras-segmentation.
flow_from_directory()返回的是图片和图片对应的标签(图片所在文件夹名称),而不是图片对应同样大小的标签矩阵(h,w,C)。可以尝试构造迭代对象,next()一下
from keras-segmentation.
flow_from_directory()返回的是图片和图片对应的标签(图片所在文件夹名称),而不是图片对应同样大小的标签矩阵(h,w,C)。可以尝试构造迭代对象,next()一下
是的,我查阅了一下keras的文档,这个函数返回的确实是一个标签的一维数组而不是矩阵。谢谢您!
我得想个办法了,我的数据集没有给出mask imag,只有各个图像的名称,我得考虑怎么生成label矩阵
from keras-segmentation.
Related Issues (20)
- 如何修改为tensorflow-gpu HOT 3
- 关于unet无法准确预测问题 HOT 4
- why is stopping int the "Epoch 1/500"? HOT 1
- how to calculate meanIoU HOT 1
- 你好,我想请问一下,想要训练自己得数据集,做2分类,需要修改那些呢?
- 您好,请教一下utils.py的问题 HOT 4
- The result is strange.
- Segnet 不加载权重的情况下可否用于灰度图像的分割?
- utils.py在图片格式为 (channels, height, width)下如何修改
- LoadBatched.py中的getImageArr
- 如何修改成二分类 HOT 1
- 如何使用
- 使用fcn8模型,验证集上精度最高只有0.62
- getSegmentationArr 读取 HOT 1
- problem about dataset HOT 1
- hello
- hello i hade this error : ValueError: You are passing a target array of shape (2, 53824, 1) while using as loss `categorical_crossentropy`. `categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes). If your targets are integer classes, you can convert them to the expected format via: ``` from keras.utils.np_utils import to_categorical y_binary = to_categorical(y_int)
- 您好!请问数据集的标签为什么是黑白的?
- u-net的decode部分 HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from keras-segmentation.