週報(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)