上午:

照常八点起床
上午满课:操作系统、数据挖掘

下午:

写yolov4的主干特征网络:

class Resblock_body(nn.Module):def __init__(self, in_channels, out_channels):super(Resblock_body, self).__init__()self.out_channels = out_channelsself.conv1 = BasicConv(in_channels, out_channels, 3)self.conv2 = BasicConv(out_channels//2, out_channels//2, 3)self.conv3 = BasicConv(out_channels//2, out_channels//2, 3)self.conv4 = BasicConv(out_channels, out_channels, 1)self.maxpool = nn.MaxPool2d([2,2],[2,2])def forward(self, x):# 利用一个3x3卷积进行特征整合x = self.conv1(x)# 引出一个大的残差边routeroute = xc = self.out_channels# 对特征层的通道进行分割,取第二部分作为主干部分。x = torch.split(x, c//2, dim = 1)[1]# 对主干部分进行3x3卷积x = self.conv2(x)# 引出一个小的残差边route_1route1 = x# 对第主干部分进行3x3卷积x = self.conv3(x)# 主干部分与残差部分进行相接x = torch.cat([x,route1], dim = 1) # 对相接后的结果进行1x1卷积x = self.conv4(x)feat = xx = torch.cat([route, x], dim = 1)# 利用最大池化进行高和宽的压缩x = self.maxpool(x)return x,featclass CSPDarkNet(nn.Module):def __init__(self):super(CSPDarkNet, self).__init__()# 首先利用两次步长为2x2的3x3卷积进行高和宽的压缩# 416,416,3 -> 208,208,32 -> 104,104,64self.conv1 = BasicConv(3, 32, kernel_size=3, stride=2)self.conv2 = BasicConv(32, 64, kernel_size=3, stride=2)# 104,104,64 -> 52,52,128self.resblock_body1 =  Resblock_body(64, 64)# 52,52,128 -> 26,26,256self.resblock_body2 =  Resblock_body(128, 128)# 26,26,256 -> 13,13,512self.resblock_body3 =  Resblock_body(256, 256)# 13,13,512 -> 13,13,512self.conv3 = BasicConv(512, 512, kernel_size=3)self.num_features = 1# 进行权值初始化for m in self.modules():if isinstance(m, nn.Conv2d):n = m.kernel_size[0] * m.kernel_size[1] * m.out_channelsm.weight.data.normal_(0, math.sqrt(2. / n))elif isinstance(m, nn.BatchNorm2d):m.weight.data.fill_(1)m.bias.data.zero_()def forward(self, x):# 416,416,3 -> 208,208,32 -> 104,104,64x = self.conv1(x)x = self.conv2(x)# 104,104,64 -> 52,52,128x, _    = self.resblock_body1(x)# 52,52,128 -> 26,26,256x, _    = self.resblock_body2(x)# 26,26,256 -> x为13,13,512#           -> feat1为26,26,256x, feat1    = self.resblock_body3(x)# 13,13,512 -> 13,13,512x = self.conv3(x)feat2 = xreturn feat1,feat2def darknet53_tiny(pretrained, **kwargs):model = CSPDarkNet()if pretrained:if isinstance(pretrained, str):model.load_state_dict(torch.load(pretrained))else:raise Exception("darknet request a pretrained path. got [{}]".format(pretrained))return model
  1. train.py
3. #-------------------------------------#
#       对数据集进行训练
#-------------------------------------#
import os
import numpy as np
import time
import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import torch.backends.cudnn as cudnn
from torch.utils.data import DataLoader
from utils.dataloader import yolo_dataset_collate, YoloDataset
from nets.yolo_training import YOLOLoss,Generator
from nets.yolo4_tiny import YoloBody
from tqdm import tqdm
from PIL import Imagedef get_lr(optimizer):for param_group in optimizer.param_groups:return param_group['lr']#---------------------------------------------------#
#   获得类和先验框
#---------------------------------------------------#
def get_classes(classes_path):'''loads the classes'''with open(classes_path) as f:class_names = f.readlines()class_names = [c.strip() for c in class_names]return class_namesdef get_anchors(anchors_path):'''loads the anchors from a file'''with open(anchors_path) as f:anchors = f.readline()anchors = [float(x) for x in anchors.split(',')]return np.array(anchors).reshape([-1,3,2])def fit_one_epoch(net,yolo_losses,epoch,epoch_size,epoch_size_val,gen,genval,Epoch,cuda):total_loss = 0val_loss = 0net.train()with tqdm(total=epoch_size,desc=f'Epoch {epoch + 1}/{Epoch}',postfix=dict,mininterval=0.3) as pbar:for iteration, batch in enumerate(gen):if iteration >= epoch_size:breakimages, targets = batch[0], batch[1]with torch.no_grad():#if cuda:images = Variable(torch.from_numpy(images).type(torch.FloatTensor)).cuda()targets = [Variable(torch.from_numpy(ann).type(torch.FloatTensor)) for ann in targets]#else:#images = Variable(torch.from_numpy(images).type(torch.FloatTensor))#targets = [Variable(torch.from_numpy(ann).type(torch.FloatTensor)) for ann in targets]#----------------------##   清零梯度#----------------------#optimizer.zero_grad()#----------------------##   前向传播#----------------------#outputs = net(images)losses = []num_pos_all = 0#----------------------##   计算损失#----------------------#for i in range(2):loss_item, num_pos = yolo_losses[i](outputs[i], targets)losses.append(loss_item)num_pos_all += num_posloss = sum(losses) / num_pos_all#----------------------##   反向传播#----------------------#loss.backward()optimizer.step()total_loss += loss.item()pbar.set_postfix(**{'total_loss': total_loss / (iteration + 1), 'lr'        : get_lr(optimizer)})pbar.update(1)net.eval()print('Start Validation')with tqdm(total=epoch_size_val, desc=f'Epoch {epoch + 1}/{Epoch}',postfix=dict,mininterval=0.3) as pbar:for iteration, batch in enumerate(genval):if iteration >= epoch_size_val:breakimages_val, targets_val = batch[0], batch[1]with torch.no_grad():if cuda:images_val = Variable(torch.from_numpy(images_val).type(torch.FloatTensor)).cuda()targets_val = [Variable(torch.from_numpy(ann).type(torch.FloatTensor)) for ann in targets_val]else:images_val = Variable(torch.from_numpy(images_val).type(torch.FloatTensor))targets_val = [Variable(torch.from_numpy(ann).type(torch.FloatTensor)) for ann in targets_val]optimizer.zero_grad()outputs = net(images_val)losses = []num_pos_all = 0for i in range(2):loss_item, num_pos = yolo_losses[i](outputs[i], targets_val)losses.append(loss_item)num_pos_all += num_posloss = sum(losses) / num_pos_allval_loss += loss.item()pbar.set_postfix(**{'total_loss': val_loss / (iteration + 1)})pbar.update(1)print('Finish Validation')print('Epoch:'+ str(epoch+1) + '/' + str(Epoch))print('Total Loss: %.4f || Val Loss: %.4f ' % (total_loss/(epoch_size+1),val_loss/(epoch_size_val+1)))print('Saving state, iter:', str(epoch+1))torch.save(model.state_dict(), 'logs/Epoch%d-Total_Loss%.4f-Val_Loss%.4f.pth'%((epoch+1),total_loss/(epoch_size+1),val_loss/(epoch_size_val+1)))if __name__ == "__main__":cuda = TrueUse_Data_Loader = Truenormalize = Falseinput_shape = (416,416)anchors_path = 'model_data/yolo_anchors.txt'classes_path = 'model_data/new_classes1.txt'   #----------------------------------------------------##   获取classes和anchor#----------------------------------------------------#class_names = get_classes(classes_path)anchors = get_anchors(anchors_path)num_classes = len(class_names)mosaic = FalseCosine_lr = Falsesmoooth_label = 0#------------------------------------------------------##   创建yolo模型#   训练前一定要修改classes_path和对应的txt文件#------------------------------------------------------#model = YoloBody(len(anchors[0]), num_classes)#------------------------------------------------------##   权值文件#------------------------------------------------------#model_path = "model_data/yolov4_tiny_weights_coco.pth"# 加快模型训练的效率print('Loading weights into state dict...')device = torch.device('cuda')model_dict = model.state_dict()pretrained_dict = torch.load(model_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('Finished!')net = model.train()if cuda:net = torch.nn.DataParallel(model)cudnn.benchmark = Truenet = net.cuda()# 建立loss函数yolo_losses = []for i in range(2):yolo_losses.append(YOLOLoss(np.reshape(anchors,[-1,2]),num_classes, \(input_shape[1], input_shape[0]), smoooth_label, cuda, normalize))#----------------------------------------------------##   获得图片路径和标签#----------------------------------------------------#annotation_path = '2007_train.txt'val_split = 0.0with open(annotation_path) as f:lines = f.readlines()np.random.seed(10101)np.random.shuffle(lines)np.random.seed(None)num_val = int(len(lines)*val_split)num_train = len(lines) - num_valif True:lr = 1e-3Batch_size = 32Init_Epoch = 0Freeze_Epoch = 50#----------------------------------------------------------------------------##   我在实际测试时,发现optimizer的weight_decay起到了反作用,#   所以去除掉了weight_decay,大家也可以开起来试试,一般是weight_decay=5e-4#----------------------------------------------------------------------------#optimizer = optim.Adam(net.parameters(),lr)if Cosine_lr:lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=5, eta_min=1e-5)else:lr_scheduler = optim.lr_scheduler.StepLR(optimizer,step_size=1,gamma=0.92)if Use_Data_Loader:train_dataset = YoloDataset(lines[:num_train], (input_shape[0], input_shape[1]), mosaic=mosaic, is_train=True)val_dataset = YoloDataset(lines[num_train:], (input_shape[0], input_shape[1]), mosaic=False, is_train=False)gen = DataLoader(train_dataset, shuffle=False, batch_size=Batch_size, num_workers=2, pin_memory=True,drop_last=True, collate_fn=yolo_dataset_collate)gen_val = DataLoader(val_dataset, shuffle=False, batch_size=Batch_size, num_workers=2,pin_memory=True, drop_last=True, collate_fn=yolo_dataset_collate)else:gen = Generator(Batch_size, lines[:num_train],(input_shape[0], input_shape[1])).generate(train=True, mosaic = mosaic)gen_val = Generator(Batch_size, lines[num_train:],(input_shape[0], input_shape[1])).generate(train=False, mosaic = mosaic)epoch_size = max(1, num_train//Batch_size)epoch_size_val = num_val//Batch_size#------------------------------------##   冻结一定部分训练#------------------------------------#for param in model.backbone.parameters():param.requires_grad = Falsefor epoch in range(Init_Epoch,Freeze_Epoch):fit_one_epoch(net,yolo_losses,epoch,epoch_size,epoch_size_val,gen,gen_val,Freeze_Epoch,cuda)lr_scheduler.step()if True:lr = 1e-4Batch_size = 16Freeze_Epoch = 50Unfreeze_Epoch = 100#----------------------------------------------------------------------------##   我在实际测试时,发现optimizer的weight_decay起到了反作用,#   所以去除掉了weight_decay,大家也可以开起来试试,一般是weight_decay=5e-4#----------------------------------------------------------------------------#optimizer = optim.Adam(net.parameters(),lr)if Cosine_lr:lr_scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=5, eta_min=1e-5)else:lr_scheduler = optim.lr_scheduler.StepLR(optimizer,step_size=1,gamma=0.92)if Use_Data_Loader:train_dataset = YoloDataset(lines[:num_train], (input_shape[0], input_shape[1]), mosaic=mosaic, is_train=True)val_dataset = YoloDataset(lines[num_train:], (input_shape[0], input_shape[1]), mosaic=False, is_train=False)gen = DataLoader(train_dataset, shuffle=False, batch_size=Batch_size, num_workers=2, pin_memory=True,drop_last=True, collate_fn=yolo_dataset_collate)gen_val = DataLoader(val_dataset, shuffle=False, batch_size=Batch_size, num_workers=2,pin_memory=True, drop_last=True, collate_fn=yolo_dataset_collate)else:gen = Generator(Batch_size, lines[:num_train],(input_shape[0], input_shape[1])).generate(train=True, mosaic = mosaic)gen_val = Generator(Batch_size, lines[num_train:],(input_shape[0], input_shape[1])).generate(train=False, mosaic = mosaic)epoch_size = max(1, num_train//Batch_size)epoch_size_val = num_val//Batch_sizefor param in model.backbone.parameters():param.requires_grad = Truefor epoch in range(Freeze_Epoch,Unfreeze_Epoch):fit_one_epoch(net,yolo_losses,epoch,epoch_size,epoch_size_val,gen,gen_val,Unfreeze_Epoch,cuda)lr_scheduler.step()
  1. 调整参数
    这个就不放了,因为要比赛,提前放出来对团队不尊重。

晚上:

  1. 软工大作业的demo写完了
  2. 查看yolov4代码,看不懂的搜索
  3. 开会、确定下次的团队内容,我已经把表打出来了

自我控制:

  1. 克制住调侃学弟的冲动,因为我感觉那样不好,像挖苦一样
  2. 说话越发有礼貌,向大佬请教问题,他还挺愿意教我的
  3. 另一个大佬帮我搭建了VPN,接下来就看我了!

总结:

这两天直播很好,注意力很集中的了,然后现在明确明天的学习内容:

  1. 看高学长给的学习内容
  2. 潘老师给的pytorch手机离线运行课题研究

2021-5-25-今日收获相关推荐

  1. 基于python的科技论文_实地科研 | 上海财经大学 | 金融科技、商业分析、人工智能:机器学习、人工智能及其在金融科技中的应用(2021.1.25开课)...

      课题名称   = 机器学习.人工智能及其在金融科技中的应用 =  项目背景   随着云时代的到来,机器学习.人工智能.大数据技术具有越来越重要的战略意义,并逐渐渗透到每一个行业和业务职能领域,成为 ...

  2. 读论文——Pre-Training with Whole Word Masking for Chinese BERT(2021 11.25)

    第一遍 标题以及作者(2021 11.25) 摘要 本文基于BERT,在RoBERTa上进行一系列改进,提出了用于中文的预训练模型MacBERT. 提出了一种新的掩码策略,MLM as correct ...

  3. 2021-5月13日-今日收获

    计划的第一天 技术上的收获: 操作系统的实验运行成功 前后端连接成功 自我控制上的收获: 跑步成功 很多次没听相声睡觉.但是昨天没有 在宿舍说话很少,很少主动说话,也就没有什么不该说的说了 总结 今天 ...

  4. Diabetes 糖尿病及其并发症.|2021/1/25(未完待续)

    目录 前言: 正文: ①宏观严重性: ②普遍状况:" 三多一少": ③定义 : ③胰岛素(Insulin,一种激素(harmone)) ④引出糖尿病病理: 1> 1-型糖尿病 ...

  5. 【2021.12.25】ctf逆向中常见加密算法和编码识别

    [2021.12.25]ctf逆向中常见加密算法和编码识别(含exe及wp) 文章目录 [2021.12.25]ctf逆向中常见加密算法和编码识别(含exe及wp) 0.前言 1.基础加密手法 2.b ...

  6. 山西省忻州一中2021高考成绩查询,【高考直击】2021年高考今日开考

    6月7日上午9时,2021年普通高考统考正式开考,山西省报名参加2021年普通高考统考总人数为279895人,全省设考区117个.考点277个.考场9552个.本网记者分赴全省各地考场,现场直击高考首 ...

  7. vue+element 实现试卷答题功能,单选题 ,多选题,判断题,简答题(2.0版本,2021.3.25更新)

    vue+element 实现 试卷答题功能,单选题 ,多选题,判断题,简答题(2.0版本,2021.3.25更新) 文章目录 vue+element 实现 试卷答题功能,单选题 ,多选题,判断题,简答 ...

  8. 2021.2.25课程摘要(逻辑教育-王劲胜)

    2021.2.25课程摘要 逻辑教育-13期-Python基础班-王劲胜 一.面向对象(中) 二.面向对象(下) 逻辑教育-13期-Python基础班-王劲胜 一.面向对象(中) ☆property装 ...

  9. 公众号内容拓展学习笔记(2021.3.25)

    公众号内容拓展学习笔记(2021.3.25)

  10. 2021.1.25写写日记

    类 类是抽象的 类实例化以后会返回一个自己的对象 public class Student{//创建一个学生类//属性:字段string name;int age;string brith; } pu ...

最新文章

  1. andengine的convertLocalCoordinatesToSceneCoordinates方法
  2. python读txt转array_np.array和txt文件的转换
  3. Redhat Linux RHEL6配置本地YUM源及错误处理
  4. 【鸿蒙 HarmonyOS】UI 布局 ( 网格布局 TableLayout )
  5. Python 字符串格式化输出方式
  6. 用python修改文件内容修改txt内容的3种方法
  7. ITK:使用GMM EM分配像素
  8. 【蓝桥杯官网试题 - 基础练习】 矩形面积交 (几何)
  9. 【JEECG技术文档】数据权限自定义SQL表达式用法说明
  10. python实现栈_Python 栈
  11. 生活不可缺的46个搜索引擎
  12. 每日英语:Electronics Develop A Sixth Sense
  13. 未找到依赖项 ‘org.apache.spark:spark-hive_2.11:2.4.5‘
  14. mysql取分组最新的一条_基于mysql实现group by取各分组最新一条数据
  15. Xmind模板文档分享——生活计划(3)
  16. c语言atm机实训目的意义,计算机实习目的与意义
  17. Microsoft.Office.Interop.Excel # Microsoft Excel xx.0 Object Library 引用
  18. KeyShot 实时光线追踪三维渲染软件
  19. [转]Cisco小失误,大麻烦
  20. 微信公众号支付宝授权

热门文章

  1. 华为云解锁云原生数据库发展新动能
  2. java集合——Map
  3. 微软提出基于知识图谱的深度神经网络DKN用于新闻推荐
  4. 2018_WWW_DKN- Deep Knowledge-Aware Network for News Recommendation阅读笔记
  5. codeforces1375G Tree Modification
  6. bh1750c语言程序,BH1750FVI数字光线强度传感器 51单片机源程序
  7. 2021百度网盘网页版视频在线倍速播放
  8. 编译报错unable to initialize decompress status for section .debug_info
  9. 武汉坚守第六十三天——七九已满疫未退,印度大法上棍棒
  10. Font and PDF