这里写自定义目录标题

1.修改训练代码

import os
import math
import time
import argparse
import numpy as np
from tqdm import tqdm
from numpy.testing._private.utils import print_assert_equalimport torch
from torch import optim
from torch.utils.data import dataset
from numpy.core.fromnumeric import shapefrom torchsummary import summaryimport utils.loss
import utils.utils
import utils.datasets
import model.detectorif __name__ == '__main__':# 指定训练配置文件parser = argparse.ArgumentParser()parser.add_argument('--data', type=str, default='./data/coco.data',help='Specify training profile *.data')opt = parser.parse_args()cfg = utils.utils.load_datafile(opt.data)print("训练配置:")print(cfg)train_dataset = utils.datasets.TensorDataset(cfg["train"], cfg["width"], cfg["height"], imgaug = True)val_dataset = utils.datasets.TensorDataset(cfg["val"], cfg["width"], cfg["height"], imgaug = False)batch_size = int(cfg["batch_size"] / cfg["subdivisions"])nw = min([os.cpu_count(), batch_size if batch_size > 1 else 0, 8])print(nw)train_dataloader = torch.utils.data.DataLoader(train_dataset,batch_size=batch_size,shuffle=True,collate_fn=utils.datasets.collate_fn,num_workers=nw,pin_memory=True,drop_last=True,persistent_workers=True)val_dataloader = torch.utils.data.DataLoader(val_dataset,batch_size=batch_size,shuffle=False,collate_fn=utils.datasets.collate_fn,num_workers=nw,pin_memory=True,drop_last=False,persistent_workers=True)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")load_param = Falsepremodel_path = cfg["pre_weights"]if premodel_path != None and os.path.exists(premodel_path):load_param = Truemodel = model.detector.Detector(cfg["classes"], cfg["anchor_num"], load_param).to(device)summary(model, input_size=(3, cfg["height"], cfg["width"]))# 加载预训练模型参数if load_param == True:model_dict = model.state_dict()pretrained_dict = torch.load(premodel_path, map_location=device)pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)}model_dict.update(pretrained_dict)model.load_state_dict(model_dict)print("Load finefune model param: %s" % premodel_path)else:print("Initialize weights: model/backbone/backbone.pth")optimizer = optim.SGD(params=model.parameters(),lr=cfg["learning_rate"],momentum=0.949,weight_decay=0.0005,)scheduler = optim.lr_scheduler.MultiStepLR(optimizer,milestones=cfg["steps"],gamma=0.1)print('Starting training for %g epochs...' % cfg["epochs"])batch_num = 0for epoch in range(cfg["epochs"]):model.train()pbar = tqdm(train_dataloader)for imgs, targets in pbar:imgs = imgs.to(device).float() / 255.0targets = targets.to(device)preds = model(imgs)iou_loss, obj_loss, cls_loss, total_loss = utils.loss.compute_loss(preds, targets, cfg, device)total_loss.backward()for g in optimizer.param_groups:warmup_num =  5 * len(train_dataloader)if batch_num <= warmup_num:scale = math.pow(batch_num/warmup_num, 4)g['lr'] = cfg["learning_rate"] * scalelr = g["lr"]if batch_num % cfg["subdivisions"] == 0:optimizer.step()optimizer.zero_grad()info = "Epoch:%d LR:%f CIou:%f Obj:%f Cls:%f Total:%f" % (epoch, lr, iou_loss, obj_loss, cls_loss, total_loss)pbar.set_description(info)batch_num += 1if epoch % 10 == 0 and epoch > 0:model.eval()print("computer mAP...")_, _, AP, _ = utils.utils.evaluation(val_dataloader, cfg, model, device)print("computer PR...")precision, recall, _, f1 = utils.utils.evaluation(val_dataloader, cfg, model, device, 0.3)print("Precision:%f Recall:%f AP:%f F1:%f"%(precision, recall, AP, f1))torch.save(model.state_dict(), "weights/%s-%d-epoch-%fap-model.pth" %(cfg["model_name"], epoch, AP))scheduler.step()

2.制作自己数据集

import cv2cap=cv2.VideoCapture(1)
i=1
while(cap.isOpened()):ret,f=cap.read()c=cv2.waitKey(1)cv2.imshow("f",f)if c==27:breakelif c==ord("q"):print(i)path="./data/"+str(i)+".jpg"cv2.imwrite(path,f)i+=1else:passcap.release()
cv2.destroyAllWindows()

3.采用labelimg打标签

pip install labelimg

4.数据处理

import xml.etree.ElementTree as et
import osclasses=["a","b"]def find_xml(path):'''找到一个文件夹下所有的xml文件,返回一个装这这些文件路径名的所有文件的列表'''file_list=os.listdir(path)xml_list=[]for file in file_list:if file.endswith(".xml"):xml_list.append(path+"/"+file)return xml_listdef xml2txt(path,x=640,y=480):xml_list=find_xml(path)for xml in xml_list:file=xml[:-4]txt=file+".txt"#xml文件解析器,将xml文件解析成元素树tree=et.parse(xml)#拿到树的根root=tree.getroot()with open(txt,'w') as f:#root.iter创建迭代器,寻找所有object的节点for obj in root.iter('object'):#按找标记名寻找匹配的第一个元素,text返回字符串cls = obj.find('name').textif cls not in classes:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text),int(xmlbox.find('ymax').text))w=float(b[2]-b[0])h=float(b[3]-b[1])center_x=float(b[0]+w/2)center_y=float(b[1]+h/2)d=[center_x/x,center_y/y,w/x,h/y]f.write(str(cls_id)+" "+" ".join([str(a) for a in d])+"\n")if __name__ == '__main__':xml2txt("./xml")

YOLO-zht训练-未完待续相关推荐

  1. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)

    Paper之BigGAN:ICLR 2019最新论文<LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS> ...

  2. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  3. RDataMining系列:Chapter 4 Decision Trees --决策树实现,未完待续

    ***************** 利用party来做决策树分类 ***************** 数据:iris data 目标: 利用Sepal.Length, Sepal.Width,Peta ...

  4. 阅读CariFaceParsing(未完待续。。。。)

    阅读CariFaceParsing(未完待续....) github 1. 数据集介绍 1.1 Helen_images 我们使用到的helen数据集从dataset链接中下载得到,(注意:我们下载的 ...

  5. 实现2020年TI杯大学生电子设计竞赛F题简易无接触温度测量、身份识别与口罩检测装置(未完待续)

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/109298042 本文目录 *实现2020 ...

  6. 《今日简史》读书笔记(未完待续)

    <今日简史>读书笔记(未完待续) 这本书是尤瓦尔·赫拉利的简史三部曲的最后一本,前2本书是<未来简史>和<人类简史>.根据豆瓣上网友的评价,这本书是尤瓦尔·赫拉利写 ...

  7. linux引数列项目过长,Linux 命令个人总结====== 未完待续 个人认为比较重要

    Linux 命令个人总结====== 未完待续 man [功能说明]: 查看帮助 [语法格式]: man [123456789]命令.文件. [选项参数]: 数字"1"表示用户命令 ...

  8. CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)

    目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...

  9. Windows x64内核学习笔记(五)—— KPTI(未完待续)

    Windows x64内核学习笔记(五)-- KPTI(未完待续) KPTI 实验一:构造IDT后门并读取Cr3 参考资料 KPTI 描述:KPTI(Kernel page-table isolati ...

最新文章

  1. 如何在Colab上实现近200万图片的精准检索匹配?
  2. Leetcode1705. 吃苹果的最大数目[C++题解]:贪心
  3. Paper:《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ∗》翻译并解读
  4. 命令行编译 WRK ,windbg 调试
  5. BGP重分布进IGP-EIGRP
  6. 如何在log4j.properties文件中使用相对路径
  7. QuickBooks和Sage数据导出器
  8. C++ cout格式化输出
  9. phpcmsV9-本地项目上线 - 踩坑篇
  10. 小波变换原理_基于电压行波原理故障测距的相关问题
  11. python电脑配置-Python--获取电脑配置信息--设计代码
  12. linux下搭建python机器学习环境
  13. 小程序方法-小程序获取上一页的数据修改上一个页面的数据
  14. Java中after注解_JUnit4中@Before、@After、@Test等注解的作用
  15. matlab一阶惯性滤波,为什么一阶惯性环节也具有滤波的作用
  16. sis地址发布器_Go 1.15 正式发布:看看都有哪些值得关注的变化
  17. 性能服务器漫画免费下拉式,热浪漫画_斗破苍穹漫画免费下拉式
  18. filesplit的Python项目详细描述
  19. win服务器文件夹加锁了,win7文件夹加锁方法
  20. 7-111 输出大写英文字母

热门文章

  1. 民宿平台airbnb是如何动态定价的
  2. springboot中的spring-test的作用
  3. Linux之问题详解(一):Linux怎么创建一个html文件通过CentOS部署html网站到服务器
  4. phpadmin安装到mysql中_phpadmin安装教程
  5. Java语言高级(第三部分)异常多线程 ->(个人学习记录笔记)
  6. Android获取设备号SSAID (Android ID) 和 IMEI
  7. 【多元统计分析】09.独立性检验与正态性检验
  8. python变成exe需要python环境吗_[Python]py程序发布——Python环境移植和exe程序生成(无环境依赖性),pythonPy,以及,EXE...
  9. 解决VScode终端管理员运行问题
  10. python制作相册影集_最新的有趣开源,Python制作抖音特有的重影彩色图片!