1. 程式人生 > 其它 >第8組 Alpha (2/3)

第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輪後,達到和原論文相同的精度

測試隨機圖片

2. 小組分工

成員 工作
蹇浩航 應用設計,後端
趙澤昊 模型除錯與優化,應用的封裝
郭升 小程式前端
丁浩喆 小程式前端
郭英來 小程式後端

3. 燃盡圖

4. 例會照片

5. 剩餘任務&困難

  • 對應用進行封裝
  • 前端和後端的設計
  • 考慮使用者體驗並進行優化
  • 對新知識的學習目前進度較慢

6. 收穫和疑問

  • 對各自分工的知識方面加深了理解,提高動手能力
  • 集體學習有助於合作