第8組 Alpha (2/3)
阿新 • • 發佈:2021-11-27
第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
,將fc6
和fc7
改為conv6
和conv7
- 輸入
訓練結果
引數
{'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. 收穫和疑問
- 對各自分工的知識方面加深了理解,提高動手能力
- 集體學習有助於合作