作者:陳佳聰
1背景介紹
黃斑病,作為一組影響視網(wǎng)膜黃斑區(qū)的病理性改變,是眼科常見(jiàn)的可致盲疾病之一。黃斑區(qū)是人眼視力最敏感的區(qū)域,主要負(fù)責(zé)精細(xì)視覺(jué)及色覺(jué)等視功能。正常情況下,外界物體光線進(jìn)入眼內(nèi),投影在黃斑區(qū)中心凹處,形成清晰精確的像。一旦黃斑區(qū)發(fā)生病變,患者可表現(xiàn)為中心視力下降、視物扭曲變形、視野中心暗點(diǎn)等癥狀。部分黃斑病變可致盲,極大影響患者的生活質(zhì)量。
黃斑病變包括多種類型,其中老年性黃斑變性(AMD)是最常見(jiàn)的一種,隨著年齡的增長(zhǎng),其發(fā)病率逐漸增高。據(jù)國(guó)內(nèi)患病率調(diào)查結(jié)果顯示,50歲以上人群年齡相關(guān)性黃斑變性患病率為15.5%,80歲以上人群患病率高達(dá)23.5%。據(jù)此估計(jì),我國(guó)目前年齡相關(guān)性黃斑變性患者約有數(shù)百萬(wàn)之多。此外,一些全身慢性疾病如糖尿病、高血壓、動(dòng)脈粥樣硬化等也可能導(dǎo)致黃斑病變。黃斑病變不僅影響視力,還嚴(yán)重影響患者的日常生活和社會(huì)參與,給患者及其家庭帶來(lái)沉重的負(fù)擔(dān)。
為此本項(xiàng)目利用黃斑區(qū)眼底彩照及OCT掃描圖像,構(gòu)建基于深度學(xué)習(xí)算法的黃斑病變檢測(cè)模型用于常見(jiàn)9類黃斑區(qū)病變的檢測(cè),為此深度學(xué)習(xí)模型在分類眼底彩照和OCT圖像時(shí)都展現(xiàn)出了高準(zhǔn)確度、敏感度及特異度,基于OCT圖像的檢測(cè)效果略優(yōu)于眼底彩照。
2系統(tǒng)設(shè)計(jì)
2.1硬件設(shè)計(jì)
哪吒開(kāi)發(fā)板搭載英特爾 N97處理器,配備8GB LPDDR5內(nèi)存和64GB eMMC存儲(chǔ)空間,支持Windows、Linux兩個(gè)操作系統(tǒng),支持高分辨率顯示,提供HDMI接口使檢測(cè)結(jié)果能更好的展示。
首先本項(xiàng)目使用ubuntu 20.04 LTS系統(tǒng)進(jìn)行項(xiàng)目部署:
2.2環(huán)境搭建
首先部署本系統(tǒng),因?yàn)槟倪搁_(kāi)發(fā)板出廠并不帶系統(tǒng),需要我們進(jìn)行燒錄。
進(jìn)入官網(wǎng):
ubuntu下載
接著進(jìn)行openvino 配置:
首先進(jìn)行基礎(chǔ)依賴安裝:
sudo apt-get install libprotobuf-dev protobuf-compiler
輸出回顯中碰到Do you want to continue? [Y/n] y
接著進(jìn)行OpenVino下載,官網(wǎng)中給出了許多安裝方式,大家可自行安裝。
官網(wǎng)openvino下載
接下來(lái)進(jìn)行數(shù)據(jù)獲取,本項(xiàng)目利用messidor 數(shù)據(jù)庫(kù)
下載地址:https://www.adcis.net/en/third-party/messidor/
接下來(lái)進(jìn)行模型準(zhǔn)備:Tensorflow轉(zhuǎn)ONNX模型。
首先我們進(jìn)行tf2onnx的安裝pip install tf2onnx onnx,然后我們使用以下代碼將tensorflow轉(zhuǎn)為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): # 導(dǎo)入 TensorFlow 模型 with tf.io.gfile.GFile(tf_model_path, "rb") as f: graph_def = tf.compat.v1.GraphDef() graph_def.ParseFromString(f.read()) # 創(chuàng)建一個(gè) TensorFlow 圖 with tf.Graph().as_default() as tf_graph: tf.import_graph_def(graph_def, name="") # 使用 tf2onnx 轉(zhuǎn)換模型 with tf2onnx.utils.make_tf_graph(tf_graph) as tfg: # 獲取輸入和輸出節(jié)點(diǎn) input_names = ["input_0"] # 根據(jù)你的模型修改輸入節(jié)點(diǎn)名稱 output_names = ["output_0"] # 根據(jù)你的模型修改輸出節(jié)點(diǎn)名稱 # 轉(zhuǎn)換模型 model_proto, _ = convert.from_graph_def( tf_graph.as_graph_def(), input_names, output_names, opset=12 ) # 應(yīng)用 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" # 轉(zhuǎn)換模型 convert_tf_to_onnx(tf_model_path, onnx_model_path) 接著我們進(jìn)行onnxruntime的安裝 pip install onnx onnxruntime 接著進(jìn)行模型驗(yàn)證,我們可以使用以下腳本(腳本上面是使用圖片作為輸入,大家可以自行轉(zhuǎn)換) 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)): """預(yù)處理圖像以匹配模型輸入""" 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)) # 轉(zhuǎn)換為 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): """運(yùn)行 ONNX 模型并打印輸出""" # 加載 ONNX 模型 onnx_model = load_onnx_model(onnx_model_path) session = ort.InferenceSession(onnx_model_path) # 預(yù)處理圖像 input_data = preprocess_image(image_path) # 獲取輸入和輸出名稱 input_name = session.get_inputs()[0].name output_name = session.get_outputs()[0].name # 運(yùn)行模型 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" # 運(yùn)行驗(yàn)證 run_onnx_model(onnx_model_path, image_path)
接著使用openvino中的mo_onnx.py將onnx轉(zhuǎn)為IR中間模型
python mo_onnx.py --input_model 【.onnx模型路徑】 --output_dir 【目標(biāo)路徑】
接著就可以進(jìn)行部署
部署頁(yè)面
-
處理器
+關(guān)注
關(guān)注
68文章
19286瀏覽量
229811 -
英特爾
+關(guān)注
關(guān)注
61文章
9964瀏覽量
171763 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97456 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121157
原文標(biāo)題:開(kāi)發(fā)者實(shí)戰(zhàn)|深度學(xué)習(xí)+哪吒開(kāi)發(fā)板,讓黃斑病變遠(yuǎn)離我們的眼睛
文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論