OpenMMLab-AI实战营第二期——2-2.基于RTMPose的耳朵穴位关键点检测(Colab+MMPose)

news2024/11/28 14:12:23

文章目录

  • 1. Colab和Google云端硬盘
    • 1.1 建立项目文件和jupyter文件
    • 1.2 Colab运行时选择
    • 1.3 关联Colab中的文件和Google云端硬盘的文件
  • 2. Colab和MMPose
    • 2.1 环境配置
    • 2.2 配置文件修改
  • 3. Colab相关知识

视频链接:B站-RTMPose关键点检测-安装MMDetection和MMPose

1. Colab和Google云端硬盘

参考:

  • 利用Colab上的TPU训练Keras模型(完整版)
  • 使用colab进行深度学习训练
  • 利用colab实现AI绘画自由

1.1 建立项目文件和jupyter文件

进入谷歌云,建立一个当前项目的文件夹,同时里面必须有一个.ipynb文件(后续直接用colab打开这个文件),项目结构类似:

|--OpenMMLab
	|--Exercise1
		|--checkpoint
		|--outputs
		|--Config
		|--exercise1.ipynb
	|--Exercise2
	...

总之把你希望要保留的文件都建立相应的文件夹,然后第一次打开.ipynb的时候,记得选择Colab,此时,这个文件就和Google云端硬盘关联了,在colab中对这个文件进行修改,会保存到Google云端硬盘中。
在这里插入图片描述

1.2 Colab运行时选择

有两种方式可以选:

  1. 修改->笔记本设置,可以选GPU,也可以选TPU,随便选吧
    在这里插入图片描述
  2. 右上角有个资源显示,点击,选择更改运行时类型
    在这里插入图片描述

注意:

  • 选择更改运行时类型后,之前程序运行的变量和文件都会被删除(jupyter文件不会删除,之前建立的和Google文件的关联,包括上传的文件,都会倍删除)。
  • 所以一定要先选好运行时,再去进行剩下的操作。
  • 选好运行时之后,右上方会变成“正在初始化” “分配”之类的状态,分配完成后,能看到RAM及磁盘使用情况说明分配到资源了,如果显示“重新连接”或者“忙碌”状态,说明没有分到。。
  • 但是我遇到了一开始有分配资源,能看到RAM等,但是跑了一段时间,变成忙碌了。。同时下面还显示红色叹号时间,但是训练还在继续(而且好像还是在GPU上训练的。)
    在这里插入图片描述

1.3 关联Colab中的文件和Google云端硬盘的文件

由于Colab中的命令行是pro版本才可以使用的,所以想使用命令行只能在jupyter借助! cmd来实现

注意,先选好运行时,再进行文件的关联,不然去新的运行时之后,还要再重来一遍。

!pwd
> /content
# 说明当前默认的根目录是/content
from google.colab import drive
drive.mount('/content/drive')
# 可以理解成本机和镜像里文件对应的意思,即 Colab中的/content 对应Google云端硬盘的 /content/drive
# 这只是目录对应,但是如果想在Colab看到这个文件,需要建立关联(软连接)
# 其实这个就把云盘下所有文件都关联上了。。。不想一次关联那么多的话,就逐个用ln去建立软连接,例如:
!ln -s /content/drive/'My Drive'/OpenMMLab /content/OpenMMLab
#建立软连接后,就可以在Colab左侧看到这个文件夹了,在Colab中对/content/OpenMMLab中内容进行的操作,在Google中也可以看到

# 如果搞不清在Colab的路径,就
import os
print(os.getcwd())

另外,如果要解压文件的话,例如:

# 关联到content的直接目录下
!ln -s /content/drive/'My Drive'/Ear210_Dataset_coco.zip /content

# 解压要指定目录,用-d,如果不指定解压目录的话,你就找不到解压后的文件夹了。。
!unzip /content/Ear210_Dataset_coco.zip  -d /content/

参考:stackoverflow.com-Extract Google Drive zip from Google colab notebook

2. Colab和MMPose

2.1 环境配置

# 查看当前版本,Colab的环境非常新,是py3.10+pytorch 2.0.1+cu118
!pip show torch
> Name: torch
Version: 2.0.1+cu118
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3
Location: /usr/local/lib/python3.10/dist-packages
Requires: filelock, jinja2, networkx, sympy, triton, typing-extensions
Required-by: fastai, torchaudio, torchdata, torchtext, torchvision, triton

环境太新,导致后面安装mmcv的时候找不到现成的wheel,需要从tar.gz编译,编译一直过不去,mmcv一直卡在:Building wheels for collected packages: mmcv。可以看看文档,后来使用编译还是会卡住。

参考:

  • Installation takes forever #1386
  • Colab stuck at Building wheels for collected packages: mmcv-full #6909
  • mmcv Documentation-常见问题-安装问题,P65

所以对Colab中默认的torch版本降级,

"""
1. 降级pytorch
py3.10支持的torch版本,和参考链接里不太一样,自己可以根据提示支持的版本去调整。
"""
!pip3 install install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

"""
2.安装其他包
由于pycocotools这个包容易出问题,所以安装完可以再确认一下
"""
!pip install -U openmim
!mim install mmengine
!pip install opencv-python pillow matplotlib seaborn tqdm pycocotools -i https://pypi.tuna.tsinghua.edu.cn/simple

!pip show pycocotools #确认

"""
3. 安装OpenMMLab系列的包,用mim安装
"""
!mim install 'mmcv==2.0.0rc3'
!mim install "mmdet>=3.0.0rc6"

"""
4. 从git安装mmpose和mmdetection
"""
import os
print(os.getcwd()) # 随时查看自己的当前执行目录,不然可能就会安装到自己不希望的位置
> /content

#------1.mmpose--------
# 删掉原有的 mmpose 文件夹(如有)
!rm -rf mmpose
!git clone https://github.com/open-mmlab/mmpose.git -b tutorial2023

# 进入主目录
import os
os.chdir('mmpose')
print(os.getcwd())
!mim install -e .

!pip show mmpose # 验证
> Name: mmpose
Version: 1.0.0
Summary: OpenMMLab Pose Estimation Toolbox and Benchmark.
Home-page: https://github.com/open-mmlab/mmpose

#-------2. mmdetection------
#先切换目录
print(os.getcwd())
os.chdir('../')
print(os.getcwd())
>/content/mmpose
/content

# 删掉原有的 mmdetection 文件夹(如有)
!rm -rf mmdetection

# 从 github 上下载最新的 mmdetection 源代码
!git clone https://github.com/open-mmlab/mmdetection.git -b 3.x

# 进入主目录
os.chdir('mmdetection')
print(os.getcwd())
!pip install -v -e .

!pip show mmdet #验证
>Name: mmdet
Version: 3.0.0
Summary: OpenMMLab Detection Toolbox and Benchmark
Home-page: https://github.com/open-mmlab/mmdetection

#-----3. 检查环境---------

os.chdir('../') #切换会默认目录/content,为后续执行做准备
print(os.getcwd())
>/
# 检查 Pytorch
import torch, torchvision
print('Pytorch 版本', torch.__version__)
print('CUDA 是否可用',torch.cuda.is_available())

# 检查 mmcv
import mmcv
from mmcv.ops import get_compiling_cuda_version, get_compiler_version
print('MMCV版本', mmcv.__version__)
print('CUDA版本', get_compiling_cuda_version())
print('编译器版本', get_compiler_version())
> Pytorch 版本 1.11.0+cu113
CUDA 是否可用 True
MMCV版本 2.0.0
CUDA版本 11.3
编译器版本 GCC 9.3

参考:colab安装mmcv-full和mmclassification

2.2 配置文件修改

由于是初学,所以这里并不改什么网络结构,训练参数,只是改一下数据文件位置,保证这个程序能跑起来。
当前的目录结构:

|--content
	|--Ear210_Keypoint_Dataset_coco
	|--rtmdet_tiny_ear.py
	|--mmpose
	|--mmdetection
	|--.exercise1.ipynb(其实应该还有个隐藏的exercise.ipynb文件,就是你当前执行所在的笔记本)

rtmdet_tiny_ear.py文件中的数据配置

# 数据集类型及路径
dataset_type = 'CocoDataset'
# 如果 rtmdet_tiny_ear.py和Ear210_Keypoint_Dataset_coco同级,可以直接
data_root = 'Ear210_Keypoint_Dataset_coco/' #主要是这个
# 否则 最好
data_root = '/content/Ear210_Keypoint_Dataset_coco/' #主要是这个

metainfo = {'classes': ('ear',)}
NUM_CLASSES = len(metainfo['classes'])

训练使用的命令:

# 为了防止找不到,所以都直接使用了一个绝对目录
!python /content/mmpose/tools/train.py --work-dir /content/work_dir/rtmpose_small_ear /content/rtmpose_tiny_ear.py

如果不在命令行指定,或在config中修改work_dir的话,

  • 则默认就是在当前这个jupyter执行的同级目录下创建work_dir,
  • 例如:work_dir = './work_dirs/rtmdet_tiny_ear',都没有/content,所以默认会放在一个当前用户不可见的位置。

跑的时候可以看看,GPU利用率大概是多高,可以调调。
在这里插入图片描述

参考:

  • ✅mmdetection-Train a model
  • mmdetectionV2 + colab 超详细目标检测攻略,学生党入门必看

3. Colab相关知识

参考:Colaboratory-常见问题解答

1. 我的笔记本存储在什么地方?可以共享吗?

Colab 笔记本存储在 Google 云端硬盘上,也可以从 GitHub 加载。您可以共享 Colab 笔记本,就像使用 Google 文档或表格一样。只需点击任一 Colab 笔记本右上角的“共享”按钮,或按照相关 Google 云端硬盘文件共享说明操作。

2. Colab 中的笔记本可以运行多久?

Colab 会优先处理交互式计算。如果您的系统处于空闲状态,运行时将超时

  1. 在免费版 Colab 中,笔记本最长可以运行 12 小时,具体取决于实际可用情况和您的使用模式。Colab Pro、Pro+ 和随用随付方案会基于您的计算单元余量为您提供更多可用的计算资源。
  2. 通常,笔记本最长可以运行 12 小时,具体取决于实际可用情况和您的使用模式。购买 Pro、Pro+ 或随用随付方案后,如果您的可用计算单元已用尽,那么代码执行可在后端终止。
    如果您有足够的计算单元,Colab Pro+ 支持代码连续执行长达 24 小时。只有在代码执行终止后才会应用空闲超时。

所以最好设置当前页面一直是活跃状态,

  • 参考使用Colab训练步骤(有点mmdetection内容),
  • 但是把上面js代码放到浏览器的console报错了。
  • 上面的那种设置已经无效了,新的可用的是:stackoverflow.com-How to keep the google colab running without disconnecting in 2022

在浏览器的开发者工具的控制台里,输入以下函数

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

# 上面那种写法没法手动清除触发器,建议使用下面这种
var sw = function ConnectButton(){
    console.log("Connect pushed"); 
    document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click() 
}

setInterval(sw,60000);
# 如果要清除上面的触发器的话,可以。不用sw接也可以,默认function会返回一个数值,clear那个数值即可
clearInterval(sw)

但是好像用处不大???

参考:

  • stackoverflow.com:Stop setInterval call in JavaScript

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇文章搞定Java中常用集合的排序方法

目录 Array 数组 List 列表 Collections.sort() 简单类型 复杂对象 类 使用Lambda表达式 Stream API Map 键值对 对 Map 的 Key 进行排序 对 Map 的 Value 进行排序 最近在做算法题的时候,发现排序在大部分题中都不可或缺,今天心血来潮&am…

Vue配置proxy代理,但接口报错2007 bad domain

1、排查proxy代理配置是否有误 排查 proxyTable 对象中配置的 target 是否正确。若正确,那可能就是请求头的问题。 无特殊配置的情况下,请求头是这样子的: Host 和 Referer 是本地地址,如果后端增加 CSRF 防御机制,…

【JDBC:连接MySQL数据库】出现SQL注入的解决办法、什么时候需要使用SQL注入、事务的使用、悲观锁乐观锁

JDBC JDBC是什么? Java Database Connectivity(java语言连接数据库) java.sql.*;(这个包下有很多接口) JDBC的本质是什么? JDBC的本质是SUN公司制定的一套接口(interface) 接口都有…

【C语言】数据以及位运算

位和位运算 C语言中数据的表示方法各种数据类型可表示的数值范围位和CHAR_BITsizeof运算符整型的内部表示无符号整数的内部表示有符号整数的内部表示 位运算位运算符位与运算位或运算位异或运算位取反运算位左移运算符位右移运算符逻辑位移与算术位移 C语言中数据的表示方法 各…

HCIA-RS实验-路由配置-OSPF 单区域配置

OSPF(Open Shortest Path First)是一种基于链路状态的路由协议,常用于大型企业网络中。在一个单区域的OSPF网络中,所有的路由器都属于同一个区域,这种配置方式相对简单直观。本文将介绍OSPF单区域的配置方法。 这篇文章…

Vultr 简介和域名购买

1. 网络地址 Vultr: https://my.vultr.com/ Namecheap: Namecheap.com • Login 2. Vultr 简介: Vultr是一家知名的云计算服务提供商,成立于2014年,总部位于美国新泽西州。Vultr提供高性能的云服务器、存储、网络和应用服务,以…

如何把低像素图片转成高清,分享四个方法给大家!

当图片的像素较低时,通常会导致图片模糊不清。然而,我们可以采取一些方法来将低像素图片转变为高清。下面我将介绍几种简单易用的方法,帮助您快速提高照片的分辨率,还原照片的清晰度! 方法一:记灵在线工具…

【attention|Tensorformer】从attention走向Transformer

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 概括 说明: 后续增补 1. 正文 1.0 通俗理解 人类视觉的注意力,简单说就第一眼会注意在一幅图像的重要位置上。 而在程序中&am…

vim实用功能汇总

文章目录 1. 读代码1.1 vim中文件跳转1.2 语法高亮模式1.3 Visual 模式 2. 配置vim成为python的IDE 1. 读代码 1.1 vim中文件跳转 vim中文件跳转 这个其实不是靠什么插件完成的,而是vim编辑器自带的功能把光标放在要跳转的文件上,按下gf,即…

YOLOv5改进系列(7)——添加SimAM注意力机制

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

delete 清空表之后,磁盘空间未发生变化?

上篇文章结尾和小伙伴们留了一个小问题,就是关于 optimize table 命令,今天我想花点时间再来和小伙伴们聊一聊这个话题。 1. 删除空洞 1.1 案例展示 首先我们先来看这样一个例子。 我现在有一个名为 sakila 的数据库,该库中有一个 film 表…

C++轻量级跨平台桌面GUI库FLTK的简单使用

C的跨平台桌面GUI库有很多,大体上分成两种流派:retained mode和retained mode。 其中前者是主流的桌面GUI机制框架,包括:Qt、wxwidgets、gtk、juce等后者是一些游戏引擎编辑器常用的GUI机制框架,包括:imgu…

C#常见技能_数组

前几天一个学员在学习C#与数组交互时,也不知道数组可以用来做什么 。下面我们就详细讲讲C# 和数组交互的相关知识。 在C#编程中,数组是一种非常重要的数据结构,它可以存储多个相同类型的数据,并且使用索引来访问这些数据。在实际应用中&…

5.2.7 因特网控制报文协议ICMP

5.2.7 因特网控制报文协议ICMP 我们知道因特网的技术核心是IP数据报,IP数据报的最大特点是无连接不可靠,但实际中因特网中也会存在通信线路或者是处理器的故障、路由器拥塞等等使得无法接收或者处理数据报,路由表也误导导致出现路由环路等原…

微软MFC技术运行机制

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下微软MFC技术运行机制。 很多初学者误以为VC开发必须使用MFC,其实不一定的。MFC的使用只能是提高程序在某些情况下的开发效率,而不能替代整个Win32程序设计。我认为我们有…

python grpc使用示例

1. grpc简介 1.1 概述 gRPC是搭建分布式应用接口和客户端的框架。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,可以更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gR…

AI绘画MidJourney 酷炫艺术风格效果,总有一款你喜欢

文 / 高扬 今天六一儿童节,祝各位大朋友节日快乐。 这次以儿童为主题,看看MidJourney的绘画风格,在这里,我使用的默认V5.1版本。 图画场景是一个男孩和一个女孩在田野玩耍,对应的英文是:A boy and a girl a…

使用PyQT实现模拟表盘时钟的显示效果

代码 class clockThread(QThread):update_ui_signal pyqtSignal(str)def __init__(self, window):super(clockThread, self).__init__()# 信号绑定槽函数self.update_ui_signal.connect(self.draw_time)self.hour 0self.minute 0self.second 0self.window windowself.win…

数据结构与算法·第6章【树】

基本操作 树的相关定义 树的深度(高度):树中叶子结点所在的最大层次 森林: m m m棵互不相交的树的集合 二叉树 二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。 性质 二…

JavaCV音视频开发宝典:使用JavaCV读取海康平台或海康网络摄像头sdk回调视频TS码流并解析预览图像

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 前言 两年前博主写了如何利用JavaCV解析各种h264裸流,《JavaCV音视频开发宝典:使用javacv读取GB28181、海康大华平台和网络摄像头sdk回调视频码流并解析预览图像》,但是随着时间变化,各…