ModelArts 搭建 darknet 环境

胡琦

共 3978字,需浏览 8分钟

 · 2021-07-07

一、开通 NoteBook 实例

我们可以使用 ModelArts 的开发环境 Notebook ,也可以直接使用 ModelArts 开发工具 CodeLab,两者本质都是使用 Jupyter 。目前推荐使用 CodeLab ,毕竟可以免费“续杯”,而且是 V100 的硬件。下面分别讲解一下 Notebook 和 CodeLab 的使用。

1.1 Notebook

在 AI 开发过程中搭建开发环境、选择AI算法框架、选择算法、调试代码、安装相应软件或者硬件加速驱动库都不是容易的事情,使得学习 AI 开发上手慢门槛高。为了解决这些问题,ModelArts算法开发平台简化了整个开发过程,以降低开发门槛。ModelArts集成了基于开源的Jupyter Notebook和JupyterLab,可为您提供在线的交互式开发调试工具。您无需关注安装配置,在ModelArts管理控制台直接使用Notebook,编写和调测模型训练代码,然后基于该代码进行模型的训练。

1.1.1 初始化 Notebook

首先我们在左侧导航栏中搜索并进入 ModelArts ,一般来说,我们常用的区域是北京四,因为北京四的版本及功能相对较新,资源也相对较多。这里为了方便演示,我选择北京四,当我们第一次使用 ModelArts 需要授权,更多说明请参考 ModelArts 准备工作[1] 。每个用户默认可创建 10 个 Notebook,其中免费算力的 CPU 和 GPU 环境各可创建 1 个 。

1.1.2 创建 Notebook

鉴于 darknet 环境需要依赖 GPU,因此我们将创建一个带有 GPU 环境的 Notebook,默认有一个免费算力的 GPU 环境,以及 5GB 的存储硬盘。

1.1.3 打开 Jupyter Lab

目前比较推荐使用 JupyterLab ,全新的、更高效的 Notebook 使用交互体检。

1.1.4 环境检查

通过 Terminal 输入 nvcc -Vnvidia-smi 可以查看环境信息。

1.2 CodeLab

即开即用、用于机器学习的在线集成开发环境,可以轻松的构建、训练、调试、部署机器学习算法与模型。当前使用免费规格用于体验,值得注意的是 72 小时内没用使用,会释放资源,因此需要注意文件备份。

1.2.1 开启 CodeLab

CodeLab 在 ModelArts 的总览页,属于开发工具类,目前可以免费使用。

1.2.2 切换到 GPU 环境

CodeLab 默认是 CPU 的环境,我们需要手动切换到 GPU 规格。[Free] GPU: 1*V100(32GB)|CPU: 8vCPUs 64GB 这个配置还可以吧!

1.2.3 环境检查

通过 Terminal 输入 nvcc -V  和 nvidia-smi  可以查看环境信息。(cuda版本需匹配nvidia驱动版本)

上图中 cuda 版本与 nvidia 驱动不匹配,可能会导致编译之后的 darknet 运行报错。

二、下载 darknet 源码

接着我们需要获取 darknet 的源码来进行编译, darknet 源码地址是:https://github.com/pjreddie/darknet 。由于众所周知的源码,我们可以使用镜像地址或者先将代码拉取到 Gitee 再下载到 Notebook。

2.1 git clone

本次我们直接从镜像地址获取源码:

cd work
git clone https://github.com.cnpmjs.org/pjreddie/darknet.git
image.png

2.2 检查文件

点击刷新的按钮可以查看到已经下载好的源码文件。

三、编译 darknet

在编译 darknet 之前我们需要修改 Makefile 文件。

3.1 修改Makefile文件

修改前修改后
GPU=0GPU=1
CUDNN=0CUNDD=1
OPENCV=0OPENCV=1
image.png

3.2 执行 make 进行编译

cd work
cd darknet
make
image.png

3.3 检查编译结果

至此,我们已经生成了可执行文件 darknet ,环境搭建完毕。接着我们试着准备数据集来验证一下

3.4 常见问题

3.4.1 make: Nothing to be done for 'all'.

此时执行 make cleanmake 即可。

3.4.2 darknet: ./src/cuda.c:36: check_error: Assertion `0' failed.

这是由于 cuda 和 NVIDIA 版本不匹配。鉴于 ModelArts 的 Notebook 环境中已经安装了多个 cuda,我们可以通过脚本切换:

# 建立软链接命令
sudo ln -snf xxx

# 查看环境中有哪些cuda版本
ll /usr/local | grep cuda

# 修改cuda版本的命令,其中version替换为对应的cuda版本
sudo ln -snf /usr/local/cuda-{version}   /usr/local/cuda
修改之后再执行 make 进行编译。
image.png

四、数据集处理

鉴于 darnet 需要特定的数据格式,借助脚本可以将 VOC 数据集处理成可适用的格式。数据集见 AIGallery: https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=62ff868a-03e8-4627-a9c7-922d71aa1386

本操作指引为直接下载处理好的数据集来进行配置训练。

4.1 下载数据集到 OBS

AIGallery 提供了丰富的数据集,我们可以下载自己所需要的数据集,对于一些平台没有的数据集,我们也可以将自己的数据集上传到平台设置为私有已减轻对 OBS 存储的依赖。

image.png

4.2 通过 MoXing 下载 OBS 数据到 Notebook

MoXing 为海量数据训练提供了便利的存储服务,我们可以通过 MoXing 快速读取 OBS 中的数据。比如:

import moxing as mox
mox.file.copy_parallel('obs://huqi88/AIGallery/darknet-tools','darknet-tools')
print('Done!')
image.png

4.3 简单配置数据及训练参数

cd work
mv darknet-tools/VOC2007 darknet
mv darknet-tools/cfg/voc2007.data  darknet/cfg/voc2007.data
mv darknet-tools/data/test.txt darknet/data/test.txt
mv darknet-tools/data/train.txt darknet/data/train.txt
mv darknet-tools/data/val.txt darknet/data/val.txt
mv darknet-tools/data/voc.names darknet/data/voc.names
image.png

五、训练

训练时尽量先关闭其他任务,保证有充足的资源来运行训练任务

./darknet detector train cfg/voc2007.data cfg/yolov3.cfg ../darknet-tools/darknet53.conv.74
image.png

训练过程每隔100步保存一次训练结果yolov3_100.weights,900次以后就不再保存,而是存在yolov3.backup中,在训练结束时生成yolov3_final.weights。

六、预测

上传一张测试图片 test.jpg 到 darknet 目录下,执行以下命令进行预测:

./darknet detector test cfg/voc2007.data cfg/yolov3.cfg backup/yolov3_final.weights test.jpg

结果如下图:

参考链接

[1]  https://gitee.com/ModelArts/ModelArts-Lab/tree/master/docs/ModelArts%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C


点击“阅读原文”了解更多


“梦回童年,尽享美食“-- AI 识别童年美食

2021-06-01

快速获取数据集的秘诀居然是……

2021-06-01

前端可视化框架是怎样炼成的?

2021-03-28


浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报