YOLOv7

环境

  • widnows 10 64bit

  • torch 1.7.1+cu101

前言

近日,原 YOLOv3/YOLOv4/Scaled-YOLOv4 的团队推出了 YOLOv7,源码地址:https://github.com/WongKinYiu/yolov7,同样是基于 pytorch 框架,对应的论文地址:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors,感兴趣的童鞋可以去读一读。

据官方的介绍,YOLOv7 是当前实时目标检测算法的 State Of The Art 也就是 SOTA,来看看下面的这张横向比较图

543d7af7bf10f52ae1314b8bfc38bb17.png

性能方面,各模型也是有不同程度的提升,看看其在 MS COCO 上的表现

9916939fe18bbff2f80619beacad50f0.png

代码实操

基础环境,包括 nvidia 驱动安装、pythoncudacudnnpytorch 等这些内容就不再讲了,不清楚的朋友,可以参考

  • ubuntu安装nvidia显卡驱动的2种方法

  • ubuntu安装cuda

  • windows 10安装cuda和cudnn

  • pytorch安装

首先,我们下载官方源码

git clone https://github.com/WongKinYiu/yolov7.git
cd yolov7

然后安装依赖

# 如果前面安装了pytorch,这里就将requirements.txt中的pytorch注释掉
pip install -r requirements.txt

依赖安装结束后,可以执行

python detect.py

代码执行过程中会去下载模型文件 yolov7.pt,下载成功后,会去检测 inference/images 目录中的图片,这里只有一张图片

9604ac485fb8a0e1ce99407895f1aeb4.png

结束后,检测结果为

de2625c5ea837874ade8a779570c26c0.png

当然也可以指定数据源,带上参数 --source

python detect.py --source bus.jpg

9b20cdcc3c80cef0037f97d66269e1e8.png

如果是视频文件检测,--source 参数后面直接跟上视频文件,摄像头检测的话,--source 参数后面跟上摄像头的 id,如 0、1 ...;网络流媒体的话,也是支持 httprtsprtmp 等协议

YOLOv7 除了实现目标检测,它还会带来人体关键点检测和实例分割这2个重要功能

目前人体关键点检测功能基本完成,我们来看看示例,在 tools/keypoint.ipynb,在 notebook 中可以直接运行。

如果需要将 ipynb 文件转成 python 文件,就执行

jupyter nbconvert --to python tools/keypoint.ipynb

8b37c1f3bd37edbfa9fc02e712180fc0.png

将生成的 tools/keypoint.py 拷贝到源码根目录下,然后修改文件的最后部分

output = non_max_suppression_kpt(output, 0.25, 0.65, nc=model.yaml['nc'], nkpt=model.yaml['nkpt'], kpt_label=True)
output = output_to_keypoint(output)
nimg = image[0].permute(1, 2, 0) * 255
nimg = nimg.cpu().numpy().astype(np.uint8)
nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
for idx in range(output.shape[0]):
    plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)

# 将结果保存下来
cv2.imwrite('person_keypoint.jpg', nimg)
# In[5]:

#get_ipython().run_line_magic('matplotlib', 'inline')
#plt.figure(figsize=(8,8))
#plt.axis('off')
#plt.imshow(nimg)
#plt.show()

然后去下载模型文件,https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6-pose.pt,同样放在源码根目录下,准备一张测试图片,最后,执行

python keypoint.py

5b2fc37aca18fef40043e618c8fa5619.jpeg

如果执行过程中报错

154f4e03a04157e953514665346d4e13.png

就需要去修改下 utils/plots.py,将

.cpu().numpy()

修改为

.cpu().detach().numpy()

如下图所示

73baa729fc3839cdd8da60a1492200f2.png

这是因为 Tensor 变量带有梯度,如果直接转换为 numpy 数据将会破坏计算图,这里不需要保留梯度信息,可以在变量转换之前调用 detach()

最后,实例分割的模型还没有放出,我们持续关注。

参考资料

  • https://github.com/WongKinYiu/yolov7

  • argparse基本使用

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷途小书童的Note

请博主喝矿泉书!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值