YOLOv1、v2的caffe版本以及VGG-SSD、SqueezeNet-SSD、MobileNet-v1-SSD、MobileNet-v12-SSD、ShuffleNet-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格式 ;

3、可以使用  測試網絡gnet_test.prototxt  訓練配置成參數gnet_solver.prototxt  訓練網絡gnet_train.prototxt

      基於上述換成的模型參數的基礎上進行訓練;

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文件

   ssd_33_train.prototxt

   ssd_33_test.prototxt

   ssd_33_deploy.prototxt

   以及訓練參數文件 ssd_33_solver.prototxt

    還有 目標檢測腳本 ssd_detect.py

2、預訓練模型權重文件可下載VGG_ILSVRC_16_layers_fc_reduced.caffemodel  點擊打開鏈接  casdn上也有

3、使用 VGG_VOC0712_SSD_300x300.sh 腳本進行訓練

 

2.2、squeezeNet-SSD

我的 github參考 點擊打開鏈接

SqueezeNet-V1 V2 原作者caffe參考 點擊打開鏈接

 

參考原作者 VGG16-SSD 的網絡配置文件以及 squeezeNet的網路配置文件

 

寫出自己的 squeezeNet-SSD配置文件。

注意 網絡的前部分  squeezeNet的各層名字應該與 squeezeNet的網路配置文件相同,

這樣可以基於  squeezeNet的權重文件進行訓練。

 

2.3、MobileNet-SSD

我的 github參考  點擊打開鏈接

 

MobileNet

caffe參考 點擊打開鏈接

步驟:

參考原作者 VGG16-SSD 的網絡配置文件以及  MobileNet 的網路配置文件

寫出自己的  MobileNet-SSD配置文件。這也有V1和V2版本

注意點與上面的一樣。

2、4 shuffleNet-ssd 

參考:

 

shuffleNet caffe代碼  點擊打開鏈接

含有網絡的前部分的 權重文件

shufflenet-ssd  點擊打開鏈接

我修改後的shufflenet-ssd   點擊打開鏈接

這裏需要重新編譯 caffe-ssd 源碼,添加

 
  1. 通道重排層的 三個文件 :

  2. shuffle_channel_layer.cpp

  3. shuffle_channel_layer.cu

  4. shuffle_channel_layer.hpp

 

修改 caffe.proto文件

 
  1. message LayerParameter {

  2. ...

  3. optional ShuffleChannelParameter shuffle_channel_param = 164;

  4. ...

  5. }

  6. ...

  7. message ShuffleChannelParameter {

  8. optional uint32 group = 1[default = 1]; // The number of group

  9. }

重新編譯

 
  1. make clean

  2. make all -j

  3. make pycaffe

這裏需要注意的是:

組通道卷積DW卷積起始就是分組卷積的特殊情況,當分組數量等於 輸入數據的通道數量時。
有的 shufflenet 除了添加了 
shuffle_channel層 ,還添加了 DW卷積層 其實這裏可以不用,
就用普通的卷積層代替,添加一個group參數,且數值爲 上一層的輸出通道數量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章