окрестности
- убунту 18.04 64 бит
- yolov5
- deepsort
- fastreid
предисловие
ПреамбулаОтслеживание целей на основе YOLOv5 и DeepSortВведено обнаружение и отслеживание пешеходов. В этой статье представлен еще один проект, объединяющийFastReidДля достижения обнаружения пешеходов, отслеживания и повторной идентификации. адрес проекта:GitHub.com/five-fold-contact/y…, два основных примера, приведенных автором, тоже весьма практичны, включая статистику пешеходного движения, и поиск и отслеживание конкретных целей в толпе.
Повторение проекта
Сначала создайте новую виртуальную среду
conda create -n pytorch1.6 python=3.7
conda activate pytorch1.6
Затем перейдите к извлечению исходного кода
git clone https://github.com/zengwb-lx/Yolov5-Deepsort-Fastreid.git
cd Yolov5-Deepsort-Fastreid
Затем установите другие зависимости
# 如果没有gpu的话,就按照requirements.txt安装即可
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
# 编辑requirements.txt,注释掉torch和torchvision
pip install -r requirements.txt
# 使用cython加速
pip install cython
cd fast_reid/fastreid/evaluation/rank_cylib
make all
cd ../../../../
Давайте сначала побежим, чтобы считать пешеходовdemo
python person_count.py
yolov5
Авторыgoogleapi
иgithub
Файлы модели сохраняются на обоих, но эти 2yolov5s.pt
отличается, каждый может пройтиmd5sum
иди проверь это,github
Файл модели указан правильно
Если вы получаете следующую ошибку во время работы
2021-07-13 14:22:20 [INFO]: Loading weights from ./deep_sort/deep/checkpoint/ckpt.t7... Done!
Traceback (most recent call last):
File "person_count.py", line 244, in <module>
yolo_reid.deep_sort()
File "person_count.py", line 121, in deep_sort
bbox_xywh, cls_conf, cls_ids, xy = self.person_detect.detect(video_path, img, ori_img, vid_cap)
File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/person_detect_yolov5.py", line 95, in detect
pred = self.model(img, augment=self.augment)[0]
File "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 111, in forward
return self.forward_once(x, profile) # single-scale inference, train
File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 131, in forward_once
x = m(x) # run
File "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_impl
result = self.forward(*input, **kwargs)
File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 36, in forward
self.training |= self.export
File "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 772, in __getattr__
type(self).__name__, name))
torch.nn.modules.module.ModuleAttributeError: 'Detect' object has no attribute 'export'
Это проблема модели, рекомендуется использовать ту, что идет с исходникамиshell
скрипт для скачивания
sh weights/download_weights.sh
Давайте рассмотрим основные принципы этой статистики пешеходного движения:
Во-первых, автор будетyolov5
Обнаружение цели инкапсулировано в классPerson_detect
, через егоdetect
Метод может обнаружить каждый пешеходный объект на видео.
Затем установите контрольную линию на экране и укажите координаты обоих концов линии.
line = [(0, int(0.48 * ori_img.shape[0])), (int(ori_img.shape[1]), int(0.48 * ori_img.shape[0]))]
cv2.line(ori_img, line[0], line[1], (0, 255, 255), 4)
Далее создайте трекер и запуститеyolov5
Каждая обнаруженная цель отслеживается. Здесь в качестве точки отсчета используется центральная точка целевого кадра предсказания.На следующем рисунке показан метод ее расчета.
Если прямая линия, образованная центральными точками передней и задней рам, пересекает заданную опорную линию, считается, что она находится над линией, но остается вопрос направления, вверх или вниз? посмотреть другую картинку
Автор использует принципы касательной и арктангенса треугольников, используяmath
в модулеdegrees
способ определить, является ли этот угол>0
, указывая на то, что он идет вверх, в противном случае он идет вниз
def vector_angle(midpoint, previous_midpoint):
x = midpoint[0] - previous_midpoint[0]
y = midpoint[1] - previous_midpoint[1]
return math.degrees(math.atan2(y, x))
Увидев пример подсчета пешеходов, давайте посмотрим на пример повторной идентификации конкретной цели.
python person_search_reid.py
сообщил об ошибке
Fusing layers...
Traceback (most recent call last):
File "person_search_reid.py", line 120, in <module>
yolo_reid = yolo_reid(cfg, args, path=args.video_path)
File "person_search_reid.py", line 35, in __init__
self.deepsort = build_tracker(cfg, args.sort, use_cuda=use_cuda)
File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/__init__.py", line 18, in build_tracker
max_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET, use_cuda=use_cuda)
File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/deep_reid.py", line 29, in __init__
self.extractor = Reid_feature()
File "./fast_reid/demo/demo.py", line 84, in __init__
cfg = setup_cfg(args)
File "./fast_reid/demo/demo.py", line 35, in setup_cfg
cfg.merge_from_file(args.config_file)
File "./fast_reid/fastreid/config/config.py", line 107, in merge_from_file
cfg_filename, allow_unsafe=allow_unsafe
File "./fast_reid/fastreid/config/config.py", line 50, in load_yaml_with_base
with PathManager.open(filename, "r") as f:
File "./fast_reid/fastreid/utils/file_io.py", line 357, in open
path, mode, buffering=buffering, **kwargs
File "./fast_reid/fastreid/utils/file_io.py", line 251, in _open
opener=opener,
FileNotFoundError: [Errno 2] No such file or directory: '../../kd-r34-r101_ibn/config-test.yaml'
Это отсутствующий файл конфигурации, перейдите по ссылке ниже, чтобы скачать
Ссылка на сайт:disk.baidu.com/is/1BMG3Enterprise7Вы…
Код извлечения:hy1m
Сохраните эти два файла в каталогеkd-r34-r101_ibn
, а затем изменить исходный кодfast_reid/demo/demo.py
в строке 45 будет
default='../../kd-r34-r101_ibn/config-test.yaml',
изменить на
default='kd-r34-r101_ibn/config-test.yaml',
будет линия 68
default=['MODEL.WEIGHTS', '../../kd-r34-r101_ibn/model_final.pth'],
изменить на
default=['MODEL.WEIGHTS', 'kd-r34-r101_ibn/model_final.pth'],
затем снова запустите скриптperson_search_reid.py
, вы можете получить
Видно, что так как 2 пешехода (a1111111111
иb222222222222
), поэтому два человека могут быть идентифицированы и отслежены на экране. По умолчанию файл подписи сохраняется вfast_reid/query
Вниз
Извлечение признаков
Если вы также хотите создать файл функции, вы можете выполнить следующие шаги.
Прежде всего, вам нужно перехватить изображение целевого человека и сохранить его в папке, названной в честь конкретной цели, такой как моя здесьxugaoxiang.com
, таким образом, когда идентификация будет выполнена позже, она будет отображатьxugaoxiang.com
это имя. скопируйте эту папку вfast_reid/query
каталог, структура каталогов выглядит следующим образом
(pytorch1.6) xugaoxiang@1070Ti:~/Works/Yolov5-Deepsort-Fastreid/fast_reid/query$ tree
.
├── names.npy
├── query_features.npy
└── xugaoxiang.com
├── 10.png
├── 11.png
├── 12.png
├── 13.png
├── 14.png
├── 15.png
├── 1.png
├── 2.png
├── 3.png
├── 4.png
├── 5.png
├── 6.png
├── 7.png
├── 8.png
└── 9.png
выполнить следующий
cd fast_reid/demo
python person_bank.py
После казни,query
в каталогеquery_features.npy
иnames.npy
был обновлен
Наконец, найдите видео, содержащее цель, чтобы проверить эффект.
Инженерная загрузка
Наконец, упакуйте все необходимые файлы, и друзья, которым они нужны, смогут скачать их сами.
Ссылка на сайт:disk.Baidu.com/Yes/1J если сделать O5_H…
Код извлечения:nauu