深度學習目標檢測 caffe下 yolo-v1 yolo-v2 vgg16-ssd squeezenet-ssd mobilenet-v1-ssd mobilenet-v12-ssd
1、caffe下yolo系列的實現
1.1 caffe-yolo-v1
我的github程式碼 點選開啟連結
yolo-v1 darknet主頁 點選開啟連結
上面的caffe版本較老。對新版的cudnn支援不好,可能編譯出錯,需要修改 cudnn.hpp標頭檔案在次進行編譯,
修改後的cudnn.hpp檔案,可在我的github主頁找到。
步驟:
0、voc資料集轉換成 caffe下資料庫格式檔案,上述github也有記錄;
1、可以根據yolov1-cfg網路配置檔案寫出caffe的網路配置檔案prototex格式 ;
2、使用模型引數轉換工具,將yolov1.weights 轉換成 caffemodel格式 ;
基於上述換成的模型引數的基礎上進行訓練;
4、注意原作者給出的 yolov1.weights yolov1-cfg是 在voc資料集上訓練的,目標種類20;
1.2 caffe-yolo-v2
我的github程式碼 點選開啟連結
yolo-v2 darknet主頁 點選開啟連結
步驟上述 yolo-v1-caffe的步驟類似。
需要注意的是,原作者給出的有好多種網路框架以及對應的網路引數權重檔案
常用的是 基於voc資料集(20類) 和 coco資料集(80類)不過這些的網路主題沒什麼區別,主要是最後幾層網路分類輸出是類別數量不同,卷積核數量有所不同。
1.3 caffe-yolo-v3 後面補上
2、SSD目標檢測框架
2.1、原作者VGG16-SSD
我的github程式碼 點選開啟連結
原作caffe程式碼 點選開啟連結
VGG16框架 以及SSD結構請參考上述github以及網路資源和論文等資料
步驟:
0、建立符合ssd的訓練圖片資料庫檔案
參考原作caffe程式碼
./data/VOC0712/create_list.sh
1、使用作者提供的 ssd_pascal.py 檔案生成基於pascal VOC資料集的 VGG16-SSD目標檢測的
一系列配置檔案,包括訓練、測試、檢測網路框架prototex檔案
2、預訓練模型權重檔案可下載VGG_ILSVRC_16_layers_fc_reduced.caffemodel
2.2、squeezeNet-SSD
我的 github參考 點選開啟連結
參考原作者 VGG16-SSD 的網路配置檔案以及 squeezeNet的網路配置檔案
寫出自己的 squeezeNet-SSD配置檔案。
注意 網路的前部分 squeezeNet的各層名字應該與 squeezeNet的網路配置檔案相同,
這樣可以基於 squeezeNet的權重檔案進行訓練。
2.3、MobileNet-SSD
我的 github參考 點選開啟連結
MobileNet
步驟:
參考原作者 VGG16-SSD 的網路配置檔案以及 MobileNet 的網路配置檔案
寫出自己的 MobileNet-SSD配置檔案。這也有V1和V2版本
注意點與上面的一樣。
2、4 shuffleNet-ssd
參考:
shuffleNet caffe程式碼 點選開啟連結
含有網路的前部分的 權重檔案這裡需要重新編譯 caffe-ssd 原始碼,新增通道重排層的 三個檔案 :
shuffle_channel_layer.cpp
shuffle_channel_layer.cu
shuffle_channel_layer.hpp
修改 caffe.proto檔案
message LayerParameter {
...
optional ShuffleChannelParameter shuffle_channel_param = 164;
...
}
...
message ShuffleChannelParameter {
optional uint32 group = 1[default = 1]; // The number of group
}
重新編譯
make clean
make all -j
make pycaffe
這裡需要注意的是:組通道卷積DW卷積起始就是分組卷積的特殊情況,當分組數量等於 輸入資料的通道數量時。
shuffle_channel層 ,還添加了
DW卷積層 其實這裡可以不用,
就用普通的卷積層代替,新增一個group引數,且數值為 上一層的輸出通道數量