目录

  • 一、mmdetection安装
  • 二、mmdetection最简单示例
  • 三、mmdetection demo最简单分析
  • easy_demo.py的github下载链接欢迎star

参考:mmdetection-mini
https://www.zybuluo.com/huanghaian/note/1742545
https://github.com/hhaAndroid/mmdetection-mini
https://blog.csdn.net/l7H9JA4/article/details/109152885 yolo转化mmdetection

参考:mmdetection官方
https://zhuanlan.zhihu.com/p/369826931
https://www.bilibili.com/video/BV1Ai4y1P7Yy?p=3

  • github官网
  • 文档官网

一、mmdetection安装

  • 安装
# 创建环境
conda create -n mmdetection python=3.7 -y
conda activate mmdetection
# 安装pytorch,自选是否安装cudatoolkit,版本参考https://pytorch.org/,本文环境为CUDA11.1、torch1.8
pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
# 安装mmcv,版本和网址请参考https://github.com/open-mmlab/mmcv#install-with-pip,本文环境为CUDA11.1、torch1.8
pip install mmcv-full==1.3.3 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html
# 下载mmdetection,或者手动下载
git clone git://github.com/open-mmlab/mmdetection.git  # 这里使用https容易报错
cd mmdetection
# 安装mmdetection
pip install -r requirements/build.txt
pip install -v -e .  #  只安装最简单的包, or "python setup.py develop"
pip install -r requirements/optional.txt  #  一些拓展包如albumentations、imagecorruptions
  • 测试各个包是否已经安好
import cv2
import torch,torchvision
print('torch',torch.__version__,torch.cuda.is_available())
import mmdet
print('mmdet',mmdet.__version__)
from mmcv.ops import get_compiling_cuda_version,get_compiler_version
print('get_compiling_cuda_version',get_compiling_cuda_version())
print('get_compiler_version',get_compiler_version())
  • 可选安装的albumentations需要opencv-python-headless,安装后将不能cv2.imshow()。若不安装albumentations和opencv-python-headless则可以正常使用cv2.imshow()
pip list | grep opencv
# 同时安装了opencv-python 和opencv-python-headless则不能使用cv2.imshow()
  • 建议安装albumentations,后续使用PIL或matplotlib查看图片。

二、mmdetection最简单示例

  • 下载预训练模型
mkdir checkpoints
cd checkpoints
wget  http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
  • 写测试文件,demo/easy_demo.py,显示预测结果
#
from mmdet.apis import init_detector, inference_detector,show_result_pyplot
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
model = init_detector(config_file, checkpoint_file, device=device)
img_path = 'demo/demo.jpg'
result = inference_detector(model, img_path)
show_result_pyplot(model,img_path,result,score_thr=0.9,wait_time=10)
  • 运行
conda activate mmdetection
python demo/easy_demo.py

可以看到预测结果

三、mmdetection demo最简单分析

  • 分析模型:修改测试文件,demo/easy_demo.py
from mmdet.apis import init_detector, inference_detector,show_result_pyplot
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
model = init_detector(config_file, checkpoint_file, device=device)
for name,module in model.named_children():print(name)for n, layer in module.named_children():print('\t',n)
for name,module in model.named_children():print('-'*70,name)for n, layer in module.named_children():print('-'*10,n)print(layer)
# 讲解看https://www.bilibili.com/video/BV1Ai4y1P7Yy?p=3


其中:
lateral_convs 横向连接卷积,1x1
fpn_convs fpn的卷积,3x3

  • 显示预测结果:在测试文件demo/easy_demo.py末尾添加
img_path = 'demo/demo.jpg'
result = inference_detector(model, img_path)
show_result_pyplot(model,img_path,result,score_thr=0.95,wait_time=0)
print(len(result)) # 类别数
print(result[0].shape) #目标数x5

  • 显示RPN结果:在测试文件demo/easy_demo.py末尾添加(参考mmdet/models/detectors/rpn.py)
from types import MethodType
def new_simple_test(self, img, img_metas, proposals=None, rescale=False):x = self.extract_feat(img)proposal_list = self.rpn_head.simple_test_rpn(x, img_metas)if rescale:for proposals, meta in zip(proposal_list, img_metas):proposals[:, :4] /= proposals.new_tensor(meta['scale_factor'])return [proposal.cpu().numpy() for proposal in proposal_list]
model.simple_test = MethodType(new_simple_test,model)
rpn_result = inference_detector(model, img_path)
from mmdet.core.visualization import imshow_det_bboxes
import mmcv
import numpy as np
img = mmcv.imread(img_path)
bboxes = np.vstack(rpn_result)
labels = np.zeros(bboxes.shape[0],dtype=int)
imshow_det_bboxes(img,bboxes,labels,None,class_names=['']*80,score_thr=0.9,bbox_color='green',thickness=0.5,font_size=3,show=True,wait_time=0.1)

  • 注:自行修改thickness可改变粗细
  • 注:自行修改wait_time显示时间,pycharm专业版设0.01即可,会一直显示在侧边栏

easy_demo.py的github下载链接欢迎star

mmdetection 学习教程(一)mmdetection安装、最简示例、最简分析相关推荐

  1. html怎么在线安装,web前端零基础学习教程,如何安装HTML编辑器!

    原标题:web前端零基础学习教程,如何安装HTML编辑器! HTML 编辑器推荐: 可以使用专业的 HTML 编辑器来编辑 HTML,菜鸟教程为大家推荐几款常用的编辑器: Notepad++:http ...

  2. Python学习教程:手把手教你搭建自己的量化分析数据库

    Python学习教程:手把手教你搭建自己的量化分析数据库 引言: 数据是金融量化分析的重要基础,包括股票历史交易数据.上市公司基本面数据.宏观和行业数据等.随着信息流量的日益膨胀,学会获取.查询和加工 ...

  3. 【学习教程】建筑设计全过程碳排放计算与案例分析

    "30/60双碳目标"已成为我国绿色发展的新国策,建筑业对碳排放量化分析和减排也越来越重视.特别是全文强制性国标标准<建筑节能与可再生能源利用通用规范>GB55015- ...

  4. 适合小白的Linux入门学习教程,从安装到实操(涵盖各种常用指令,超详细!)

    Linux入门学习 Linux简介 Linux是什么 Linux的特点 Linux和Windows的区别 Linux入门 我们为什么要学习Linux 环境搭建 安装CentOS 购买云服务器 走进Li ...

  5. hadoop入门学习教程--DKHadoop完整安装步骤

    使用hadoop版本是DKH标准三节点发行版,DKHadoop版本的易用性比较好,环境部署要简单的多,参考此篇安装前请先下载DKHadoop版本,网盘链接:https://pan.baidu.com/ ...

  6. Jasperreports+jaspersoft studio学习教程(一)- JasperReports简单示例

    1.1 导言 最近项目中运用JasperReport技术开发报表模块.项目快结束了,所以腾出手来,简单记录一下.与大家相互学习,共同提高. JasperReport是一个强大.灵活的报表生成工具,能够 ...

  7. linux daemon 安装教程,Linux daemontools安装及使用(示例代码)

    1. 访问页面 https://cr.yp.to/daemontools/install.html 下载 daemontools 2. 创建工作目录 mkdir -p /package chmod 1 ...

  8. Bullet学习教程 入门 配置方法及HelloWord示例

    关于学习Bullet的初衷是想在我的试验中加入更可信的三维碰撞检测机制,在这么多物理库的选择的为什么选择Bullet的主要原因是它的开源性以及支持IOS,其实这是我的肤浅的认识,关于Bullet.Ph ...

  9. Carla学习2:carla安装与使用

    文章目录 0. 建议 1. carla学习相关链接 1.1 官方资料 1.1 学习教程 2. Carla安装 2.1 服务器端 2.1.1 下载预编译版本(也可以使用下载源码并编译) 2.1.2 启动 ...

最新文章

  1. linux核能软件,ARM big.LITTLE大小核架构在Linux和Android内核下多核调度算法
  2. Pots POJ - 3414(bfs)
  3. java---sychronized的深入理解
  4. python idls_Python argparse模块实现模拟 linux 的ls命令
  5. 用计算机参加关于动漫的工作计划,动漫社团年度工作计划
  6. “我们的边缘计算技术点,可能超前了业界一点”
  7. 随笔 | 读《写给年轻程序员的思考书》ii
  8. Linux c modbus 线程,Modbus TCP Slave Thread - 设置和获取寄存器值
  9. javascript 字符串和json的互转
  10. 实习成长之路:MySQL二 : 一条SQL更新语句是如何执行的?
  11. vue项目element-ui中el-select回车键隐藏下拉框,实现按回车键查询
  12. 轴承后缀ce和ca_SKF各类型轴承后缀含义
  13. 机器学习多步时间序列预测解决方案
  14. VIN码识别-汽修行业新技术
  15. hdu1296多项式
  16. 2016年头条校招笔试题
  17. dedecms织梦模板|响应式粉红色母婴月嫂源码 母婴育儿类网站模板(自适应手机版)
  18. 什么是框架?框架和库有什么区别?
  19. 蓝桥杯单片机第11届国赛程序题参考答案
  20. 海量微博数据舆情热点挖掘项目难点总结

热门文章

  1. pythonchallenge闯关游戏_pythonchallenge解密
  2. python第一天---------了解python
  3. 【自动化测试】Web自动化测试02
  4. 懒人手机支架品牌如何做好新产品上市软文宣传?
  5. 如何利用今日头条盈利?
  6. 微信小程序获取头像和openID
  7. 【游戏逆向】FPS游戏自瞄追踪及原理算法
  8. java毕业设计Sketch2Mod网站Mybatis+系统+数据库+调试部署
  9. ES5与ES6中如何实现继承
  10. RN- 判断安卓是否是全面屏及是否开启了全面屏