YOLOv3 pytorch版本 训练自己的数据集+加se/cbam注意力

\1)下载源代码(现在有cfg版本的代码已不再维护) https://github.com/ultralytics/yolov3 \2) 下载 yolov3-tiny 权重文件并将其放在/weights 文件夹中 https://pjreddie.com/media/files/yolov3-tiny.weights \3) 运行编辑软件如 vscode spyder 打开 detect.py

 

推理画不出框(图片中不能框选)的问题解决办法:

  1. 打开detect.py代码,在第32行加一句half = False

  2. 运行命令:python detect.py --cfg cfg/yolov3-tiny.cfg --weights weights/yolov3-tiny.weights

成功:

 

训练自己的数据集

数据集整理

在yolov3代码中的data文件夹中创建三个新的文件夹:

 

Annotations中放.xml文件;JPEGImages放.jpg格式图片;

在 yolov3代码根目录下创建一个 MakeTxt.py,将数据集分成训练集,测试集和验证集,其中比例可以在代码设置,代码参考:

YOLOV3训练自己的数据集(PyTorch版本)_mumumuyanyanyan的博客-CSDN博客_pytorch yolov3训练自己的数据集

运行成功后你会在 yolov3-master/data/imageSets 文件夹中得到 4 个 txt 文件:

 

在 yolov3代码根目录下创建一个voc_label.py,代码参考上个网址 ,其中:

  1. 将 classes 中改成自己的

  2. 将 data 文件夹中 JPEGimages 文件夹改名为 images 或者将代码中 images 改成 JPEGimages, 保证文件名与程序统一即可。【重点】

  3.  

  4. 运行程序,成功后得到 labels 文件夹,以及在 data 目录下 train.txt, test.txt, val.txt,这里的 train.txt 与之前的区别在于,不仅仅得到文件 名,还有文件的具体路径

配置文件

1) 在 data 目录下创建 UAV-05-2021.data内容如下:(最后一行最好有一行回车)

 

2) 在 data 目录下创建 uav-classes.names内容如下:(最后一行最好有一行回车)

 

3) 修改 cfg 文件中 yolov3-tiny.cfg

yolov3-tiny.cfg中有两个classes和两个在yolo层上面的filters都要改成自己的,filters=3x(n+5),例如:本文数据集classes=5;filters=3x(5+5)=30【重点】

4) 修改 train.py 中

3) 在文件夹目录下使用 cmd 命令

 

python train.py --data data/UAV-05-2021.data --cfg cfg/yolov3-tiny.cfg --epochs 100 

报错:

 

在对total_ops进行赋值之前,先用global关键字将total_ops变成一个全局变量,这样设置之后,编译器就会看到total_ops已经在函数之外定义过了,所以就不会报错。

解决方法:按住ctrl点击鼠标,跳到划红线的.py,找到total_ops,在前面加一句global total_ops,代码如下 :

 

报错:

 

解决方法:yolov3-tiny.cfg中的参数没改完,有两个classes和两个在yolo层上面的filters都要改成自己的,filters=3x(n+5),例如:本文数据集classes=5;filters=3x(5+5)=30 再次运行:

python train.py --data data/UAV-05-2021.data --cfg cfg/yolov3-tiny.cfg --epochs 100 --device cpu

训练ing:

 

训练完了

 

训练参数意义: 896 代表训练图片数量, 772 代表检测到的目标数量(在这里代指人); 参数 P 是(精确率) percision 的缩写表示预测正率; R 是召回率(recall)的缩写, 表示预测正确占实际正确的比例; mAP 是平均精确度(mean Average Precision) 的缩写; F1 表示 F-score 相当于 precision 和 recall 的调和平均, recall 和 precision 任何 一个数值减小, F-score 都会减小,反之,亦然。

 

参数详解参考: 机器学习:准确率(Precision)、召回率(Recall)、F值(F-Measure)、ROC曲线、PR曲线_nana-li的博客-CSDN博客_准确率计算公式

训练完成后生成根目录下的: results.png test_batch0.png train_batch0.png

并得到训练好的模型权重保存至 weights/best.pt last.pt

测试

1384张图,五类标签,测试集:训练集=2:8

先改test.py里的batch_size=1;num_workers=0

然后运行:

python test.py --data data/UAV-05-2021.data --cfg cfg/yolov3-tiny.cfg --weights weights/last.pt

YOLOv3 pytorch 版本加注意力se

Darknet中的forward函数不要改,其他参考【从零开始学习YOLOv3】7. 教你在YOLOv3模型中添加Attention机制 - pprp - 博客园

1.需要修改parse_config.py中的部分内容(supported改为如下):

supported = ['type', 'batch_normalize', 'filters', 'size',\
            'stride', 'pad', 'activation', 'layers', \
            'groups','from', 'mask', 'anchors', \
            'classes', 'num', 'jitter', 'ignore_thresh',\
            'truth_thresh', 'random',\
            'stride_x', 'stride_y',\
            'ratio', 'reduction', 'kernelsize']

2.将如下模块的代码,添加到models.py文件中:

class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )
​
    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

3.设计cfg文件

yolov3-tiny.cfg为baseline

还有有两个classes和两个在yolo层上面的filters都要改成自己的,filters=3x(n+5),例如:本文数据集classes=5;filters=3x(5+5)=30

4.模型构建

以上都是准备工作,我们还需要修改model.py文件中的模型加载部分,让其正常发挥作用。

model.py中的create_modules函数中进行添加:

        elif mdef['type'] == 'se':
            modules.add_module(
                'se_module',
                SELayer(output_filters[-1], reduction=int(mdef['reduction'])))

不要修改Darknet中的forward部分的函数!!!

然后训练:

python train.py --data data/UAV-05-2021.data --cfg cfg/yolov3-tiny-se.cfg --epochs 100 --device cpu

测试:

python test.py --data data/UAV-05-2021.data --cfg cfg/yolov3-tiny-se.cfg --weights weights/last.pt

YOLOv3 pytorch 版本加注意力cbam

修改cfg文件、supported中的字段、class就按照网上的来,参考:【从零开始学习YOLOv3】7. 教你在YOLOv3模型中添加Attention机制 - pprp - 博客园

模型构建:(注意这里和网上教程不一样)

1.不要改Darknet中的forward部分的函数!!

2.在model.py中的create_modules函数中进行添加:

        elif mdef['type'] == 'cbam':
            modules.add_module(
                'cbam_module',
                SpatialAttention( kernel_size=int(mdef['kernelsize'])))

然后训练:

python train.py --data data/UAV-05-2021.data --cfg cfg/yolov3-tiny-cbam.cfg --epochs 100 --device cpu

结果就在根目录下面

测试:

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
根据提供的引用内容,训练自己的数据集可以按照以下步骤进行: 一、制作数据集 1. 打标签:对于每张图片,使用标注工具对目标物体进行标注,生成相应的标签文件。 2. 数据扩充:可以对数据集进行数据增强操作,如旋转、缩放、平移等,以增数据的多样性。 3. 数据格式转换:将标签文件和图像文件转换为模型所需的特定格式,如YOLOv5所需的txt或csv格式。 二、输入网络训练 1. 修改配置文件:根据自己的数据集训练需求,修改YOLOv5的配置文件,如调整网络结构、设置类别数等。 2. 修改训练文件:将制作好的数据集导入到训练文件中,并设置训练的超参数,如学习率、批大小等。 三、查看GPU训练进展:使用合适的GPU监控工具,如nvidia-smi,来查看训练过程中GPU的使用情况和训练进展。 四、优化训练进程 1. 分析原因:如果训练进程较慢,可以通过观察GPU和CPU的占用情况,分析瓶颈所在。 2. 解决问题:根据分析结果,采取相应的优化措施,如增CPU的计算能力、优化数据读取速度、调整模型的参数配置等。 五、检测自己的模型:训练完成后,使用训练得到的模型对测试集进行检测,评估模型的性能。 以上是利用YOLOv5训练自己的数据集的一般步骤。如果您需要更详细的步骤或者有其他相关问题,请提出。 相关问题: 1. YOLOv5的配置文件有哪些需要修改的参数? . 除了YOLOv5,还有哪些深度学习模型可以用来进行目标检测? 3. 如何评估训练得到的模型在测试集上的性能?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值