最近在学习目标检测,要用Cascde RCNN训练自己的数据集,因为本地电脑没有GPU,所以就借用Colab云端来进行模型训练,想要记录一下操作过程,以及希望可以给更多电脑没有GPU,但是需要用mmdetection做项目的同种情况的人一些参考。

目录

一、Colab平台准备(要先做到科学上网才能使用Colab)

1、上传自己的数据集

2、配置使用Colab

二、在Colab上配置mmdetection环境并训练

1、下载mmdetection

2、配置数据集

3、安装mmdete所需要的依赖包和环境,因为Colab上面已经配置了pytorch和cuda,所以配置过程很简单

4、进行相关参数的修改

5、开始训练数据集

三、总结


一、Colab平台准备(要先做到科学上网才能使用Colab)

1、上传自己的数据集

数据集的制作过程不做多余赘述,可以在CSDN上找到很多参考资料,本文使用的数据集是voc2007数据集,如果是自己本地制作的数据集,就需要先上传到谷歌云盘。

官网链接:https://drive.google.com/drive/my-drive

点击新建,新建文件夹data存放数据集,然后打开data文件,直接将数据集拖拽就可以完成数据集的上传

2、配置使用Colab

点击新建,新建Colab项目,命名为Mmdetection-master

修改配置,点击代码执行程序,点击更改运行时类型,将加速器更改为GPU,这样就可以白嫖GPU了。

输入代码查看显卡配置

!nvcc -V
!gcc --version
!rm -rf /content/sample_data
#查看分配的显卡配置,建议刷到v100
!nvidia-smi

挂载云盘,连接到自己的谷歌云盘

from google.colab import drive
drive.mount('/content/drive')

点击刷新就会出现自己的云盘文件夹

二、在Colab上配置mmdetection环境并训练

这里有官网的文档,大家也可以做一个参考https://mmdetection.readthedocs.io/en/stable/get_started.html

1、下载mmdetection

%cd /content
!rm -rf mmdetection
!git clone https://github.com/open-mmlab/mmdetection.git
#新建一个存放数据集的文件夹
!mkdir mmdetection/data

2、配置数据集

#将云盘里的数据集复制到mmdet项目里面
!cp -r /content/drive/MyDrive/data/VOCdevkit -d /content/mmdetection/data/VOCdevkit
#!cp -r 源地址 -d 目标地址

一定要注意数据集的目录是下图的格式

3、安装mmdete所需要的依赖包和环境,因为Colab上面已经配置了pytorch和cuda,所以配置过程很简单

先切换到mmdetection项目

#切换当前目录
%cd /content/mmdetection
# 成功配置
!pip install -U openmim
!mim install mmcv-full
!pip install -r requirements/build.txt
!python setup.py develop

要注意两段代码的先后过程,如果反了就会在训练的时候出现以下出现错误,如果出现了,建议卸载mmdet,!pip uninstall mmdet,再重新利用第二段代码进行mmdet安装

# AssertionError: The `num_classes` (4) in Shared2FCBBoxHead of MMDataParallel does not matches the length of `CLASSES` 20) in RepeatDataset

然后用下面代码测试相关环境是否安装成功

import mmdet
print(mmdet.__version__)# Check mmcv installation
from mmcv.ops import get_compiling_cuda_version, get_compiler_version
print(get_compiling_cuda_version())
print(get_compiler_version())

4、进行相关参数的修改

这里参考了相关文章https://blog.csdn.net/weixin_45798949/article/details/107976157

这里选用cascade_rcnn方法,也可以选择fasterrcnn方法,修改类似
1.修改:mmdetection/configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py
_base_ = ['../_base_/models/cascade_rcnn_r50_fpn.py','../_base_/datasets/coco_detection.py','../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]
改:
_base_ = ['../_base_/models/cascade_rcnn_r50_fpn.py','../_base_/datasets/voc0712.py','../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]
2.修改:mmdetection/configs/_base_/datasets/voc712.py
找到,并注释掉一句voc2012
data = dict(samples_per_gpu=2,workers_per_gpu=2,train=dict(type='RepeatDataset',times=3,dataset=dict(type=dataset_type,ann_file=[data_root + 'VOC2007/ImageSets/Main/trainval.txt',#data_root + 'VOC2012/ImageSets/Main/trainval.txt'],        # 把含有VOC2012的路径去掉img_prefix=[data_root + 'VOC2007/', data_root + 'VOC2012/'],pipeline=train_pipeline)),
3.修改:mmdetection/configs/_base_/models/cascade_rcnn_r50_fpn.py
num_classes的值,一共三处,分别修改,不然报错。
根据自己的分类的个数,不需要
考虑背景+1,一类就写1
如果想换预训练模型
model = dict(type='CascadeRCNN',pretrained='torchvision://resnet50',#可欢resnet101等4.修改:mmdetection/mmdet/core/evaluation/class_names.py
def voc_classes():return ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat','chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person','pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']#对应换成自己标签。
def voc_classes():return ['lf', ]#我是一类,后面加逗号
5.修改:mmdetection/mmdet/datasets/voc.py
class VOCDataset(XMLDataset):CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car','cat', 'chair', 'cow', 'diningtable', 'dog', 'horse','motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train','tvmonitor')
修改同上

修改完成之后重新进行编译

!python setup.py develop

5、开始训练数据集

因为Colab特别容易掉线,所以建议先配置一下Colab网页防止掉线

在任意网页端右键,点击检查,点击Console

添加一下代码

function ConnectButton(){console.log("Connect pushed"); document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click()
}
setInterval(ConnectButton,60000);

然后开始美美训练

!python tools/train.py ./configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py

训练的结果权重都保存在work_dir目录下面,点击下载就可下载到本地使用了。

还有就是所有相关参数,例如学习率,epoch,backbone都在以下四个文件中,可以进行查找然后修改相关参数

_base_ = ['../_base_/models/cascade_rcnn_r50_fpn.py','../_base_/datasets/voc0712.py','../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]

对于已经训练好了的模型权重可以这样进行测试使用

python demo/image_demo.py demo/img.jpg configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py work_dirs/cascade_rcnn_r50_fpn_1x_coco/epoch_48.pth --device cpu --out-file result1.jpg
#python 图片path configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py 权重path --device cpu --out-file 结果path

更方便的是新建一个py文件进行编译

from mmdet.apis import init_detector, inference_detector
import mmcv# Specify the path to model config and checkpoint file
config_file = 'configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = 'work_dirs/cascade_rcnn_r50_fpn_1x_coco/epoch_48.pth'# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file, device='cpu')# test a single image and show the results
img = 'image/0060_Color.jpg'
# img = mmcv.imread(img) # which will only load it once
result = inference_detector(model, img)
# visualize the results in a new window
# 可视化推理检测的结果
model.show_result(img, result)
# or save the visualization results to image files
# 将推理的结果保存
model.show_result(img, result, out_file='result_new.jpg')# test a video and show the results
# 测试视频片段的推理结果
# video = mmcv.VideoReader('video.mp4')
# for frame in video:
#     result = inference_detector(model, frame)
#     model.show_result(frame, result, wait_time=1)

三、总结

本文主要是为了帮助像我一样的没有GPU来炼丹的cv初学者,如果只是简单的项目的话,希望你不要因为本地没有GPU而烦恼,不得不说Cascade RCNN的精确度确实很顶,小目标检测太绝了。

在Colab平台上用mmdetection中的Cascade RCNN训练自己的voc数据集相关推荐

  1. mmdetection训练自己的VOC数据集及常见问题

    训练自己的COCO数据集及常见问题见下文: mmdetection训练自己的COCO数据集及常见问题_不瘦8斤的妥球球饼的博客-CSDN博客 目录 一.环境安装 二.训练测试步骤 三.常见问题 bat ...

  2. mmdetection的安装并训练自己的VOC数据集

    mmdetection的安装并训练自己的VOC数据集 mmdetection的安装与VOC数据集的训练 一. mmdetection的安装 1.使用conda创建虚拟环境 2.安装Cython 3.安 ...

  3. 在服务器上利用mmdetection来训练自己的voc数据集

    在服务器上利用mmdetection来训练自己的voc数据集 服务器上配置mmdetection环境 在服务器上用anaconda配置自己的环境 进入自己的虚拟环境,开始配置mmdetection 跑 ...

  4. 【mmdetection】SSD训练自己的VOC数据集注意事项

    一.修改voc.py和class_names.py ./mmdet/datasets/voc.py  此处代码改为自己数据集的类别,以及./mmdet/core/evaluation/class_na ...

  5. mmdetection训练自己的VOC数据集

    最新的请移步我的另一篇博文[2.6.0]:https://blog.csdn.net/jy1023408440/article/details/110135699 官方步骤: https://gith ...

  6. 如何在ubuntu下安装detectron2_Anaconda中安装Cascade RCNN(Detectron)的若干问题

    安装参考https://github.com/zhaoweicai/Detectron-Cascade-RCNN/blob/master/INSTALL.md 1.对于在 python detectr ...

  7. mmdetection训练自己的COCO数据集及常见问题

    训练自己的VOC数据集及常见问题见下文: mmdetection训练自己的VOC数据集及常见问题_不瘦8斤的妥球球饼的博客-CSDN博客_mmdetection训练voc 目录 一.环境安装 二.训练 ...

  8. 在MT6572平台上,怎样把已做好的签名编译成到apk中?

    在MT6572平台上,怎样把已做好的签名(android.xxx.keystore)编译成到apk中? 因为这个apk源代码只能在平台上编译,不能在Eclipse中编译(因为使用到mtk一些库) 了解 ...

  9. spyder上怎样将figure框出来_怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?...

    怎样将数据中心现有的物理机和虚拟机平滑的迁移到云平台上?风险和工作量怎样评估?成熟的产品怎样选型? 某信系统集成公司 技术总监: 首先要有一个正确的理解,你要迁移不是几个虚机和物理机,而是一个或者多个 ...

最新文章

  1. android img标签属性_微信小程序 组件叠加效果(如 Android 中的添加蒙层)
  2. 计算机怎么模拟人,计算机能不能模拟人的思维?
  3. Elastic Stack简介和Elasticsearch基本介绍
  4. 二进制(bit)整数
  5. oracle 之 COMMENT
  6. git 回退到某个commit_it lesson2 版本回退
  7. 将亚型多态性与通用多态性相关联的危险
  8. binary masks_Python中的Masks概念
  9. mysql5.4升级5.6_如何在CentOS上升级php5.4至5.6?
  10. 【find】Linux中find常见用法示例
  11. System center 2012 R2 实战三、windows server 2012R2安装sharepoint2010及排错
  12. 解决Hash冲突的两种策略
  13. 高数竞赛、数学建模、算法、计算机专业书籍等亲情大甩卖
  14. Excel随机数生成
  15. prometheus监控告警功能
  16. js中怪异的this 指针
  17. Spring面向切面编程-AOP详解
  18. 关于google浏览器打不开网页问题之容易被忽略的点
  19. 苹果自助维修服务上线:维修工具租赁价约为321元
  20. 百度智能云开物秀出全年成绩,发布和升级五大新产品

热门文章

  1. 均值漂移(mean shift )聚类算法Matlab实现详解
  2. 联想服务器查raid型号,联想服务器所配备RAID卡规格
  3. 华3如何使用ftp和tftp进行文件传输与保存
  4. EFI Network......
  5. 基于麻雀算法改进的DELM预测-附代码
  6. 计算机主机内装有硬盘和软盘 软盘是计算机,计算机主机内装有硬盘和软盘驱动器,软磁盘是计算机的外贮器,机内硬盘则是属于内贮器...
  7. snort mysql 优点_配置snort
  8. vivo新玩法,携手阿里巴巴打造“私人订制”手机
  9. 游戏制作之路-愤怒的小鸟-1
  10. Qt Quick 3D中将3D场景(如.obj)转换为.mesh