跑yolov4

https://github.com/ultralytics/yolov3
跑这个网络

对于自己的数据 可以先复制到data这个文件夹中,为了后续制作数据做准备
1 先克隆这个仓库到服务器上
2 cd yolov3/data
3 mv /home/dell/下载/trainval4/trainval/VOC2007/JPEGImages/ .
4 查看数据量的多少
ls -lR | grep "^-" | wc -l
5

`mv JPEGImages/ images``
//  改名字 将JPEGImages 改为images

6

sudo mv /home/dell/下载/trainval4/trainval/VOC2007/Annotations/ .
// 移动Annotations

7 因为我这里的数据的xml进行了修改

sudo cp /home/wanliu/annotations-finished/*xml .
// 所以我这里进行了复制 

在这里插入图片描述
8

mkidr ImageSet

在yolov3的文件夹中 新建make.py文件 代码内容如下

mport os
import random

random.seed(42)

val_percent = 0.1
train_percent = 0.9
xmlfilepath = 'data/Annotations'
txtsavepath = 'data/ImageSets'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * val_percent)
val = random.sample(list, tv)  # 从list中选10%作为验证集大小

ftrain = open('data/ImageSets/train.txt', 'w')
fval = open('data/ImageSets/val.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in val:
        fval.write(name)
    else:
        ftrain.write(name)

ftrain.close()
fval.close()

运行nake.py文件 在ImageSet文件中得到train.txt val.txt
在这里插入图片描述
9 制作lable文件 在yolov3的文件夹中 新建voc_label.py文件 代码内容如下

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
 
sets = ['train', 'val']
 
#classes = ["RBC"]#我们只是检测细胞,因此只有一个类别
classes = ["一次性快餐盒", "书籍纸张", "充电宝", "剩饭剩菜", "包", "垃圾桶", "塑料器皿",
           "塑料玩具", "塑料衣架", "大骨头", "干电池", "快递纸袋", "插头电线", "旧衣服", "易拉罐",
           "枕头", "果皮果肉", "毛绒玩具", "污损塑料", "污损用纸", "洗护用品", "烟蒂", "牙签",
           "玻璃器皿", "砧板", "筷子", "纸盒纸箱", "花盆", "茶叶渣", "菜帮菜叶", "蛋壳",
           "调料瓶", "软膏", "过期药物", "酒瓶", "金属厨具", "金属器皿", "金属食品罐", "锅",
           "陶瓷器皿", "鞋", "食用油桶", "饮料瓶", "鱼骨"]
 
 
def convert(size, box):
    dw = 1. / size[0]
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)
 
 
def convert_annotation(image_id):
    in_file = open('data/Annotations/%s.xml' % (image_id))
    out_file = open('data/labels/%s.txt' % (image_id), 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    if w == 0 or h == 0:
        print(image_id)
    
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        bb = convert((w, h), b)
        if bb[0] > 1 or bb[1] > 1 or bb[2] > 1 or bb[3] > 1:
            print('oh no')
            continue
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
 
 
wd = getcwd()
print(wd)
for image_set in sets:
    if not os.path.exists('data/labels/'):
        os.makedirs('data/labels/')
    image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()
    list_file = open('data/%s.txt' % (image_set), 'w')
    for image_id in image_ids:
        if image_id == '':
            continue  
        list_file.write('data/images/%s.jpg\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()

这样在data文件夹中会得到train.txt val.txt 和label文件夹
在这里插入图片描述

10 查看仓库的一些要求

cat requirements.txt 
pip install -r requirements.txt
进行下载

11 创建 my.data my.names

vi my.data
内容如下
classes=44
train=data/train.txt
valid=data/val.txt
names=data/my.names
backup=backup/
eval=coco
vi my.names
内容如下
一次性快餐盒
书籍纸张
充电宝
剩饭剩菜
包
垃圾桶
塑料器皿
塑料玩具
塑料衣架
大骨头
干电池
快递纸袋
插头电线
旧衣服
易拉罐
枕头
果皮果肉
毛绒玩具
污损塑料
污损用纸
洗护用品
烟蒂
牙签
玻璃器皿
砧板
筷子
纸盒纸箱
花盆
茶叶渣
菜帮菜叶
蛋壳
调料瓶
软膏
过期药物
酒瓶
金属厨具
金属食品罐
锅
陶瓷器皿
鞋
食用油桶
饮料瓶
鱼骨

12 再去修改 yolov4-relu.cfg里面的内容

[convolutional]
size=1
stride=1
pad=1
filters=147  // 修改后 3 * (5 + len(classes))
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=44 // 修改后
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
scale_x_y = 1.1
iou_thresh=0.213
cls_normalizer=1.0
iou_normalizer=0.07
iou_loss=ciou
nms_kind=greedynms
beta_nms=0.6

这里修改的内容 是 含有yolo的里面的一些修改及只有这个yolo上面的convolutional的修改。
13 这里我使用的weight是自己找的 因为在这个仓库中 没有yolov4的预训练模型 所以 我们重新找了个
https://github.com/AlexeyAB/darknet
在这个里面 然后下载yolov4的预训练模型

14 进行训练

python train.py --data my.data --weights weights/yolov4-relu.pt --batch-size 12 --cfg yolov4-relu.cfg --device 0,1,2,3

15 进行测试 在跑迭代的时候 会生成last.pt和best.pt两个文件 可以进行测试

python test.py --cfg yolov4-relu.cfg --weights weights/best.pt --img 544 --augment --data my.data 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值