Ubuntu18.04下YOLOv3训练数据集
时间: 2025-07-10 22:37:11 浏览: 16
<think>好的,我现在需要帮助用户解决在Ubuntu 18.04上使用YOLOv3训练自定义数据集的问题。首先,我要回顾用户提供的引用内容,确保回答准确。用户提到了引用[1]和引用[2],其中引用[1]详细介绍了在Ubuntu 18.04上用CPU训练YOLOv3的步骤,包括下载编译darknet、修改配置文件、训练和测试过程。引用[2]提到了YOLOv4的训练命令,但用户问的是YOLOv3,可能需要调整相关参数。
首先,我需要整理出训练YOLOv3的基本步骤。根据引用[1],步骤包括下载编译darknet、准备数据集、修改配置文件、训练模型。用户可能需要从数据准备开始,包括标注数据,生成对应的.txt文件和路径配置。然后,修改配置文件如obj.data、yolov3.cfg,确保类别数正确,调整参数如batch、subdivisions。接下来是下载预训练权重,执行训练命令,可能还需要训练过程的可视化,比如使用-map选项,这在引用[2]中提到过,但需要确认是否适用于YOLOv3。
需要注意的是,用户提到的是Ubuntu 18.04,所以环境配置方面可能需要安装CUDA、OpenCV等依赖,但引用[1]中用户使用CPU训练,但通常训练YOLOv3需要GPU加速。不过用户的问题可能只是针对方法,不涉及硬件细节。但需要指出如果使用GPU,可能需要安装CUDA和cuDNN,而如果使用CPU,训练速度会很慢,可能建议使用yolov3-tiny,如引用[1]提到的。
另外,数据集准备的步骤可能包括将图片和标注文件组织成train和val目录,创建train.txt和val.txt文件,指定路径。然后修改obj.data文件中的类别数目和路径。修改网络配置yolov3.cfg,将每个[yolo]层前的卷积层的filters数目调整为(classes + 5)*3,classes是类别数,并调整每个[yolo]层的classes参数。
训练命令方面,引用[1]提到使用darknet detector train命令,而引用[2]中的YOLOv4命令可能类似,但预训练权重不同。YOLOv3通常使用darknet53.conv.74作为预训练权重,需要下载。训练时可能需要指定这个权重文件。
可能还需要监控训练过程,比如生成图表,使用-map选项来显示mAP曲线,但需要确认YOLOv3是否支持这个选项,或者是否需要额外配置。
此外,用户可能需要测试训练好的模型,用detector test命令,并调整阈值等参数。最后,部署到其他平台如树莓派时,可能需要转换模型格式或使用更轻量的模型如yolov3-tiny,但用户的问题主要集中在训练步骤,这部分可能不需要深入。
总结步骤:1. 环境准备(安装darknet,依赖项);2. 数据集准备与配置;3. 修改配置文件;4. 下载预训练权重;5. 执行训练命令;6. 测试模型。需要确保每个步骤的命令正确,路径正确,特别是用户可能遇到的常见问题,比如路径错误、类别数未修改导致的问题,或者显存不足时调整batch大小等。
可能还需要提到如果训练过程中出现内存不足的情况,可以减小batch size或增加subdivisions,这在cfg文件中调整。此外,训练过程中生成的权重文件备份,以及如何恢复训练,如果中断的话。
最后,根据用户提供的引用,确保在回答中正确标注引用来源,例如编译darknet的部分引用[^1],训练命令参考了引用[^2]中的结构,但根据YOLOv3进行调整。</think>### 在 Ubuntu 18.04 上使用 YOLOv3 训练自定义数据集的步骤
#### 1. 环境准备
- **下载并编译 Darknet**
从官方仓库克隆代码并编译(需提前安装 `git` 和 `make`):
```bash
git clone https://github.com/pjreddie/darknet
cd darknet
make
```
若需 GPU 支持,需修改 `Makefile` 中的 `GPU=1` 并安装 CUDA 和 cuDNN。
#### 2. 数据集准备
- **标注数据**
使用工具(如 LabelImg)生成标注文件(每张图片对应一个 `.txt` 文件,格式为 `class_id x_center y_center width height`)。
- **组织文件结构**
创建以下目录:
```
custom_data/
├── train/
│ ├── images/
│ └── labels/
├── valid/
│ ├── images/
│ └── labels/
└── obj.names # 类别名称列表
```
- **生成路径文件**
创建 `train.txt` 和 `valid.txt`,分别包含训练集和验证集图片的绝对路径。
#### 3. 配置文件修改
- **创建 `obj.data`**
内容示例:
```text
classes = 2 # 类别数
train = /path/to/train.txt
valid = /path/to/valid.txt
names = obj.names
backup = backup/ # 权重保存路径
```
- **修改 YOLOv3 网络配置**
复制 `cfg/yolov3.cfg` 并调整以下参数:
- `batch=64`(根据显存调整)
- `subdivisions=16`(显存不足时增大此值)
- 每个 `[yolo]` 层前的 `[convolutional]` 层中 `filters=(classes + 5) * 3`(例如类别数为 2,则 `filters=21`)
- 每个 `[yolo]` 层中的 `classes=2`。
#### 4. 下载预训练权重
使用以下命令下载预训练权重:
```bash
wget https://pjreddie.com/media/files/darknet53.conv.74
```
#### 5. 开始训练
执行训练命令:
```bash
./darknet detector train obj.data yolov3-custom.cfg darknet53.conv.74 -map
```
- `-map` 选项会实时计算 mAP(需编译时启用 OpenCV)[^2]。
- 训练日志保存在 `backup/` 目录,权重每 1000 迭代保存一次。
#### 6. 测试模型
使用训练好的权重进行推理:
```bash
./darknet detector test obj.data yolov3-custom.cfg backup/yolov3-custom_final.weights test_image.jpg
```
#### 关键优化建议
- **轻量化模型**:若部署到资源受限设备(如树莓派),改用 `yolov3-tiny` 并调整对应配置文件[^1]。
- **训练监控**:使用 `-dont_show` 配合 `mjpeg` 流可在远程服务器实时查看训练状态。
阅读全文
相关推荐


















