一、專案介紹
mip即醫學圖形處理專案,我們使用網上公開發布的 deep lesion 資料集,它包含各種病變,包括肺結節、肝病變、淋巴結擴大、腎病變、骨病變等。開發乙個通用病灶識別系統,通過乙個統一的框架查詢到每種病灶的區域並根據病灶識別出所有型別的病變,並挖掘出各個病灶之間的聯絡;通過基於區域卷積神經網路(faster rcnn)的演算法訓練我們的資料集;通過誤報率,準確率、召回率和損失函式來顯示系統的效能好壞。
二、系統架構
為了使該專案能更好的落地使用,對該項目的初步設想分為兩部分。一是專案核心演算法的設計,使用vgg-16網路等,更好的提取醫學特徵,供機器學習,提高醫學圖形分辨的準確度。二是為了方便使用者(醫護人員等)的使用,利用**開發技術進行介面展示,結果反饋等。
本系統整體採用django web 應用框架進行開發, django 本身基於 mvc 模型。使用 django,只要很少的**,python 的程式開發人員就可以輕鬆地完成乙個正式**所需要的大部分內容,並進一步開發出全功能的 web 服務 ,django 本身基於 mvc 模型,即 model(模型)+ view(檢視)+ controller(控制器)設計模式。
在本專案中,在該層主要體現為
1.用vgg-16網路訓練的演算法,用於判斷輸入的醫學圖形
2.用於儲存,將使用者輸入的存入資料庫,增加資料集的數量,以便提高模型準確率。
3.查詢資料庫,用於查詢使用者的輸入記錄。
4.刪除資料,刪除輸入記錄(修改標誌位),系統本身保留,以便訓練。
該層主要是負責介面展示,提供給使用者以操作的介面,和給與該使用者以操作的反饋。
該層主要負責接收檢視層發來的操作請求,並呼叫模型層的方法,起到中間轉接的作用。
由於採用的是django的框架來進行前後端的開發,所以,本系統採用的是b/s(browser/server)架構,即瀏覽器/伺服器架構,是在c/s(client/service,客戶機/伺服器)模式的基礎上發展起來的一種體系結構,在開發web應用時有明顯的技術優勢。針對本系統而言,可以使得系統的擴充套件較為容易且不需要安裝專門的軟體,使用也較為方便。
三、系統架構描述
軟體架構模型是通過一組關鍵檢視來描述的,同乙個軟體架構,由於選取的視角(perspective)和抽象層次不同可以得到不同的檢視,這樣一組關鍵檢視搭配起來可以完整地描述乙個邏輯自洽的軟體架構模型。一般來說,我們常用的幾種檢視有分解檢視、依賴檢視、執行檢視、實現檢視和工作任務分配檢視。下面我們來進行具體的分析:
1.分解檢視
分解檢視,簡單的說也就是將系統的功能進行分解,形成幾個小的部分,然後這些小部分又包含各自所要處理的業務,我們所要做的就是對這些具體業務的設計和開發。本系統中,即分解為演算法模型和**設計這兩個大模組,然後在各個模組內部細分為一些小的功能類,這樣使得系統的結構較為清晰,同時也能看清楚各層次之間的聯絡,使得開發更加系統化。故可將系統按如下模組,進行分析:
2.依賴檢視
依賴檢視展現了軟體模組之間的依賴關係。比如乙個軟體模組a呼叫了另乙個軟體模組b,那麼我們說軟體模組a直接依賴軟體模組b。如果乙個軟體模組依賴另乙個軟體模組產生的資料,那麼這兩個軟體模組也具有一定的依賴關係。則,在本專案中的各個模組之間的依賴關係,如下圖所示:
3.執行檢視
執行檢視展示了系統執行時的時序結構特點,比如流程圖、時序圖等。執行檢視中的每乙個執行實體,一般稱為元件(component),都是不同於其他元件的執行實體。執行實體可以最終分解到軟體的基本元素和軟體的基本結構,因而與軟體**具有比較直接的對映關係。在設計與實現過程中,我們一般將執行檢視轉換為偽**之後,再進一步轉換為實現**。根據系統的各部分的功能實現,我們畫出系統的整體流程圖如下:
4.工作分配檢視
工作分配檢視將系統分解成可獨立完成的工作任務,以便分配給各專案團隊和成員。工作分配檢視有利於跟蹤不同專案團隊和成員的工作任務的進度,也有利於在個專案團隊和成員之間合理地分配和調整專案資源,甚至在專案計畫階段工作分配檢視對於進度規劃、專案評估和經費預算都能起到有益的作用。
四、用物件導向的方法進行系統分析
用物件導向的思想對mip專案進行分析,分析各個物件流程。對專案進行抽象,可以想到該專案中的類有:image、doctor、admin(開發人員)、model(系統使用的模型)。根據各個物件所要完成的用例,可以分析他們應該具備的屬性和方法。可得類圖如下:
五、資料庫設計
根據類圖,可以得知各個類所具有的屬性和必要儲存的資訊。可以得出資料模型如下:
image表
屬性名稱
字元型別
是否為空
預設約束
含義image_id
intnot null
自動增加
主鍵編號
ill_type
varchar
not null
病變型別
loaction
varchar
not null
來自身體哪個部位
model表
屬性名稱
字元型別
是否為空
預設約束
含義model_id
intnot null
自動增加
主鍵模型編號
model_name
varchar
not null
模型名稱
model_para
varchar
not null
儲存模型引數
accuracy
flaot
not null
模型準確度
doctor表
屬性名稱
字元型別
是否為空
預設約束
含義doctor_id
varchar
not null
主鍵醫生證件號
input_image_id
varchar
not null
外來鍵 處理的的id
result
varchar
not null
模型返回結果
admin表
屬性名稱
字元型別
是否為空
預設約束
含義admin_id
varchar
not null
主鍵開發人員編號
model_id
varchar
not null
外來鍵 對模型的調參記錄
result
varchar
not null
模型返回結果
六、執行開發環境和技術選型
開發環境:python3.6、django2.0.1以及tensorflow2.0
編譯器: jetbrains pycharm
技術選型:鑑於本專案做醫學影象處理,因此在演算法模型方面,採用vgg-16模型。該模型參加2023年的 imagenet影象分類與定位挑戰賽,取得了優異成績:在分類任務上排名第二,在定位任務上排名第一。在特徵提取方面,非常有效。在**設計方面,django 和python協同使用,在**開發方面很方便。
七、系統概念原型的核心工作機制
在本系統中,概念原型的核心工作機制是,首先基於deeplesion資料庫,做模型訓練。當模型達到一定準確度之後,將該模型嵌入到**後端中,作為核心功能模組。然後為了方便使用者使用,設計**,簡化使用者操作。讓使用者使用的同時,儲存使用者的輸入資料,以便訓練模型,提高模型的準確度,形成良性迴圈。
八、小結
本文通過軟體工程思想,對自己的工程實踐做了一定原型設計。利用軟工思想,可以使專案開發流程更加清晰,專案開發更加可控,保證了專案能夠在「意料之中」發展成熟。對筆者來說,更加熟悉了該項目的設計細節,以及學習了軟體工程的相關思想方法。文筆拙劣之出,歡迎批評指點。
向MIP開源專案提交Issues
issues 是 github 管理需求,討論技術方案的方式,附 官方解釋。mip 是在 github 上的開源專案,也使用 issues 來做任務管理。mip 專案中的 issues 主要有兩種用法 記錄 bug,管理進度。除了直接提交 pull request 外,您還可以通過提交 issues...
C 專案實踐 工程的組織
最近做了乙個多人協作,規模也不小的c 專案,其中做了很多有價值的 實踐,在此記錄,以來說明c 專案需要關注的各方面的問題 當專案由團隊共同開發,而非一人來完成時,工程的如何組織會成為乙個重要問題 工程組織它是團隊工作的基礎,不能很好的解決這個問題,將使專案陷於 混亂。而此問題的本質是,建立何種工程結...
基於工程實踐的軟體系統設計
我的工程實踐題目是mip,即醫學影象處理,目的是設計一種基於深度學習的通用病灶識別系統,該系統可以通過檢測使用者的輸入,來得到具有對影象病灶處標註的最終影象 通常病人做好一系列臨床上的檢查後,醫生需要人為的看 然後根據自身的知識和經驗 來對病人的疾病情況做出判斷,是比較耗時耗力的,如果可以把重點病灶...