文章目录
前言:本文讲述搭建mikel-brostrom作者的yolo_tracking项目,该项目主要用于分割、物体检测和姿态估计模型。本文主要实现其跟踪车辆过程。
1、环境搭建
原作者要求搭建Python>=3.8,但我建议直接大于等于3.9,因为3.8会报一些错误。
# 默认系统配置了conda环境
conda create -n yolo_tracking python=3.9
# 激活当前环境
conda activate yolo_tracking
# 拷贝yolo_tracking项目
git clone https://github.com/mikel-brostrom/yolo_tracking.git
# 来到yolo_tracking目录下
cd yolo_tracking
# 安装peotry模块,poetry 是一个用于管理 Python 项目依赖关系和构建工具的工具,包括虚拟环境管理
pip install poetry
# 安装boxmot + yolo 依赖
poetry install --with yolo
# 激活依赖
poetry shell
# 另外,如果你想只要跟踪模块,可以执行下方语句
pip install boxmot
2、运行例子
2.1、运行目标检测,分割,姿态检测
# 前提要下载对应的模型。如果没下载的话,默认去谷歌云盘下载模型。
python tracking/track.py --yolo-model yolov8n # bboxes only
python tracking/track.py --yolo-model yolo_nas_s # bboxes only
python tracking/track.py --yolo-model yolox_n # bboxes only
yolov8n-seg # bboxes + segmentation masks
yolov8n-pose # bboxes + pose estimation
2.2、运行跟踪
# 根据不同方法名,下载不同的跟踪模型
python tracking/track.py --tracking-method deepocsort
strongsort
ocsort
bytetrack
botsort
2.3、检测不同内容
python tracking/track.py --source 0 # webcam 摄像头
img.jpg # image 图片
vid.mp4 # video 视频
path/ # directory 目录
path/*.jpg # glob
'https://youtu.be/Zgi9g1ksQHc' # YouTube
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
2.4、运行ReID模型
一些跟踪方法在跟踪过程中结合了外观描述和运动。对于那些使用外观的人,你可以根据自己的需求从这个ReID模型库中选择一个ReID模型。你可以根据自己的需求结合reid_export.py脚本优化这些模型。
python tracking/track.py --source 0 --reid-model lmbn_n_cuhk03_d.pt # lightweight
osnet_x0_25_market1501.pt
mobilenetv2_x1_4_msmt17.engine
resnet50_msmt17.onnx
osnet_x1_0_msmt17.pt
clip_market1501.pt # heavy
clip_vehicleid.pt
...
2.5、过滤跟踪类别
默认情况下,跟踪器跟踪所有MS COCO类。如果你想跟踪你建模预测的类的子集,请在类标志后添加相应的索引。
python tracking/track.py --source 0 --yolo-model yolov8s.pt --classes 16 17 # COCO yolov8 model. Track cats and dogs, only
# coco类别 注意官网序号从1开始
# 特别注意:mikel-brostrom作者训练的yolo_tracking项目的序号是从0开始的!!
['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light','fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow','elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee','skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard','tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple','sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch','potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone','microwave', 'oven', 'toaster', 'sink','refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear','hair drier', 'toothbrush','hair brush']
2.6、符合MOT格式
# Can be saved to your experiment folder runs/track/exp*/ by
python tracking/track.py --source ... --save-mot
2.7、综合测试
# 检测并跟踪车辆
python tracking/track.py --source video/MOT16-13.mp4 --yolo-model ./weights/yolov8s.pt --classes 1 2 3 5 6 7 --tracking-method deepocsort --save
3、遇到问题
requests.exceptions.ConnectionError: HTTPSConnectionPool(host=‘drive.google.com’)
原因:如果没有提前下载模型,则默认从谷歌云盘下载对应的模型(yolo模型,tracking模型,ReID模型),但谷歌云盘默认不对中国开放。
# 出错代码
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='drive.google.com', port=443): Max retries exceeded with url: /uc?id=1sSwXSUlj4_tHZequ_iZ8w_Jh0VaRQMqF (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x2b22546043d0>: Failed to resolve 'drive.google.com' ([Errno -2] Name or service not known)"))
1、我们可以在 boxmot\appearance\backbones\osnet.py
中找到要下载的预加载模型。
pretrained_urls = {
"osnet_x1_0": "https://drive.google.com/uc?id=1LaG1EJpHrxdAxKnSCJ_i0u-nbxSAeiFY",
"osnet_x0_75": "https://drive.google.com/uc?id=1uwA9fElHOk3ZogwbeY5GkLI6QPTX70Hq",
"osnet_x0_5": "https://drive.google.com/uc?id=16DGLbZukvVYgINws8u8deSaOqjybZ83i",
"osnet_x0_25": "https://drive.google.com/uc?id=1rb8UN5ZzPKRc_xvtHlyDh-cSz88YX9hs",
"osnet_ibn_x1_0": "https://drive.google.com/uc?id=1sr90V6irlYYDd4_4ISU2iruoRG8J__6l",
}
2、我们可以在 boxmot\appearance\reid_model_factory.py
中找到要下载的ReID模型。
__trained_urls = {
# resnet50
"resnet50_market1501.pt": "https://drive.google.com/uc?id=1dUUZ4rHDWohmsQXCRe2C_HbYkzz94iBV",
"resnet50_dukemtmcreid.pt": "https://drive.google.com/uc?id=17ymnLglnc64NRvGOitY3BqMRS9UWd1wg",
"resnet50_msmt17.pt": "https://drive.google.com/uc?id=1ep7RypVDOthCRIAqDnn4_N-UhkkFHJsj",
"resnet50_fc512_market1501.pt": "https://drive.google.com/uc?id=1kv8l5laX_YCdIGVCetjlNdzKIA3NvsSt",
"resnet50_fc512_dukemtmcreid.pt": "https://drive.google.com/uc?id=13QN8Mp3XH81GK4BPGXobKHKyTGH50Rtx",
"resnet50_fc512_msmt17.pt": "https://drive.google.com/uc?id=1fDJLcz4O5wxNSUvImIIjoaIF9u1Rwaud",
# mlfn
"mlfn_market1501.pt": "https://drive.google.com/uc?id=1wXcvhA_b1kpDfrt9s2Pma-MHxtj9pmvS",
"mlfn_dukemtmcreid.pt": "https://drive.google.com/uc?id=1rExgrTNb0VCIcOnXfMsbwSUW1h2L1Bum",
"mlfn_msmt17.pt": "https://drive.google.com/uc?id=18JzsZlJb3Wm7irCbZbZ07TN4IFKvR6p-",
# hacnn
"hacnn_market1501.pt": "https://drive.google.com/uc?id=1LRKIQduThwGxMDQMiVkTScBwR7WidmYF",
"hacnn_dukemtmcreid.pt": "https://drive.google.com/uc?id=1zNm6tP4ozFUCUQ7Sv1Z98EAJWXJEhtYH",
"hacnn_msmt17.pt": "https://drive.google.com/uc?id=1MsKRtPM5WJ3_Tk2xC0aGOO7pM3VaFDNZ",
# mobilenetv2
"mobilenetv2_x1_0_market1501.pt": "https://drive.google.com/uc?id=18DgHC2ZJkjekVoqBWszD8_Xiikz-fewp",
"mobilenetv2_x1_0_dukemtmcreid.pt": "https://drive.google.com/uc?id=1q1WU2FETRJ3BXcpVtfJUuqq4z3psetds",
"mobilenetv2_x1_0_msmt17.pt": "https://drive.google.com/uc?id=1j50Hv14NOUAg7ZeB3frzfX-WYLi7SrhZ",
"mobilenetv2_x1_4_market1501.pt": "https://drive.google.com/uc?id=1t6JCqphJG-fwwPVkRLmGGyEBhGOf2GO5",
"mobilenetv2_x1_4_dukemtmcreid.pt": "https://drive.google.com/uc?id=12uD5FeVqLg9-AFDju2L7SQxjmPb4zpBN",
"mobilenetv2_x1_4_msmt17.pt": "https://drive.google.com/uc?id=1ZY5P2Zgm-3RbDpbXM0kIBMPvspeNIbXz",
# osnet
"osnet_x1_0_market1501.pt": "https://drive.google.com/uc?id=1vduhq5DpN2q1g4fYEZfPI17MJeh9qyrA",
"osnet_x1_0_dukemtmcreid.pt": "https://drive.google.com/uc?id=1QZO_4sNf4hdOKKKzKc-TZU9WW1v6zQbq",
"osnet_x1_0_msmt17.pt": "https://drive.google.com/uc?id=112EMUfBPYeYg70w-syK6V6Mx8-Qb9Q1M",
"osnet_x0_75_market1501.pt": "https://drive.google.com/uc?id=1ozRaDSQw_EQ8_93OUmjDbvLXw9TnfPer",
"osnet_x0_75_dukemtmcreid.pt": "https://drive.google.com/uc?id=1IE3KRaTPp4OUa6PGTFL_d5_KQSJbP0Or",
"osnet_x0_75_msmt17.pt": "https://drive.google.com/uc?id=1QEGO6WnJ-BmUzVPd3q9NoaO_GsPNlmWc",
"osnet_x0_5_market1501.pt": "https://drive.google.com/uc?id=1PLB9rgqrUM7blWrg4QlprCuPT7ILYGKT",
"osnet_x0_5_dukemtmcreid.pt": "https://drive.google.com/uc?id=1KoUVqmiST175hnkALg9XuTi1oYpqcyTu",
"osnet_x0_5_msmt17.pt": "https://drive.google.com/uc?id=1UT3AxIaDvS2PdxzZmbkLmjtiqq7AIKCv",
"osnet_x0_25_market1501.pt": "https://drive.google.com/uc?id=1z1UghYvOTtjx7kEoRfmqSMu-z62J6MAj",
"osnet_x0_25_dukemtmcreid.pt": "https://drive.google.com/uc?id=1eumrtiXT4NOspjyEV4j8cHmlOaaCGk5l",
"osnet_x0_25_msmt17.pt": "https://drive.google.com/uc?id=1sSwXSUlj4_tHZequ_iZ8w_Jh0VaRQMqF",
# osnet_ain | osnet_ibn
"osnet_ibn_x1_0_msmt17.pt": "https://drive.google.com/uc?id=1q3Sj2ii34NlfxA4LvmHdWO_75NDRmECJ",
"osnet_ain_x1_0_msmt17.pt": "https://drive.google.com/uc?id=1SigwBE6mPdqiJMqhuIY4aqC7--5CsMal",
# lmbn
"lmbn_n_duke.pt": lmbn_loc + "lmbn_n_duke.pth",
"lmbn_n_market.pt": lmbn_loc + "lmbn_n_market.pth",
"lmbn_n_cuhk03_d.pt": lmbn_loc + "lmbn_n_cuhk03_d.pth",
# clip
"clip_market1501.pt": "https://drive.google.com/uc?id=1GnyAVeNOg3Yug1KBBWMKKbT2x43O5Ch7",
"clip_duke.pt": "https://drive.google.com/uc?id=1ldjSkj-7pXAWmx8on5x0EftlCaolU4dY",
"clip_veri.pt": "https://drive.google.com/uc?id=1RyfHdOBI2pan_wIGSim5-l6cM4S2WN8e",
"clip_vehicleid.pt": "https://drive.google.com/uc?id=168BLegHHxNqatW5wx1YyL2REaThWoof5"
}
3、下方提供本文测试的模型和视频
# 成功运行,显示代码
| SUCCESS | boxmot.appearance.reid_model_factory:load_pretrained_weights:207 - Successfully loaded pretrained weights from "weights/osnet_x0_25_msmt17.pt"