logo资料库

yolov3使用教程(从tensorflow-gpu环境搭建到迁移学习).pdf

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
从零开始 yolov3 的 tensorfow-gpu 环境搭建及成功实现迁移学 习全过程 yolov3 所需环境为 tensorflow-gpu 和 keras,keras 很简单,但是搭建 tensorflow-gpu 并且使 yolov3 程序可以跑起来却不是那么容易,在本人第二次 搭建环境的情况下,却也折腾了一个白天,中途出现各种问题,要不就是可以 运行程序,但不是在 GPU 上运行;要不就是直接各种报错,最后还是成功搭建 好,并且能够运行了,下面我将把整个流程(环境安装,成功运行程序)记录 下来。本实验程序为 github 上大神 qqwweee 项目: https://github.com/qqwweee/keras-yolo3 1、tensorflow-gpu 环境搭建 在这里我还是建议使用 anaconda 进行 tensorflow-gpu 的安装,因为 conda 安装可以省去很多 cuda 和 cudnn 的配置,这这两个的版本配置还跟 tensorflow- gpu 版本有很大关系,所以自行配很容易出错,这里直接使用 conda 安装, anaconda 的安装可以直接去 anaconda 官网下载安装(注:安装时候记得勾选自 动设置环境变量,要不然在命令提示符界面 conda 指令就运行不了),如果不 小心没有设置好环境变量,可以自行在设置界面搜索”环境变量“,然后进入 后在系统变量那一栏找到”path“,双击后把下面四行一个一个的添加上去并 保存即可: ''' C:\ProgramData\Anaconda3 C:\ProgramData\Anaconda3\python C:\ProgramData\Anaconda3\Scripts C:\ProgramData\Anaconda3\Library\bin ''' 1.1、给 conda 设置镜像源 因为 conda 自带的安装源速度特别慢,所以如果你不设置镜像源下载几乎 还是安装不了,中途会自动断开,这里我选择清华镜像源,首先打开 anaconda prompt,依次输入以下四个指令:
添加镜像源:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 添加镜像源:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 设置搜索时显示通道地址:conda config --set show_channel_urls yes 显示镜像源设置情况:conda config --show channels 这里最后一行为显示镜像源设置情况,如果看到结果显示有上述链接表示设置 成功。当然也有删除镜像源的指令如下: 删除镜像源:conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 1.2、conda 安装 tensorflow-gpu 这里我建议使用 conda 创建一个新环境给 tensorflow-gpu,因为这样在这个 环境下任何修改不会影响到其它环境,当然更重要的是,在其他环境下的一些 操作不会影响到这,要不然可能你之后运行其他程序导致 tensorflow 需要的一 些模块改变容易导致 yolo 运行报错。 创建新环境指令为:conda creat -n tensorflow-gpu tensorflow-gpu==1.14.0 创建环境名为 tensorflow-gpu 的新环境,并且在新环境安装 tensorflow-gpu1.14.0 版本,此版本可以运行 yolov3,本人目前也在使用此版本,稍等片刻后会弹出 一个让你选择是否下载的选项,输入 y 就行,这个时候就等安装成功即可。 环境创建好后,就是进入新环境了,因为后续操作都是在新环境下,所以 需要先进入新环境,使用下面一些指令可以激活和退出、删除等对环境的操 作: 1、激活环境:activate tensorflow-gpu 2、退出环境:deactivate 3、删除环境(慎重):conda remove -n tensorflow-gpu 4、列出所有虚拟环境:conda env list 5、列出当前环境所有包:conda list 1.3、其他依赖模块安装
因为 yolov3 还需要安装 keras、pil、matplotlib、cv2,所以直接使用以下指 令在新环境 tensorflow-gpu 内下载安装即可: pip install keras pip install pillow pip install matplotlib pip install opencv.python 2、yolov3 复现 首先我相信你已经在 github 上下载好了代码,下面将从实现 voc 数据集训 练及预测开始到迁移学习训练自己数据集来讲解 yolov3 的使用: 2.1、voc 数据集的下载及处理 正如你看到的,keras-yolov3-master 文件夹里有一个 voc_annotation.py 文 件,这是用来将 voc 数据集处理成 txt 文件类型以方便模型进行训练,所以我们 首先也是要使用 voc_annotation.py 程序来获取我们需要的 train.txt 文件,当然在 这之前你肯定需要将 pascal_voc 数据集下载好,这里我给出下载地址,官网有 时候打不开,推荐使用镜像链接: 镜像下载地址: https://pjreddie.com/projects/pascal-voc-dataset-mirror/ 官网下载地址: http://host.robots.ox.ac.uk/pascal/VOC/ 在运行 voc_annotation.py 程序之前,还是有几点需要注意,首先是 voc 数 据集下载后你解压的位置,如果你不想后续麻烦我建议直接解压到 keras-yolo3- master 的目录下,这样可以直接在这个路径上运行程序,如果你解压到其他路 径上就需要在 voc 数据集的 vocdevkit 目录地址上运行程序,并且解压是直接将 三个压缩包一起解压就行;同时作者程序是默认只生成 voc_2007 的数据集,如 果你想用 2012 的数据集,需要在程序中修改一下 sets 里面数字。 运行好 voc_annotation.py 后,你就会在当前目录下看到生成的 train.txt 和 val.txt 以及 test.txt 文件,当然 yolov3 训练程序还是只会用到 train.txt,验证集 是从 train_data 里面划分出来的。然后你只需要把这些 txt 文件放在 keras-yolo3- master 的目录下即玩成了这一步。 2.2、使用聚类计算 anchors
在文件中,有一个 model_data 文件夹,里面已经存放了作者默认的 yolo_anchors 和 tiny_yolo_anchors 两个文件,但是如果你想要使用更适合你自己 数据集的 anchors,那么你就需要使用 kmeans.py 程序了,首先,你还是要打开 kmeans.py,滑到最下面几行代码: ''' if __name__ == "__main__": cluster_number = 9 filename = "2012_train.txt" kmeans = YOLO_Kmeans(cluster_number, filename) kmeans.txt2clusters() ''' 将 cluster_number 设置为你的个数,如果你想用完整版 yolov3,那就填 9,如果 你想用 tiny-yolov3 那就填 6;filename 就填你之前产生的训练集的 txt 文件名。 运行后会产生一个名为 yolo_anchors.txt 文件,当然这个文件名你也可以在程序 的第 61 行处修改。产生的该文件就可以复制到 model_data 文件夹里面去。 2.3、convert.py 生成 h5 模型文件 这一步其实不是必须的,但是可以通过这一步直接获取已经训练好的模型 权重,方便快速实现模型预测,想跳过这一步的直接可以看下一节使用 train.py 模型训练。当然一些必要的准备工作还是必须的,逆你需要提前下载好权 重.weight 文件,这些文件可以通过下面链接下载,对应于不同类型模型的权 重: yolov3.weights: https://pjreddie.com/media/files/yolov3.weights yolov3-tiny.weights: https://pjreddie.com/media/files/yolov3-tiny.weights darknet53.weights: https://pjreddie.com/media/files/darknet53.conv.74 上述链接都可以在 yolo 官网找到: https://pjreddie.com/darknet/yolo/ 下载好后可以直接就放在 master 文件内的目录下,然后在终端上直接输入 下面指令,当然,不同模型权重你需要更改.cfg 的文件名和保持的 h5 文件名,过 完这一步其实已经可以做预测了,可以直接跳转到 2.6 节。 ''' python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
''' 2.4、使用 train.py 模型训练 到这里必要的准备工作差不多已经做完,差不多可以开始训练了,训练呢 肯定就是使用 train.py 文件,需要明白的是,训练这里其实分为两种,一种是不 含初始权重的训练,另一种是使用上一节生成的 h5 模型文件继续训练,如果你 是做跟 voc 或者 coco 数据集类似的数据集训练,第二种方法可以更快让你模型 收敛,但是如果你训练集跟它们完全不一样,比如细胞的检测,那么我还是建 议直接从 0 开始训练,也就不需要之前的 h5 模型文件。 下面我们具体来讲讲怎样修改 train.py 文件实现模型训练,首先打开 train.py 代码,可以看到前面可修改参数: ''' def _main(): annotation_path = 'train.txt' #训练集的 txt 文件名 log_dir = 'logs/000/' #模型保存的文件夹,这个需要自己提 前创建好 classes_path = 'model_data/voc_classes.txt' #数据集的 class.txt 文件 anchors_path = 'model_data/yolo_anchors.txt' #anchors 文件 ''' 根据具体情况可以对上述变量赋值,接下来是跳转到 train.py 程序第 30 行和第 33 行 ''' if is_tiny_version: model = create_tiny_model(input_shape, anchors, num_classes, freeze_body=2, weights_path='model_data/tiny_yolo_weights.h5') else: model = create_model(input_shape, anchors, num_classes, freeze_body=2, weights_path='model_data/yolo_weights.h5') '''
这里是当你准备选用第二种方式训练模型(即使用已有模型 h5 文件继续 训练),需要将准备继续训练的 h5 文件路径写入 weight_path 中。但是如果你 准备使用第一种训练方法,那你就需要跳转到代码第 105 和 135 行(分别对应 yolo 和 tiny_yolo)的模型生成函数处,将 load_pretrained 参数设置为 False,如下 所示: ''' def create_model(input_shape, anchors, num_classes, load_pretrained=False, freeze_ body=2, weights_path='model_data/yolo_weights.h5'): ''' 当然,你可以在代码的第 57 行和 76 行设置你的 batch_size 的大小,在 63 和 82 行设置你的训练轮数等,你可能会问这里怎么有两次模型训练代码,因为 这里作者是这样设计的:第一次模型训练是一直训练完毕设置的 epochs,而第 二次训练其 learn_rate 会自行调节,并且有早停功能,即发现 loss 一直不降会直 接停止训练并且保存最优模型,所以其实这一部分训练所需内存很大,因为要 保存很多次模型结果,如果你发现到这一步会保错,可以试着降低 batch_size。 需要设置的部分差不多就这些了,然后你就可以开始训练了,直接控制台 运行 python train.py 即可。 2.5、运行 train.py 报错解决办法 当然本人还是遇到一些问题,如果你跟我一样遇到下面报错,那就使用下 面方法解决,下面是报错图 片:
具体来说就是下面这个错误: ''' IternalError:Blas SGEMM launch failed : m=43264, n=32, k=64 ''' 我的解决办法是在 train.py 代码的前面加上这几行代码: '''
import tensorflow as tf import keras config = tf.ConfigProto() config.gpu_options.allow_growth = True keras.backend.tensorflow_backend.set_session(tf.Session(config=config)) ''' 接着运行一下发现可以运行了。nice!!!!(这里再插播一条,如果你做 预测时也遇到同样问题,也还是同样解决办法,再 yolo_video.py 代码前加上述 代码) 2.6、yolo_video.py 预测 模型训练完后,或者之前 convert 产生的 h5 文件,就可以拿来做预测了, yolo_video.py 其实更像是一个脚本文件,真正我们很多需要更改的参数其实是 在 yolo.py 程序里,所以,我们打开 yolo.py 代码,可以看到前面参数设置: ''' class YOLO(object): _defaults = { "model_path": 'model_data/yolo.h5', #模型文件地址 "anchors_path": 'model_data/yolo_anchors.txt', #anchors 地址 "classes_path": 'model_data/coco_classes.txt', #数据集的 class 地址 "score" : 0.3, #预测框分数阈值,如果预测框少可以试着调小 "iou" : 0.45, #iou 阈值,如果预测框少可以试着调小 "model_image_size" : (416, 416), #不用更改 "gpu_num" : 1, #gpu 使用数 } ''' 更改完上述参数,保存好,你就可以直接使用指令: '''
分享到:
收藏