Python(PyTorch和TensorFlow)图像分割卷积网络导图(生物医学)
🎯要点
- 语义分割图像
- 三层分割椭圆图像
- 脑肿瘤图像分割
- 动物图像分割
- 皮肤病变分割
- 多模态医学图像
- 多尺度特征生物医学
- 肖像多类和医学分割
- 通用图像分割模板
- 腹部胰腺图像分割分类注意力网络
- 病灶边界分割
- 气胸图像分割

Python生物医学图像卷积网络
该网络由收缩路径和扩展路径组成,收缩路径是一种典型的卷积网络,由重复应用卷积组成,每个卷积后跟一个整流线性单元 (ReLU) 和一个最大池化操作。在收缩过程中,空间信息减少,而特征信息增加。扩展路径通过一系列向上卷积和连接将特征和空间信息与收缩路径中的高分辨率特征相结合。
在生物医学图像分割中有很多应用,例如脑图像分割和肝脏图像分割以及蛋白质结合位点预测。也应用于物理科学,例如在材料显微照片的分析中。以下是此网络的一些变体和应用:
- 像素级回归及其在全色锐化中的应用
- 从稀疏注释学习密集体积分割
- 在 ImageNet 上进行预训练以进行图像分割
- 图像到图像的转换以估计荧光染色
- 蛋白质结构的结合位点预测
网络训练中数学计算
能量函数是通过最终特征图上的逐像素 soft-max 与交叉熵损失函数相结合来计算的。soft-max 定义为 p k ( x ) = exp ( a k ( x ) ) / ( ∑ k ′ = 1 K exp ( a k ′ ( x ) ) ) p_k( x )=\exp \left(a_k( x )\right) /\left(\sum_{k^{\prime}=1}^K \exp \left(a_{k^{\prime}}( x )\right)\right) pk(x)=exp(ak(x))/(∑k′=1Kexp(ak′(x))),其中 a k ( x ) a_k( x ) ak(x) 表示像素位置 x ∈ Ω x \in \Omega x∈Ω且 Ω ⊂ Z 2 \Omega \subset Z ^2 Ω⊂Z2 处特征通道 k k k 的激活。 K K K 是类别的数量, p k ( x ) p_k( x ) pk(x)是近似的最大函数。然后,交叉熵在每个位置上惩罚 p ℓ ( x ) ( x ) p_{\ell( x )}( x ) pℓ(x)(x) 与 1 的偏差,使用下式
E = ∑ x ∈ Ω w ( x ) log ( p ℓ ( x ) ( x ) ) E=\sum_{ x \in \Omega} w( x ) \log \left(p_{\ell( x )}( x )\right) E=x∈Ω∑w(x)log(pℓ(x)(x))
其中 ℓ : Ω → { 1 , … , K } \ell: \Omega \rightarrow\{1, \ldots, K\} ℓ:Ω→{1,…,K} 是每个像素的真实标签, w : Ω → R w: \Omega \rightarrow R w:Ω→R 是我们引入的权重图,以赋予某些像素更多的重要性在训练中。我们预先计算每个地面真实分割的权重图,以补偿训练数据集中某一类像素的不同频率,并迫使网络学习我们在接触细胞之间引入的小分离边界。分离边界使用形态学运算计算。然后计算权重图为
w ( x ) = w c ( x ) + w 0 ⋅ exp ( − ( d 1 ( x ) + d 2 ( x ) ) 2 2 σ 2 ) w( x )=w_c( x )+w_0 \cdot \exp \left(-\frac{\left(d_1( x )+d_2( x )\right)^2}{2 \sigma^2}\right) w(x)=wc(x)+w0⋅exp(−2σ2(d1(x)+d2(x))2)
其中 w c : Ω → R w_c:\Omega\rightarrow R wc:Ω→R是平衡类别频率的权重图, d 1 : Ω → R d_1:\Omega\rightarrow R d1:Ω→R表示到最近单元格边界的距离, d 2 : Ω → R d_2:\Omega\rightarrow R d2:Ω→R表示到第二个最近单元格边界的距离。在我们的实验中,我们设置 w 0 = 10 w_0=10 w0=10 和 σ ≈ 5 \sigma \approx 5 σ≈5 像素。
当只有少量训练样本可用时,数据增强对于教会网络所需的不变性和鲁棒性至关重要。对于显微图像,我们主要需要平移和旋转不变性以及对变形和灰度值变化的鲁棒性。尤其是训练样本的随机弹性变形似乎是用很少的带注释图像训练分割网络的关键概念。
代码构建模型
实现可分为三个部分。首先,我们将定义收缩路径中使用的编码器块。该块由两个 3×3 卷积层、后跟 ReLU 激活层和 2×2 最大池化层组成。第二部分是解码器块,它从下层获取特征图,对其进行上转换、裁剪并将其与同级编码器数据连接,然后执行两个 3×3 卷积层,然后执行 ReLU 激活。第三部分是使用这些块定义模型。
编码模块
def encoder_block(inputs, num_filters): x = tf.keras.layers.Conv2D(num_filters, 3, padding = 'valid')(inputs) x = tf.keras.layers.Activation('relu')(x) x = tf.keras.layers.Conv2D(num_filters, 3, padding = 'valid')(x) x = tf.keras.layers.Activation('relu')(x) x = tf.keras.layers.MaxPool2D(pool_size = (2, 2), strides = 2)(x) return x
解码模块
def decoder_block(inputs, skip_features, num_filters): x = tf.keras.layers.Conv2DTranspose(num_filters, (2, 2), strides = 2, padding = 'valid')(inputs) skip_features = tf.image.resize(skip_features, size = (x.shape[1], x.shape[2])) x = tf.keras.layers.Concatenate()([x, skip_features]) x = tf.keras.layers.Conv2D(num_filters, 3, padding = 'valid')(x) x = tf.keras.layers.Activation('relu')(x) x = tf.keras.layers.Conv2D(num_filters, 3, padding = 'valid')(x) x = tf.keras.layers.Activation('relu')(x) return x
打印模型简要
import tensorflow as tf def model(input_shape = (256, 256, 3), num_classes = 1): inputs = tf.keras.layers.Input(input_shape) s1 = encoder_block(inputs, 64) s2 = encoder_block(s1, 128) s3 = encoder_block(s2, 256) s4 = encoder_block(s3, 512) b1 = tf.keras.layers.Conv2D(1024, 3, padding = 'valid')(s4) b1 = tf.keras.layers.Activation('relu')(b1) b1 = tf.keras.layers.Conv2D(1024, 3, padding = 'valid')(b1) b1 = tf.keras.layers.Activation('relu')(b1) s5 = decoder_block(b1, s4, 512) s6 = decoder_block(s5, s3, 256) s7 = decoder_block(s6, s2, 128) s8 = decoder_block(s7, s1, 64) outputs = tf.keras.layers.Conv2D(num_classes, 1, padding = 'valid', activation = 'sigmoid')(s8) model = tf.keras.models.Model(inputs = inputs, outputs = outputs, name = 'NetModel') return model if __name__ == '__main__': model = model(input_shape=(572, 572, 3), num_classes=2) model.summary()
输出
Model: "NetModel"
__________________________________________________________________________________________________Layer (type) Output Shape Param # Connected to
==================================================================================================input_6 (InputLayer) [(None, 572, 572, 3 0 [] )] conv2d_95 (Conv2D) (None, 570, 570, 64 1792 ['input_6[0][0]'] ) activation_90 (Activation) (None, 570, 570, 64 0 ['conv2d_95[0][0]'] ) conv2d_96 (Conv2D) (None, 568, 568, 64 36928 ['activation_90[0][0]'] ) activation_91 (Activation) (None, 568, 568, 64 0 ['conv2d_96[0][0]'] ) max_pooling2d_20 (MaxPooling2D (None, 284, 284, 64 0 ['activation_91[0][0]'] ) ) conv2d_97 (Conv2D) (None, 282, 282, 12 73856 ['max_pooling2d_20[0][0]'] 8) activation_92 (Activation) (None, 282, 282, 12 0 ['conv2d_97[0][0]'] 8) conv2d_98 (Conv2D) (None, 280, 280, 12 147584 ['activation_92[0][0]'] 8) activation_93 (Activation) (None, 280, 280, 12 0 ['conv2d_98[0][0]'] 8) max_pooling2d_21 (MaxPooling2D (None, 140, 140, 12 0 ['activation_93[0][0]'] ) 8) conv2d_99 (Conv2D) (None, 138, 138, 25 295168 ['max_pooling2d_21[0][0]'] 6) activation_94 (Activation) (None, 138, 138, 25 0 ['conv2d_99[0][0]'] 6) conv2d_100 (Conv2D) (None, 136, 136, 25 590080 ['activation_94[0][0]'] 6) activation_95 (Activation) (None, 136, 136, 25 0 ['conv2d_100[0][0]'] 6) max_pooling2d_22 (MaxPooling2D (None, 68, 68, 256) 0 ['activation_95[0][0]'] ) conv2d_101 (Conv2D) (None, 66, 66, 512) 1180160 ['max_pooling2d_22[0][0]'] activation_96 (Activation) (None, 66, 66, 512) 0 ['conv2d_101[0][0]'] conv2d_102 (Conv2D) (None, 64, 64, 512) 2359808 ['activation_96[0][0]'] activation_97 (Activation) (None, 64, 64, 512) 0 ['conv2d_102[0][0]'] max_pooling2d_23 (MaxPooling2D (None, 32, 32, 512) 0 ['activation_97[0][0]'] ) conv2d_103 (Conv2D) (None, 30, 30, 1024 4719616 ['max_pooling2d_23[0][0]'] ) activation_98 (Activation) (None, 30, 30, 1024 0 ['conv2d_103[0][0]'] ) conv2d_104 (Conv2D) (None, 28, 28, 1024 9438208 ['activation_98[0][0]'] ) activation_99 (Activation) (None, 28, 28, 1024 0 ['conv2d_104[0][0]'] ) conv2d_transpose_20 (Conv2DTra (None, 56, 56, 512) 2097664 ['activation_99[0][0]'] nspose) tf.image.resize_20 (TFOpLambda (None, 56, 56, 512) 0 ['max_pooling2d_23[0][0]'] ) concatenate_20 (Concatenate) (None, 56, 56, 1024 0 ['conv2d_transpose_20[0][0]', ) 'tf.image.resize_20[0][0]'] conv2d_105 (Conv2D) (None, 54, 54, 512) 4719104 ['concatenate_20[0][0]'] activation_100 (Activation) (None, 54, 54, 512) 0 ['conv2d_105[0][0]'] conv2d_106 (Conv2D) (None, 52, 52, 512) 2359808 ['activation_100[0][0]'] activation_101 (Activation) (None, 52, 52, 512) 0 ['conv2d_106[0][0]'] conv2d_transpose_21 (Conv2DTra (None, 104, 104, 25 524544 ['activation_101[0][0]'] nspose) 6) tf.image.resize_21 (TFOpLambda (None, 104, 104, 25 0 ['max_pooling2d_22[0][0]'] ) 6) concatenate_21 (Concatenate) (None, 104, 104, 51 0 ['conv2d_transpose_21[0][0]', 2) 'tf.image.resize_21[0][0]'] conv2d_107 (Conv2D) (None, 102, 102, 25 1179904 ['concatenate_21[0][0]'] 6) activation_102 (Activation) (None, 102, 102, 25 0 ['conv2d_107[0][0]'] 6) conv2d_108 (Conv2D) (None, 100, 100, 25 590080 ['activation_102[0][0]'] 6) activation_103 (Activation) (None, 100, 100, 25 0 ['conv2d_108[0][0]'] 6) conv2d_transpose_22 (Conv2DTra (None, 200, 200, 12 131200 ['activation_103[0][0]'] nspose) 8) tf.image.resize_22 (TFOpLambda (None, 200, 200, 12 0 ['max_pooling2d_21[0][0]'] ) 8) concatenate_22 (Concatenate) (None, 200, 200, 25 0 ['conv2d_transpose_22[0][0]', 6) 'tf.image.resize_22[0][0]'] conv2d_109 (Conv2D) (None, 198, 198, 12 295040 ['concatenate_22[0][0]'] 8) activation_104 (Activation) (None, 198, 198, 12 0 ['conv2d_109[0][0]'] 8) conv2d_110 (Conv2D) (None, 196, 196, 12 147584 ['activation_104[0][0]'] 8) activation_105 (Activation) (None, 196, 196, 12 0 ['conv2d_110[0][0]'] 8) conv2d_transpose_23 (Conv2DTra (None, 392, 392, 64 32832 ['activation_105[0][0]'] nspose) ) tf.image.resize_23 (TFOpLambda (None, 392, 392, 64 0 ['max_pooling2d_20[0][0]'] ) ) concatenate_23 (Concatenate) (None, 392, 392, 12 0 ['conv2d_transpose_23[0][0]', 8) 'tf.image.resize_23[0][0]'] conv2d_111 (Conv2D) (None, 390, 390, 64 73792 ['concatenate_23[0][0]'] ) activation_106 (Activation) (None, 390, 390, 64 0 ['conv2d_111[0][0]'] ) conv2d_112 (Conv2D) (None, 388, 388, 64 36928 ['activation_106[0][0]'] ) activation_107 (Activation) (None, 388, 388, 64 0 ['conv2d_112[0][0]'] ) conv2d_113 (Conv2D) (None, 388, 388, 2) 130 ['activation_107[0][0]'] ==================================================================================================
Total params: 31,031,810
Trainable params: 31,031,810
Non-trainable params: 0
__________________________________________________________________________________________________
图像分割和预测
import numpy as np
from PIL import Image
from tensorflow.keras.preprocessing import image img = Image.open('cat.png')
img = img.resize((572, 572))
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array[:,:,:3], axis=0)
img_array = img_array / 255.model = umodel(input_shape=(572, 572, 3), num_classes=2) predictions = model.predict(img_array)
predictions = np.squeeze(predictions, axis=0)
predictions = np.argmax(predictions, axis=-1)
predictions = Image.fromarray(np.uint8(predictions*255))
predictions = predictions.resize((img.width, img.height)) predictions.save('predicted_image.jpg')
predictions
👉更新:亚图跨际
相关文章:
Python(PyTorch和TensorFlow)图像分割卷积网络导图(生物医学)
🎯要点 语义分割图像三层分割椭圆图像脑肿瘤图像分割动物图像分割皮肤病变分割多模态医学图像多尺度特征生物医学肖像多类和医学分割通用图像分割模板腹部胰腺图像分割分类注意力网络病灶边界分割气胸图像分割 Python生物医学图像卷积网络 该网络由收缩路径和扩…...
DevOps实现CI/CD实战(七)- Jenkins集成k8s实现自动化CI
自动化CI操作 1. 安装gitlab plugin 工具 ##### 2. 配置流水线任务的构建触发器,复制URL:http://192.168.201.111:8080/project/pipeline 3. Gitlab配置Webhooks,将上面的url:http://192.168.201.111:8080/project/pipeline粘…...
从ES6到ES2023 带你深入了解什么是ES
从ES6到ES2023,我们深入探索ECMAScript(简称ES)的演变与发展,了解这一JavaScript标准背后的技术革新和进步。ECMAScript作为JavaScript的标准化版本,每年都在不断推出新版本,为开发者带来更加丰富和强大的功…...
openVX加速-常见问题:适用场景、AI加速、安装方式等
1. 哪些算法处理推荐使用 OpenVX OpenVX 是非常适合图像处理和计算机视觉任务的框架,特别是在需要高性能和硬件加速的场景下。如果你的前处理和后处理涉及到图像滤波、边缘检测、颜色转换等操作,使用 OpenVX 可以带来性能提升。 OpenVX 更适合处理以下…...
国产芯片LT8711HE:TYPE-C/DP1.2转HDMI2.0转换器,4k60Hz高分辨率
以下为LT8711HE芯片的简单介绍,如有介绍不尽之处,请指出 LT8711HE是一个高性能的Type-C/DP1.2到HDMI2.0转换器,用于连接USB Type-C源或DP1.2源到HDMI2.0接收器。 LT8711HE集成了一个DP1.2兼容的接收器和一个HDMI2.0兼容的发射器。另外&…...
论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey
Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs&…...
Java+Swing用户信息管理系统
JavaSwing用户信息管理系统 一、系统介绍二、功能展示1.管理员登陆2.用户信息查询3.用户信息添加4.用户信息修改5.用户信息删除 三、系统实现1.UserDao .java 四、其它1.其他系统实现 一、系统介绍 该系统实现了管理员系统登陆、用户信息查询、用户信息添加、用户信息修改、用…...
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值特殊矩阵的压缩存储
文章目录 栈的应用1.栈的括号匹配代码实战:问题分析:2.栈的表达式求值2.1 中缀、后缀、前缀表达式2.2 中缀表达式改写为后缀表达式(手算)2.3 后缀表达式的计算(手算)2.4 中缀表达式转前缀表达式(手算)和计算前缀表达式2.5后缀表达式的计算(机算)2.6 中缀表达式转后缀…...
C# 关于多线程同步不同实现方式
栏目总目录 AutoResetEvent class MainClass {// the array of consumer threadsprivate static List<Thread> consumers new List<Thread> ();// the task queueprivate static Queue<Action> tasks new Queue<Action>();// the synchronisation o…...
【人工智能学习笔记】4_2 深度学习基础之多层感知机
感知机概述 感知机是人工智能最早的模型,是一种有监督的算法,本质上是一个二分类问题,是神经网络和支持向量机的基础缺点:感知机智能解决单纯的线性问题 感知机的过程 多层感知机的层级结构 多层感知机的层级结构主要包括输入层、隐藏层和输出层、可以用于拟合非线性函数。…...
WPS2019如何打出各种横线
WPS2019如何打出各种横线 测试于WPS2019...
Vue获取后端重定向拼接的参数
前言 比如我们要重定向这样一个连接: http://192.168.2.189:8081?nameadmin springboot重定向: Vue获取: getParam(param) {var reg new RegExp("(^|&)" param "([^&]*)(&|$)");var r location.searc…...
vscode spring boot项目编辑yaml不自动提示补全如何解决
文章目录 properties能够自动弹出提示但是YAML文件就不会自动弹出提示ctrl空格不出提示的解决办法 properties能够自动弹出提示 但是YAML文件就不会自动弹出提示 只是不会自动弹出来而已,按ctrl空格即可解决 ctrl空格不出提示的解决办法 如果按ctrl空格没有用 …...
算法练习题19——leetcode141环形链表
题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…...
基于人类反馈的强化学习概述
文章目录 RLHF 概述人类反馈数据的收集由于对齐标准难以通过形式化的优化目标进行建模,因此研究人员提出了基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF),引入人类反馈对大语言模型的行为进行指导。我们将首先介绍基于人类反馈的强化学习的整…...
【SIT1463Q】带振铃抑制功能的CAN收发器,替代TJA1463
【SIT1463Q】带振铃抑制功能的CAN收发器,替代TJA1463 SIT1463Q核心亮点: 满足ISO11898-2:2016高速CAN规范的物理层要求和CiA601-4:2019 SIC规范要求。 支持高达8Mbps的数据速率。 更稳定的位时序,比特对称性增强,降低…...
CCF刷题计划——坐标变换(其二)(前缀和)
坐标变换(其二) 首先我按照一般的逻辑写出来,居然超时了??? 之后想了想,还是觉得大有可为的,对拉伸前缀积,对旋转前缀和成功解决问题。 80分:超时 #inclu…...
游戏开发简述
《黑神话:悟空》爆红后,游戏开发一时成为热点。作为个人或小公司,能否进入游戏开发领域。从纯技术角度而言,并不是可望不可即: 另:学会了,哪怕自己干不成,招游戏开发的岗位也不少&am…...
最新前端开发VSCode高效实用插件推荐清单
在此进行总结归类工作中用到的比较实用的、有助于提升开发效率的VSCode插件。大家有其他的好插件推荐的也欢迎留言评论区哦😄 基础增强 Chinese (Simplified) Language Pack: 提供中文界面。 Code Spell Checker: 检查代码中的拼写错误。 ESLint: 集成 ESLint&…...
分布式调度方案:Elastic-Job
文章目录 一、什么是分布式调度二、Elastic-Job 介绍三、Elastic-Job 实战3.1 环境搭建3.1.1 本地部署3.1.2 服务器部署3.1.3 Zookeeper 管控台界面 3.2 入门案例3.3 SpringBoot 集成 Elastic-Job3.4 任务分片(★)3.5 Dataflow 类型调度任务 一、什么是分…...
终极Pandoc文档转换指南:5分钟掌握40+格式互转神器
终极Pandoc文档转换指南:5分钟掌握40格式互转神器 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 还在为不同文档格式之间的转换而烦恼吗?学术论文需要LaTeX排版,技术文档要…...
Unity中大型项目架构选型:GameFramework与QFramework实战对比
1. 为什么这两个框架值得你花时间搞懂——不是“又一个Unity插件”,而是项目基建的分水岭 在Unity中写过三个以上正式项目的人都会遇到同一个临界点:当功能模块超过20个、脚本数量突破500、团队从1人扩展到5人时,原本“拖拽组件写MonoBehavi…...
医疗票据 OCR 识别 API 多场景落地指南:医保结算 + 商保理赔 + 医疗信息化(附 Python/Java 完整示例)
《医疗 OCR 识别 API 怎么选?(报告单 / 发票 / 检测单)》医疗票据 OCR 识别 API 多场景落地指南:医保结算 商保理赔 医疗信息化(附 Python/Java 完整示例) 导语:每天上万张医疗票据ÿ…...
森林The Forest - 服务器开服
对于想要自建游戏服务器的玩家,云鸢互联是一个不错的专业联机平台选择。它提供稳定、低延迟且724小时在线的服务器环境,助你轻松打造专属游戏世界。平台主打极致的新手友好——全图形化控制面板,无需编写代码,也无需掌握Linux命令…...
AI 超声波电动护手霜加热器智能功率 MOSFET 完整选型方案
2026年随着 AI 技术在个人护理领域的深度渗透(如智能温控、超声波促渗、肤质自适应),电动护手霜加热器对功率 MOSFET 提出更高要求:低压大电流、超小封装、逻辑电平驱动、高可靠性。微碧半导体(VBsemi)基于…...
机器学习博士生存指南:问题定义、三维技术栈与认知带宽管理
1. 这不是“读博指南”,而是一份机器学习方向博士生的生存手记 我带过7届硕士、指导过4位博士,自己也从MIT CSAIL实验室的PhD candidate一路走到现在,在工业界和学术界都完整跑过ML方向的闭环——从ICML投稿被拒5次到最终以共同作者身份参与N…...
Burp Suite安装失败原因与Java环境精准配置指南
1. 为什么Burp Suite的安装总让人卡在第一步?——从“打不开”到“能用”的真实断点 你是不是也经历过:下载完Burp Suite官方压缩包,双击 burpsuite_pro.jar 没反应?或者弹出一句“找不到Java环境”就戛然而止?又或…...
Unity URP中_Material Stencil属性报错的四层根因与修复
1. 这个报错不是材质没写对,而是渲染管线在“敲门问权限” 刚在Unity 2021.3 LTS项目里切完URP(Universal Render Pipeline)后打包iOS,突然弹出一行红字: Material xxx doesnt have _Stencil property 。我第一反应是…...
我用 DuckDB + Python 搭了个全自动日报系统:68 行代码,7 个踩坑实录
# 我用 DuckDB Python 搭了个全自动日报系统:68 行代码,7 个踩坑实录> 总周期:3 天业余时间(每天下班 2 小时) > 总成本:≈ 服务器 29/月(已有) > 技术栈:Duck…...
SPT-AKI存档编辑器:掌控离线塔科夫游戏进度的终极工具
SPT-AKI存档编辑器:掌控离线塔科夫游戏进度的终极工具 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_mirrors/s…...
