有两种方式:拉取hub.docker上的镜像和自己在本地生成镜像。
$ sudo docker pull gouchicao/darknet:latest-gpu
- 下载Darknet的源代码和基于Imagenet的预训练模型darknet53
$ ./get_darknet.sh
- 构建镜像
$ sudo docker build -f Dockerfile.gpu -t gouchicao/darknet:latest-gpu .
- 测试
$ sudo docker run --runtime=nvidia --rm gouchicao/darknet:latest-gpu ./darknet
usage: ./darknet <function>
$ sudo docker pull gouchicao/darknet:latest
- 下载Darknet的源代码和基于Imagenet的预训练模型darknet53
$ ./get_darknet.sh
- 构建镜像
$ sudo docker build -f Dockerfile.cpu -t gouchicao/darknet:latest .
- 测试
$ sudo docker run --rm gouchicao/darknet:latest ./darknet
usage: ./darknet <function>
-
训练前的数据准备
- 工程目录结构
project/ # 工程根目录 ├── cfg # 配置目录 │ └── voc.names # 标签名 ├── images # 样本 │ ├── ... │ └── ... ├── labels # YOLO标注格式 │ ├── ... │ └── ... └── test # 训练完后用于测试(非必须) ├── ... └── ...
- 举例:这里以platen-switch为例
platen-switch/ ├── cfg │ └── voc.names ├── images │ ├── IMG_9255.JPG │ ├── IMG_9263.JPG │ ├── IMG_9266.JPG │ └── IMG_9280.JPG ├── labels │ ├── IMG_9255.txt │ ├── IMG_9263.txt │ ├── IMG_9266.txt │ └── IMG_9280.txt └── test ├── IMG_9256.JPG └── IMG_9271.JPG
-
运行darknet容器
运行CPU版本不需要加
--runtime=nvidia
,镜像使用gouchicao/darknet:latest
- 将工程目录作为挂载点绑定到容器
# 使用您的工程绝对路径设置变量 project_dir $ project_dir='/home/wjunjian/github/gouchicao/darknet/model-zoo/platen-switch' $ sudo docker run --runtime=nvidia -it --name=darknet \ --volume=$project_dir:/darknet/project \ gouchicao/darknet:latest-gpu
-
创建工程,用于模型训练
- 创建工程,自动生成训练前需要的数据
$ python3 create_project.py
- 创建后的目录结构
platen-switch/ ├── backup # 存储模型训练时权重值 ├── cfg │ ├── train.txt # 存储用于训练的图像路径 │ ├── valid.txt # 存储用于验证的图像路径 │ ├── voc.data # 配置文件 │ ├── voc.names │ └── yolov3.cfg # YOLOv3神经网络文件 ├── data │ └── labels # 预测时,用来绘制标签名 │ ├── 100_0.png │ ├── ... │ ├── 99_7.png │ └── make_labels.py ├── images │ ├── IMG_9255.JPG │ ├── IMG_9263.JPG │ ├── IMG_9266.JPG │ └── IMG_9280.JPG ├── labels │ ├── IMG_9255.txt │ ├── IMG_9263.txt │ ├── IMG_9266.txt │ └── IMG_9280.txt ├── predict # 用来保存预测的图片 └── test ├── IMG_9256.JPG └── IMG_9271.JPG
-
配置超参数
- 编辑YOLO神经网络文件:yolov3.cfg
20行:max_batches = 2000 # 训练的轮数 603行:filters=21 # (classes + 5)*3 classes指cfg/voc.data中的值 610行:classes=2 689行:filters=21 # (classes + 5)*3 696行:classes=2 776行:filters=21 # (classes + 5)*3 783行:classes=2
-
训练模型
$ cd /darknet/project/ $ ../darknet detector train cfg/voc.data cfg/yolov3.cfg ../darknet53.conv.74 # 使用多GPU训练 $ ../darknet detector train cfg/voc.data cfg/yolov3.cfg ../darknet53.conv.74 -gpus 0,1,2,3
-
测试模型
$ ../darknet detector test cfg/voc.data cfg/yolov3.cfg backup/yolov3_final.weights test.jpg
模型部署详见darknet-serving
- 运行命令generate_model_deploy_data.py
$ cd /darknet/
$ python3 generate_model_deploy_data.py
- 生成模型数据的目录结构
platen-switch/
└── model
├── voc.data
├── voc.names
├── yolov3.cfg
└── yolov3_final.weights