第8组 Alpha (2/3)

第8组 Alpha (2/3)

1.过去完成了哪些任务

完成了模型的准备工作、初步分工和和初步训练;训练结果达到了论文中的精度,准确率初步达标

数据集

我们将使用 Pascal Visual Object Classes (VOC) 2007年和2012年的数据集,这一份数据集中包含有20种不同物体,每一个物体都被以下三个属性描述

  • 盒子坐标
  • 标签
{'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'}
  • 识别难度(0表示不困难,1表示困难)

输出

采用 Multibox 技术,包含两个任务

  • 回归,检测到目标的盒子坐标
  • 分类,将检测到的目标归类

模型

本项目实施 Single Shot Detector (SSD) 方法,卷积操作如下

  • 迁移学习,使用 VGG-16 作为基础网络
  • ILSVRC 分类任务上预训练,Pytorch 中可获取
  • 修改
    • 输入 size(300, 300)
    • 第三 pooling 层使用 ceiling 函数而不是 floor 函数
    • 第五 pooling 层使用 (3, 3) 卷积核和 1 步幅
    • 去掉 fc8,将 fc6fc7 改为 conv6conv7

训练结果

参数

{'epoch': 231, 'model': SSD300(
  (base): VGGBase(
    (conv1_1): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv1_2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (conv2_1): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv2_2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (pool2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (conv3_1): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv3_2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv3_3): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (pool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=True)
    (conv4_1): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv4_2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv4_3): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (pool4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (conv5_1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv5_2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (conv5_3): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (pool5): MaxPool2d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    (conv6): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(6, 6), dilation=(6, 6))
    (conv7): Conv2d(1024, 1024, kernel_size=(1, 1), stride=(1, 1))
  )
  (aux_convs): AuxiliaryConvolutions(
    (conv8_1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))
    (conv8_2): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
    (conv9_1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1))
    (conv9_2): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
    (conv10_1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))
    (conv10_2): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1))
    (conv11_1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))
    (conv11_2): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1))
  )
  (pred_convs): PredictionConvolutions(
    (loc_conv4_3): Conv2d(512, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (loc_conv7): Conv2d(1024, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (loc_conv8_2): Conv2d(512, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (loc_conv9_2): Conv2d(256, 24, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (loc_conv10_2): Conv2d(256, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (loc_conv11_2): Conv2d(256, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (cl_conv4_3): Conv2d(512, 84, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (cl_conv7): Conv2d(1024, 126, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (cl_conv8_2): Conv2d(512, 126, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (cl_conv9_2): Conv2d(256, 126, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (cl_conv10_2): Conv2d(256, 84, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (cl_conv11_2): Conv2d(256, 84, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  )
), 'optimizer': SGD (
Parameter Group 0
    dampening: 0
    lr: 2e-05
    momentum: 0.9
    nesterov: False
    weight_decay: 0.0005

Parameter Group 1
    dampening: 0
    lr: 1e-05
    momentum: 0.9
    nesterov: False
    weight_decay: 0.0005
)}

精度

{'aeroplane': 0.784830629825592,
 'bicycle': 0.8301308751106262,
 'bird': 0.7785976529121399,
 'boat': 0.7153279781341553,
 'bottle': 0.4816097021102905,
 'bus': 0.86469566822052,
 'car': 0.8681696653366089,
 'cat': 0.8875483870506287,
 'chair': 0.5919950008392334,
 'cow': 0.8332351446151733,
 'diningtable': 0.7646348476409912,
 'dog': 0.8511528968811035,
 'horse': 0.8756575584411621,
 'motorbike': 0.8565510511398315,
 'person': 0.7953250408172607,
 'pottedplant': 0.5440034866333008,
 'sheep': 0.7881692051887512,
 'sofa': 0.7863275408744812,
 'train': 0.8692547678947449,
 'tvmonitor': 0.7590073943138123}

Mean Average Precision (mAP): 0.776

训练231轮后,达到和原论文相同的精度

测试随机图片

第8组 Alpha (2/3)

2. 小组分工

成员 工作
蹇浩航 应用设计,后端
赵泽昊 模型调试与优化,应用的封装
郭升 小程序前端
丁浩喆 小程序前端
郭英来 小程序后端

3. 燃尽图

第8组 Alpha (2/3)

4. 例会照片

第8组 Alpha (2/3)

5. 剩余任务&困难

  • 对应用进行封装
  • 前端和后端的设计
  • 考虑用户体验并进行优化
  • 对新知识的学习目前进度较慢

6. 收获和疑问

  • 对各自分工的知识方面加深了理解,提高动手能力
  • 集体学习有助于合作
上一篇:加载内核.


下一篇:linux操作系统:内核初始化,按照宝典成立公司