本文主要是介绍跑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 randomrandom.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 joinsets = ['train', 'val']#classes = ["RBC"]#我们只是检测细胞,因此只有一个类别
classes = ["一次性快餐盒", "书籍纸张", "充电宝", "剩饭剩菜", "包", "垃圾桶", "塑料器皿","塑料玩具", "塑料衣架", "大骨头", "干电池", "快递纸袋", "插头电线", "旧衣服", "易拉罐","枕头", "果皮果肉", "毛绒玩具", "污损塑料", "污损用纸", "洗护用品", "烟蒂", "牙签","玻璃器皿", "砧板", "筷子", "纸盒纸箱", "花盆", "茶叶渣", "菜帮菜叶", "蛋壳","调料瓶", "软膏", "过期药物", "酒瓶", "金属厨具", "金属器皿", "金属食品罐", "锅","陶瓷器皿", "鞋", "食用油桶", "饮料瓶", "鱼骨"]def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (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').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_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')continueout_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
这篇关于跑yolov4的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!