作者:陈佳聪
1背景介绍
黄斑病,作为一组影响视网膜黄斑区的病理性改变,是眼科常见的可致盲疾病之一。黄斑区是人眼视力最敏感的区域,主要负责精细视觉及色觉等视功能。正常情况下,外界物体光线进入眼内,投影在黄斑区中心凹处,形成清晰精确的像。一旦黄斑区发生病变,患者可表现为中心视力下降、视物扭曲变形、视野中心暗点等症状。部分黄斑病变可致盲,极大影响患者的生活质量。
黄斑病变包括多种类型,其中老年性黄斑变性(AMD)是最常见的一种,随着年龄的增长,其发病率逐渐增高。据国内患病率调查结果显示,50岁以上人群年龄相关性黄斑变性患病率为15.5%,80岁以上人群患病率高达23.5%。据此估计,我国目前年龄相关性黄斑变性患者约有数百万之多。此外,一些全身慢性疾病如糖尿病、高血压、动脉粥样硬化等也可能导致黄斑病变。黄斑病变不仅影响视力,还严重影响患者的日常生活和社会参与,给患者及其家庭带来沉重的负担。
为此本项目利用黄斑区眼底彩照及OCT扫描图像,构建基于深度学习算法的黄斑病变检测模型用于常见9类黄斑区病变的检测,为此深度学习模型在分类眼底彩照和OCT图像时都展现出了高准确度、敏感度及特异度,基于OCT图像的检测效果略优于眼底彩照。
2系统设计
2.1 硬件设计
哪吒开发板搭载英特尔 N97处理器,配备8GB LPDDR5内存和64GB eMMC存储空间,支持Windows、Linux两个操作系统,支持高分辨率显示,提供HDMI接口使检测结果能更好的展示。
首先本项目使用ubuntu 20.04 LTS系统进行项目部署:
2.2 环境搭建
首先部署本系统,因为哪吒开发板出厂并不带系统,需要我们进行烧录。
进入官网:
ubuntu下载
接着进行openvino 配置:
首先进行基础依赖安装:
sudo apt-get install libprotobuf-dev protobuf-compiler
输出回显中碰到Do you want to continue? [Y/n] y
接着进行OpenVino下载,官网中给出了许多安装方式,大家可自行安装。
官网openvino下载
接下来进行数据获取,本项目利用messidor 数据库
下载地址:https://www.adcis.net/en/third-party/messidor/
接下来进行模型准备:Tensorflow转ONNX模型。
首先我们进行tf2onnx的安装pip install tf2onnx onnx,然后我们使用以下代码将tensorflow转为ONNX:
import tensorflow as tf from tf2onnx import convert, utils from tf2onnx.tfonnx import process_tf_graph from onnx import shape_inference def convert_tf_to_onnx(tf_model_path, onnx_model_path): # 导入 TensorFlow 模型 with tf.io.gfile.GFile(tf_model_path, "rb") as f: graph_def = tf.compat.v1.GraphDef() graph_def.ParseFromString(f.read()) # 创建一个 TensorFlow 图 with tf.Graph().as_default() as tf_graph: tf.import_graph_def(graph_def, name="") # 使用 tf2onnx 转换模型 with tf2onnx.utils.make_tf_graph(tf_graph) as tfg: # 获取输入和输出节点 input_names = ["input_0"] # 根据你的模型修改输入节点名称 output_names = ["output_0"] # 根据你的模型修改输出节点名称 # 转换模型 model_proto, _ = convert.from_graph_def( tf_graph.as_graph_def(), input_names, output_names, opset=12 ) # 应用 ONNX 形状推断 inferred_model = shape_inference.infer_shapes(model_proto) # 保存 ONNX 模型 with open(onnx_model_path, "wb") as f: f.write(inferred_model.SerializeToString()) print(f"ONNX model saved to {onnx_model_path}") # TensorFlow 模型路径 tf_model_path = "path/to/your/tf_model.pb" # ONNX 模型保存路径 onnx_model_path = "path/to/your/onnx_model.onnx" # 转换模型 convert_tf_to_onnx(tf_model_path, onnx_model_path) 接着我们进行onnxruntime的安装 pip install onnx onnxruntime 接着进行模型验证,我们可以使用以下脚本(脚本上面是使用图片作为输入,大家可以自行转换) import onnx import onnxruntime as ort import numpy as np from PIL import Image import io def preprocess_image(image_path, target_size=(224, 224)): """预处理图像以匹配模型输入""" image = Image.open(image_path).convert('RGB') image = image.resize(target_size) image_array = np.array(image).astype(np.float32) / 255.0 image_array = np.transpose(image_array, (2, 0, 1)) # 转换为 CHW 格式 image_array = np.expand_dims(image_array, axis=0) # 添加批次维度 return image_array def load_onnx_model(model_path): """加载 ONNX 模型""" onnx_model = onnx.load(model_path) onnx.checker.check_model(onnx_model) return onnx_model def run_onnx_model(onnx_model_path, image_path): """运行 ONNX 模型并打印输出""" # 加载 ONNX 模型 onnx_model = load_onnx_model(onnx_model_path) session = ort.InferenceSession(onnx_model_path) # 预处理图像 input_data = preprocess_image(image_path) # 获取输入和输出名称 input_name = session.get_inputs()[0].name output_name = session.get_outputs()[0].name # 运行模型 outputs = session.run([output_name], {input_name: input_data}) # 打印输出 print("Model Output:", outputs[0]) # ONNX 模型路径 onnx_model_path = "path/to/your/onnx_model.onnx" # 输入图像路径 image_path = "path/to/your/input_image.jpg" # 运行验证 run_onnx_model(onnx_model_path, image_path)
接着使用openvino中的mo_onnx.py将onnx转为IR中间模型
python mo_onnx.py --input_model 【.onnx模型路径】 --output_dir 【目标路径】
接着就可以进行部署
部署页面
全部0条评论
快来发表一下你的评论吧 !