YOLOV3用自己的数据集训练

主要参考:https://www.cnblogs.com/answerThe/p/11481564.html

                   https://www.aiuai.cn/aifarm1097.html


官网有制作YOLO的教程,非常详细


做数据集就不用多说了

用pip install labelImg 安装:

发送桌面,用改python.exe默认打开。

      

使用labelImg使用YOLO格式标记:

 

得到这个样子:

用下面代码抽训练测试集,这边注意test.txt也要放点数据进去:

import glob
import  os

imgs_dir = os.getcwd()
print(imgs_dir)

#用作 test 的图片数据的比例
percentage_test = 10;

#创建训练数据集和测试数据集:train.txt 和 test.txt
file_train = open('train.txt', 'w')
file_test = open('test.txt', 'w')

counter = 1
index_test = round(100 / percentage_test)
for pathAndFilename in glob.iglob(os.path.join(imgs_dir, "*.jpg")):
    title, ext = os.path.splitext(os.path.basename(pathAndFilename))

    if counter == index_test:
        counter = 1
        file_test.write(imgs_dir + "/" + title + '.jpg' + "\n")
    else:
        file_train.write(imgs_dir + "/" + title + '.jpg' + "\n")
        counter = counter + 1

这个是代码结果: 

接下来是链接这个数据集:

建一个新的数据集:

把刚才所有资料拷贝过来,把class.txt  改成 【目标】.names:

进入config文件夹,把这两个文件各拷贝一份改名字:

datapart1.data改对应路径:

datapart1yolov3.cfg改对应类别,我的类别是3,这里注意不能用中文等等会出现编码错误,这里要注意下面这种修改一共要3次:

[net]
# Testing
# batch=1        #这里的batch跟subdivisions原来不是注释掉的,但是训练后没成功,有的blog上说为1的时候太小难以收敛,但是不知道下面训练模式的 batch=64 subdivisions=8 会不会覆盖掉,总之注释掉后就成功了,不过这个脚本不是很明白,还来不及验证 
# subdivisions=1
# Training
 batch=64            
 subdivisions=8    
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改为3*(classes+5)即3*(5+5)=30
activation=linear
[yolo]
mask = 6,7,8
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改为标签类别个数,5类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0            #1,如果显存很小,将random设置为0,关闭多尺度训练;(转自别的blog,还不太明白)
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改同上
activation=linear
 
[yolo]
mask = 3,4,5
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改同上
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0       
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改同上
activation=linear
 
[yolo]
mask = 0,1,2
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改同上
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0        

改对应如今进行训练,路径记得改:

python train.py --model_def config/datapart1yolov3.cfg --data_config config/datapart1.data  --pretrained_weights weights/darknet53.conv.74

出现这个错误,是训练标签不对应,我这边是对应路径错了,照成了还是链接到之前的数据: 

  File "D:\PyTorch-YOLOv3-master\utils\utils.py", line 317, in build_targets
    class_mask[b, best_n, gj, gi] = (pred_cls[b, best_n, gj, gi].argmax(-1) == target_labels).float()
RuntimeError: CUDA error: device-side assert triggered

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值