週報(2019Q4)
===
###### tags: `週報`
[TOC]
### 代辦事項
- 結帳樹(未來取餐樹)
- 根據已經結完帳的去fit樹
- 根據android端的條件,max的10%去fit樹
- 其他即時運算表的優化
- openvino
- docker環境
- python 嵌入式demo
- c++ 嵌入式demo
# 測試結果
- [顏色正規化報告](https://hackmd.io/iIntqfXKSK2hOTrYBzJzAA)
- [歪臉2]
- [仿射矩陣調查及研究](https://hackmd.io/yPeEd9owS2ilKKCU8zm-0Q?both)
- [動態threshold](https://hackmd.io/ly2MwVv-Tma7RP_IPSpV8A)
- [歪臉](https://hackmd.io/vll_JB1tQvCBaCRG30pK-A)
- [歪臉專案](http://192.168.88.81:10080/ray/wryface)
- [測試mobilefacenet、dlib的準確度](https://hackmd.io/HmfpAY1ARc-BlpnNC0-ELw)
- [中心點非中心點測試](https://hackmd.io/HmfpAY1ARc-BlpnNC0-ELw)
- [大樹kmean測試](https://hackmd.io/HmfpAY1ARc-BlpnNC0-ELw)
- continuse_face demo影片
- face_tracking demo影片
- [轉中心點範例](http://192.168.88.81:10080/ray/insightface/src/branch/master/insightface/inference/examples)
- [人臉距離範例](http://192.168.88.81:10080/ray/insightface/src/branch/master/insightface/inference/examples)
- [arcface精華版gitea](http://192.168.88.81:10080/ray/insightface/src/branch/master)
# 2019 12/23~01/10
- [x] auto_divergence
- [x] 用import modin.pandas as pd看能不能一行指令無痛加速
但出現神奇bug,所以放棄
- [x] 連續資料表處理嘗試用pd.eval()加速
出現bug,之後可以花時間解解看
- [ ] 加上時間訊息,以免出bug時拿舊的頁面做參考
- [x] mobilefacenet轉tensorflow
- [x] mxnet2onnx轉換成功
- [x] onnx2tensorflow
轉換失敗,tensorflow的模型每個環節都有命名規則,所以轉過去時會失敗,要抓出不符合正規式的環節並想辦法修改才有機會
- [x] onnx2keras
失敗,原因如上
- [x] [mmdnn 微軟主導的框架互轉專案](https://github.com/Microsoft/MMdnn/issues/85)
- [x] mxnet轉IR成功
`python3 -m mmdnn.conversion._script.convertToIR -f mxnet -n ../models/model-y1-test2/model-symbol.json -w ../models/model-y1-test2/model-0000.params -d model-descr128 --inputShape 3,112,112`
要是出bug的話去修改`.venv/lib/python3.6/site-packages/mmdnn/conversion/common/DataStructure/emitter.py`
- [x] [IR轉tensorflow成功](https://github.com/Microsoft/MMdnn/issues/85)
1. numpy的load()可能出錯,視情形修改numpy源碼
2. 成功後會產生npy權重檔,符合tensorflow1.x規則,類似json格式,以及能重新產出模型的tensorflow程式碼,
3. 吃進一張圖片確認輸出結果跟原mxnet版誤差只在1e-7左右
- [x] tensorflow1.x轉tensorflow2.0失敗
(1). 依照[官方教程](https://www.tensorflow.org/guide/migrate?fbclid=IwAR1HSFCD2D6hHs5YR_E2z2qFKAjcZe4d5ktnc0F0nUDIbYUmiQ3hrI7BEVU#checkpoint_compatibility):
"There is no straightforward way to upgrade a raw Graph.pb file to TensorFlow 2.0. Your best bet is to upgrade the code that generated the file." 所以2.0只有機會使用1.x的模型做推論但不能做訓練,將來要自己訓練的話建議用2.0
(2).如果要使用1.x的模型要有冷凍後的模型(參數都是常數不是變數)
- [x] tensorflow1.x存checkpoint的pb版再轉冷凍權重的pb
- [x] 看[這篇](https://zhuanlan.zhihu.com/p/64099452?fbclid=IwAR23aAztPNYSbTFwvFWgh7GLSjIaJjbiAlsJPAzwYE9NhXrbSzH3v0WXHko)成功
- [x] tensorflow1.x轉tensorflow lite
- [x] 具備管理能力的knn
- 具備管理功能的knn
- 超過40分鐘的資料不參與predict
- 可以fit_one單筆資料,不用像sklearn整包重fit而拖速
- 訂單臉不到10%不參與predict
- 大小樹推論person_id不用撈mongo,全部在記憶體中解決
- 距離差太多就不先問大樹(大樹的動態threshold很慢)
- [x] numpy版
- 平均一天中每次train.py比舊版快10ms
- 異步會產生記憶體互搶而順序錯亂的bug
- [x] list版 (predict時再轉numpy的做法)
- 比numpy版平均每次慢3ms
- 物件導向更優化,幾乎只有子類專屬的功能才需要重新寫,其他只要繼承父類加帶參數
- [x] 有序字典版 (128向量跟要管理的資料中間用uuid_float做索引)
- 跟純numpy版速度差不多
- 利用hash的觀念配合is_slice做加速
-
# 2019 12/09~12/20
- [x] auto_divergence
- [x] auto_divergence.py
- [x] auto_divergence_dlib.py
- [x] 手動刪除api,有保護機制,去call宗賢的func
- [x] keras2onnx
- [x] keras2onnx
該github專案星星數不夠高且有bug,不建議嘗試
- [x] openvino
- [x] detect
找到server的cpu能60ms的版本
- [x] 找到重新編譯成3張圖平行運算的版本
- [x] 嘗試用mo去改,但目前沒試出來
- [x] 手刻小樹
- [x] 構思numpy手刻結帳樹的流程
# 2019 12/02~12/06
- [x] auto_divergence
- [x] auto_divergence.py
- [x] 偵測髒掉的person_id
- [x] 功能完善
- [x] 前端操作頁面
- [x] 偵測可以合併的person_id
- [x] 功能完善
- [x] 前端操作頁面
# 2019 11/25~11/29
- [x] auto_divergence
- [x] models.py
- [x] 有關arcface相關的模型讀取器
- [x] 原先放openvino相關模型讀取器的地方
- [x] dataloaders.py
- [x] 主要為繼承mx.io.DataIter的資料讀取器,以及其他資料讀取零件
- [x] auto_divergence.py
- [x] 偵測髒掉的person_id
- [x] 初版
- [x] 偵測可以合併的person_id
- [x] 初版
# 2019 11/25~11/29
- [x] auto_divergence
- [x] models.py
- [x] 有關arcface相關的模型讀取器
- [x] 原先放openvino相關模型讀取器的地方
- [x] dataloaders.py
- [x] 主要為繼承mx.io.DataIter的資料讀取器,以及其他資料讀取零件
- [x] auto_divergence.py
- [x] 偵測髒掉的person_id
- [x] 偵測可以合併的person_id
# 2019 11/18~11/22
- [x] subway上線
- [x] 現場觀察及維護
- [x] 顏色均衡化
- [x] 組內距離以及組外距離的測試機
確定沒髒掉的資料集丟進去可以算出每個person的彼此間平均距離以及對其他person的平均距離
- [x] 內外距測試機測試顏色正規化
- [顏色正規化報告](https://hackmd.io/iIntqfXKSK2hOTrYBzJzAA)
- [x] arcface歷史資料髒度偵測
- [x] FaceDataLoader,按照大樹mongo的紀錄,去撈校正後的圖片資料
- [x] 能一次撈多張照片yield出batch大小的圖,同時要做到讀圖的例外處理
- [ ] 將mxnet轉成tensorflow,嘗試更大的batch_size
# 2019 11/11~11/15
- [x] 穩定版上線
- [x] 現場觀察及維護
- [x] arcface歷史資料髒度偵測
- [x] FaceModel用gpu高batch size運算
- [x] 可以最多一次算16000個512但是搬不回cpu,故一次算12張
# 2019 11/4~11/8
- [x] 動態threshold
- [x] 串接資料庫
- [x] 歪臉偵測2(dlib部分 + openvino)
- [x] 上正式環境前測試及調整
- [x] align分析
為了之後用arcface可以更準,研究存圖align的方法
- [x] [仿射矩陣調查及研究](https://hackmd.io/yPeEd9owS2ilKKCU8zm-0Q?both)
# 2019 10/28~11/1
- [x] 動態threshold
- [x] [設定threshold的function](https://hackmd.io/ly2MwVv-Tma7RP_IPSpV8A?both)
- [x] train.py架構大改(以數量為信心改成以平均到中心點距離)
- [x] 初步可執行(加上考慮最近點的離群直分數,詳細結果如連結)
- [x] debug
- [x] align分析
為了之後用arcface可以更準,研究存圖align的方法
- [x] [仿射矩陣調查及研究](https://hackmd.io/yPeEd9owS2ilKKCU8zm-0Q?both)
- [ ] arcface
- [x] 確認使用在常態更新大樹以及警示的方向
- [ ] enocde完16000張圖只花不到100ms
# 2019 10/21~10/25
- [x] 安裝4種threshold的機制
- [x] train2.py
- [x] 動態threshold
- [x] 按照🌲裡person_id數量去調整的threshold
- [x] 按照🌲裡person_id分散程度去調整的threshold
- [x] 初步架構
# 2019 10/14~10/18
- [x] 歪臉
- [x] [正式準度與速度測試報告](https://hackmd.io/vll_JB1tQvCBaCRG30pK-A)
- [x] [歪臉專案](http://192.168.88.81:10080/ray/wryface)
[openvino安裝筆記](https://hackmd.io/nlyTFP7uRHqwHrKc19rdtQ?both)
- [x] [重構train.py](https://hackmd.io/C0OuSc7mQ8iLx9dZ_LNTpA?both)
- [x] 協助新版上線
- [ ] 歸檔
(最近寫了一堆code,找一天全部更新到gist)
# 2019 10/07~10/09
- [x] 歪臉
- [x] 用face_alignment代替dlib偵測68個點來計算歪臉程度
- [x] 時間測試結果mac=>1.5s, face_server=>130ms
- [x] 略過detect功能,直接將dlib偵測的臉給face_alignment偵測68點的結果
**(時間測試結果mac=>1.3s, face_server=>90ms)**
- [x] 資料集
- [x] 將face_image約900張的資料集,用face_alignment加上手刻判斷撈出61張側臉
- [x] 將MS1M資料集580萬張資料集其中的1萬多張,用face_alignment加上手刻判斷撈出600張側臉,因為跑太久所以剩下的就不繼續撈
- [x] 從4間餐廳8萬張資料集中用face_alignment加上手刻判斷,只撈出18張側臉資料(其中5張是奇怪的臉不是側臉),**可見正式環境側臉並不如想像中的多**
- [x] 左、中、右臉簡易手刻分類器
- [x] svm、lda
- [x] 抓與中臉最近的側臉來做訓練(triplet loss的概念)
(儘管有剔除掉許多側臉,但許多左臉會被認為是右臉,感覺很不穩定,看來用一層NN不可能將dlib好幾層的特徵抽取器抽取的結果強行分開)
- [x] openvino
- [x] linux環境安裝,hello world
- [x] max環境安裝,hello world
- [x] 跟pipenv虛擬環境會有衝突或讀不到的情形
- [x] 用強制改寫路徑的奇怪方法暫時過關了
- [x] 調用intel優化過的中介層IR檔案(.xml, .bin)
- [x] 詳細的[教學github](https://github.com/mathfunction/run_openVINO_demo/blob/master/doc/OpenVINONote.md)包含中英文影片路徑以及概念簡介
- [x] 用downloader 下載模型 head-pose-estimation-adas-0001
- [x] 執行頭部姿勢模型成功
- [x] 執行環境(與pipenv的衝突)
- [x] python調用xml模型程式碼
- [x] 協助新版上線
# 2019 10/01~10/05
- [x] Matching
- [x] 測試中心點vs多點
- [x] 測試mobilefacenet、dlib的準確度[測試結果](https://hackmd.io/HmfpAY1ARc-BlpnNC0-ELw)
KNN的訓練vs測試
- [x] 中心點vs中心點
- [x] 多點vs中心點
- [x] 多點vs多點
- [x] 儲存代表點
- [x] kmeans,k=3
- [x] KNN速度
- [x] 測出100%的感覺
- [x] 只看嚴謹的threshold會怎麼樣
- [x] 投票代替中心點
- [x] 歪臉
- [x] dlib68特徵點計算歪臉程度
(900張臉答案約有60張歪的,算法抓出300張臉認為是歪的,其中有4張歪掉的臉漏掉跑進剩下600張)
- [x] pytorch的face-alignment68
- [x] 用算法抓出來的歪臉都98%以上都是真的歪的
- [x] 速度很慢,cpu三個小時才看完一萬張照片
- [x] 抓出580張歪臉可供分類器做訓練
- [x] gpu測試速度
- [x] 左、中、右臉分類器
(效果比dlib68手刻算法還爛的就不寫數據結果了)
- [x] KNN
(效果不好,左臉跟中臉是同一個人的話很容易被認為這個中臉歪了)
- [x] svm
- [x] 只用MS1M做訓練,我們的資料做測試,效果非常爛,似乎沒真的學到怎麼分辨左中右
- [x] XGboost
- [x] 只用MS1M做訓練,沒調任何參數,效果比svm還爛
- [x] OpenVINO
(以inference為主的intel神器)
- [x] 調查OpenVINO的功能
- [x] **不同模型併發處理,不同frame併發處理!**
(預測年齡不用等預測性別,第二張圖不用等第一張圖)
- [x] 能針對device做優化運算,cpu、intel的gpu、fpga
(cpu針對avx2、avx512、或其他各種cpu指令集都有進行優化運算)
- [x] 能夠改變input size大小的同時做優化,讓準度沒下降!當然也包含任何其他一層
- [x] 能夠讓CNN不同層在不同的device上做運算(ex:有的層的優化cpu沒支援就在另一個device上運算)
- [x] 主要支援onnx、tensorflow、mxnet、caffe等框架
(包含onnx就幾乎包含全部框架了)
- [x] model zoo包含許多動作偵測、年齡等模型
- [x] **支援intel出的vpu神經棒NCS2**
週報(2019Q3)
===
###### tags: `週報` `Face Matching`
# 2019 09/23~09/27
- [x] face_tracking
不只考慮座標連續,用track的技術做分群
- [x] demo code
- [x] 初步demo code
(可以執行初連續追蹤的結果,但成效不佳)
- [x] Edge
- [x] mobilefacenet:
找到arcface同一個作者專門為edge端訓練的模型(輸出也是128維度)
- [x] 測試跟dlib的準度比較,表現只略高於dlib[連結](https://hackmd.io/HmfpAY1ARc-BlpnNC0-ELw)
- [x] tvm gpu 測試 mobilefacenet
- [x] 成功安裝環境並編譯成功
- [x] mac(但執行時會噴錯)
要裝llvm在cmake list中指定路徑到llvm資料夾
- [x] colab
- [x] 速度在colab上從7ms下降到1ms
detection因為確定要用dlib的HOG所以不用測試
- [ ] 開始訓練我們自己的模型!
- [ ] 資料生成
- [ ] 將arcface作者清理過的binary圖片集轉成image
- [x] 找到程式碼rec2image py
- [x] MS1M-refine
- [ ] Asian
# 2019 09/16~09/20
- [ ] continuous_face
`連續相近的bbox不當獨立事件 `
- [x] 單純一個攝像頭且不含KNN的prototype
- [x] uils py
- [x] bbox_iou, parallel_bbox_iou
`平行運算版的bbox_iou, 給frame_iou_backward調用`
- [x] frame py
- [x] Frame class、frame_iou_backward
`用BFS的概念層層回溯過往frame的iou,每個圖片只訪問一次,且目前frame裡的所有圖片要能平行運算`
- [x] app py
- [x] run
`主程式,包含抓取影片吐出frame_img,並調用Frame創建frame物件`
``` jason
{'coordinate1': '{"x":153,"y":289,"width":194,"height":214}', 'coordinate2': '{"x":276,"y":52,"width":195,"height":215}', 'coordinate3': '{"x":1,"y":56,"width":206,"height":226}', 'device_id': '2', 'order_sequence': '00000220190917113901', 'capture_time': '1568692005456', 'type': 'order'}
```
- [x] 模擬現況的圖片產生器
- [x] 用flask實際接上數據做測試
- [x] flask hello world (Flask、request)
- [x] ArcFace
- [x] 用loguru測試跟dlib的時間比
`cpu, inference一張圖dlib需20ms,arcface需110ms,速度為5.5倍,`
`用TVM加速可以解決5倍差距`
# 2019 09/09~09/12
- [x] ArcFace
- [x] [寫出整套執行的demo](http://192.168.88.81:10080/ray/insightface)
- [x] **inference py**
- [x] **test py**
- [x] Edge
- [x] 用TVM做cpu加速
- [x] 初步了解TVM
[介紹](https://xmfbit.github.io/2019/06/29/tvm-helloworld/) [簡介](https://www.youtube.com/watch?v=PCbL-_fDR6M) [教學影片](https://sampl.cs.washington.edu/tvmfcrc/)
[LLVM與NNVM](https://zhuanlan.zhihu.com/p/29254171)
- [x] install
# 2019 09/02~09/06
- [x] [將截至目前做的東西做成一些example](http://192.168.88.81:10080/ray/insightface/src/branch/master/insightface/inference/examples)
- [x] **centre_example.py**
`將特徵值轉成中心點`
- [x] **centre_withUID_example.py**
`假設特徵值同時來自很多uid時轉成中心點的方法`
- [x] **knn_centre_example.py**
`中心點如何套用knn模型`
- [x] 建立Matching機制的測試環境
- [x] 封裝predict做中心點KNN比對並使其具備評分功能
- [x] 測試公司資料
- [x] 測試中心點vs多點 [初步測試結果(9/3)](https://hackmd.io/keZfLeisTX6aKw7B53HMew?both)
- [x] 測試arcface的預訓練模型不align直接用
- [x] 比較KNN存中心點vs存多點
- [x] 比較KNN的n_neighbor數影響
- [x] 重新測試KNN跟dlib的使用正確性,調查圖片關係分佈的工具
[分析結果](https://hackmd.io/_-92QapbR9qGiSDPhFAEIw?both)
- [x] 分析圖表
- [x] 物件化
- [x] KNN正確性
# 2019 08/26~08/30
- [x] 建立Matching機制的測試環境
- [x] 封裝predict做中心點KNN比對並使其具備評分功能
- [x] KNN模組物件化(包含train、predict、evaluation)
- [x] 測試公司資料
- [x] 切分測試集
- [x] 測試user平均成1個中心點且database也是只存有1個中心點的情形
- [x] FR其他
- [x] 用Face synthesis做Domain Adaptation [投影片](https://www.slideshare.net/NaverEngineering/deep-domain-adaptation-network-for-face-recognition-with-single-sample-per-person)
- [x] 環境建置相關 [環境筆記](https://hackmd.io/qET1KCPYSY2nTn7c0aufxQ?both)
- [x] 熟悉vscode
- [x] vscode結合jupyter notebook
- [x] 熟悉vim
- [x] ArcFace
- [x] 從aligned face到512特徵
- [x]Google Colab
- [x] Google Drive API[安裝](https://developers.google.com/drive/api/v3/quickstart/python) 、 [API教學](https://developers.google.com/drive/api/v3/videos) 、 [Document](https://developers.google.com/drive/api/v2/manage-uploads)
註:以上方法不適用
- [x] pretrained模型執行起來
- [x] 解析模型推論部分源碼[verification.py](https://hackmd.io/kDdlrxQLRe-VAT0acnEfOg)
# 2019 08/19~08/23
- [x] KNN API熟悉
- [x] weights參數的[source code](https://github.com/scikit-learn/scikit-learn/blob/377adcc56988e679712e49fcda85346d22b8725e/sklearn/neighbors/base.py#L62)了解
- [x] 概略了解Ball Tree 跟 KD Tree的觀念 [影片](https://www.youtube.com/watch?v=E1_WCdUAtyE)
- [x] 理論上K值的選擇
- [x] 建立Matching機制的測試環境
- [x] 建立function能將子目錄所有圖片encode
- [x] 完成雛形包含以中心點做儲存的功能
- [x] 封裝predict做中心點KNN比對並使其具備評分功能
- [x] 完成雛形包含評分功能
- [x] 用numpy取代list做優化
- [x] KNN訓練及測試都優化成一次讀多筆資料
- [x] FR其他
- [x] 了解各種線上開源人臉資料庫的使用經驗及地雷
- [x] [經驗與地雷: VGGface2、MS-Celeb-1M、MegaFace...](https://jiankangdeng.github.io/resources/paper/Deng_ArcFace_submit_IJCV_2018_paper.pdf)
- [x] 確認gallery跟probe的觀念
- [x] [了解Dlib對於align的操作](https://github.com/ageitgey/face_recognition/issues/512)
- [x] [跟主管解釋何謂loss function](https://hackmd.io/TYVKNkjKSjacDtfdgLXlsg)
- [x] 學習系統操作
- [x] 重灌mac
- [x] ArcFace
- [x] [資料集](https://github.com/deepinsight/insightface/wiki/Dataset-Zoo)
- [x] [預訓練模型](https://github.com/deepinsight/insightface/wiki/Model-Zoo)
- [x] [開發環境調查(GPU規格、訓練時間...)](https://hackmd.io/80jf5cUaT5yC2rWJqMpuRw)
# 2019 08/14~08/16
- [x] Face Matching
- [x] KNN及其他可能的Matching方法研究
- [x] Dlib語法熟悉
- [x] 環境安裝
- [x] detect、encode、match
- [x] 學習系統操作
- [x] homebrew、pipenv...[筆記](https://hackmd.io/LaNlvdZzRjaze-Aa7QGJMg)
- [x] HackMD熟悉
- [x] 第一份筆記->環境建置
# 2019 入職前
### Face Recongnition
- :deciduous_tree: Overview and RoadMap
- :deciduous_tree: Find the best model and github
- :evergreen_tree: Loss Function
- :seedling: Face Matching
- :seedling: Many-to-One Normalization
- :seedling: Evaluation
- :seedling: DataBase
- :seedling: Cross-Factor
- :seedling: Face Alignment
- :seedling: Developement Framework(MXNet)