【哪吒开发板试用】+深度学习+”哪吒”,让黄斑病变远离我们的眼睛

openlab_96bf3613 更新于 20天前

一、背景介绍
黄斑病,作为一组影响视网膜黄斑区的病理性改变,是眼科常见的可致盲疾病之一。黄斑区是人眼视力最敏感的区域,主要负责精细视觉及色觉等视功能。正常情况下,外界物体光线进入眼内,投影在黄斑区中心凹处,形成清晰精确的像。一旦黄斑区发生病变,患者可表现为中心视力下降、视物扭曲变形、视野中心暗点等症状。部分黄斑病变可致盲,极大影响患者的生活质量。

黄斑病变包括多种类型,其中老年性黄斑变性(AMD)是最常见的一种,随着年龄的增长,其发病率逐渐增高。据国内患病率调查结果显示,50岁以上人群年龄相关性黄斑变性患病率为15.5%,80岁以上人群患病率高达23.5%。据此估计,我国目前年龄相关性黄斑变性患者约有数百万之多。此外,一些全身慢性疾病如糖尿病、高血压、动脉粥样硬化等也可能导致黄斑病变。黄斑病变不仅影响视力,还严重影响患者的日常生活和社会参与,给患者及其家庭带来沉重的负担。

为此本项目利用黄斑区眼底彩照及OCT扫描图像,构建基于深度学习算法的黄斑病变检测模型用于常见9类黄斑区病变的检测,为此深度学习模型在分类眼底彩照和OCT图像时都展现出了高准确度、敏感度及特异度,基于OCT图像的检测效果略优于眼底彩照。

二 、系统设计
2.1 硬件设计
哪吒开发板搭载Intel N97处理器,配备8GB LPDDR5内存和64GB eMMC存储空间,支持Windows、Linux两个操作系统,支持高分辨率显示,提供HDMI接口使检测结果能更好的展示。


哪吒开发板

首先本项目使用ubuntu 20.04 LTS系统进行项目部署

2.2 环境搭建
首先部署本系统,,因为哪吒开发板出厂并不带系统,需要我们进行烧录

进入官网

ubuntu下载

接着进行openvino 配置

首先进行基础依赖安***r/>
sudo apt-get install libprotobuf-dev protobuf-compiler

输出回显中碰到Do you want to continue? [Y/n] y

接着进行openvino下载,官网中给出了许多安装方式,大家可自行安***r/>


官网openvino下载

接下来进行数据获取,本项目利用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.util***ake_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_shape***odel_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个评论