mmdetection 学习教程(一)mmdetection安装、最简示例、最简分析
目录
- 一、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安装、最简示例、最简分析相关推荐
- html怎么在线安装,web前端零基础学习教程,如何安装HTML编辑器!
原标题:web前端零基础学习教程,如何安装HTML编辑器! HTML 编辑器推荐: 可以使用专业的 HTML 编辑器来编辑 HTML,菜鸟教程为大家推荐几款常用的编辑器: Notepad++:http ...
- Python学习教程:手把手教你搭建自己的量化分析数据库
Python学习教程:手把手教你搭建自己的量化分析数据库 引言: 数据是金融量化分析的重要基础,包括股票历史交易数据.上市公司基本面数据.宏观和行业数据等.随着信息流量的日益膨胀,学会获取.查询和加工 ...
- 【学习教程】建筑设计全过程碳排放计算与案例分析
"30/60双碳目标"已成为我国绿色发展的新国策,建筑业对碳排放量化分析和减排也越来越重视.特别是全文强制性国标标准<建筑节能与可再生能源利用通用规范>GB55015- ...
- 适合小白的Linux入门学习教程,从安装到实操(涵盖各种常用指令,超详细!)
Linux入门学习 Linux简介 Linux是什么 Linux的特点 Linux和Windows的区别 Linux入门 我们为什么要学习Linux 环境搭建 安装CentOS 购买云服务器 走进Li ...
- hadoop入门学习教程--DKHadoop完整安装步骤
使用hadoop版本是DKH标准三节点发行版,DKHadoop版本的易用性比较好,环境部署要简单的多,参考此篇安装前请先下载DKHadoop版本,网盘链接:https://pan.baidu.com/ ...
- Jasperreports+jaspersoft studio学习教程(一)- JasperReports简单示例
1.1 导言 最近项目中运用JasperReport技术开发报表模块.项目快结束了,所以腾出手来,简单记录一下.与大家相互学习,共同提高. JasperReport是一个强大.灵活的报表生成工具,能够 ...
- linux daemon 安装教程,Linux daemontools安装及使用(示例代码)
1. 访问页面 https://cr.yp.to/daemontools/install.html 下载 daemontools 2. 创建工作目录 mkdir -p /package chmod 1 ...
- Bullet学习教程 入门 配置方法及HelloWord示例
关于学习Bullet的初衷是想在我的试验中加入更可信的三维碰撞检测机制,在这么多物理库的选择的为什么选择Bullet的主要原因是它的开源性以及支持IOS,其实这是我的肤浅的认识,关于Bullet.Ph ...
- Carla学习2:carla安装与使用
文章目录 0. 建议 1. carla学习相关链接 1.1 官方资料 1.1 学习教程 2. Carla安装 2.1 服务器端 2.1.1 下载预编译版本(也可以使用下载源码并编译) 2.1.2 启动 ...
最新文章
- linux核能软件,ARM big.LITTLE大小核架构在Linux和Android内核下多核调度算法
- Pots POJ - 3414(bfs)
- java---sychronized的深入理解
- python idls_Python argparse模块实现模拟 linux 的ls命令
- 用计算机参加关于动漫的工作计划,动漫社团年度工作计划
- “我们的边缘计算技术点,可能超前了业界一点”
- 随笔 | 读《写给年轻程序员的思考书》ii
- Linux c modbus 线程,Modbus TCP Slave Thread - 设置和获取寄存器值
- javascript 字符串和json的互转
- 实习成长之路:MySQL二 : 一条SQL更新语句是如何执行的?
- vue项目element-ui中el-select回车键隐藏下拉框,实现按回车键查询
- 轴承后缀ce和ca_SKF各类型轴承后缀含义
- 机器学习多步时间序列预测解决方案
- VIN码识别-汽修行业新技术
- hdu1296多项式
- 2016年头条校招笔试题
- dedecms织梦模板|响应式粉红色母婴月嫂源码 母婴育儿类网站模板(自适应手机版)
- 什么是框架?框架和库有什么区别?
- 蓝桥杯单片机第11届国赛程序题参考答案
- 海量微博数据舆情热点挖掘项目难点总结