Alphapose – 在Alphapose中使用yolov3-tiny检测器大幅提升检测性能
1 Alphapose中使用yolov3-tiny检测器的应用场景
Alphapose的官方仓库中默认使用的是yolov3-spp,根据官网公布的数据,其mAP为60.6,FPS能到20FPS。但是如果我们面临的是一个不复杂的场景,场景中人数较少,而我们有需要其性能够好,实时性能达到应用的要求或者更好,那我们为什么不使用yolov3-tiny检测器,由于简化了网络结构,根据官网的公布的数据,其FPS能达到220FPS,而mAP也有33.1,对于普通场景这种精度完全够用。
2 在Alphapose中使用yolov3-tiny
2.1 下载yolov3-tiny的权重和配置文件
官网地址:https://pjreddie.com/darknet/yolo/
在官网分别下载weights和cfg文件
将权重文件yolov3-tiny.weights放置到Alphapose的AlphaPose\detector\yolo\data文件夹下;
将配置文件yolov3-tiny.cfg放置到Alphapose的AlphaPose\detector\yolo\cfg文件夹下;
2.2 修改Alphapose的yolo_cfg文件
将AlphaPose\detector\yolo_cfg.py文件中的:
cfg.CONFIG = 'detector/yolo/cfg/yolov3-spp.cfg'
cfg.WEIGHTS = 'detector/yolo/data/yolov3-spp.weights'
修改为
cfg.CONFIG = 'detector/yolo/cfg/yolov3-tiny.cfg'
cfg.WEIGHTS = 'detector/yolo/data/yolov3-tiny.weights'
附上yolo_cfg.py的全部内容:
from easydict import EasyDict as edict
cfg = edict()
cfg.CONFIG = 'detector/yolo/cfg/yolov3-tiny.cfg'
cfg.WEIGHTS = 'detector/yolo/data/yolov3-tiny.weights'
cfg.INP_DIM = 320
cfg.NMS_THRES = 0.45
cfg.CONFIDENCE = 0.6
cfg.NUM_CLASSES = 80
2.3 yolov3-tiny.cfg的修改
好了,在我们进行了上述配置之后,就可以信心满满的运行Alphapose,试一试Alphapose的速度了!!!
但是,出现了以下错误:
Traceback (most recent call last):
File "G:\ProgramData\Anaconda3\envs\Alphapose\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "G:\ProgramData\Anaconda3\envs\Alphapose\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "F:\下载目录\Github项目\Machine Learning And Deep Learning\AlphaPose\alphapose\utils\detector.py", line 223, in image_detection
dets = self.detector.images_detection(imgs, im_dim_list)
File "F:\下载目录\Github项目\Machine Learning And Deep Learning\AlphaPose\detector\yolo_api.py", line 99, in images_detection
prediction = self.model(imgs, args=args)
File "G:\ProgramData\Anaconda3\envs\Alphapose\lib\site-packages\torch\nn\modules\module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
File "F:\下载目录\Github项目\Machine Learning And Deep Learning\AlphaPose\detector\yolo\darknet.py", line 353, in forward
x = torch.cat((map1, map2), 1)
RuntimeError: Sizes of tensors must match except in dimension 2. Got 20 and 18 (The offending index is 0)
好吧,从错误上以及调试的结果来看估计是yolov3-tiny.cfg网络结果有点问题,可是官方的配置文件为啥有问题啊!
不管了,经过我的不懈测试,终于发现了问题所在的地方,yolov3-tiny.cfg的157行:
[route]
layers = -1, 8
将其修改为:
[route]
layers = -1, 19
即可。
附上修改后的yolov3-tiny.cfg全部内容:
[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=2
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.001
burn_in=1000
max_batches = 500200
policy=steps
steps=400000,450000
scales=.1,.1
[convolutional]
batch_normalize=1
filters=16
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=2
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[maxpool]
size=2
stride=1
[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky
###########
[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky
[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky
[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear
[yolo]
mask = 3,4,5
anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319
classes=80
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
[route]
layers = -4
[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky
[upsample]
stride=2
[route]
#layers = -1, 8
layers = -1, 19
[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky
[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear
[yolo]
mask = 0,1,2
anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319
classes=80
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1
修改完之后,就放肆跑吧!!!速度有很大提升!
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Alphapose – 在Alphapose中使用yolov3-tiny检测器大幅提升检测性能
原文链接:https://www.stubbornhuang.com/1486/
发布于:2021年08月02日 10:25:14
修改于:2023年06月26日 21:24:20
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
啊?还有这个错误吗?
其实我建议可以试一试YOLOv5,我现在用的YOLOv5感觉速度还好,你其实可以试一试,将YOLOv5移到Alphapose中替换目标检测部分
我用的应该也是老的版本 不是最近更新的那个