在Colab上复现TSN

一、Colab简介和使用说明

1.Colab简介

colab是谷歌的一个线上深度学习训练平台,对于刚进实验室还没分配到工作站的研究生非常之友好。但是分配到工作站以后,不管是算力还是金钱还是方便程度,还是工作站香。
网址: https://colab.research.google.com/?utm_source=scs-index.

2.Colab使用说明

进去网页以后可以新建一个google colaboratory,可以把这个新建的页面当做jupyter+linux终端使用,里面既可以敲python,又可以加!敲linux命令。在这里插入图片描述

2.1两种使用方式

2.1.1连接谷歌云盘

第一种方式是把.ipynb文件连接到谷歌云盘。
优点:所有下载、更改以及产生的数据都会同步到谷歌云盘并且保存,
缺点:假如处理大数据集的时候,时间占用最多的不是训练过程,而是数据的IO读写过程(反正就是云端与.ipynb之间的数据读写贼慢);而且谷歌云盘的空间也只有十几个G,处理不了大数据集。
使用方法:要使用这种方法就只需要在最开始加以下命令并运行,点击运行产生后的网址登录自己的谷歌账号就ok了。
建议:复现模型的时候使用,把数据集删减一些,这样可以保存代码调试数据和运行结果,方便理解。
在这里插入图片描述

2.1.2不连接谷歌云盘

第二种是不连谷歌云盘,直接在分配的在线的存储空间上跑。
优点:好处是快的一批,而且在线分配的存储空间也挺大,好像不开pro也有200G左右。
缺点:一段时间没有代码运行就会自动断开与谷歌服务器的连接,就得一切从头开始。
使用方法:直接不用输上图的代码,直接用就可以。
建议:在跑正儿八经的大模型的全数据集的时候使用,这样训练能快点儿。

2.2具体使用细节

2.2.1GPU设置

在新建的colaboratory页面点击修改,里面有个笔记本设置,点进去选择GPU,点保存,等待右上角分配GPU即可。(google白嫖的算力貌似还不如1080,tb上可以买pro,一个月75RMB)
注意,一定要先分配GPU再进行后面操作,不然等你把数据集啥的都弄完了再分配,你就发现你得再重新再搞一次

2.2.2程序管理

点击代码执行程序选项,里面有个管理会话,可以管理你打开的所有colaborabory(其实没太有必要,每一个文件都分配独立的在线空间)。

2.2.3具体编程

如一开始所说,可以把colaborabory当成jupyter+linux后端。
编python的时候和jupyter的使用方法一样,唯一比较不爽的地方是快捷键太麻烦,对在上面编python其实没那么友好,所以我一般都是在pycharm上改好代码,直接上传。假如没脸谷歌云盘的话,也可以在git下来以后,直接点击最左边小文件夹图表,双击对应py文件,直接笔记本改。
linux指令照常使用,就是要在前面加个感叹号,这里就不再赘述。

二、TSN代码复现

1.数据集准备和处理

1.1数据集下载

复现用的UCF101数据集
下载地址: https://www.crcv.ucf.edu/research/data-sets/ucf101/
要下里面的两个东西,一个是数据集本身Data Set,另一个要下数据集分割依据,也就是Action Detection
在这里插入图片描述

1.2数据集处理

1.2.1数据上传

数据集下载完成后,开始数据处理,首先在谷歌云盘建立TSN文件夹,然后git数据处理要用的mmaction代码和训练要用的tsn代码
在这里插入图片描述
然后再mmaction的data文件夹下创建ucf101文件夹,再在ucf101文件夹下创建annotations、rawframes、videos文件夹。
annotations:存放刚才下载的分割依据
rawframes:存放视频提帧后的帧
videos:存放刚才下载的原始ucf101数据(我只放了前三个动作,Archery、ApplyLipstick、ApplyEyeMakeup)
annotations和videos里面的内容需要自己手动上传进去

1.2.2提帧

进入mmaction/data_tools/目录下,安装mmcv在这里插入图片描述
然后运行bulid_rawframes.py,对视频进行提帧,结果放在rawframes文件夹里
在这里插入图片描述
运行结束后,可以在谷歌硬盘上找到对应文件夹打开看看,里面就是一帧一帧的照片
在这里插入图片描述

1.2.3生成file_list

先切到mmaction目录下,安装mmaction缺少的相关文件(不知道啥情况,换了源也缺,反正补上就ok了)
在这里插入图片描述
然后,再切到data_tools/ucf101/文件夹下,生成分割文件file_list
在这里插入图片描述
生成后的文件在ucf101下,如下图所示。
在这里插入图片描述

2.训练模型

2.1修改对应代码

2.1.1修改main

main.py里面ucf的num_class是101,这里只用了三个,改成3
在这里插入图片描述
把main里面的TSNDataSet类引用的路径都改成绝对路径。
在这里插入图片描述
把预测的accuracy函数,因为只有三个类,没有top5只有top3,把参数改为3,train和validate都改
在这里插入图片描述

2.1.2修改dataset

在dataset.py中,get函数里面也加入绝对路径
在这里插入图片描述

2.2训练

转入tsn-pytorch文件下,运行main.py函数,把该设置的参数设置好,就ok了
在这里插入图片描述
运行结果如下图所示
在这里插入图片描述

最后的原因应该是训练的太好了,top1、top3都100%,根本还是数据集太小了,等着跑个稍微大一点儿的数据集再测试一下。

2.3训练过程中可能遇到的问题

第一个:
错误:
在这里插入图片描述

解决方法:
将target = target.cuda(async=True)改为target = target.cuda()

第二个:

错误:
RuntimeError: view size is not compatible with input tensor’s size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(…) instead.

解决方法:
将correct_k = correct[:k].view(-1)改为correct_k = correct[:k].contiguous().view(-1)

第三个:

错误:
RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method. (Example: https://pytorch.org/docs/stable/autograd.html#torch.autograd.Function)

解决方法:
见别人CSDN:链接: https://blog.csdn.net/seamanj/article/details/110083044

第四个:

错误:
IndexError: invalid index of a 0-dim tensor. Use tensor.item in Python or tensor.item() in C++ to convert a 0-dim tensor to a number

解决方法:
就是出错误的位置上那个参数是个tensor,但是当时的pytorch用了数组的调用方法,所以把数组的调用改成.item

第五个:

错误:RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method.

解决方法:
找到models.py中的forward函数,把output = self.consensus(base_out)改为output = self.consensus.forward(base_out)
找到main.py中的train函数,把output = model.forward(input_var)改为output = model.forward(input_var)

除此之外可能还有问题,大多数应该都是一些pytorch版本不匹配产生的,最多的应该就是tesnor的调用数值方法。找到对应行,百度一下能解决90%

3.测试模型(没弄完,要去听岛屿心情了,先不写了,回来弄完写)

三、瞎写八写在最后

这周除了上课,一半再弄这个一半在复习和写结课作业。从一开始从本地跑不行,再到弄到自己的二系统ubuntu上屁都弄不懂,再到找到colab弄明白colab是怎么回事儿再到慢慢弄出来。回过头来看这一周好像又没啥工作量,其他几个实验室研一的同学嗡嗡嗡的往前窜,麻了。上周看了一句话大体意思是:就怕别人起跑比你早,速度比你快,加速度还比你快。这种激汤能不能别再让我刷到了。年薪五十万的工作得有人做,那年薪五万的不也得有好同志干吗。晚上吃饭的时候刷视频还看到一句话:每个人如果都能出人头地,哪还有平凡人?
拼尽全力,接受普通。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Colab上运行VTK(Visualization Toolkit)需要进行以下步骤: 1. 安装必要的软件包:在Colab的代码单元格中,使用以下命令安装VTK和相关软件包。 ```python !pip install vtk !apt-get update !apt-get install -y xvfb x11-utils !pip install pyvirtualdisplay !pip install EasyProcess ``` 2. 设置虚拟显示:在Colab的代码单元格中,使用以下代码设置虚拟显示。 ```python from easyprocess import EasyProcess from pyvirtualdisplay import Display display = Display(visible=0, size=(800, 600)) display.start() xvfb = EasyProcess(['Xvfb', ':1', '-screen', '0', '800x600x16']) xvfb.start() ``` 3. 导入VTK并进行测试:在Colab的代码单元格中,使用以下代码导入VTK并进行简单的测试。 ```python import vtk # 创建一个简单的VTK场景 renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.SetWindowName("VTK Example") renderWindow.AddRenderer(renderer) # 创建一个简单的VTK演员 coneSource = vtk.vtkConeSource() coneMapper = vtk.vtkPolyDataMapper() coneMapper.SetInputConnection(coneSource.GetOutputPort()) coneActor = vtk.vtkActor() coneActor.SetMapper(coneMapper) # 将演员添加到场景中 renderer.AddActor(coneActor) # 创建一个渲染窗口交互器并启动事件循环 renderWindowInteractor = vtk.vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) renderWindow.Render() renderWindowInteractor.Start() ``` 以上是在Colab中运行VTK的基本步骤。请注意,由于Colab是基于云的环境,可能会受到一些限制,并且可能会在性能方面有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值