我正在使用基于 Unet 的模型对生物医学图像执行图像分割。每个图像都是 224x224,我有四个类,包括背景类。每个掩码的大小为 (224x224x4),因此我的生成器创建了一批大小为 (16x224x224x4) 的 numpy 数组。我将掩码的值重铸为 1 或 0,因此对于每个类,相关通道中都存在 1。图像也按 1/255 缩放。我使用骰子分数作为训练期间的性能指标,使用 1 骰子分数作为损失函数。我在训练期间的分数似乎高达 0.89,但我发现当我在测试集上预测时,我总是在预测背景类。我只在几百张图像上训练了 10 个 epochs(虽然我可以访问更多)这可能会影响模型,但我以为我' d 仍然得到其他类别的预测,所以我假设主要问题是类别不平衡。从在线查看 sample_weight 参数可能是答案,但我不确定我打算如何实现实际的重量部分?大概我需要使用图层将权重应用于模型中某个点的像素数组,但我不确定如何。任何帮助将非常感激?
class DataGenerator(keras.utils.Sequence):
def __init__(self, imgIds, maskIds, imagePath, maskPath, batchSize=16, imageSize = (224, 224, 3), nClasses=2, shuffle=False):
self.imgIds = imgIds
self.maskIds = maskIds
self.imagePath = imagePath
self.maskPath = maskPath
self.batchSize = batchSize
self.imageSize = imageSize
self.nClasses = nClasses
self.shuffle = shuffle
def __load__(self, imgName, maskName):
img = cv2.imread(os.path.join(self.imagePath,imgName))
img = cv2.resize(img, (self.imageSize[0], self.imageSize[1]))
mask = cv2.imread(os.path.join(self.maskPath,maskName)) …Run Code Online (Sandbox Code Playgroud) weighting image-segmentation deep-learning conv-neural-network tf.keras
我目前正在使用CallByName来动态调用方法.我每天从服务器中的表中提取几种方法以及参数.出于这个原因,我将一个参数数组发送到CallByName而不是一个param数组,因为我不知道运行时的参数数量.鉴于CallByName需要一个paramarray,我使用私有声明函数来绕过VBA类型定义.
Private Declare PtrSafe Function rtcCallByName Lib "VBE7.DLL" ( _
ByVal Object As Object, _
ByVal ProcName As LongPtr, _
ByVal CallType As VbCallType, _
ByRef Args() As Any, _
Optional ByVal lcid As Long) As Variant
Public Function CallByNameMethod(Object As Object, ProcName As String, ByRef Args () As Variant)
AssignResult CallByNameMethod, rtcCallByName(Object, StrPtr(ProcName), VbMethod, Args)
End Function
Private Sub AssignResult(target, Result)
If VBA.IsObject(Result) Then Set target = Result Else target = Result
End Sub
Run Code Online (Sandbox Code Playgroud)
当我传递方法更改其基础属性的对象时,这种方法有效.但是,有一些方法可以传递一个对象和一个更改传递参数值的方法.例如,我传递一个带有以下参数的数组
Dim Name as String, …Run Code Online (Sandbox Code Playgroud) 我已经开始大量使用计算机视觉技术,主要是深度学习,但我想尝试很好地理解更传统的技术,并打下良好的基础。我一直在尝试一些手动特征工程技术,用于使用 RF 和 SVM 分类器进行分类。我研究了 HOG 和 LBP 描述符等纹理表示以及边缘滤波器、gabor 滤波器和傅里叶描述符等空间特征。我缺乏的是不同功能如何分组以及它们各自属于什么类别的好主意。我知道有些被定义为全局和本地,但这到底意味着什么以及哪些?我还应该考虑其他类别,例如纹理和几何吗?任何解释都会有用并且非常感激(我在网上查了很多,但这一切似乎都有点支离破碎)
谢谢!
machine-learning image-processing feature-extraction computer-vision feature-descriptor
为了进行多类分割,需要对掩码进行单热编码。例如,如果我有 100 张形状为 224x224x3 且有 5 个不同类别的图像,我将拥有一组形状为 (100, 224, 224, 5) 的掩码,即最后一个维度(通道)是指像素的类别。取一个包含 6 个类的灰度蒙版,其中每个像素的标签为 1-6,我可以使用 tf.keras.utils.to_categorical 轻松将其转换为我需要的分类蒙版。
如果我使用与 keras 一起提供的 ImageDataGenerator,我知道我可以为图像和蒙版创建一个生成器,然后将它们压缩在一起以解决问题(如下代码所示),但我感到困惑的是如何将蒙版转换为这种分类蒙版- 使用 ImageDataGenerator 时的热编码结构?ImageDataGenerator 只在保存为图像的目录中找到文件,因此我无法转换掩码,然后将它们保存为 numpy 数组(单热编码掩码)供生成器拾取,因为图像不能有有 4 个以上的频道吧?是否有某种方式告诉生成器进行这种转换?或者这是否因此限制了我在问题中可以拥有的课程数量?
一种解决方案是使用我已经完成的序列类编写我自己的自定义生成器,但我很想知道这是否可以与 Keras 内置的 ImageDataGenerator 一起使用?在网络上编写我的 lambda 层是解决方案吗?
mask_categorical = tf.keras.utils.to_categoricl(mask) #converts 224x224 grayscale mask to one-hot encoding version
imgDataGen = ImageDataGenerator(rescale=1/255.)
maskDataGen = ImageDataGenerator()
imageGenerator =imageDataGen.flow_from_directory("dataset/image/",
class_mode=None, seed=40)
maskGenerator = maskDataGen.flow_from_directory("dataset/mask/",
class_mode=None, seed=40)
trainGenerator = zip(imageGenerator, maskGenerator)
Run Code Online (Sandbox Code Playgroud) image-segmentation categorical-data deep-learning keras one-hot-encoding
我有一个像下面这样的数据框,里面有很多列和数据
Label 2015-08-24 2015-08-25
1 AxG 179238.8 174160.3
2 CHaF 203544.2 199411.9
3 HHHH 130138.9 129182.2
4 fLS 146367.0 148708.0
5 KSU 194584.7 188508.0
6 MqCC 272922.7 273369.5
7 BEPU 0.0 0.0
8 SSEX 107566.4 111552.8
9 QQQ 248380.4 257064.2
10 AAA 258735.4 260415.5
Run Code Online (Sandbox Code Playgroud)
我有另一个数据框,其行索引与第一个中的列名相同(在本例中为日期).我想将第一个数据帧的列中的每个值除以第二个数据帧中的相应值
totals
2015-08-24 1741479
2015-08-25 199411.9
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是做下面的事情(我来自pythonic背景,虽然不久前)
> for(i in names(df1)){
+ df1[[df1[,i]/df2[i,]]]
Run Code Online (Sandbox Code Playgroud)
但这是我收到的错误:
.subset2中的错误(x,i,exact = exact):在级别1没有这样的索引另外:警告消息:在Ops.factor中(权重[,i],weight_totals [i,]):'/'没有意义因素
有任何想法吗?
我正在使用 callByName I VBA 动态调用类的不同方法。根据方法的不同,我将拥有不同数量的参数,这些参数将保存在一个数组中。不幸的是 CallByName 接受一个 param 数组,因此传递一个变量数字并不简单。有没有办法解决这个问题,我找到了一个使用类型信息库的解决方案,但这似乎不适用于 VBA,即使我已将其添加为参考。下面是我想要的插图
Public Sub Initialize_Object(ByRef TaskObject, Task_Collection)
Dim Task_begin As Variant, Method_Parameters As Variant
Task_begin = Task_Collection("Method")
CallByName TaskObject, Task_begin, VbMethod, Method_Parameters
Run Code Online (Sandbox Code Playgroud)