yolov1模型结构和训练测试流程详解

一、网络结构
在这里插入图片描述
①首先经过一个VGG主干网络提取特征,这里的主干网络可以自己选择,使用resnet也可以。
②reshape为一维,然后进行全连接,in_dim=25088,out_dim=4096,需要注意的是这里的25088是由51277得到的,而不同大小的图像经过主干网络提取特征后的大小也是不一样的,所以如果输入的图像大小不是448的话,就需要修改这里的in_dim。
③第二个全连接层,in_dim=4096,out_dim=1470,这里的out_dim是由7730得到的,是为了reshape成7×7×30的向量,至于为什么yolov1的输出是一个7×7×30的向量,而不是r-cnn系列的具体的框坐标等信息,后面会解释。

二、数据处理
①在训练时,会对数据进行随机的翻转和裁剪等操作

img, boxes = self.random_flip(img, boxes)#随机翻转
img,boxes = self.randomScale(img,boxes)#伸缩变形
img = self.randomBlur(img)#平滑处理
img = self.RandomBrightness(img)#亮度调节
img = self.RandomHue(img)#色度调节
img = self.RandomSaturation(img)#饱和度调节
img,boxes,labels = self.randomShift(img,boxes,labels)#随机平移
img,boxes,labels = self.randomCrop(img,boxes,labels)#随机裁剪

②训练和测试,会对输入网络前的数据进行去均值和resize,需要注意的是,如果想要设图像为448×448以外的size,需要修改model中全连接层的参数

boxes /= torch.Tensor([w,h,w,h]).expand_as(boxes)#坐标归一化处理
img = self.BGR2RGB(img)
img = self.subMean(img,self.mean)#减去均值
img = cv2.resize(img,(self.image_size,self.image_size))#调整图片尺寸为448*448

③训练前最重要的一步,将标签decode到7×7×30的向量(这里的7代表检测的密度,可以自己设定,会改变检测精度和性能;这里的30代表((4+1)*2+20),4表示检测框的中心点坐标x、y和宽高w、h,1表示是否是被检测物体的置信度,2表示回归两个矩形框,20表示20个类别)
在这里插入图片描述

三、训练
①输入数据:image(3×448×448),label(7×7×30)
②训练策略:没什么好写的,就是平常的训练步骤
③loss函数:YOLO给出的损失函数如下
在这里插入图片描述
此处给出的loss函数解释(转载https://www.jianshu.com/p/cad68ca85e27):
公式中
l i o b j l_i^{obj} li

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值