使用YOLOX进行物体检测_yolox 刀具-程序员宅基地

技术标签: 深度学习  神经网络  


前言

YOLOX 是旷视开源的高性能检测器。旷视的研究者将解耦头、数据增强、无锚点以及标签分类等目标检测领域的优秀进展与 YOLO 进行了巧妙的集成组合,提出了 YOLOX,不仅实现了超越 YOLOv3、YOLOv4 和 YOLOv5 的 AP,而且取得了极具竞争力的推理速度。
其中YOLOX-L版本以 68.9 FPS 的速度在 COCO 上实现了 50.0% AP,比 YOLOv5-L 高出 1.8% AP!还提供了支持 ONNX、TensorRT、NCNN 和 Openvino 的部署版本,本文将详细介绍如何使用 YOLOX进行物体检测。


一、源码

GitHub地址:https://github.com/Megvii-BaseDetection/YOLOX

(base) omg@omg:~/work/code/deep_learn$ git clone https://github.com/Megvii-BaseDetection/YOLOX.git

可以用PyCharm打开。

二、安装依赖包

1.运行安装脚本

(base) omg@omg:~/work/code/deep_learn/YOLOX$ python setup.py install

2.安装成功显示如下信息

......
......
Using /home/omg/anaconda3/lib/python3.9/site-packages
Searching for wheel==0.37.0
Best match: wheel 0.37.0
Adding wheel 0.37.0 to easy-install.pth file
Installing wheel script to /home/omg/anaconda3/bin

Using /home/omg/anaconda3/lib/python3.9/site-packages
Finished processing dependencies for yolox==0.3.0

三、安装apex

APEX是英伟达开源的,完美支持PyTorch框架,用于改变数据格式来减小模型显存占用的工具。其中最有价值的是amp(Automatic Mixed Precision),将模型的大部分操作都用Float16数据类型测试,一些特别操作仍然使用Float32。并且用户仅仅通过三行代码即可完美将自己的训练代码迁移到该模型。实验证明,使用Float16作为大部分操作的数据类型,并没有降低参数,在一些实验中,反而由于可以增大Batch size,带来精度上的提升,以及训练速度上的提升。

(base) omg@omg:~/work/code/deep_learn$ git clone https://github.com/NVIDIA/apex.git

1.安装报错

Processing /home/zhaoyq6/work/code/deep_learn/apex
  Running command python setup.py egg_info
  Traceback (most recent call last):
    File "<string>", line 2, in <module>
    File "<pip-setuptools-caller>", line 34, in <module>
    File "/home/zhaoyq6/work/code/deep_learn/apex/setup.py", line 137, in <module>
      _, bare_metal_version = get_cuda_bare_metal_version(CUDA_HOME)
    File "/home/zhaoyq6/work/code/deep_learn/apex/setup.py", line 17, in get_cuda_bare_metal_version
      raw_output = subprocess.check_output([cuda_dir + "/bin/nvcc", "-V"], universal_newlines=True)
    File "/home/zhaoyq6/anaconda3/lib/python3.9/subprocess.py", line 424, in check_output
      return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
    File "/home/zhaoyq6/anaconda3/lib/python3.9/subprocess.py", line 505, in run
      with Popen(*popenargs, **kwargs) as process:
    File "/home/zhaoyq6/anaconda3/lib/python3.9/subprocess.py", line 951, in __init__
      self._execute_child(args, executable, preexec_fn, close_fds,
    File "/home/zhaoyq6/anaconda3/lib/python3.9/subprocess.py", line 1821, in _execute_child
      raise child_exception_type(errno_num, err_msg, err_filename)
  FileNotFoundError: [Errno 2] No such file or directory: ':/usr/local/cuda/bin/nvcc'


  torch.__version__  = 1.13.0+cu117


  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

解决方法

(base) omg@omg:~/work/code/deep_learn/apex$ export CUDA_HOME=/usr/local/cuda
(base) omg@omg:~/work/code/deep_learn/apex$ pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

2.安装报错

Installing collected packages: apex
  DEPRECATION: apex is being installed using the legacy 'setup.py install' method, because the '--no-binary' option was enabled for it and this currently disables local wheel building for projects that don't have a 'pyproject.toml' file. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/11451
  Running command Running setup.py install for apex

  torch.__version__  = 1.13.0+cu117

  Compiling cuda extensions with
  nvcc: NVIDIA (R) Cuda compiler driver
  Copyright (c) 2005-2021 NVIDIA Corporation
  Built on Fri_Dec_17_18:16:03_PST_2021
  Cuda compilation tools, release 11.6, V11.6.55
  Build cuda_11.6.r11.6/compiler.30794723_0
  from /usr/local/cuda/bin

  Traceback (most recent call last):
    File "<string>", line 2, in <module>
    File "<pip-setuptools-caller>", line 34, in <module>
    File "/home/zhaoyq6/work/code/deep_learn/apex/setup.py", line 178, in <module>
      check_cuda_torch_binary_vs_bare_metal(CUDA_HOME)
    File "/home/zhaoyq6/work/code/deep_learn/apex/setup.py", line 33, in check_cuda_torch_binary_vs_bare_metal
      raise RuntimeError(
  RuntimeError: Cuda extensions are being compiled with a version of Cuda that does not match the version used to compile Pytorch binaries.  Pytorch binaries were compiled with Cuda 11.7.
  In some cases, a minor-version mismatch will not cause later errors:  https://github.com/NVIDIA/apex/pull/323#discussion_r287021798.  You can try commenting out this check (at your own risk).
  error: subprocess-exited-with-error
  
  × Running setup.py install for apex did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

解决 方法1

安装匹配CUDA的版本

(base) omg@omg:~/work/code/deep_learn/apex$ conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 -c pytorch

解决方法2

通过测试发现,如果cuda跟pytorch的版本不对应,apex直接不带–global-option安装好像也能用。

四、安装pycocotools

略…

五、验证环境

下载预训练模型,本文选用的是YOLOX-s,
下载地址:https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth
下载完成后,将预训练模型放到工程的根目录:

(base) omg@omg:~/work/code/deep_learn/YOLOX$ python tools/demo.py image -n yolox-s -c yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device gpu
2022-12-05 14:04:38.871 | INFO     | __main__:main:259 - Args: Namespace(demo='image', experiment_name='yolox_s', name='yolox-s', path='assets/dog.jpg', camid=0, save_result=True, exp_file=None, ckpt='yolox_s.pth', device='gpu', conf=0.25, nms=0.45, tsize=640, fp16=False, legacy=False, fuse=False, trt=False)
2022-12-05 14:04:46.267 | INFO     | __main__:main:269 - Model Summary: Params: 8.97M, Gflops: 26.93
2022-12-05 14:05:00.505 | INFO     | __main__:main:282 - loading checkpoint
2022-12-05 14:05:00.681 | INFO     | __main__:main:286 - loaded checkpoint done.
2022-12-05 14:05:33.607 | INFO     | __main__:inference:165 - Infer time: 32.2062s
2022-12-05 14:05:33.718 | INFO     | __main__:image_demo:202 - Saving detection result in ./YOLOX_outputs/yolox_s/vis_res/2022_12_05_14_05_00/dog.jpg

检测结果:看到下图说明环境没有问题了

在这里插入图片描述

六、数据集

数据集我们采用VOC数据集,原始数据集是Labelme标注的数据集。
下载地址:

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget http://pjreddie.com/media/files/VOC2012test.tar

关于VOC数据集的介绍,参考:
https://blog.csdn.net/qiqisunshine/article/details/126399423
https://blog.csdn.net/xiaotudui/article/details/122163725

数据集目录结构:
在这里插入图片描述

七、修改配置

修改数据配置文件

1、 修改类别个数

文件路径:exps/example/yolox_voc/yolox_voc_s.py,本次使用的类别有20类,所以将num_classes修改为20。

class Exp(MyExp):
    def __init__(self):
        super(Exp, self).__init__()
        self.num_classes = 20
        self.depth = 0.33
        self.width = 0.50
        self.warmup_epochs = 1

        # ---------- transform config ------------ #
        self.mosaic_prob = 1.0
        self.mixup_prob = 1.0
        self.hsv_prob = 1.0
        self.flip_prob = 0.5

        self.exp_name = os.path.split(os.path.realpath(__file__))[1].split(".")[0]

2、修改类别

打开yolox/data/datasets/voc_classes.py文件,修改为自己的类别名:

# VOC_CLASSES = ( '__background__', # always index 0
VOC_CLASSES = (
    "aeroplane",
    "bicycle",
    "bird",
    "boat",
    "bottle",
    "bus",
    "car",
    "cat",
    "chair",
    "cow",
    "diningtable",
    "dog",
    "horse",
    "motorbike",
    "person",
    "pottedplant",
    "sheep",
    "sofa",
    "train",
    "tvmonitor",
)

3、修改数据集目录

文件路径:exps/example/yolox_voc/yolox_voc_s.py,data_dir修改为“./data/VOCdevkit”,image_sets删除2012的,最终结果如下:

    def get_eval_loader(self, batch_size, is_distributed, testdev=False, legacy=False):
        from yolox.data import VOCDetection, ValTransform

        valdataset = VOCDetection(
            data_dir=os.path.join(get_yolox_datadir(), "VOCdevkit"),
            image_sets=[('2007', 'test')],
            img_size=self.test_size,
            preproc=ValTransform(legacy=legacy),
        )

参考链接

https://view.inews.qq.com/a/20210919A03ZZK00
https://blog.csdn.net/qq_48480265/article/details/126028230

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zyq880625/article/details/128182749

智能推荐

Android 自定义View之仿华为圆形加载进度条_android studio仿华为圆形加载框-程序员宅基地

文章浏览阅读5.4k次,点赞9次,收藏26次。效果图实现思路可以看出该View可分为三个部分来实现最外围的圆,该部分需要区分进度圆和底部的刻度圆,进度部分的刻度需要和底色刻度区分开来中间显示的文字进度,需要让文字在View中居中显示旋转的小圆点,小圆点需要模拟小球下落运动时的加速度效果,开始下落的时候慢,到最底部时最快,上来时速度再逐渐减慢具体实现先具体细分讲解,博客最后面给出全部源码(1)首先为View创建自定义的xml属性 在工程_android studio仿华为圆形加载框

Zabbix的介绍和部署_zabbix网络中心-程序员宅基地

文章浏览阅读707次。zabbix agent安装在被监控的主机上,zabbix agent负责定期收集客户端本地各项数据,并发送至 zabbix server 端,zabbix server 收到数据后,将数据存储到数据库中,用户基于 Zabbix WEB 可以看到数据在前端展现图像。_zabbix网络中心

linux网络下载_liunx网上下载-程序员宅基地

文章浏览阅读372次。网站下载wget 是一个用于文件下载的命令行工具用wget可以下载网页或远程文件:$ wget URL多处URL下载$ wget URL1 URL2 URL3..下载文件输出文件到指定文件$ wget ftp://example.com/somefile.img -o dloaded_file.img -o log指定重试次数$ wget -t 5 URL使用--limit-rate对wget限速$ wget --limit-rate 20k http://.....可以使用k和m指_liunx网上下载

架构师必读 : 微服务架构设计指南-程序员宅基地

文章浏览阅读109次。每个人都听说过微服务。但你知道怎么设计吗? 微服务是当今软件工程师的一个热门话题。让我们了解如何使用微服务架构风格构建真正模块化、业务敏捷的IT系统。一、微服务概念微服务体系结构由轻量级、松散耦合的服务集合组成。每个服务都实现了单个业务功能。理想情况下,这些服务应该是具有足够的内聚性,可以独立地开发、测试、发布、部署、扩展、集成和维护。正式定义 “微服务架构风格是一种将单个应用程序开发为一组小型..._微服务工程师 百度百科

2023-2024年人形机器人行业报告合集(精选397份)_高工 人形机器人报告-程序员宅基地

文章浏览阅读710次,点赞22次,收藏17次。2024人形机器人力传感器行业研究报告:人形机器人商业化图景远大,引爆六维力传感器市场空间。2024机器人行业研究报告:英伟达赋能机器人AI超预期,二季度迎机器人定点最大催化。2024人形机器人的Optimus时刻报告:IMU(姿态感知),旧火新茶,其时已至。2024人形机器人报告:MEMS IMU或为人形机器人实现两足运动平衡的最佳方案。2024人形机器人丝杠报告:丝杠作为人形机器人核心传动部件,正面临新一轮产业机遇。2024人形机器人精密减速器报告:机器人核心部件有望持续受益人形机器人产业带动。_高工 人形机器人报告

【史上最易懂】马尔科夫链-蒙特卡洛方法:基于马尔科夫链的采样方法,从概率分布中随机抽取样本,从而得到分布的近似_马尔科夫链期望怎么求-程序员宅基地

文章浏览阅读1.3k次,点赞40次,收藏19次。虽然你不能直接计算每个房间的人数,但通过马尔科夫链的蒙特卡洛方法,你可以从任意状态(房间)开始采样,并最终收敛到目标分布(人数分布)。然后,根据一个规则(假设转移概率是基于房间的人数,人数较多的房间具有较高的转移概率),你随机选择一个相邻的房间作为下一个状态。比如在巨大城堡,里面有很多房间,找到每个房间里的人数分布情况(每个房间被访问的次数),但是你不能一次进入所有的房间并计数。但是,当你重复这个过程很多次时,你会发现你更有可能停留在人数更多的房间,而在人数较少的房间停留的次数较少。_马尔科夫链期望怎么求

随便推点

istio 简介-程序员宅基地

文章浏览阅读4.9k次,点赞7次,收藏30次。文章目录什么是 istio?istio 解决了什么痛点?总结istio 的解决方案流量管理安全性可观察性平台支持什么是 istio?讲多了记不住,那就:服务网格 + 微服务治理。istio 解决了什么痛点?了解Istio得从微服务架构谈起,微服务是在2012年提出的概念,其根本思想是通过拆分原则,希望一个服务只负责业务中一个独立的功能,这样任何一个需求不会因为发布或者维护而影响到不相关的服务,所有服务都可以做到独立部署运维,当然这也只是微服务架构给我们带来的好处之一。但是:首先,原来的单个应用_istio

c语言课程图书信息管理系统,c语言课程设图书信息管理系统.doc-程序员宅基地

文章浏览阅读434次。c语言课程设图书信息管理系统课程设计报告课程:高级语言程序设计学号: 1010431059姓名: 胡维维班级: 嵌入式一班教师: 王群芳时间: 2011年6月计算机科学与技术系设计名称:图书信息管理系统设计图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:1、图书信息录入功能2、图书信息浏览功能3、图书信息查询功能 ..._c语2、图书信息管理图书信息包括:登录号、书名、作者名、分类号、出版单位、出版

webpack4脚手架搭建1——打包并编译es6_webpack编译es6语法打包-程序员宅基地

文章浏览阅读695次。使用webpack执行webpack -h 查看webpack命令行使用说明安装webpack与webpack-cli安装webpack cnpm install webpack -g,安装后执行webpack -v会提示安装webpack-cli,这是因为在webpack 3中,webpack本身和它的CLI以前都是在同一个包中,但在第4版中,他们已经将两者分开来更好地管理它们。所以用 c..._webpack编译es6语法打包

信息通信服务、电子商务及物流服务的创新与发展_信息通信,电子商务-程序员宅基地

文章浏览阅读828次。2019年,国际互联网的蓬勃发展促使“物联网”(IoT)、云计算、大数据、人工智能等新兴技术的普及和应用。而在物流、电子商务、信息通信网络服务领域,亦或将成为信息时代最重要的基础设施。近几年,数字经济正走向成熟,用户的接受能力也越来越高,因此,信息通信服务、电子商务及物流服务都迎来了新的机遇。这些领域正经历着蓬勃的创新变革和不断变化,也是非常值得关注的领域。2020年,我国在推进“一带一路”倡议、开放世界经济格局方面取得重大成功,也促进了互联网和电子商务的发展。_信息通信,电子商务

websocket.js的封装,包含保活机制,通用_websocket保活-程序员宅基地

文章浏览阅读774次。websocket的封装,包含保活机制_websocket保活

Ubuntu安装conda-程序员宅基地

文章浏览阅读2.6w次,点赞14次,收藏116次。期间有ENTER的地方可以直接回车,遇到MORE信息,可以摁Q键跳过,遇到需要输入yes|no的地方输入yes即可。即可直接从清华镜像网站上下载anaconda安装包,视情况选择自己的版本,我选择的是2021.11版本。3.安装完成后关闭终端重新打开终端,输入conda--version。在ubuntu中ctr+alt+t打开终端,输入。1.下载Anaconda安装包。2.安装包下载完成之后键入。如果有版本输出则安装成功。......_ubuntu安装conda

推荐文章

热门文章

相关标签