---
# System prepended metadata

title: dlib tracker分給個核心運算研究
tags: [VoTT, study]

---

---
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`
