日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > Caffe >内容正文

Caffe

微调CaffeNet用于车颜色识别

發布時間:2024/1/18 Caffe 112 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微调CaffeNet用于车颜色识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明:主要思想是微調使用ImageNet預訓練的CaffeNet模型參數,用來對車顏色進行識別。為了不和其他文件混亂,我們在examples下新建文件夾finetune_myself。


1.計算圖像均值

caffenet需要圖像均值文件,所以先計算均值文件。在finetune_myself下新建文件夾Image_mean,從imagenet中拷貝make_imagenet_mean.sh到finetune_myself下,更名為make_image_mean.sh(為了和imagenet區分),然后修改腳本如下:

EXAMPLE=examples/finetune_myself #該路徑下為訓練圖像的lmdb文件 DATA=examples/finetune_myself/Image_mean #該路徑為生成的均值文件保存的地方 TOOLS=build/tools$TOOLS/compute_image_mean $EXAMPLE/car_train_lmdb \ #這里的lmdb和自己的對應$DATA/image_mean.binaryproto #生成的均值文件名字,這里為了區分改一下名字
這樣,生成的均值文件保存在finetune_myself下的Image_mean文件夾里,名字為image_mean.binaryproto。


2.準備caffenet模型

在finetune_myself下新建文件夾,命名為models,將caffenet的train_val.prototxt、solver.prototxt和deploy.prototxt復制到此models文件夾里,然后,對模型進行修改。假設我們的訓練集類別是m,那么fc8層的num_output需要修改成m,又由于finetune時用到的權重是根據層名匹配的,而fc8的num_output已經修改,該層的參數必須重新學習,所以我們把該層的名字也進行修改,如改為fc8_myself。具體修改如下。

對train_val.prototxt的修改:

(1)?mean_file路徑:"examples/finetune_myself/Image_mean/image_mean.binaryproto"


訓練和測試階段的data層均要修改。

(2)假設訓練集和測試集的lmdb文件在finetune_myself下,所以訓練階段的的data層:

data_param {source:"examples/finetune_myself/car_train_lmdb"batch_size: 50 #這里自己可以修改合適的batch大小backend:LMDB }

同理,TEST階段的data層也作同樣的修改。即:

data_param{source: "examples/finetune_myself/car_test_lmdb"batch_size:50backend:LMDB}

(3)修改fc8層和相關層

將層名改為fc8_myself(當然其他也行),并修改權重的lr_mult=10,bias的lr_mult=20,目的是讓非微調層學習更快。num_output修改為類別數。具體如下:

layer {name: "fc8_myself"type: "InnerProduct"bottom: "fc7"top: "fc8_myself"param {lr_mult: 10decay_mult: 1}param {lr_mult: 20decay_mult: 0}inner_product_param {num_output: 8 #根據類別修改,我做的實驗為8類weight_filler {type: "gaussian"std: 0.01}bias_filler {type: "constant"value: 0}} } 與fc8相關的層也要修改:

layer {name:"accuracy"type:"Accuracy"bottom: "fc8_myself"bottom:"label"top:"accuracy"include {phase: TEST} }


layer {name: "loss"type: "SoftmaxWithLoss"bottom: "fc8_myself"bottom: "label"top: "loss" }

對solver.prototxt的修改:

主要是 net:"examples/finetune_myself/models/train_val.prototxt",
該路徑改為train_val.Prototxt的路徑。

還有

snapshot_prefix:"examples/finetune_myself/models/caffenet"

此路徑是訓練過程得到的caffemodel和solverstate保存路徑,按自己想保存的路徑更改。

對deploy.prototxt的修改:

網絡的名字name要與train_val.prototxt相同。然后修改fc8層和相關層:

layer {name: "fc8_myself"type: "InnerProduct"bottom: "fc7"top: "fc8_myself"inner_product_param {num_output: 8 #根據類別數改} }

layer {name:"prob"type:"Softmax"bottom: "fc8_myself"top:"prob" }
這樣,模型就改好了。

3.準備預訓練好的caffenet模型參數

finetune_myself下新建文件夾pre_train_models,運行

./scripts/download_model_binary.py examples/finetune_myself/pre_train_models即將文件下載在pre_train_models中。

4.開始訓練

./build/tools/caffe train –solver examples/finetune_myself/models/solver.ptototxt –weights examples/finetune_myself/pre_train_models/bvlc_reference_caffenet

5.結果

訓練結果:

精度還是挺高的。

訓練完成后,得到caffemodel文件:
測試:
./build/examples/cpp_classification/classification.bin **/**/deploy.prototxt **/***/models_iter_100000.caffemodel **/**/image_mean.binaryproto **/**/labels.txt **/**/car.jpg
這些路徑按自己的設置,labels是標簽,比如你的train.txt中白色標簽是0,紅色標簽是1,那么labels中第一行是white,第二行是red,其他的也是這樣按順序排。

結果: white - "0.9963" gray - "0.0036" green - "0.0001"輸出前三個預測結果










總結

以上是生活随笔為你收集整理的微调CaffeNet用于车颜色识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。