--- title: 'dlib tracker分給個核心運算研究' disqus: hackmd --- dlib tracker分給個核心運算研究(ubuntu18.04) === 文件版本.:v0.0.1 [TOC] ## 1. 筆記解說 主要解決問題,如下圖,再多個追蹤也只再1個core上執行,例如下圖示追蹤3人 也只用一個core來跑 ![](https://i.imgur.com/xLRdmUB.png) 主要是參考 參考文獻 [Multi-object tracking with dlib](https://www.pyimagesearch.com/2018/10/29/multi-object-tracking-with-dlib/) ,主要是透過MobileNetSSD將frame內人物框出(得出bounding box資訊),再利用multiprocessing方法將frame與要追的目標等資訊利用各個核心生成process(非multi thread)去執行dlib tracker, 其詳細架構如下圖(之候補圖) MobileNetSSD => 自動框出人物取得bounding box等資訊 dlib => 用於人物追蹤,利用queue的方式將丟進來的frame做tracking,再將追完的資訊丟到另一個queue ## 2. ubuntu cpu loading 指令 除了用top htop 等 command也能觀察之外 ,執行下列的指令 還能看到樹狀結構 ``` ps axu | grep [m]ulti_object_tracking_fast.py | awk '{print $2}' | xargs -n1 -I{} ps -o sid= -p {} | xargs -n1 -I{} ps --forest -o user,pid,ppid,cpuid,%cpu,%mem,stat,start,time,command -g {} ``` ![](https://i.imgur.com/Za2rpIE.png) 294是所有core 再執行這process的使用率總和 ## 3. 程式須注意部份解說 ### (1) 使用queue來處理每張frame ## X. 針對缺點改善方法 其參考文獻也有提到追蹤人數如果超過硬體核心數,可以使用process POOL的方式來改善,而非一直 生成process給各個核心(process為CPU執行單位,CPU會切換各個process),也就是在每個核心內的process內將多人追蹤任務放進pool來解決,例如有9人要追蹤,但硬體只有4核心,可以使用N(核心數)-1公式(留一個核心處理作業系統的任務),追蹤部份就可寫成各別3人丟到各個核心內的pool處理,下圖為文章針對此問題的敘述 ![](https://i.imgur.com/q9Z2iNX.png) ## 4. 程式分解-MoblieNetSSD 已經從此程式分解出用法,可參考此[github](https://github.com/masteree108/mobileNetSSD_test) 跑單張圖片執行結果 ![](https://i.imgur.com/GWjqzoz.jpg) ## 5. 改成使用pool 來取代queue ![](https://i.imgur.com/cQTH6bm.png) #### 修改成使用來POOL來執行,我的[github連結](https://github.com/masteree108/MOTF_process_pool_dlib) 再race.mp4的 追蹤結果非常糟糕 但在[30_clip.mp4 影片下載](https://drive.google.com/file/d/199_SXr-QRyrLthkaNHbA0ZSjT_TdmJzB/view?usp=sharing)效果不錯 ## x. 指令 cpu 可並行處理的數量公式 ![](https://i.imgur.com/oBlRyrO.png) [這張圖的討論區](https://stackoverflow.com/questions/19225859/difference-between-core-and-processor) ``` Threads per core X cores per socket X sockets ``` ![](https://i.imgur.com/prnS3go.png) ``` grep 'cpu cores' /proc/cpuinfo | uniq ``` ![](https://i.imgur.com/KrsYtUx.png) ``` nproc --all ``` [參考網站](https://www.cyberciti.biz/faq/check-how-many-cpus-are-there-in-linux-system/) ## x. 指定的processer重複問題 目前無解 ![](https://i.imgur.com/HFKHVtP.png) ## x. 參考文獻 [Multi-object tracking with dlib](https://www.pyimagesearch.com/2018/10/29/multi-object-tracking-with-dlib/) [關於 multiprocessing module1](https://docs.python.org/3.4/library/multiprocessing.html#module-multiprocessing) [關於 multiprocessing module2](https://sebastianraschka.com/Articles/2014_multiprocessing.html) [A Hands on Guide to Multiprocessing in Python](https://towardsdatascience.com/a-hands-on-guide-to-multiprocessing-in-python-48b59bfcc89e) [the pool class](https://sebastianraschka.com/Articles/2014_multiprocessing.html#the-pool-class) ![](https://i.imgur.com/xLOptsq.png) [multiprocess 多進程組件Pool](https://www.itread01.com/content/1521659196.html) [【Python教學】淺談 Multi-processing pool 使用方法](https://www.maxlist.xyz/2020/03/20/multi-processing-pool/) [cv2.dnn.blobFromImage()函数用法](https://blog.csdn.net/weixin_42216109/article/details/103010206) [CPU Cores VS Threads - Explained](youtube.com/watch?v=hwTYDQ0zZOw&feature=youtu.be) ![](https://i.imgur.com/JvM2qLd.png) [ Difference between core and processor](https://stackoverflow.com/questions/19225859/difference-between-core-and-processor) ![](https://i.imgur.com/GT4W80Q.png) ###### tags: `study`, `VoTT`