⑴ 固態硬碟對程序員的效果好不好
好!但固態硬碟讀寫次數多了,容易老化。
讀寫速度是沒得比的。但記憶體總會隨使用次數而衰減,如果允許,建議用傳統硬碟做貯存,固態硬碟做讀寫操作。
⑵ RetinaNet為什麼比SSD效果好
SSD在訓練期間重新采樣目標類和背景類的比率,這樣它就不會被圖像背景淹沒。
RetinaNet採用另一種方法來減少訓練良好的類的損失。因此,只要該模型能夠很好地檢測背景,就可以減少其損失並重新增強對目標類的訓練。所以RetinaNet比SSD 效果好。
⑶ 如何使用ssd訓練自己的數據
可以參照前一篇文章配置windows下的ssd,本文假設ssd已經通過windows下的編譯。
1.准備數據
需要根據PASCAL VOC格式 准備對應的數據,推薦一個好用的貼標簽軟體(https://github.com/tzutalin/labelImg)
拿VOC2012為例,VOC2012目錄下需要Annotations、ImageSets、JPEGImages文件夾,Annotations存儲對應的標簽xml信息,JPEGImages存儲圖片數據,ImageSets 主要使用Main文件夾下的數據,Main文件夾保存了對應的訓練、驗證數據集的txt文本
然後使用caffe-ssd-microsoft\data\VOC0712目錄下create_data.bat來生成所需要的lmdb文件(create_data.bat根據實際情況修改內容)
caffe-ssd-microsoft\data\VOC0712目錄下get_image_size.bat用於生成test.txt中對應圖片的大小映射,生成的結果寫入test_name_size.txt
對於後面的訓練需要准備以下文件:
test.txt 用於測試的文件集定義
labelmap_voc.prototxt 標簽定義文件
test_name_size.txt 測試圖片大小定義文件(可通過get_image_size.bat生成)
trainval.txt 訓練驗證集文件定義(數據排列為亂序,可根據實際情況設定)
train.prototxt 訓練網路定義文件
test.prototxt 測試網路定義文件
deploy.prototxt 部署定義文件
solver.prototxt 訓練配置文件
2.修改訓練文件
caffe-ssd-microsoft\examples\ssd下的ssd_pascal.bat是用來訓練數據用的程序(它是調用ssd_pascal.py運行的,ssd_pascal.py用來配置整個的訓練環境),因為windows下的對 路徑和Linux的不同,所以對應的windows下需要找到ssd_pascal.py對應的內容進行修改:
train_data = "{}/data/VOC0712/trainval_lmdb".format(caffe_root)
test_data = "{}/data/VOC0712/test_lmdb".format(caffe_root)
save_dir = "{}/models/VGGNet/VOC0712/{}".format(caffe_root,job_name)
snapshot_dir = "{}/models/VGGNet/VOC0712/{}".format(caffe_root,job_name)
job_dir = "{}/jobs/VGGNet/VOC0712/{}".format(caffe_root,job_name)
output_result_dir = "{}/data/VOC0712/results/{}/Main".format(caffe_root,job_name)
name_size_file = "{}/data/VOC0712/test_name_size.txt".format(caffe_root)
pretrain_model = "{}/models/VGGNet/VGG_ILSVRC_16_layers_fc_reced.caffemodel".format(caffe_root)
label_map_file = "{}/data/VOC0712/labelmap_voc.prototxt".format(caffe_root)
f.write('{}\Build\{}\Debug\caffe train ^\n'.format(caffe_root,'x64'))
⑷ 固態硬碟對編譯軟體影響大嗎
編譯和硬碟沒有關系,是內存和CPU的工作,SSD對於軟體開發幾乎沒有任何的影響,SSD暫時來看只對系統開機和游戲載入有些用處,抗震輕便,但是壽命沒有那麼長,壞了不可修復,會越用越慢
⑸ 如何使用ssd訓練自己的數據
和普通機械硬碟一樣分區,格式化使用就行。格式化時如果用專業工具的話就4k對齊一下。
⑹ SSD與yolov1的對比
yolo系列和ssd發表的時間順序是yolov1,ssd,yolov2,yolov3,當然現在yolov4也出現了。這個是我之前在看完yolov1之後閱讀ssd論文的時候記錄的筆記,因此會涉及到很多和yolov1實現的對比。
fast rcnn系列的模型的套路:
1.使用事先設定的bounding boxes,
和fasterRCNN區別是沒有使用RPN和Pooling操作
論文的貢獻:
1. 引入了一種單階段的檢測器,比以前的演算法YOLOv1更准更快,並沒有使用RPN和Pooling操作;
2. 使用一個小的卷積濾波器應用在不同的feature map層從而預測BB的類別的BB偏差;
3. 可以在更小的輸入圖片中得到更好的檢測效果(相比Faster-rcnn);
4. 在多個數據集(PASCAL、VOC、COCO、ILSVRC)上面的測試結果表明,它可以獲得更高的mAp值;
整個是一個基於前向反饋的卷積網路,SSD模型最終提供一個固定大小的bounding boxes集合以及這些bounding boxes是否存在分類物品的得分的集合,通常在模型之後,添加了一個非極大抑制步驟來提供最終的檢測結果。
主幹網路backbone network
主幹網路是基於VGG的, 是一個高質量的分類網路,把這個基礎模型作為ssd的前面層,用於給後面的層提供高質量的圖片分類,我們稱這個層為基礎網路,注意這個基礎模型在使用的時候,需要截去最後面的分類層。在這里使用的VGG16網路。然後添加輔助的結構來 提供最終的檢測功能。
主幹網對VGG16的修改:
1.將VGG16的FC6和FC7層轉化為卷積層,如圖1上的Conv6和Conv7;
2.去掉所有的Dropout層和FC8層;
3.添加了Atrous演算法(hole演算法),參考該鏈接;
4.將Pool5從2x2-S2變換到3x3-S1;
最終的檢測功能的實現依賴於下面提到的關鍵技術:
在基礎網路之後,添加了很多個卷積層,卷積層不斷的減小特徵圖的寬高尺寸,比如從8 8經過一層卷積之後就變成4 4了。然後在這些特徵圖上都應用目標檢測演算法。正如上面那張圖所示,對於前面一層來說,相當於是在一個比較小的8 8的尺度上,對每個位置檢測4個固定橫縱比的bounding box,而對於後面一層來說,就是在一個相對較大的4 4尺寸上對每個位置檢測4個固定橫縱比的bounding box。這樣就實現了在多尺度特徵圖上檢測的目的。
圖中的所有信道的對應位置的像素點集合被認為是一個anchor,那麼對於每個anchor就會有N個比率的bounding box,需要注意的是,每一層的bounding box數量不一定是一樣的。
我們從feature layer或者說feature map上抽取特徵。feature layer可能是基礎網路上面的某一層,也可以是在基礎網路後面添加的卷積層。對於一個 m x nxc的feature layer,使用一個3x3xp的核過濾器(small kernel),那麼對於每一個輸出的pixel,都可以得到一個channel數為p大小的檢測結果,一般p=4 (|Classes|+4)大小,最終可以得到m n p大小的檢測結果。這個檢測結果中包含了每個位置的分類物品出現的置信度以及四個表示位置和偏移的(cx,cy,w,h)。因為設置了bounding box的數量為4,所以結果是4 (|Classes|+4).
需要注意到這里使用的卷積預測器而不是全連接層(yolov1使用的是全連接層)。
這里的bounding box的概念類似於Faster R-CNN中的anchor boxes.但是這里不同的feature map層可以安排不同形狀和數量的bounding box。,這樣可以有效的離散化可能的輸出box的空間(想像一下,如果每個feature map的bounding box長的差不多,那麼得到的可能差異只在大小上,我們需要的是不同大小和形狀的box來擬合真實的物品的坐標,因此box越多樣越好。
The key difference between training SSD and training a typical detector that uses region proposals, is that ground truth information needs to be assigned to specific outputs in the fixed set of detector outputs.
把真實的物品坐標框稱為ground truth,對於一張圖片,在經過SSD模型的各層檢測,會有8732個prior box(也就是檢測結果),需要標記這些檢測結果中,哪些是正樣本,那些是負樣本。 這些標記過程都是在訓練之前做好的;不同層的default box的數量和大小也是在訓練錢都確定好的;還需要准備好難負例挖掘的策略。
對於打標的真實框GT,需要選擇哪個預測框是與真實框對應的。這里選擇是jaccard overlap>0.5的所有默認框。這樣正負樣本就不會很懸殊。Multibox論文中則只會選擇jaccard overlap最高的一個框框。
個人理解中,這里的預測框是指沒有偏移變化的預測框prior box,也叫先驗框(prior box)。在GT確定、輸入圖像尺寸固定、prior box確定之後,就可以得到jaccard overlap>0.5的所有先驗框。然後學習的時候,這些正例需要根據ground truth進行偏移和長寬比縮放的學習。而其他負例則不需要學習位置參數。
為圖像的面積的交並比.
在訓練過程中,首先要確定訓練圖片中的ground truth(真實目標)與哪個先驗框來進行匹配,與之匹配的先驗框所對應的邊界框將負責預測它。
在Yolov1中,ground truth的中心落在哪個單元格,該單元格中與其IOU最大的邊界框負責預測它。但是在SSD中卻完全不一樣,SSD的先驗框與ground truth的匹配原則主要有兩點。
首先,對於圖片中每個ground truth,找到與其IOU最大的先驗框,該先驗框與其匹配,這樣,可以保證每個ground truth一定與某個先驗框匹配。通常稱與ground truth匹配的先驗框為正樣本(其實應該是先驗框對應的預測box,不過由於是一一對應的就這樣稱呼了),反之,若一個先驗框沒有與任何ground truth進行匹配,那麼該先驗框只能與背景匹配,就是負樣本。一個圖片中ground truth是非常少的, 而先驗框卻很多,如果僅按第一個原則匹配,很多先驗框會是負樣本,正負樣本極其不平衡,所以需要第二個原則。
第二個原則是:對於剩餘的未匹配先驗框,若某個ground truth的 IOU 大於某個閾值(一般是0.5),那麼該先驗框也與這個ground truth進行匹配。這意味著某個ground truth可能與多個先驗框匹配,這是可以的。但是反過來卻不可以,因為一個先驗框只能匹配一個ground truth,如果多個ground truth與某個先驗框IOU大於閾值,那麼先驗框只與IOU最大的那個先驗框進行匹配。第二個原則一定在第一個原則之後進行,仔細考慮一下這種情況,如果某個ground truth所對應最大IOU小於閾值,並且所匹配的先驗框卻與另外一個ground truth的IOU大於閾值,那麼該先驗框應該匹配誰,答案應該是前者,首先要確保某個ground truth一定有一個先驗框與之匹配。
損失函數是回歸損失和置信度損失的加權平均
下面是位置回歸損失函數的介紹,看著就很暈。
N表示匹配的框,應該可以理解為正樣本框。首先g表示是ground truth box的各個指標,d是先驗框的各個指標,l是預測結果的各個指標。g^ 這個是根據g和d得到的可以和預測結果匹配計算損失函數的指標。比如g^cx 這個指標,是歸一化的橫坐標偏移指標,因為先驗框的中心不會完全和ground truth的中心重合,因此計算實際的偏移量。這個值就是我們希望模型學習到的值。同理,先驗框的寬度也不會完全重合ground truth的寬度,我們用log函數來計算g^w,這也意味著我們希望學習到的寬度也是這種變換的。
smoothL1損失函數長這樣:
分類的置信度損失函數如下,正樣本的softmax loss函數以及負樣本的背景置信度損失.
在某些論文的方法中,為了獲得不同縮放的圖片的結果,通過現將圖片縮放在不同的尺度然後在最後將每個縮放尺度的結果組合起來。而在這篇論文中使用的方式是使用同一個網路中的不同層上抽取的feature map來獲得和上面的縮放效果一樣的結果。
我覺得這個idea真的很贊,超級贊。這樣不僅僅可以利用參數共享,而且很方便。已經有研究表明使用前面層的feature map可以優化語義分段質量semantic segmentation quality,因為前面的層可以獲得更多的細節的優質的關於輸入的信息。
這張圖上有兩個feature map。我們知道網路的不同層有不同的感受野。在SSD中,bounding box的大小不需要匹配對應層的感受野。我們設計了bounding box的尺寸規則,這樣每個feature map就可以自己計算。
如果我們使用m個feature map,其中1表示較低層,m表示叫高層。bounding box的默認尺度按照如下的計算公式計算
bounding box的橫縱比尺度為
什麼是hard negative mining:
【1】對於目標檢測中我們會事先標記處ground truth,然後再演算法中會生成一系列proposal,這些proposal有跟標記的ground truth重合的也有沒重合的,那麼重合度(IOU)超過一定閾值(通常0.5)的則認定為是正樣本,以下的則是負樣本。
【2】然後扔進網路中訓練。However,這也許會出現一個問題那就是正樣本的數量遠遠小於負樣本,這樣訓練出來的分類器的效果總是有限的,會出現許多false positive,把其中得分較高的這些false positive當做所謂的Hard negative,既然mining出了這些Hard negative,就把這些扔進網路得到類別的損失函數,將這些難負樣本的損失函數作為背景損失函數,從而加強分類器判別假陽性的能力。
絕大部分的bounding box最後匹配出來是沒有物品的,這樣會導致負樣本和正樣本嚴重失衡。SSD這里沒有使用全部的負樣本,而是對每個負樣本的bounding box根據其confidence loss排序,然後選擇最大的一批作為負樣本,這樣是的負樣本和正樣本的比率穩定在3:1。實踐證明,這樣的方式是的優化的碎度更快,訓練也更加穩定。
數據的擴充策略中數據來自於以下三種之一
base netowrk是VGG16。SSD300的模型就是上面那張結構圖所示。新的層的初始化使用xavier方式( https://zhuanlan.hu.com/p/22028079 , https://zhuanlan.hu.com/p/22044472 )。實驗認為和RCNN相比,SSD在定位localization上更加優秀,因為在神經網路模型中直接學習回歸了物品的形狀。但是SSD很容易有分類錯誤問題,尤其是類似的類別(比如動物)。SSD對bounding box的大小很敏感,也就是說,小物體的表現不如大物體。結合模型來看,因為小物體的預測使用的是網路的前面的層,而前面的層並沒有很多的信息。雖然存在上面的問題,但是SSD在大物體上的表現很好,二千對於不同橫縱比的物體的性能魯棒。
下面這張圖展示了ssd中的哪些技術使得性能得到了提升。
性能提升的貢獻:
SSD是如何提升小物體的檢測准確率的:通過數據擴充
SSD用的是VGG16(但去掉了fc層加速)而YOLO普通版有24個卷積層。
SSD的輸入尺寸較小(300 300),而YOLO是448 448,即使網路結構類似計算量差距還是挺明顯的,速度快一點正常。
ssd全靠卷積完成,而yolo里還有全連接,用上gpu的話肯定是ssd快
在ssd中,首先每個真實物品都先選擇一個負責它的bounding box,在沒有訓練指之前,因為prior bounding box的位置都是確定的,所以選擇IOU最大的為正樣本。為平衡正負樣本的比率,將IOU大於0.5的prior bounding box都設置為正樣本。這樣模型就更加穩定了。
SSD演算法思想和結構詳解 : https://www..com/link?url=2XF6E5J1_qxJuzgq&wd=&eqid=
SSD詳解 https://blog.csdn.net/WZZ18191171661/article/details/79444217
https://zhuanlan.hu.com/p/57440670
⑺ 有用過ssd的嗎,編譯速度是否會顯著提升
你可以劃塊內存作為硬碟分區,
放些文件編譯下,如果速度提升非常明顯,說明瓶頸是在硬碟上。
用ramdisk和並行編譯。ssd卡快不過ramdisk吧。
⑻ SSD能大幅提高編譯速度,能提高一倍么
能的,我用的就是SSD,完全無卡頓,C++等大型編程語言都能編譯。
望採納
⑼ SSD變聰明了!要搶CPU/GPU的飯碗
Marvell(美滿電子)還真能玩,不但聯合東芝為SSD帶來了乙太網訪問能力,還讓SSD變聰明了,要打造 「計算存儲」(Computational Storage) ,SSD不再只是扮演數據存儲的角色,還要參與計算。
Marvell正在將機器學習引擎引入到SSD主控之中,使其可以從CPU、GPU那裡接手一些推理工作,直接處理自己內部保存的數據,而無需進行傳輸交換。
硬體上,Marvell使用了一大堆數據排線,連接SSD與FPGA,而軟體上也有了比較成熟的進展。
FMS 2019峰會上,Marvell就展示了這種計算型SSD的能力,除了利用預先訓練的模型進行實時物體識別,還可以對存儲在SSD上的視頻進行離線識別,通過一條曲線顯示在視頻中識別出來的物體,還有一個內容感知搜索引擎,返回所識別物體所在的視頻片段。
而且這一切,都可以通過一個簡單的Web界面進行操作。
這么做有什麼用呢?Marvell設想,可以組建一個陣列的內容感知SSD,各自識別自己保存的數據,然後通過應用伺服器匯總輸出結果。
Marvell還表示, 這樣做可以大大減輕伺服器和主機處理器的負載,減少網路流量,而且在AI操作的擴展性上更靈活。
⑽ ssd訓練數據比例
這樣的訓練比例數據一般達到60%以上,就可以保證數據信息的有效性,以及訓練的程度可靠性。