精华内容
下载资源
问答
  • 影响通道的数量的是
    千次阅读
    2021-05-10 21:11:01

    【深度学习】图像特征提取与通道数问题(基于U型网络)

    1 医学图像特点
    2 卷积核与图像特征提取
    	2.1 卷积
    	2.2 图像处理
    	2.3 边缘检测卷积核
    	2.4 图像锐化卷积核
    	2.5 高斯滤波
    3 关于图像三通道和单通道的解释
    4 pytorch 修改预训练模型(全连接层、单个卷积层、多个卷积层)
    

    1 医学图像特点

    1.图像语义较为简单、结构较为固定。我们做脑的,就用脑CT和脑MRI,做胸片的只用胸片CT,做眼底的只用眼底OCT,都是一个固定成像,而不是全身的。由于本身结构固定和语义信息没有特别丰富,所以高级语义信息和低级特征都显得很重要(UNet的skip connection和U型结构就派上了用场)。举两个例子直观感受下。
    2.数据量少。医学影像的数据获取相对难一些,很多比赛只提供不到100例数据。所以我们设计的模型不宜多大,参数过多,很容易导致过拟合。
    原始UNet的参数量在28M左右(上采样带转置卷积的UNet参数量在31M左右),而如果把channel数成倍缩小,模

    更多相关内容
  • 为消除测距光谱通道位置和数量选取对氧气吸收衰减被动测距技术测距精度的影响, 基于氧气吸收衰减被动测距技术的基本原理, 分析氧气A、B吸收带光谱谱线特性。对于吸收带带肩上的光谱通道, 利用蒙特卡罗法, 以拟合非...
  • 【深度学习】多通道图像卷积过程及计算方式

    万次阅读 多人点赞 2018-10-15 21:42:50
    之前的文章为了便于演示,针对的是二维卷积,比如一张图片有 RGB 三个颜色通道,我的方式是每个通道单独卷积,然后将各个通道合成一张图片,再可视化出来。但真实工程不会是这样的,很多东西需要进一步说明白。 熟悉...

    之前,有写了一篇博文,【深度学习入门】——亲手实现图像卷积操作介绍卷积的相应知识,但那篇文章更多的是以滤波器的角度去讲解卷积。但实际上是神经网络中该博文内容并不适应。

    之前的文章为了便于演示,针对的是二维卷积,比如一张图片有 RGB 三个颜色通道,我的方式是每个通道单独卷积,然后将各个通道合成一张图片,再可视化出来。但真实工程不会是这样的,很多东西需要进一步说明白。

    熟悉 TensorFlow 的同学大概对这个函数比较熟悉。

    tf.nn.conv2d(
        input,
        filter,
        strides,
        padding,
        use_cudnn_on_gpu=True,
        data_format='NHWC',
        dilations=[1, 1, 1, 1],
        name=None
    )
    

    其中 input 自然是卷积的输入,而 filter 自然就是滤波器。
    它们的格式说明如下:

    input:
    [batch, in_height, in_width, in_channels]
    
    filter
    [filter_height, filter_width, in_channels, out_channels]
    

    input 的 4 个参数很好理解,分别是批数量、高、宽、通道数。

    但是,我当时在学习时有一个疑惑不能理解,那就是为什么 filter 有 2 个通道相关的参数呢?

    按照网络上的建议,我大概知道 input 的 in_channels 和 filter 的 in_channels 要对应起来,而 out_channels 是卷积后生成的 featuremap 的通道数量,但是其中的计算细节,我并不知道。

    为什么颜色通道为 3 的图像,经过卷积后,它的通道数量可以变成 128 或者其它呢?这是我的疑问。

    后来,我发现自己有这个疑问是因为对卷积的概念理解不清楚。

    我误以为,卷积过程中滤波器是 2 维的,只有宽高,通道数为 1.

    这里写图片描述

    实际上,真实的情况是,卷积过程中,输入层有多少个通道,滤波器就要有多少个通道,但是滤波器的数量是任意的,滤波器的数量决定了卷积后 featuremap 的通道数。

    在这里插入图片描述

    如果把输入当做一个立方体的话,那么 filter 也是一个立方体,它们卷积的结果也是一个立方体,并且上面中 input、filter、Result 的通道都是一致的。

    但卷积过程的最后一步要包括生成 feature,很简单,将 Result 各个通道对应坐标的值相加就生成了 feature,相当于将多维的 Result 压缩成了 2 维的 feature。

    可能有同学会问,为什么需要压缩 Result 到 2 维呢?

    我们回顾,卷积的公式。

    y ( n ) = ∑ i = − ∞ ∞ x ( i ) ∗ h ( n − i ) y(n) = \sum_{i=-\infty}^{\infty} x(i)*h(n-i) y(n)=i=x(i)h(ni)

    卷积无非就是一个累乘然后累加的过程,所以从数学上来看,这并不违背规则,实际上真实的情况是为了卷积过程的通道对应,原因下面分析。

    之前我们会困扰是因为所有的文献都以 3x3 或者 5x5 的形式指代滤波器,让我们误以为滤波器只能是 2 维的。

    也有细心的同学会问,卷积过程,怎么改变输入层的通道数?

    比如,输入层是一张彩色图片,它有 RGB 3 个通道,但经过卷积后的 featuremap 却有 128 个通道,那它是怎么实现的呢?

    奥秘在于滤波器的数量
    在这里插入图片描述

    大家注意上图,我们假定用 N 表示滤波器的数量,那么每一个滤波器会生成一个 2 维的 feature,N 个滤波器就生成 N 个 feature,N 个 feature 组成了卷积后的 featuremap,而 N 就是 featuremap 的通道数。

    input:
    [batch, in_height, in_width, in_channels]
    
    filter
    [filter_height, filter_width, in_channels, out_channels]
    

    我们再看 Tensorflow 中 filter 的参数说明,是不是就一目了然了呢?

    我们也可以再仔细体会,单个滤波器卷积结果要压缩成 2 维的妙处,这样保证了卷积后的输出通道和卷积滤波器的数量对应上了。

    代码实现

    之前的文章,我实现卷积的过程只考虑到了 2 维,并且实现手法比较传统。

    def _con_each(src_block,kernel):
        pixel_count = kernel.size;
        pixel_sum = 0;
        _src = src_block.flatten();
        _kernel = kernel.flatten();
        
        
        for i in range(pixel_count):
            pixel_sum += _src[i]*_kernel[i];
            
        return pixel_sum 
    

    现在,可以进行改进。

    前面说过,卷积公式本质就是一个累乘然后累加的过程,它的结果是一个数值。而线性代数中两个向量的內积恰恰可以这样表示,所以完全可以改写。

    import numpy as np
    
    def _conv_epoch(src_block,filter):
        input = src_block.flatten()
        filter = filter.flatten().T
    
        return np.dot(input,filter)
    

    当然,完整的图像卷积需要扫描式地重复许多次。

    """
    input_size:(h,w,c)
    filter_size:(h,w,ic,oc)
    """
    def conv(img,input_size,filter_size,stride=1):
        ih = input_size[0]
        iw = input_size[1]
        ic = input_size[2]
    
        filter_oc = filter_size[3]
        filter_h = filter_size[0]
        filter_w = filter_size[1]
        filter_ic = filter_size[2]
    
        l = int((ih - filter_h) / stride + 1)
        m = int((iw - filter_w) / stride + 1)
    
        result = np.zeros(shape=(l,m,filter_oc),dtype=np.uint8)
    
        for i in range(l):
            for j in range(m):
                for k in range(filter_oc):
                    f = np.random.uniform(0,1,filter_w*filter_h*filter_ic).T
                    input = img[i:i+filter_h,j:j+filter_w,:]
    
                    result[i,j,k] = _conv_epoch(input,f)
    
        return result
    

    现在,我们可以测试一下我们的代码效果。

    def test():
        img = plt.imread("../datas/cat.jpg")
    
        print("img shape ",img.shape)
    
        result = conv(img,img.shape,(3,3,img.shape[2],3))
    
        plt.figure()
        plt.subplot(121)
        plt.imshow(img)
        plt.subplot(122)
        plt.imshow(result)
        plt.show()
    
    test()
    

    读入一张猫的照片,然后对照它的卷积效果,需要注意的是我设置的滤波器的数量为 3 ,这是为了便于演示。

    最终效果如下:
    在这里插入图片描述

    需要注意的是,滤波器的数值我完全是随机选择,但从效果上来看,它们还是抽取了一些轮廓细节。可见卷积操作的威力之大。在深度学习中,一个神经网络通常有成百上千个 filter,它们通过一反复学习,最终形成了可靠的特征表达能力。

    最后,我要说明的是,卷积过程很慢,特变是又 python 实现,虽然我已经在前一篇文章的基础上更改了卷积代码,让 for 循环改成了向量点积的方式,但整个图像的卷积过程,还可以改善,这涉及到一个叫做 im2col 的技术,它大致的原理是让卷积过程中,矩阵的乘法参与的更彻底,最后整个卷积过程用一个矩阵乘法表示,因为篇幅有限,有兴趣的同学可以自行搜索对应的文献。

    展开全文
  • 该方法不需要额外硬件电路,消除了对通道数量的限制。最后,通过蒙特卡罗仿真比较了所提出的方法获得的通道失配方差与Cramer-Rao下界(CRLB),并对实际400 Msps/12 bit高速数字化仪通道失配进行了测量。仿真与实验...
  • 那么进行卷积的时候如果采用32个5*5卷积,这里的32也就是最后输出的通道,也就是获得的特征图的数量。 1*1卷积看起来对维度没有变化,但实质上是对输入特征图的特征进行了进一步整理。 即使1x1卷积前后的张量大小...

    卷积网络中很重要的两个名词:通道和特征图

    最直观的感受:特征图 == 通道

    我们知道一张彩色图片由RGB三张图片组成,如图:
    在这里插入图片描述
    那么此处的三张图片就对应了三个通道,也可以说是三个特征图,不同的图侧重点不一样。

    那么进行卷积的时候如果采用32个5*5卷积,这里的32也就是最后输出的通道,也就是获得的特征图的数量。

    1*1卷积看起来对维度没有变化,但实质上是对输入特征图的特征进行了进一步整理。

    即使1x1卷积前后的张量大小完全不变,比如说16x16x64 -> 16x16x64这样的卷积,看上去好像是没有变化。但实际上,可能通过特征之间的互动,已经由之前的64个特征图组成了新的64个特征图。
    有时候我理解一个这样的1x1卷积操作,就会把它当成是一次对之前特征的整理。

    也就是相当于全连接网络。

    很有趣的特征图可视化
    在这里插入图片描述

    参考博客:卷积网络中的通道(Channel)和特征图(写的非常好)

    展开全文
  • 我们再前面创建通道的时候,通过configtx.yaml定义通道的基础配置包括 策略: 通道的读写权限策略等 Capabilities: 确保网络和通道以相同的方式处理交易,使用版本号进行定义。 Channel/Application: 控制...

    总目录:
    (0) 如何利用区块链保护知识产权
    (一)HyperLedger Fabric 2.0-release测试网络部署
    (二)Fabric2.0 first-network 生成配置说明
    (三)Fabric2.0启动网络脚本配置剖析
    (四)Fabric2.0通道实践
    (五)Fabric2.0 智能合约实践- 安装以及定义智能合约
    (六)Fabric2.0 智能合约实践- 升级智能合约
    (七)Fabric2.0智能合约实践-设置背书策略
    (八)Fabric2.0Java SDK实践-合约交易
    (九)Fabric2.0 通道实践-更新通道配置
    (十)Fabric2.0-动态添加组织
    (十一) Fabric2.0-使用编辑器调试go智能合约
    (十二)Fabric2.0-实现外部构建启动合约
    工具人大胆试探raft共识-你没见过的raft算法解释

    下面实践将基于已部署好的first-network.

    1.通道配置说明

    我们再前面创建通道的时候,通过configtx.yaml定义通道的基础配置包括

    • 策略:

    通道的读写权限策略等

    • Capabilities:

    确保网络和通道以相同的方式处理交易,使用版本号进行定义。

    • Channel/Application:

      控制应用程序通道的配置参数(添加/删除组织):修改这一部分配置需要大部分组织管理管理员的签名。
      将组织添加到通道:要实现添加到通道必须将组织的MSP等配置参数添加到组织配置,下一章将详细讲。
      组织相关参数:可以更改组织特定的任何参数(例如,标识锚点对等体或组织管理员的证书)。请注意,默认情况下,更改这些值将不需要大多数应用程序组织管理员,而仅需要组织本身的管理员
      
    • Channel/Orderer:

    控制排序节点相关参数

    • Batch size

      Batch size:这些参数决定了一个区块中交易的数量和大小。
      Batch timeout 在第一个交易到达其他交易之后,在切割区块之前要等待的时间。减小该值将改善等待时间,但是减小该值可能会由于不允许块填满其最大容量而降低吞吐量。
      Block validation: 该策略指定了被视为有效的块的签名要求。默认情况下,它需要订购组织的某些成员的签名。
      
    • Channel:

    控制peer跟orderer都需要同意的参数,需要大部分应用程序管理者同意

    orderer地址:客户端可以在其中调用orderer的Broadcast和Deliver功能的地址列表。peer在这些地址中随机选择,并在它们之间进行拉取块。
    Hashing structure :块数据是字节数组的数组。块数据的哈希计算为默克尔树。此值指定该Merkle树的宽度。目前,该值固定为4294967295。
    散列算法:用于计算编码到区块链块中的哈希值的算法。特别是,这会影响数据散列以及该块的先前的块散列字段。请注意,此字段当前只有一个有效值(SHA256),不应更改。
    Consensus type 共识类型: 为了能够将基于Kafka的orderer服务迁移到基于Raft的orderer服务,可以更改渠道的共识类型。
    

    2.更新通道

    2.1提取并解析通道配置

    更新通道配置的第一步是获取最新的配置块。这是一个三步过程。首先,我们将以protobuf格式提取通道配置,创建一个名为的文件config_block.pb。

    控制台数据docker exec -it cli bash进入cli

    peer channel fetch config config_block.pb -o $ORDERER_CONTAINER -c mychannel --tls --cafile $TLS_ROOT_CA
    

    控制台输入获取通道区块数码,并生成config_block.pb文件

    在这里插入图片描述

    .pb是protobuf格式,我们将他转成json版本

    继续再当前目录输入以下命令

    configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
    
    --input .pb文件路径
    --output 转json格式后输出文件路径
    

    生成config_block.json文件

    在这里插入图片描述

    看一下输出的config_block.json文件,数据很多

    最后,我们将从配置中排除所有不必要的元数据,使其更易于阅读。您可以随意调用该文件,但是在本示例中,我们将其称为config.json。

    执行以下命令

    jq .data.data[0].payload.data.config config_block.json > config.json
    

    部分数据截取如下:
    在这里插入图片描述

    为了待会比较,我们先复制一份

    cp config.json modified_config.json
    

    2.2 修改配置

    修改Batch size,将区块最大交易数量提高,原本max_message_count是10,我们修改为100。
    原本:
    在这里插入图片描述

    vi modified_config.json
    

    修改后:
    在这里插入图片描述

    2.2 重新编码跟提交配置

    首先,我们将config.json文件恢复为protobuf格式,创建一个名为的文件config.pb。然后,我们将对我们的modified_config.json文件执行相同的操作。之后,我们将计算两个文件之间的差,创建一个名为的文件config_update.pb。

    configtxlator proto_encode --input config.json --type common.Config --output config.pb
    configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
    configtxlator compute_update --channel_id mychannel --original config.pb --updated modified_config.pb --output config_update.pb
    

    现在我们已经计算出旧配置和新配置之间的差异config_update.pb,我们可以将更改应用于配置。

    configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
    

    查看差异配置

    在这里插入图片描述
    将差异配置重新编码

    echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json
    configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb
    

    提交配置

    peer channel update -f config_update_in_envelope.pb -c mychannel -o $ORDERER_CONTAINER --tls true --cafile $TLS_ROOT_CA
    

    控制台输出:
    在这里插入图片描述

    implicit policy evaluation failed - 0 sub-policies were satisfied, but this policy requires 1 of the 'Admins' sub-policies to be satisfied

    上面的错误应该是很熟悉了,就是修改这个配置不够权限,提示需要Admin,由于batchSize属于排序节点的配置,所以这里的Admin是OrdererMSP.admin
    这里要注意一点的是 first-network的排序节点是没有区份admin、client这些需要再crypto-config.yaml打开配置如下:
    在这里插入图片描述

    切换OrdererMSP.admin环境变量如下:

    CORE_PEER_LOCALMSPID=OrdererMSP
    CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp/
    

    原本应该调用peer channel signconfigtx 进行签名的,但是peer channel update 的时候会自动带客户端签名,这里我们直接update就行了,因为他需要1个Admin而已

    控制台输入:

    peer channel update -f config_update_in_envelope.pb -c mychannel -o $ORDERER_CONTAINER --tls true --cafile $TLS_ROOT_CA
    

    输出结果如下:

    在这里插入图片描述
    通道配置更新成功

    3. 总结

    更新通道配置步骤主要是获取现有配置,修改配置,提交配置,看起来比较简单,但是有一点要留意的是权限问题,想刚刚上面就提示没有收集够签名,这时候我们应该关注日志输出内容,回顾我们原本configtx.yaml的配置,找到需要的签名,满足策略。

    推荐阅读:(十)Fabric2.0-动态添加组织

    展开全文
  • 关于卷积层的输入输出通道数问题

    万次阅读 2018-08-20 14:48:28
    卷积层的输入是一张或者多张图片,图片有可能是单通道或者多通道,但不管是单通道还是多通道,经过卷积层后,得到的输出map都是单通道的特征图。 1、假如输入1张图片,通道数为5,那么在设计卷积核的时候,对应的...
  • 卷积网络中的通道(channel)和特征图(feature map)

    千次阅读 多人点赞 2020-04-01 16:13:05
    卷积网络中的通道(Channel)和特征图 转载自:https://www.jianshu.com/p/bf8749e15566 今天介绍卷积网络中一个很重要的概念,通道(Channel),也有叫特征图(feature map)的。 首先,之前的文章也提到过了,...
  • 拾遗-卷积神经网络关于通道数改变

    千次阅读 多人点赞 2020-02-16 11:24:38
    RGB图像有3个通道(12*12*3),所以卷积核也要有3个通道(5*5*3),对像素图进行卷积后得到的结果是8*8*1而不是8*8*3的图像。最后像素图的深度(输出图像的信道数)取决于卷积核的个数。 如果要得到8*8*256的结果...
  • Channel Attention 通道注意力

    千次阅读 2021-10-21 13:17:05
    通道注意力总结SE-...
  • 卷积过程中关于通道数的问题

    万次阅读 多人点赞 2019-09-29 22:59:37
    RGB图像有3个通道(12*12*3),所以卷积核也要有3个通道(5*5*3),对像素图进行卷积后得到的结果是8*8*1而不是8*8*3的图像。最后像素图的深度(输出图像的信道数)取决于卷积核的个数。 如果要得到8*8*256的结果...
  • (9)隐蔽通道重点知识复习笔记

    千次阅读 2017-12-14 10:56:26
    隐蔽通道
  • 为了简化通道创建流程并增强隐私性和通道的扩展性,现在可以创建应用通道而不需要先创建“systemchannel”(由orderingservice管理)
  • 卷积网络中的通道(Channel)理解

    千次阅读 2020-06-27 10:51:50
    其中池化层并不会对通道之间的交互有影响,只是在各个通道中进行操作。 而卷积层则可以在通道通道之间进行交互,之后在下一层生成新的通道,其中最显著的就是Incept-Net里大量用到的1x1卷积操作。基本上完全就是在...
  • NIO学习笔记——通道(channel)详解

    万次阅读 2017-06-25 00:50:16
    通道可以形象地比喻为银行出纳窗口使用的气动导管。您的薪水支票就是您要传送的信息,载体(Carrier)就好比一个缓冲区。您先填充缓冲区(将您的支票放到载体上),接着将缓冲“写”到通道中(将载体丢进导管中),...
  • 多个输入通道 参数图像可能有RGB三个通道 转换为灰度会丢失信息 每一个通道都有一个卷积核,结果是所有通道卷积结果的和 用公式表达如下:这里cic_ici​就是输入的通道数,卷积核的个数应该和输入的通道数一样,...
  • 扩容解决方案:状态通道

    万次阅读 2019-05-13 18:19:22
    在以太坊中,我们定义扩容为随着用户(dApp)数量提高,提高主网性能(吞吐量,延迟)的能力,并且不会对用户体验(gas 价格,转账时间)造成什么影响。随着网络中增加的东西变多,网络架构一定要能够适应新的需求,...
  • 卷积网络中的通道(Channel)和特征图

    千次阅读 2020-09-02 16:52:05
    卷积网络中的通道(Channel)和特征图 冬天到了,动物们又进入了交配...哦不,冬眠的季节。 每天被冻得什么都不想干,只想吃饭睡觉数星星。Orz 今天介绍卷积网络中一个...其中池化层并不会对通道之间的交互有影响,只是
  • 利用图像处理软件,可对每层做单独处理,而不是影响其他层的图像内容。在新建一个图像文件时,系统会自动为其建立一个背景层,该层相当于一块画布,可在上面做贴图、绘画及其他图像处理工作。若一个图像有多个图层,...
  • 卷积、池化、全连接操作、通道数计算、filter、kernel
  • 定时器互补通道PWM输出

    千次阅读 2020-08-20 10:59:00
    简介:本文介绍STM32系列如何使用timer1的第TIM1_CH1N/TIM1_CH1通道(PE8/PE9)产生PWM。 1、PWM是什么 1、概念 脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量...
  • STM32使用ADC+DMA进行多通道模拟量采集 (踩坑及通俗解析) ​ 利用STM32的片上外设可采集多个模拟量(如传感器数值),并在嵌入式程序中使用。如果只使用了一个通道,用时令ADC转换而后读取DR寄存器即可。多通道时...
  • 针对Faster-RCNN等卷积网络图片输入通道数的问题,给出一种解决方法: 一般的卷积网络都是rgb三个通道,但这限制了单通道灰度图的检测,这里先给出一种比较笨拙但能解决问题的办法:强行给图片赋予三个通道出来: ...
  • 经典网络通道剪枝总结

    千次阅读 2020-08-10 12:31:35
    2.shortcut和Conv-BN-ReLU都剪(前几层除外),注意保持输入和输出的通道数量一致。 shufflenetv2 网络解读:https://zhuanlan.zhihu.com/p/67009992 v1的结构如图(a)、(b) v2的结构如图©、(d) shufflenetv2 ...
  • 卷积网络中的通道、特征图、过滤器和卷积核 1.feature map 1.1 feature map 1.2 feature map怎么生成的? 1.3 多个feature map 的作用是什么? 2.卷积核 2.1 定义 2.2 形状 2.3卷积核个数的理解 3.filter ...
  • 服务器双通道与单通道的差别

    千次阅读 2017-09-22 15:14:16
    【IT168 评测】随着...内存厂商只要提高内存的运行频率,就可以增加带宽,但是由于受到晶体管本身的特性和制造技术的制约,内存频率不可能无限制地提升,所以在全新的内存研发出来之前,多通道内存技术就成了一种
  • 通道图片的卷积

    千次阅读 多人点赞 2019-10-26 15:33:33
    一、多通道(channels)图片的卷积 网上很多资料都是单通道的卷积,很容易理解。但多通道的卷积更普遍,理解较复杂,需要单独提一下。彩色图像,一般都是RGB三个通道(channel)的,因此输入数据的维度一般有三个:...
  • 如题:2020年8月 分析: 其他三种方式,程序控制、中断控制、DMA方式、这些都好理解...进一步减少数据输入输出对整个系统的运行效率的影响。前三个选项都是书止明确标明的,但要理解:C灵活增加外设,为什么? ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,782
精华内容 38,712
关键字:

影响通道的数量的是