一、背景介绍

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

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

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

二 、系统设计

2.1 硬件设计

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

 图1 哪吒开发板

 

  图2 哪吒详细参数

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

2.2 环境搭建

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

进入官网

 图3 ubuntu下载

接着进行openvino 配置

首先进行基础依赖安装

sudo apt-get install libprotobuf-dev protobuf-compiler

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

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

 

  图4 官网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.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 【目标路径】

接着就可以进行部署

 

 图5 部署页面

 

 

 

 

Logo

为开发者提供丰富的英特尔开发套件资源、创新技术、解决方案与行业活动。欢迎关注!

更多推荐