์ฐธ์กฐ ultralytics/trackers/bot_sort.py
์ฐธ๊ณ
์ด ํ์ผ์ https://github.com/ultralytics/ ultralytics/blob/main/ ultralytics/trackers/bot_sort .py์์ ํ์ธํ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ํ ๋ฆฌํ์คํธ (๐ ๏ธ) ๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ๋์์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค ๐!
ultralytics.trackers.bot_sort.BOTrack
๋ฒ ์ด์ค: STrack
๊ฐ์ฒด ์ถ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ YOLOv8 ์ฉ STrack ํด๋์ค์ ํ์ฅ ๋ฒ์ ์ ๋๋ค.
์์ฑ:
์ด๋ฆ | ์ ํ | ์ค๋ช |
---|---|---|
shared_kalman |
KalmanFilterXYWH
|
BOTrack์ ๋ชจ๋ ์ธ์คํด์ค์ ๋ํ ๊ณต์ ์นผ๋ง ํํฐ์ ๋๋ค. |
smooth_feat |
ndarray
|
ํํํ๋ ํผ์ฒ ๋ฒกํฐ. |
curr_feat |
ndarray
|
ํ์ฌ ํผ์ฒ ๋ฒกํฐ. |
features |
deque
|
์ต๋ ๊ธธ์ด๊ฐ ์ ์๋ ํผ์ฒ ๋ฒกํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐํฌ์
๋๋ค. |
alpha |
float
|
ํผ์ฒ์ ์ง์ ์ด๋ ํ๊ท ์ ๋ํ ํํํ ๊ณ์์ ๋๋ค. |
mean |
ndarray
|
์นผ๋ง ํํฐ์ ํ๊ท ์ํ์ ๋๋ค. |
covariance |
ndarray
|
์นผ๋ง ํํฐ์ ๊ณต๋ถ์ฐ ํ๋ ฌ์ ๋๋ค. |
๋ฐฉ๋ฒ:
์ด๋ฆ | ์ค๋ช |
---|---|
update_features |
ํน์ง ๋ฒกํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ง์ ์ด๋ ํ๊ท ์ ์ฌ์ฉํ์ฌ ํํํํฉ๋๋ค. |
predict |
์นผ๋ง ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ท ๊ณผ ๊ณต๋ถ์ฐ์ ์์ธกํฉ๋๋ค. |
re_activate |
์ ๋ฐ์ดํธ๋ ๊ธฐ๋ฅ ๋ฐ ์ ํ์ ์ผ๋ก ์ ID๋ก ํธ๋์ ์ฌํ์ฑํํฉ๋๋ค. |
update |
YOLOv8 ์ธ์คํด์ค๋ฅผ ์ ํธ๋ ๋ฐ ํ๋ ์ ID๋ก ์ ๋ฐ์ดํธํฉ๋๋ค. |
tlwh |
ํ์ฌ ์์น๋ฅผ tlwh ํ์์ผ๋ก ๊ฐ์ ธ์ค๋ ์์ฑ |
multi_predict |
๊ณต์ ์นผ๋ง ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ค๋ธ์ ํธ ํธ๋์ ํ๊ท ๊ณผ ๊ณต๋ถ์ฐ์ ์์ธกํฉ๋๋ค. |
convert_coords |
tlwh ๊ฒฝ๊ณ ์์ ์ขํ๋ฅผ xywh ํ์์ผ๋ก ๋ณํํฉ๋๋ค. |
tlwh_to_xywh |
๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ xywh ํ์์ผ๋ก ๋ณํ |
์ฌ์ฉ๋ฒ
bo_track = BOTrack(tlwh, score, cls, feat) bo_track.predict() bo_track.update(new_track, frame_id)
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
|
tlwh
property
ํ์ฌ ์์น๋ฅผ ๋ฐ์ด๋ฉ ๋ฐ์ค ํ์์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ (top left x, top left y, width, height)
.
__init__(tlwh, score, cls, feat=None, feat_history=50)
๊ธฐ๋ฅ ํ์คํ ๋ฆฌ, ์ํ ๋ฐ ํ์ฌ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ YOLOv8 ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
convert_coords(tlwh)
์์ชฝ-์ผ์ชฝ-๋๋น-๋์ด ๋ฐ์ด๋ฉ ๋ฐ์ค ์ขํ๋ฅผ X-Y-๋๋น-๋์ด ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
multi_predict(stracks)
staticmethod
๊ณต์ ์นผ๋ง ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ค๋ธ์ ํธ ํธ๋์ ํ๊ท ๊ณผ ๊ณต๋ถ์ฐ์ ์์ธกํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
predict()
์นผ๋ง ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ท ๊ณผ ๊ณต๋ถ์ฐ์ ์์ธกํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
re_activate(new_track, frame_id, new_id=False)
์ ๋ฐ์ดํธ๋ ๊ธฐ๋ฅ์ผ๋ก ํธ๋์ ์ฌํ์ฑํํ๊ณ ์ ํ์ ์ผ๋ก ์ ID๋ฅผ ํ ๋นํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
tlwh_to_xywh(tlwh)
staticmethod
๋ฐ์ด๋ฉ ๋ฐ์ค๋ฅผ ํฌ๋งท์ผ๋ก ๋ณํ (center x, center y, width, height)
.
update(new_track, frame_id)
YOLOv8 ์ธ์คํด์ค๋ฅผ ์ ํธ๋ ๋ฐ ํ๋ ์ ID๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
update_features(feat)
ํน์ง ๋ฒกํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์ง์ ์ด๋ ํ๊ท ์ ์ฌ์ฉํ์ฌ ํํํํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
ultralytics.trackers.bot_sort.BOTSORT
๋ฒ ์ด์ค: BYTETracker
ReID ๋ฐ GMC ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๊ฐ์ฒด ์ถ์ ์ ์ํด ์ค๊ณ๋ YOLOv8 ์ฉ BYTETracker ํด๋์ค์ ํ์ฅ ๋ฒ์ ์ ๋๋ค.
์์ฑ:
์ด๋ฆ | ์ ํ | ์ค๋ช |
---|---|---|
proximity_thresh |
float
|
ํธ๋๊ณผ ํ์ง ์ฌ์ด์ ๊ณต๊ฐ์ ๊ทผ์ ์ฑ(IoU)์ ๋ํ ์๊ณ๊ฐ์ ๋๋ค. |
appearance_thresh |
float
|
ํธ๋๊ณผ ํ์ง ๊ฐ์ ์ธ๊ด ์ ์ฌ์ฑ(ReID ์๋ฒ ๋ฉ)์ ๋ํ ์๊ณ๊ฐ์ ๋๋ค. |
encoder |
object
|
ReID ์๋ฒ ๋ฉ์ ์ฒ๋ฆฌํ ๊ฐ์ฒด๋ก, ReID๊ฐ ํ์ฑํ๋์ง ์์ ๊ฒฝ์ฐ ์์์ผ๋ก ์ค์ ํฉ๋๋ค. |
gmc |
GMC
|
๋ฐ์ดํฐ ์ฐ๊ฒฐ์ ์ํ GMC ์๊ณ ๋ฆฌ์ฆ์ ์ธ์คํด์ค์ ๋๋ค. |
args |
object
|
์ถ์ ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋ ๋ช ๋ น์ค ์ธ์๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ์ต๋๋ค. |
๋ฐฉ๋ฒ:
์ด๋ฆ | ์ค๋ช |
---|---|
get_kalmanfilter |
๊ฐ์ฒด ์ถ์ ์ ์ํ ์นผ๋งํํฐXYWH ์ธ์คํด์ค๋ฅผ ๋ฐํํฉ๋๋ค. |
init_track |
๊ฐ์ง, ์ ์ ๋ฐ ํด๋์ค๋ก ํธ๋์ ์ด๊ธฐํํฉ๋๋ค. |
get_dists |
IoU ๋ฐ (์ ํ ์ฌํญ) ReID๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋๊ณผ ํ์ง ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ ํฉ๋๋ค. |
multi_predict |
YOLOv8 ๋ชจ๋ธ๋ก ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์์ธกํ๊ณ ์ถ์ ํ์ธ์. |
์ฌ์ฉ๋ฒ
bot_sort = BOTSORT(args, frame_rate) bot_sort.init_track(dets, scores, cls, img) bot_sort.multi_predict(tracks)
์ฐธ๊ณ
์ด ํด๋์ค๋ YOLOv8 ๊ฐ์ฒด ๊ฐ์ง ๋ชจ๋ธ๊ณผ ํจ๊ป ์๋ํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, args๋ฅผ ํตํด ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง ReID๋ฅผ ์ง์ํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
|
__init__(args, frame_rate=30)
ReID ๋ชจ๋๊ณผ GMC ์๊ณ ๋ฆฌ์ฆ์ผ๋ก YOLOv8 ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
get_dists(tracks, detections)
IoU ๋ฐ (์ ํ ์ฌํญ) ReID ์๋ฒ ๋ฉ์ ์ฌ์ฉํ์ฌ ํธ๋๊ณผ ํ์ง ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ ํฉ๋๋ค.
์ ์์ค ์ฝ๋ ultralytics/trackers/bot_sort.py
get_kalmanfilter()
init_track(dets, scores, cls, img=None)
๊ฐ์ง, ์ ์ ๋ฐ ํด๋์ค๋ก ํธ๋์ ์ด๊ธฐํํฉ๋๋ค.