我的工程實踐專案是nlp演算法,但是這個學期主要學的還是cv,所以我用乙個關於人臉口罩識別的小專案,作為例子,來學習軟體設計方案。我覺得無論是cv還是nlp,知識點都是融會貫通的,用做過的專案入手,能夠更好地把握知識點。
首先,我們使用到的yolov3演算法的網路結構如下,關於網路模型這裡,不做贅述。
軟體架構
本專案採用mvc架構,mvc即為model-view-controller(模型-檢視-控制器),mvc中m、v和c所代表的含義如下:
在我的這個系統中,可以分為三個部分:
客戶端:在某乙個平台搭建人機互動介面,主要可以展示識別的結果,資訊檢索,統計和歷史資料查詢等。使用者通過介面檢視識別結果,通過介面上的按鈕,進行滑鼠操作觸發一系列動作,系統通過函式實現使用者所要求的任務。
uml類圖:
1、分解檢視
分解是構建軟體架構模型的關鍵步驟,分解檢視也是描述軟體架構模型的關鍵檢視,一般分解檢視呈現為較為明晰的分解結構特點。分解檢視用軟體模組勾劃出系統結構,往往會通過不同抽象層級的軟體模組形成層次化的結構。
2、依賴檢視
依賴檢視展現了軟體模組之間的依賴關係。比如乙個軟體模組a呼叫了另乙個軟體模組b,那麼我們說軟體模組a直接依賴軟體模組b。如果乙個軟體模組依賴另乙個軟體模組產生的資料,那麼這兩個軟體模組也具有一定的依賴關係。
依賴檢視在專案計畫中有比較典型的應用。比如它能幫助我們找到沒有依賴關係的軟體模組或子系統,以便獨立開發和測試,同時進一步根據依賴關係確定開發和測試軟體模組的先後次序。
依賴檢視在專案的變更和維護中也很有價值。比如它能有效幫助我們理清乙個軟體模組的變更對其他軟體模組帶來影響的範圍。
在本專案中,要想畫出依賴檢視,首先要明確專案有哪幾個功能模組,然後理清各個功能模組之間的依賴關係,最後只需要把這些依賴關係畫出來即可。
3、執行檢視
執行檢視展示了系統執行時的時序結構特點,比如流程圖、時序圖等。執行檢視中的每乙個執行實體,一般稱為元件(component),都是不同於其他元件的執行實體。如果有相同或相似的執行實體那麼就把它們合併成乙個。
以下是訓練過程以及服務端口罩識別的的執行檢視。
服務端與客戶端的執行檢視:
4、實現檢視
實現檢視是描述軟體架構與原始檔之間的對映關係。比如軟體架構的靜態結構以包圖或設計類圖的方式來描述,但是這些包和類都是在哪些目錄的哪些原始檔中具體實現的呢?一般我們通過目錄和原始檔的命名來對應軟體架構中的包、類等靜態結構單元,這樣典型的實現檢視就可以由軟體專案的源檔案目錄樹來呈現。
這裡的伺服器端口罩識別演算法的目錄樹。
mask_identification
├─ annotations # 標註資訊
├─ convert.py # 引數轉換指令碼
├─ imagesets # 資訊
│ ├─ mask_dataset
│ ├─ test.txt
│ ├─ train.txt
│ ├─ trainval.txt
│ └─ val.txt
├─ log # 訓練權重儲存
│ ├─ train.h5
│ ├─ train_mask_v1.h5
│ └─ train_mask_v2.h5
├─ maketxt.py
├─ model_data # 模型引數
│ ├─ coco_classes80.txt
│ ├─ mask_anchors.txt
│ ├─ mask_classes.txt
│ ├─ voc_classes.txt
│ ├─ yolo.h5
│ └─ yolo_anchors.txt
├─ train.py # 載入權重進行**
├─ yolo.py
├─ yolo3 # yolov3模型
│ ├─ model.py
│ ├─ utils.py
│ ├─ __init__.py
5、工作分配檢視工作分配檢視將系統分解成可獨立完成的工作任務,以便分配給各專案團隊和成員。工作分配檢視有利於跟蹤不同專案團隊和成員的工作任務的進度,也有利於在各專案團隊和成員之間合理地分配和調整專案資源,甚至在專案計畫階段工作分配檢視對於進度規劃、專案評估和經費預算都能起到有益的作用。
由於這是設想的專案,所以並沒有實際的程序。以下是設想的對於乙個完整系統的工作分配:
任務預計週期
狀態資料預處理,資料清洗
0.5個月
已完成模型的搭建和調整
1個月已完成
權重訓練和微調
1個月已完成
模型的部署和上線
1個月進行中
後台資料模組管理
1個月尚未開始
6. 伺服器端口罩識別演算法介面:
class yolo
定義模型主體yolo_body(inputs, num_anchors, num_classes)
、
損失函式box_iou(b1, b2)
評價標準yolo_loss(args, anchors, num_classes, ignore_thresh=.5, print_loss=false)
。
create_model(input_shape, anchors, num_classes, load_pretrained,freeze_body,weights_path)
data_generator(annotation_lines, batch_size, input_shape, anchors, num_classes)
class yolo
提供模型引數的載入(模型權重、先驗框、分類)、呼叫攝像頭進行**輸出
user(客戶端使用者)
屬性資料型別
約束描述
userid
string
主鍵id
string
郵箱registerdate
date
註冊日期
modeldata(訓練用資料)
屬性資料型別
約束描述
pictureid
int主鍵
訓練用addr
string
位置tag
int標籤值
boxfloat
標註框result(返回結果)
屬性資料型別
描述faceid
int識別人臉編號
result
int返回**結果(0,1)
time
timestamp
時間戳執行環境
tensorflow-gpu 2.3.0
keras 2.4.3
python 3.7.4
opencv-python==4.4.0.46
h5py==2.10.0
intel(r) core(tm) i3-10100f cpu @ 3.60ghz
geforce rtx 2080 ti
本專案概念原型的核心工作機制如下,從兩方面闡述:
客戶端可以獲得服務端返回的資料,以獲得口罩佩戴的資訊。主要可以查詢在時間戳下使用者佩戴口罩的資料,並且對於沒有佩戴口罩的情況做出預警。
目標檢測與目標識別
目標識別 objec recognition 是指明一幅輸入影象中包含哪類目標。其輸入為一幅影象,輸出是該影象中的目標屬於哪個類別 class probability 目標檢測 object detection 除了要告訴輸入影象中包含哪類目標外,還要框出該目標的具體位置 bounding boxe...
AI 目標識別研究
haar like 目標識別 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將 片顯示選擇...
目標識別 評價指標(Iou,mAP,Fps)
一 交並比 物體檢測需要定位出物體的bounding box,就像下面的一樣,我們不僅要定位出車輛的bounding box 我們還要識別出bounding box 裡面的物體就是車輛。對於bounding box的定位精度,有乙個很重要的概念,因為我們演算法不可能百分百跟人工標註的資料完全匹配,因...