Обнаружение целей, сопровождение целей, повторная идентификация, этот проект имеет ...

Python
Обнаружение целей, сопровождение целей, повторная идентификация, этот проект имеет ...

окрестности

  • убунту 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 deepsort fastreid

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Каждая обнаруженная цель отслеживается. Здесь в качестве точки отсчета используется центральная точка целевого кадра предсказания.На следующем рисунке показан метод ее расчета.

yolov5 deepsort fastreid

Если прямая линия, образованная центральными точками передней и задней рам, пересекает заданную опорную линию, считается, что она находится над линией, но остается вопрос направления, вверх или вниз? посмотреть другую картинку

yolov5 deepsort fastreid

Автор использует принципы касательной и арктангенса треугольников, используя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, вы можете получить

yolov5 deepsort fastreid

Видно, что так как 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был обновлен

Наконец, найдите видео, содержащее цель, чтобы проверить эффект.

yolov5 deepsort fastreid

yolov5 deepsort fastreid

Инженерная загрузка

Наконец, упакуйте все необходимые файлы, и друзья, которым они нужны, смогут скачать их сами.

Ссылка на сайт:disk.Baidu.com/Yes/1J если сделать O5_H…
Код извлечения:nauu

использованная литература