---
title: 'dlib tracker分給個核心運算研究'
disqus: hackmd
---
dlib tracker分給個核心運算研究(ubuntu18.04)
===
文件版本.:v0.0.1
[TOC]
## 1. 筆記解說
主要解決問題,如下圖,再多個追蹤也只再1個core上執行,例如下圖示追蹤3人
也只用一個core來跑

主要是參考 參考文獻 [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 {}
```

294是所有core 再執行這process的使用率總和
## 3. 程式須注意部份解說
### (1) 使用queue來處理每張frame
## X. 針對缺點改善方法
其參考文獻也有提到追蹤人數如果超過硬體核心數,可以使用process POOL的方式來改善,而非一直 生成process給各個核心(process為CPU執行單位,CPU會切換各個process),也就是在每個核心內的process內將多人追蹤任務放進pool來解決,例如有9人要追蹤,但硬體只有4核心,可以使用N(核心數)-1公式(留一個核心處理作業系統的任務),追蹤部份就可寫成各別3人丟到各個核心內的pool處理,下圖為文章針對此問題的敘述

## 4. 程式分解-MoblieNetSSD
已經從此程式分解出用法,可參考此[github](https://github.com/masteree108/mobileNetSSD_test)
跑單張圖片執行結果

## 5. 改成使用pool 來取代queue

#### 修改成使用來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://stackoverflow.com/questions/19225859/difference-between-core-and-processor)
```
Threads per core X cores per socket X sockets
```

```
grep 'cpu cores' /proc/cpuinfo | uniq
```

```
nproc --all
```
[參考網站](https://www.cyberciti.biz/faq/check-how-many-cpus-are-there-in-linux-system/)
## x. 指定的processer重複問題
目前無解

## 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)

[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)

[
Difference between core and processor](https://stackoverflow.com/questions/19225859/difference-between-core-and-processor)

###### tags: `study`, `VoTT`