colab怎么提高训练速度,特别对于第一步训练时间特别长!colab切换为1的版本

Posted 星代码119

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了colab怎么提高训练速度,特别对于第一步训练时间特别长!colab切换为1的版本相关的知识,希望对你有一定的参考价值。

一、必看:

谷歌给我们提供了yunGPU,挺好用的,但是坑多。我voc2007+voc2012数据集,训练集总共20000多张图片,第一步训练就需要花费2个多小时,总共也才6个小时左右,所以提高训练速度很重要。训练速度慢的原因主要是,每一批次都需要去google drive上去读,所以说第一步特别慢。

注意:1、图片数量过少,可以直接复制到创建的文件下

%cp -av 源文件 目标文件夹

如果,数据量大,还是按照下面步骤来。先压缩,在上传,在复制,在解压。

二、解决思路是,

1、先在自己电脑上压缩成.zip文件,上传到google drive(谷歌云盘)
2、在把zip文件复制到工作目录,在继续训练,速度大大提高,第一步训练提高到了8分钟左右
一、创建文件,工作目录。
上传压缩数据集,这些大家都会,这里主要说一下第二步。读取数据慢主要是图片,所以这里只需要把图片弄成压缩文件就可以了,这里需要提一下,2个G的压缩文件上传到谷歌云盘大概10分钟,解压大概2分钟,速度已经很快了。

一、创建文件,工作目录。

!mkdir train_local

在这里插入图片描述
结果:
在这里插入图片描述

二、复制压缩文件到创建的根目录

%cp -av /content/drive/MyDrive/Voc/VOC2012/JPEGImages.rar /content/train_local

在这里插入图片描述

三、解压

!pip install pyunpack
!pip install patool
from pyunpack import Archive
Archive('/content/train_local/JPEGImages.rar').extractall('/content/train_local')

四、复制代码训练,训练可以解决。

三、 补充:由于图片路径更改,对于的voc_txt文件更改。

一、方法一:在进行xml文件转txt文件进行修改路径,修改对应的路径,需要跟换的图片路径:annotation

import os
import argparse
import xml.etree.ElementTree as ET

def convert_voc_annotation(data_path, data_type, anno_path, use_difficult_bbox=True):

    classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus',
               'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
               'motorbike', 'person', 'pottedplant', 'sheep', 'sofa',
               'train', 'tvmonitor']
    img_inds_file = os.path.join(data_path, 'ImageSets', 'Main1', data_type + '.txt')
    with open(img_inds_file, 'r') as f:
        txt = f.readlines()
        image_inds = [line.strip() for line in txt]

    with open(anno_path, 'a') as f:
        for image_ind in image_inds:
            image_path = os.path.join(data_path, 'JPEGImages', image_ind + '.jpg')
            annotation = os.path.join('/content/train_local/JPEGImages/'+image_ind + '.jpg')
            label_path = os.path.join(data_path, 'Annotations', image_ind + '.xml')
            root = ET.parse(label_path).getroot()
            objects = root.findall('object')
            for obj in objects:
                difficult = obj.find('difficult').text.strip()
                if (not use_difficult_bbox) and(int(difficult) == 1):
                    continue
                bbox = obj.find('bndbox')
                class_ind = classes.index(obj.find('name').text.lower().strip())
                xmin = int(round((float(bbox.find('xmin').text.strip())), 2))
                xmax = int(round((float(bbox.find('xmax').text.strip())), 2))
                ymin = int(round(float((bbox.find('ymin').text.strip())), 2))
                ymax = int(round(float((bbox.find('ymax').text.strip())), 2))
                annotation += ' ' + ','.join([str(xmin), str(ymin), str(xmax), str(ymax), str(class_ind)])
            print(annotation)
            f.write(annotation + "\\n")
    return len(image_inds)


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("--data_path", default="D:/tensorflow-yolov3/VOCtest_06-Nov-2007/VOCdevkit/VOC2007")
    parser.add_argument("--train_annotation", default="D:/tensorflow-yolov3/VOCtrainval_11-May-2012 (1)/VOCdevkit/VOC2012/data/dataset/voc_train1.txt")
    parser.add_argument("--test_annotation",  default="D:/tensorflow-yolov3/VOCtrainval_11-May-2012 (1)/VOCdevkit/VOC2012/data/dataset/voc_test.txt")
    flags = parser.parse_args()

    if os.path.exists(flags.train_annotation):os.remove(flags.train_annotation)
    if os.path.exists(flags.test_annotation):os.remove(flags.test_annotation)

    num1 = convert_voc_annotation(os.path.join('D:/tensorflow-yolov3/VOCtrainval_11-May-2012 (1)/VOCdevkit/VOC2012/'), 'train', flags.train_annotation, True)



二、方法二、直接在对应的txt文件进行修改

import os
import argparse
import xml.etree.ElementTree as ET    

#保存.txt路径
save_file=open('/content/drive/MyDrive/voc_2007_crack/Voc2007_1/data/new_data_1.txt','w')  
#需要修改的TXT文件  
img_inds_file = os.path.join("/content/drive/MyDrive/voc_2007_crack/Voc2007_1/data/dataset/voc_train.txt")

with open(img_inds_file, 'r') as f:
  txt = f.readlines()
  image_inds = [line.strip() for line in txt]
  for image_ind in image_inds:
    annoth = '/content/drive/MyDrive/voc_2007_crack/Voc2007_1/JPEGImages/'
    annoth+=image_ind.split('\\\\')[-1]
    save_file.write(annoth+'\\n')

三、conda 切换为tensorflow 1.x

% TensorFlowh_version 1.x

以上是关于colab怎么提高训练速度,特别对于第一步训练时间特别长!colab切换为1的版本的主要内容,如果未能解决你的问题,请参考以下文章

提高插入符号 (R) 中的模型训练速度

AI换脸云端colab训练常见问题都有哪些?怎么解决?

Colab TPU 上的 RNN 运行速度与本地 CPU 版本相同

如何提高电脑运行的速度啊?请高手赐招!

使用大数据集在 Google Colab TPU 上训练 seq2seq 模型 - Keras

提高跑步速度的训练方法