目录
什么是Google Colab
Google Colab是谷歌提供的免费Jupyter 笔记本环境,不需要什么设置与环境配置就可以使用,完全在云端运行。不影响本地的使用。
Google Colab为研究者提供一定免费的GPU,可以编写和执行代码,所有这些都可通过浏览器免费使用。同学们可以在上面轻松地跑 Tensorflow、Pytorch 等深度学习框架。
尽管Google Colab提供了一定的免费资源,但资源量是受限制的,所有 Colab 运行时都会在一段时间后重置。Colab Pro 订阅者的使用量仍会受到限制,但相比非订阅者可享有的限额要多出大约一倍。Colab Pro+ 订阅者还可获享更高的稳定性。
谷歌云盘(Google Driver)
google云端硬盘,也称为谷歌云端硬盘,是互联网巨头谷歌公司推出的一项在线云存储服务,英文全称是Google Drive。目前有免费和付费两种模式,免费用户可以获取15G的空间,付费用户根据套餐可以选择最大20TB的储存空间。
Colab官网:https://colab.research.google.com/
Google Driver:https://drive.google.com/drive/
一、使用Colab进行训练
本文以tensorflow版本的faster rcnn训练为例,进行Colab的使用演示。pytorch操作也一样
1.数据集的上传
Colab和Google自带的云盘联动非常好,因此我们需要首先将数据集上传云盘,这个上传的过程其实非常简单,本地先准备好数据集。
由于所训练的实例网络,使用的VOC数据集,我们需要按照VOC数据集摆放好。本文直接以VOC07+12数据集为例进行演示。
JPEGImages里面存放的为图片文件,Annotations里面存放的标签文件,ImageSets里面存放的是区分验证集、训练集、测试集的txt文件。
然后将VOCdevkit文件整个进行打包。需要注意的是,不是对上面三个文件夹进行打包,而是对VOCdevkit进行打包,这样才满足数据处理的格式。
在获得打包后的压缩包后,将压缩包上传到谷歌云盘。可以在谷歌云盘上新建一个VOC_datasets文件夹存放压缩包,当然我们也可以直接使用上传文件夹,直接将VOCdevkit文件夹上传。
注意:在上传大文件或者大文件夹时,谷歌云盘可能会出现反应超时没有响应的问题,这时候我们耐心等待即可。
此时数据集的上传已经完成,这里我选择的是直接上传文件夹VOCdevkit,推荐大家上传压缩包。
2、预训练权重的上传
在谷歌云盘上进行文件夹的创建,首先创建ColabNotebooks,然后在ColabNotebooks里面创建logs和model_data。
model_data放置的是预训练文件。
logs放置的是网络训练过程中产生的权值。
由于我们这次使用的是tensorflow版faster rcnn的网络模型,我们将它的预训练权重上传到model_data文件夹。
3.深度学习网络的上传
1)可以通过git clone指令直接复制GitHub上打包好的网络
2)可以直接将我们需要的网络本地打包成一个文件夹直接上传到谷歌云盘上,但是需要注意:
因为通常网络模型中代码会涉及到很多的路径问题。我们上传到谷歌云盘的网络代码的路径发生了变化,不再是我们本地电脑上的路径,所以我们需要将我们的网络模型复制到本地里进行,具体我们稍后再讲,可以先将模型和数据集上传到云盘。 而通过git clone复制下来的网络模型则是直接生成在本地上的,不需要额外的操作。
此时我们已经将faster-rcnn网络文件夹上传
二、打开Colab并配置环境
1、笔记本的创建
在该步中,我们首先打开Colab的官网。
然后点击文件,创建笔记本,此时会创建一个jupyter笔记本。
创建完成后给文件改个名,好看一些。
之后点击代码执行程序,然后点击更改运行时类型,在其中硬件加速器部分选择GPU保存,Colab便会配置一个带有GPU的机器,此时笔记本就创建完成了。
2、环境的简单配置
colab已经集成了tensorflow,pytorch环境以及绝大多数所需要的依赖库,无需专门配置,不过使用的tensorflow版本较新。
由于我们的数据集以及一些网络模型文件在谷歌云盘上,所以我们还要挂载云盘。在代码块中输入下面代码并点击运行,我们也可以通过直接点击左侧文件标志,然后在点击第三个装载谷歌云盘图标
from google.colab import drive
drive.mount('/content/gdrive')
挂载完谷歌云盘后,刷新一下文件夹,我们可以看到左侧文件窗口中就多了个drive文件夹,就说明我们挂在成功了,打开drive可以看到里面包括我们之前上传到谷歌云盘中的东西
3、深度学习网络的下载
这一步,我们需要完成深度学习网络的下载,前面我们说了可以使用两种方式。
方式一:使用git clone指令进行下载。执行如下指令后,左边的文件中多出了faster-rcnn-tf2文件夹。没有的话就去左侧刷新一下。
然后我们通过了cd指令将工作目录转移到了faster-rcnn-tf2文件夹。特别重要,进行了这一步才能确保我们后续操作指令是在当前目录下进行的
注意:我们可以看到我们通过此方法下载下来的网络模型是在主目录下,也就是代表了是在本地,而不是在谷歌云盘中
!git clone https://github.com/bubbliiiing/faster-rcnn-tf2.git
%cd faster-rcnn-tf2/
方式2:此方式主要是针对我们从自己电脑上传到谷歌云盘的网络,我们之前已经将我们要训练的网络上传到了谷歌云盘中。
之前的注意事项也跟大家说了,我们为了保证网络中的一些路径的正确,也为了后面将庞大的数据集放在本地里进行处理。我们是需要将我们上传到谷歌云盘中的网络复制到我们此时左侧文件窗口中的主目录中的,那么怎么才能复制文件夹呢?
我是通过下面的代码完成文件夹的复制的
注意:
oldpath是我们需要复制的源文件夹路径
newpath是我们需要复制的目的地文件夹,此时的faster-rcnn-tf2-coby就是我们复制后的文件夹
/content是我们的文件夹根目录,相当于本地目录,复制前根目录下不能存在faster-rcnn-tf2-coby文件夹
import shutil
oldpath = '/content/drive/MyDrive/faster-rcnn-tf2'
newpath = '/content/faster-rcnn-tf2-coby'
shutil.copytree(oldpath,newpath)
可以看到,执行完代码块之后刷新文件目录,可以看到多出了我们复制的文件夹
获取文件以及文件夹路径我们可以直接在文件窗口中选中点击鼠标右键选择复制路径然后粘贴即可
4、数据集的复制与解压
直接将数据集布置在谷歌云盘会导致大量的云盘数据传输,速度远不及本地文件,因此我们需要将数据集复制到本地里进行处理。
1) 假如我们传入到谷歌云盘中数据集文件是压缩包的形式,我们需要输入下述代码进行文件的复制与解压。首先执行的是删除指令,将当前网络文件中的空VOCdevkit文件夹进行删除。
!rm -rf ./VOCdevkit
删除前:
删除后:可以看到数据集文件夹确实不见了
第一行代码先进行数据集压缩包文件的复制,当复制文件时可以使用该指令,中间一段是源文件地址, 最后面的./是需要复制到的位置,也就是faster-rcnn-tf2目录下, 然后进行解压。
!cp /content/drive/MyDrive/VOC_datasets/VOC07+12+test.zip ./
!unzip ./VOC07+12+test.zip -d ./
由于我只用了zip压缩文件所以使用的是unzip指令,如果是其它形式的压缩包,需要根据压缩包的格式进行指令的修改(大家可以去百度)。执行下述指令后,可以发现,左边的文件中已经解压好了VOC数据集。没有的话就去左侧刷新一下。
2) 假如我们上传的数据集是文件夹形式的话,那么可以直接通过我们之前复制文件夹的方式复制数据集到指定位置
import shutil
oldpath = '/content/drive/MyDrive/ColabNotebooks/VOCdevkit'
newpath = '/content/faster-rcnn-tf2/VOCdevkit'
shutil.copytree(oldpath,newpath)
5、保存路径设置
本文提供的代码默认的保存路径为logs文件夹,但Colab存在不稳定的问题,运行一段时间后会发生断线。
如果将权值保存在原始根目录下的logs文件夹,发生断线网络就白训练了,浪费大量的时间。
可以将google云盘软连接到根目录下,那么即使断线,权值也保留在云盘中。
由于之前已经在云盘中创建了logs文件夹。先将当前faster-rcnn-tf文件夹下的logs文件夹删除,再将谷歌云盘中的logs文件夹链接过来。执行完该代码后,当前文件夹下的logs就等同于谷歌云盘中的logs文件夹
!rm -rf logs
!ln -s /content/drive/MyDrive/ColabNotebooks/logs logs
三、开始训练
1、标注文件的处理
打开voc_annotation.py文件,由于我们现在使用的直接就是VOC数据集,我们已经划分好了训练集验证集和测试集,所以我们将annotation_mode设置为2。
然后输入指令完成标签的处理,也就是执行voc_annotation.py文件,faster-rcnn-tf2目录下就生成了2007_train.txt和2007_val.txt。
执行某个python文件代码格式,后面是该python文件路径:
!python /content/faster-rcnn-tf2/voc_annotation.py
如果此时工作路径是当前网络文件夹路径下,就不需要具体地址了,当然写上也没错
!python voc_annotation.py
2、训练文件的处理
处理训练文件主要包含三个部分:
1、预训练文件的使用。
2、保存周期的设置,这个设置是因为云盘的存储空间有限,每代都保存会导致存储空间满出。
3、预训练文件的使用
首先修改model_path,指向我们上传到谷歌云盘的权值文件。在左侧文件栏中,找到/content/drive/MyDrive/ColabNotebooks/model_data,复制权值路径。
替换右侧train.py文件中的model_path。
3、保存周期的设置
有一些网络已经完成了更新,添加了每隔多少世代的保存参数,直接修改save_period既可,在本文中,我们将save_period设置成5,也就是每隔5代保存一次。
还没有更新的网络只能每一代都保存了,记得偶尔去google云盘删一下。
4、开始训练
此时在代码块里面输入:
!python /content/faster-rcnn-tf2/train.py
即可开始训练:
四、Colab 断线怎么办?
1、防掉线措施
听说可以通过自动点击来减少掉线频率。
在Google colab的按F12,点击网页的控制台Console,粘贴如下代码回车即可:
function ConnectButton(){
console.log("Connect pushed");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click()
}
setInterval(ConnectButton,60000);
2、完了还是掉线呀?
没什么办法,便宜的东西必然有它的坏处。
按照步骤重新来一次,然后将预训练权重设置成logs文件夹里面训练好的权值文件即可。
除此之外,Init_epoch等参数也需要调整。
五、常用的Colab操作指令
(1)查看当前路径
!pwd
(2)切换目录
#可以是相对、绝对路径
%cd 路径
(3)查看当前目录的所有文件名称
!ls
#ls -a 显示隐藏文件
(4)创建文件和文件夹
mkdir 文件夹名字
touch 文件名字
(5)删除文件
# 删除文件夹或文件,后面跟文件夹或文件名称
!rm -rf 文件名字
# 也可以删除多个文件
!rm -rf 文件名字1 文件名字2 文件名字3
# 删除除了drive的所有文件
ls | grep -v drive | xargs rm -rf
(6)查看显卡驱动信息
! nvidia-smi
(7)拷贝文件
# 前面是要拷贝的文件名,后面是拷贝后的文件目录
!cp -i /content/drive/cat_dog_result.csv /content/
解压缩操作
(1)解压rar文件
!apt-get install rar
!apt-get install unrar
# x参数是保存原来的文件架构,e参数是把里面的文件都解压到当前路径下
# 注意压缩文件时要右键,添加到xxx.rar,不要添加到压缩文件
! unrar x 压缩文件名
(2)压缩rar文件
# !rar 压缩后的文件名 要压缩的文件名或文件夹名
!rar a 123.rar Filename
(3)解压zip文件
!unzip FileName.zip
(4)压缩zip文件
# !zip 压缩后的文件名 要压缩的文件名或文件夹名
!zip FileName.zip DirName
阻止Colab自动掉线
步骤
按 F12 或者按快捷键ctrl+shift+i,并选择Console,复制以下的代码到控制台中,点击回车即可。
function ClickConnect(){
console.log("Working");
document.querySelector("colab-toolbar-button#connect").click()
}
var id=setInterval(ClickConnect,5*60000) //5分钟点一次,改变频率把5换成其他数即可,单位分钟
//要提前停止,请输入运行以下代码: clearInterval(id)
六、总结
使用Colab训练比较重要的是处理好路径的关系,找到哪个文件在哪里,文件夹的执行目录在哪里,就可以比较简单的运行起程序了,不过Colab确实存在断线问题,我们需要时刻保存好文件,因此我将权值直接保存在云盘上,这样也不会丢失。12h的限额比较难受,有时候没到时间就限额了。因此需要及时保存训练的模型,长时间不用gpu的情况下也会被限额(Pro版也一样),因此训练完建议及时改成gpu或停止。