Win10下用pytorch-yolov3训练自己的数据集(一)

先声明自己电脑配置

win10 ;显卡型号:GeForce GTX 960 ;显存:2G

看了很多博客大部分博主都说显存至少4G才可以跑,我的是2G,目前也可以跑,可能是数据集比较少只有二十几张图片,而且需要改一些参数,后面会来介绍。

代码链接:https://github.com/ultralytics/yolov3

环境(划重点,一定要按代码里边要求的版本)

我的环境

pytorch1.5.0 、pycocotools、vs2017(v140一定要勾上)等等

  1. 其他的都是利用anaconda自动装的,anaconda会自动匹配合适的版本,或者跑程序会提示你少了哪些包
  2. pycocotools很难装,参考这位博主的解决办法,亲测有用
  3. pytorch一定要>=1.4.0,我就是装了1.1.0和1.2.0结果报错,最后只能重新装,而且安装过程比较曲折,安装了无数次才装好,如果你装不好,就多试几次
  4. 在没有安装vs2017之前报错,具体报错内容我忘记了,但是百度之后说是需要vs2017,vs2017安装需要注意下面箭头部分,一定要勾选
    在这里插入图片描述

有一点还不太懂:

我自己电脑CUDA10.0版本,但是pytorch1.5.0对应的CUDA版本应该是10.1,在用conda install pytorch=1.5.0时,会自动下载一个cudatoolkit 10.1.243,然后也就可以用了,不用我自己再给电脑重新再装CUDA10.1

接下来就是下载代码,框图等等一系列

1.准备自己的数据集,用labelimg框图,这个可以自行百度,有很多介绍这个的,但是有一点需要注意的就是,框图之前先给数据集规范下名称代码如下:

import os
#使用python规范化图片名称

class BatchRename():

    # 定义函数执行图片的路径
    def __init__(self):
        self.path = 'D:/image/1'  # 修改为自己的图片路径

    # 定义函数实现重命名操作
    def rename(self):
        filelist = os.listdir(self.path)
        total_num = len(filelist)
        i = 0
        for item in filelist:
            if item.endswith('.jpg'):
                src = os.path.join(os.path.abspath(self.path), item)
                dst = os.path.join(os.path.abspath(self.path), str(i).zfill(6) + '.jpg')
                try:
                    os.rename(src, dst)
                    print('converting %s to %s ...' % (src, dst))
                    i = i + 1
                except:
                    continue
        print('total %d to rename & converted %d jpgs' % (total_num, i))


# 主函数调用
if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()

2.我的数据集格式
在这里插入图片描述
创建自己的数据集参考这位博主的3.3–3.7步骤
3.修改cfg文件
由于我的显存比较小,所以用体量小的yolov3-tiny.cfg,主要修改了两个yolo层附近的参数,一共六处地方(已经在下边的代码中标出来了)
我的只有一类person,所以classes=1,filters=18:即3*(classes+5),单类的话classes=1,GPU显存较小,可以设置将random=0,即关闭多尺度

yolov3-tiny.cfg 修改后如下,也可直接复制

[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=2
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.001
burn_in=1000
max_batches = 500200
policy=steps
steps=400000,450000
scales=.1,.1

[convolutional]
batch_normalize=1
filters=16
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=1

[convolutional]
batch_normalize=1
filters=1024
size=3
stride=1
pad=1
activation=leaky

###########

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=512
size=3
stride=1
pad=1
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=18 #修改
activation=linear



[yolo]
mask = 3,4,5
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=1 #修改
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=0 #修改

[route]
layers = -4

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[upsample]
stride=2

[route]
layers = -1, 8

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=18#修改
activation=linear

[yolo]
mask = 1,2,3
anchors = 10,14,  23,27,  37,58,  81,82,  135,169,  344,319
classes=1#修改
num=6
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=0#修改

4.配置预权重
训练用的是yolov3-tiny模型,对应的就需要yolov3-tiny.conv.15
yolov3-tiny.weightsyolov3-tiny.conv.15导入weights目录下,官网没有提供yolov3-tiny.conv.15,需要在谷歌云盘下载,我已经下载好了,提供给大家

链接:https://pan.baidu.com/s/1GdCFQ0q7Hiki179BeRDlIA 提取码:dq7w

训练模型:

使用pycharm中的Terminal,输入如下命令:

python train.py --data data/person.data --cfg cfg/yolov3-tiny.cfg --epoch 10 --batch-size 1 --weights weights/yolov3-tiny.conv.15 

其中,–epochs 10指迭代了10次,batch-size 1指每次处理1张图片。

训练结束后在weights文件夹下得到best.ptlast.pt两个文件
在这里插入图片描述

结果检测:

在Terminal下输入以下命令:

python detect.py --names data/person.names --cfg cfg/yolov3-tiny.cfg --weights weights/best.pt

注意:这里是--names data/person.names这样的,好多博客都是用的person.data文件,是不对的
检测的输出结果会在output文件夹中,如下,我的数据集太少迭代的次数也少,所以精度并不好
在这里插入图片描述

注意注意:

如果检测的结果没有框,可以修改detect.py文件夹下的这个位置
在这里插入图片描述
--conf-thes的默认值改小一点,我改成了0.1,就显示出来了

模型评估与测试

在Terminal下输入以下命令:

python test.py --data data/person.data --cfg cfg/yolov3-tiny.cfg --weights weights/last.pt

可视化

python -c "from utils import utils; utils.plot_results()"

同时,文件夹的主目录下会多出一个results.png,显示了模型的可视化训练结果,由于我的数据集只有一类,所以cla没有数据。
在这里插入图片描述

至此,yolov3算是可以跑了,后续还要多弄些数据集再调整调整,毕竟精度太低了

  • 5
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值