书接上文,助力智能化诊断高质提效,基于轻量级CNN模型MobileNet开发构建人体手骨X光骨骼骨龄分析识别系统

骨龄是骨骼年龄的简称,需要借助于骨骼在X光摄像中的特定图像来确定。通常要拍摄左手手腕部位的X光片,医生通过X光片观察来确定骨龄。这在临床上是一件非常消耗精力和时间的一项放射临床工作。写一个骨龄可能要10多分钟去完成。如果一天要写几十个骨龄,那么基本上一天要消耗掉巨大的时间精力了,随着智能化科技技术与设备的快速发展与广泛普及,越来越多的行业开始接入AI,希望借助于AI的能力来实现行业领域的高质提效,对于医学领域来说更是如此,本文的主要目的就是想要从实验实践分析的角度来探索AI助力赋能的可行性。在上文:

《助力智能化诊断高质提效,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建X光骨骼医疗场景下人体手骨X光图像骨骼检测识别系统》

我们基于经典的YOLOv5目标检测模型开发构建了用于人体手骨个X光目标检测识别模型,之后我们需要对YOLOv5模型检测到的不同类型的骨骼进行自动化的识别得到骨骼的等级进而通过RUS-CHN计分法来计算得到当前手骨骨骼图像的骨龄数据。

首先看下实例效果:

简单看下实例数据集情况:

在前文已经完成的目标检测模型的基础上,我们需要对检测到的不同的骨骼进行切分来构建我们所需要的数据集,最终如下:

每种不同类别下划分为不同的等级,如下:

实例数据如下:

本文识别模型的开发选择基于轻量级CNN的翘楚MobileNet来进行开发构建,MobileNet模型是一种轻量级的卷积神经网络模型,主要用于在移动设备和嵌入式设备上进行实时图像分类和目标检测。发展迭代至今已经演变出来了v1-v3三个大版本,其中v3版本包含了large和small两款不同参数量级的模型。
MobileNetV1:
MobileNetV1利用分组卷积降低网络的计算量,并将分组卷积应用到极致,即网络的分组数与网络的channel数量相等,使网络的计算量减到最低。但这样会导致channel之间的交互缺失,所以作者又使用了point-wise conv,即使用1x1的卷积进行channel之间的融合。同时,MobileNetV1还采用了直筒结构。

MobileNetV2:
MobileNetV2引入了bottleneck结构,并将bottleneck结构变成了纺锤型。与ResNet不同,MobileNetV2先放大特征图的尺寸,再缩小尺寸,以增加感受野。同时,MobileNetV2去掉了Residual Block最后的ReLU激活函数。这些改进使得MobileNetV2在保持高性能的同时进一步降低了模型大小和计算量。

MobileNetV3:
MobileNetV3是MobileNet系列的最新版本,它采用了AutoML的方法为给定的问题找到最佳的神经网络架构。MobileNetV3提出了两种模型大小的配置:Large和Small。

MobileNetV3-Large:
MobileNetV3-Large在构建模型时采用了多个创新性的技术。首先,它综合了MobileNetV1和MobileNetV2的优点,包括分组卷积、1x1的卷积进行channel之间的融合、以及纺锤型的bottleneck结构。其次,MobileNetV3-Large引入了特有的bneck结构,该结构综合了以下四个特点:
MobileNetV2的具有线性瓶颈的逆残差结构(the inverted residual with linear bottleneck)。即先利用1x1卷积进行升维度,再进行下面的操作,并具有残差边。
MobileNetV1的深度可分离卷积(depthwise separable convolutions)。在输入1x1卷积进行升维度后,进行3x3深度可分离卷积。
轻量级的注意力模型。这个注意力机制的作用方式是调整每个通道的权重。
利用h-swish代替swish函数。在结构中使用了h-swish激活函数,代替swish函数,减少运算量,提高性能。
此外,MobileNetV3-Large还使用了线性瓶颈结构来进一步减少模型的参数数量和计算量。线性瓶颈结构是一种将输入通道数和输出通道数都进行压缩的结构,它可以将模型的参数数量和计算量降低到最小。

MobileNetV3-Small:
相对于MobileNetV3-Large,MobileNetV3-Small更注重模型的轻量级和计算效率。它采用了深度可分离卷积来减少模型的参数数量和计算量,从而实现在低功耗设备上的高效运算。同时,MobileNetV3-Small还采用了线性瓶颈结构和残差连接等技术来提高模型的分类性能和训练稳定性。

我们这里使用的是v1模型,核心代码实现如下所示:

def MobileNet(input_shape=None, alpha=1.0, depth_multiplier=1, dropout=1e-3, classes=1000
):img_input = Input(shape=input_shape)x = convBlock(img_input, 32, alpha, strides=(2, 2))x = dwConvBlock(x, 64, alpha, depth_multiplier, block_id=1)x = dwConvBlock(x, 128, alpha, depth_multiplier, strides=(2, 2), block_id=2)x = dwConvBlock(x, 128, alpha, depth_multiplier, block_id=3)x = dwConvBlock(x, 256, alpha, depth_multiplier, strides=(2, 2), block_id=4)x = dwConvBlock(x, 256, alpha, depth_multiplier, block_id=5)x = dwConvBlock(x, 512, alpha, depth_multiplier, strides=(2, 2), block_id=6)x = dwConvBlock(x, 512, alpha, depth_multiplier, block_id=7)x = dwConvBlock(x, 512, alpha, depth_multiplier, block_id=8)x = dwConvBlock(x, 512, alpha, depth_multiplier, block_id=9)x = dwConvBlock(x, 512, alpha, depth_multiplier, block_id=10)x = dwConvBlock(x, 512, alpha, depth_multiplier, block_id=11)x = dwConvBlock(x, 1024, alpha, depth_multiplier, strides=(2, 2), block_id=12)x = dwConvBlock(x, 1024, alpha, depth_multiplier, block_id=13)x = GlobalAveragePooling2D()(x)shape = (1, 1, int(1024 * alpha))x = Reshape(shape, name="reshape_1")(x)x = Dropout(dropout, name="dropout")(x)x = Conv2D(classes, (1, 1), padding="same", name="conv_preds")(x)x = Activation("softmax", name="act_softmax")(x)x = Reshape((classes,), name="reshape_2")(x)inputs = img_inputmodel = Model(inputs, x, name="mobilenet_%0.2f" % (alpha))return model

MobileNet是一种轻量级的卷积神经网络模型,旨在在计算资源受限的移动设备上实现高效的图像分类和目标检测。其主要原理如下:

Depthwise Separable Convolution:MobileNet使用Depthwise Separable Convolution来减少参数量和计算量。这是一种将标准卷积分解成深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)两个步骤的方法。深度卷积仅对输入的每个通道进行卷积,减少了卷积核的数量。逐点卷积使用1x1卷积核来将深度卷积的输出转化为期望的特征维度。这种分解有效降低了参数量,减少了计算量。

网络结构设计:MobileNet采用了基于深度可分离卷积的轻量网络结构。网络主要由一系列重复的卷积块和下采样层构成。卷积块包含了深度卷积、逐点卷积和激活函数。下采样层通常使用步长较大的深度可分离卷积来减少特征图的尺寸。通过这种设计,MobileNet减少了网络的深度和参数量,从而在较小的设备上实现了高效的推理。

优点:

轻量高效:MobileNet采用了Depthwise Separable Convolution和轻量网络结构,大大减少了参数量和计算量,使得它在计算资源受限的设备上运行速度快。
网络结构可定制:MobileNet的网络结构可以根据不同的需求和资源限制进行调整和定制。可以通过调整深度可分离卷积的层数和通道数来平衡准确性和模型大小。
缺点:

精度受限:由于网络结构的轻量化和参数减少,MobileNet相对于大型网络模型,如ResNet和Inception等,可能牺牲了一定的精度。
对复杂数据集的泛化能力有限:MobileNet在处理复杂数据集上的泛化能力可能相对较差,适用于较简单的图像分类和目标检测任务。
需要根据实际应用场景和资源限制来权衡使用MobileNet的优势和劣势。在资源受限的设备上,如移动设备或嵌入式系统,MobileNet是一种高效的选择,但在对准确性和复杂性要求较高的任务上,可能需要考虑更为复杂的网络结构。

摩恩300次epoch的迭代计算,等待训练完成后,我们来依次看下。

【DIP】

【DIPFirst】

【MCP】

【MCPFirst】

【MIP】

【PIP】

【PIPFirst】

【Radius】

【Ulna】

因为数据的严重不均衡,模型整体训练过程中的变化波动都是比较大的,后期可以考虑尝试一方面增加一些原始的数据集,一方面进行更多的数据增强处理来均衡化已有的数据集。

到这里我们所需要的识别模型也就开发完成了,我们将前文的检测器与本文的识别器进行级联构建整体的计算流程,就可以进行检测识别分析了,实例效果如下:

借助于RUS-CHN计分法可以实现骨龄自动化计算。

男女骨龄计算略有差异,如下:

SCORE = {'girl':{'Radius':[10,15,22,25,40,59,91,125,138,178,192,199,203, 210],'Ulna':[27,31,36,50,73,95,120,157,168,176,182,189],'MCPFirst':[5,7,10,16,23,28,34,41,47,53,66],'MCPThird':[3,5,6,9,14,21,32,40,47,51],'MCPFifth':[4,5,7,10,15,22,33,43,47,51],'PIPFirst':[6,7,8,11,17,26,32,38,45,53,60,67],'PIPThird':[3,5,7,9,15,20,25,29,35,41,46,51],'PIPFifth':[4,5,7,11,18,21,25,29,34,40,45,50],'MIPThird':[4,5,7,10,16,21,25,29,35,43,46,51],'MIPFifth':[3,5,7,12,19,23,27,32,35,39,43,49],'DIPFirst':[5,6,8,10,20,31,38,44,45,52,67],'DIPThird':[3,5,7,10,16,24,30,33,36,39,49],'DIPFifth':[5,6,7,11,18,25,29,33,35,39,49]
},'boy':{'Radius':[8,11,15,18,31,46,76,118,135,171,188,197,201,209],'Ulna':[25,30,35,43,61,80,116,157,168,180,187,194],'MCPFirst':[4,5,8,16,22,26,34,39,45,52,66],'MCPThird':[3,4,5,8,13,19,30,38,44,51],'MCPFifth':[3,4,6,9,14,19,31,41,46,50],'PIPFirst':[4,5,7,11,17,23,29,36,44,52,59,66],'PIPThird':[3,4,5,8,14,19,23,28,34,40,45,50],'PIPFifth':[3,4,6,10,16,19,24,28,33,40,44,50],'MIPThird':[3,4,5,9,14,18,23,28,35,42,45,50],'MIPFifth':[3,4,6,11,17,21,26,31,36,40,43,49],'DIPFirst':[4,5,6,9,19,28,36,43,46,51,67],'DIPThird':[3,4,5,9,15,23,29,33,37,40,49],'DIPFifth':[3,4,6,11,17,23,29,32,36,40,49]}
}

核心计算逻辑实现如下:

def boneAge(score, sex):if sex == 'boy':boneAge = 2.01790023656577 + (-0.0931820870747269)*score + math.pow(score,2)*0.00334709095418796 +\math.pow(score,3)*(-3.32988302362153E-05) + math.pow(score,4)*(1.75712910819776E-07) +\math.pow(score,5)*(-5.59998691223273E-10) + math.pow(score,6)*(1.1296711294933E-12) +\math.pow(score,7)* (-1.45218037113138e-15) +math.pow(score,8)* (1.15333377080353e-18) +\math.pow(score,9)*(-5.15887481551927e-22) +math.pow(score,10)* (9.94098428102335e-26)return round(boneAge,2)elif sex == 'girl':boneAge = 5.81191794824917 + (-0.271546561737745)*score + \math.pow(score,2)*0.00526301486340724 + math.pow(score,3)*(-4.37797717401925E-05) +\math.pow(score,4)*(2.0858722025667E-07) +math.pow(score,5)*(-6.21879866563429E-10) + \math.pow(score,6)*(1.19909931745368E-12) +math.pow(score,7)* (-1.49462900826936E-15) +\math.pow(score,8)* (1.162435538672E-18) +math.pow(score,9)*(-5.12713017846218E-22) +\math.pow(score,10)* (9.78989966891478E-26)return round(boneAge,2)

跟实际的生产业务相结合的实践研究我觉得还是比较有潜力的,感兴趣的话也都可以自行动手尝试下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【汇编语言】中断及外部设备操作

【汇编语言】中断及外部设备操作 文章目录 【汇编语言】中断及外部设备操作前言一、中断及其处理中断的概念8086内中断中断处理程序案例:系统中的0号中断中断过程 二、编制中断处理程序中断处理程序及其结构编制中断处理程序——以除法错误中断为例do0子程序应该放在…

基础I/O--文件系统

文章目录 回顾C文件接口初步理解文件理解文件使用和并认识系统调用open概述标记位传参理解返回值 closewriteread总结 文件描述符fd0&1&2理解 回顾C文件接口 C代码&#xff1a; #include<stdio.h> int main() { FILE *fpfopen("log.txt",&…

《MySQL45讲》读书笔记

重建表 alter table t engine InnoDB&#xff08;也就是recreate&#xff09;&#xff0c;而optimize table t 等于recreateanalyze&#xff0c;让表大小变小 重建表的执行流程 建立一个临时文件&#xff0c;扫描表 t 主键的所有数据页&#xff1b;用数据页中表 t 的记录生…

mac通过termius连接Linux服务器

mac上安装 linux系统 如果有 linux服务器账号密码&#xff0c;那么上一步可忽略&#xff1b; 比如&#xff1a;直接连接阿里云或腾讯云账号 1. 安装termius 链接: https://pan.baidu.com/s/1iYsZPZThPizxqtkLPT89-Q?pwdbw6j 提取码: bw6j 官网 Termius - SSH platform for …

【C++】STL — vector的接口讲解 +详细模拟实现

前言: 本章我们将学习STL中另一个重要的类模板vector… vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。但是又不像数组&#xff0c;它的大小是可以动态改变的本质讲&#xff0c;vector使用动态分配数组来存储它的元素v…

配电室智能巡检机器人

近年来&#xff0c;生产过程高度自动化&#xff0c;各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工&#xff0c;既耗时费力效率又低&#xff0c;且受环境等因素影响&#xff0c;巡检难以全面规范&#xff0c;隐患或问题易被忽视。在此情况下&#xff0c;如何利用现有…

ElasticSearch02(DSL查询文档,DSL处理结果,RestClient查询,旅游案例,数据聚合)【全详解】

目录 一、DSL查询文档 1. 说明 2. 文本检索 3. 精确查询 4. 地理坐标查询 5. 复合查询 6. 课堂演示 7. 小结 二、DSL处理结果 1. 排序 2. 分页 3. 高亮 4. 课堂演示 5. 小结 三、RestClient查询 1.快速入门 2.match查询 3.精确查询 4.布尔查询 5. 算分函数…

锁相环原理解析

在计算机和嵌入式系统中&#xff0c;常常要用锁相环来倍频&#xff0c;那么&#xff0c;锁相环是如何倍频的&#xff0c;其原理又是什么呢&#xff1f; 目录 1. 锁相环基本概念与构成1.1 鉴相器1.2 低通滤波器1.3 压控振荡器 2. 锁相环如何实现倍频3. 锁相环也会失效&#xff…

【前端学习——正则】

https://www.bilibili.com/video/BV1da4y1p7iZ/?spm_id_from333.337.search-card.all.click&vd_source5cef5968d539682b683e7d01b00ad01b 学习网站 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

Bookends for Mac:文献管理工具

Bookends for Mac&#xff0c;一款专为学术、研究和写作领域设计的文献管理工具&#xff0c;以其强大而高效的功能深受用户喜爱。这款软件支持多种文件格式&#xff0c;如PDF、DOC、RTF等&#xff0c;能够自动提取文献的关键信息&#xff0c;如作者、标题、出版社等&#xff0c…

在M1芯片安装鸿蒙闪退解决方法

在M1芯片安装鸿蒙闪退解决方法 前言下载鸿蒙系统安装完成后&#xff0c;在M1 Macos14上打开闪退解决办法接下来就是按照提示一步一步安装。 前言 重新安装macos系统后&#xff0c;再次下载鸿蒙开发软件&#xff0c;竟然发现打不开。 下载鸿蒙系统 下载地址&#xff1a;http…

MATLAB实现遗传算法优化第三类生产线平衡问题

第三类生产线平衡问题的数学模型 假设&#xff1a; 工作站数量&#xff08;m&#xff09;和生产线节拍&#xff08;CT&#xff09;是预设并固定的。每个任务&#xff08;或作业元素&#xff09;只能分配到一个工作站中。任务的执行顺序是预先确定的&#xff0c;且不可更改。每…

PHP医疗不良事件上报系统源码 AEMS开发工具vscode+ laravel8 医院安全(不良)事件报告系统源码 可提供演示

PHP医疗不良事件上报系统源码 AEMS开发工具vscode laravel8 医院安全&#xff08;不良&#xff09;事件报告系统源码 可提供演示 医院安全不良事件报告系统&#xff08;AEMS&#xff09;&#xff1b;分为外部报告系统和内部报告系统两类。内部报告系统主要以个人为报告单位&…

Docker私有镜像仓库搭建 带图形化界面的

搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。 官网地址&#xff1a;https://hub.docker.com/_/registry 先配置私服的信任地址: # 打开要修改的文件 vi /etc/docker/daemon.json # 添加内容&#xff1a; "insecure-registries":["http://192.…

暴力匹配字符串的升级版算法 —— Kmp算法

文章目录 一、Kmp算法是什么&#xff1f;二、算法分析1.构建next数组2.匹配主串 三、完整代码 一、Kmp算法是什么&#xff1f; 简单来说&#xff0c;KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法主要用于解决字符串匹配问题。也就是当你有一个主串&#xff08;text&…

OceanBase 轻量级数仓关键技术解读

码到三十五 &#xff1a; 个人主页 为了更好地聚合和治理跨域数据&#xff0c;帮助企业用较低的成本快速聚合分析&#xff0c;快速决策&#xff0c;不断的让企业积累的数据产生价值&#xff0c;从全域海量数据抓取&#xff0c;高性能流批处理&#xff0c;元数据血缘治理等等方面…

AI-数学-高中52-离散型随机变量概念及其分布列、两点分布

原作者视频&#xff1a;【随机变量】【一数辞典】2离散型随机变量及其分布列_哔哩哔哩_bilibili 离散型随机变量分布列&#xff1a;X表示离散型随机变量可能在取值&#xff0c;P:对应分布在概率&#xff0c;P括号里X1表示事件的名称。 示例&#xff1a;

QT:QT窗口(一)

文章目录 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项添加分割线 工具栏创建工具栏设置停靠位置创建工具栏的同时指定停靠位置使用QToolBar类提供的setAllowedAreas函数来设置停靠位置 设置浮动属性设置移动属性 状态栏状态栏的创建在状态栏中显示实时消息在状态栏中显示永久…

AI人才争夺战,华尔街入局:豪掷百万美元年薪抢人

继硅谷之后&#xff0c;华尔街也入局**“AI人才争夺大战”**。 他们的目标非常明确——抢的就是高精尖的AI专家。 △图源&#xff1a;Business Insider 现在这条“街”上&#xff0c;不论是银行、对冲基金还是私募股权公司都已纷纷下场&#xff0c;可谓是豪掷千金&#xff0c…