(linux+cpu)YOLOv3训练自己的数据

本文介绍了如何在Linux环境下利用YOLOv3训练自己的数据集。首先,从官方下载YOLOv3并进行初步检测。接着,详细描述了创建数据集结构、图片重命名、使用labelImg进行标注、生成train和test文本文件的过程。然后,下载并修改voc_label.py文件进行标注转换,并下载预训练模型。最后,修改配置文件并开始训练,解决了训练过程中的错误问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.下载官网的YOLOv3,打开终端输入:git clone https://github.com/pjreddie/darknet

下载完成之后,输入:cd darknet,然后再输入:make,

make完成之后,下载预先训练的weights文件,通过在终端里输入:wget https://pjreddie.com/media/files/yolov3.weights,然后就可以运行检测器了,在终端里输入:./darknet detect cfg/yolov3.cfg yolov3.weights data/doa.jpg(这条命令得在darknet目录下运行),会得到这样的结果:

2.开始训练自己的数据

(1)在darknet目录下新建一个voc命名的文件夹,voc文件夹里新建VOCdevkit文件夹,在VOCdevkit文件夹里新建VOC2018文件夹,在VOC2018文件夹下新建Annotations,ImageSets,JPEGImages,SegmentationClass,SegmentationObject这五个文件夹,在ImageSets文件夹下新建Main文件夹。其中Annotations里存放所有标注了图片的xml文件,JPEGImages文件夹里存放所有的图片,Main中放train.txt和test.txt,至于SegmentationClass,SegmentationObject这两个文件夹我没有用到。

(2)图片重命名,使用VOC的命名方式,这种:000012。重命名代码如下,根据自己的路径修改后就可以用:

# -*- coding: utf-8 -*-
import os
path = "/home/f/image/Aft_Original_Crack_DataSet_Second"
filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)
count=0
for file in filelist:
    print(file)
for file in filelist:   #遍历所有文件
    Olddir=os.path.join(path,file)   #原来的文件路径
    if os.path.isdir(Olddir):   #如果是文件夹则跳过
        continue
    filename=os.path.splitext(file)[0]   #文件名
    filetype=os.path.splitext(file)[1]   #文件扩展名
    Newdir=os.path.join(path,str(count).zfill(6)+filetype)  #用字符串函数zfill 以0补全所需位数
    os.rename(Olddir,Newdir)#重命名
    count+=1

(3)标注图片,我使用的是labelImg。下载网址:https://github.com/tzutalin/labelImg

下载完成之后,再根据这个网址里面的安装方法进行

### 使用 YOLOv7 在 Linux 环境下训练自定义数据集 要在 Linux 环境下使用 YOLOv7 训练自定义数据集,可以按照以下方法操作: #### 一、准备开发环境 确保已安装 Python 和 PyTorch。如果尚未配置,请先完成这些依赖项的安装。 ```bash sudo apt update && sudo apt upgrade -y sudo apt install python3-pip git -y pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` #### 二、克隆 YOLOv7 仓库并安装依赖 下载官方 YOLOv7 的 GitHub 项目,并安装所需的库文件。 ```bash git clone https://github.com/WongKinYiu/yolov7.git cd yolov7 pip3 install -r requirements.txt ``` #### 三、标注工具与数据集准备 为了训练模型,需要准备好带有标签的数据集。推荐使用 LabelImg 工具来手动标注图像[^3]。 ##### 安装 LabelImg ```bash sudo apt-get install pyqt5-dev-tools sudo pip3 install labelimg labelImg ``` 通过该工具生成符合 YOLO 格式的 `.txt` 文件作为目标框坐标。 #### 四、整理数据结构 将标注好的图片及其对应的标签存放在指定路径中,通常分为 `train` 和 `val` 子目录。例如: ``` dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/ ``` #### 五、编写 YAML 配置文件 创建一个描述数据分布和类别的 YAML 文件,命名为如 `custom_dataset.yaml`: ```yaml train: ../dataset/images/train # 训练集位置 val: ../dataset/images/val # 测试集位置 nc: 2 # 类别数量 (比如猫狗分类则为2) names: ['cat', 'dog'] # 各类别名称列表 ``` #### 六、调整预训练权重与超参数设置 从官方资源获取预训练权重文件(如 `yolov7.pt`) 并放置到工作目录里;或者也可以选择不加载任何初始权值而随机初始化网络层。 编辑 `hyp.scratch.custom.yaml` 来定制化一些优化器选项以及损失函数系数等高级设定。 #### 七、启动训练过程 运行下面脚本即可开始基于上述准备工作执行实际训练流程: ```bash python3 train.py --workers 4 \ --device 0 \ --batch-size 16 \ --data custom_dataset.yaml \ --cfg cfg/training/yolov7-custom.yaml \ --weights '' \ --name yolov7_custom_run_1 \ --epochs 50 ``` 其中各主要参数解释如下: - `--workers`: 数据载入线程数; - `--device`: GPU ID 或 CPU (`cpu`); - `--batch-size`: 批次大小; - `--data`: 自定义数据集配置文件地址; - `--cfg`: 模型架构定义文件名; - `--weights`: 可选填入已有 checkpoint 路径实现迁移学习; - `--name`: 输出日志保存子文件夹命名; - `--epochs`: 总迭代轮次数目。 --- ### 注意事项 在多卡环境中可能还需要额外考虑分布式训练策略等问题[^1]^,^[^2]^。 若遇到显存不足的情况,则适当降低批量尺寸或将输入分辨率缩小至更小尺度再尝试重新计算一次完整的 epoch 周期内的平均梯度更新效果更好些。 ---
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值