pytorch版本下的yolov3訓練實現火焰檢測

時隔好多好多日子了,一直沒寫博客(小聲bb,最近忙着接私活兒)。馬上就要開學了,害,回去就要加油幹了!!!

本次教程寫個pytorch版本的yolov3檢測,用的火焰檢測數據集,效果如下:

這就可以做個火警預測了,yolov3是真的香呀,這次用到的是github 的一個pytorch實現版本,效果上還是不錯的。

那麼, 接下來,就跟我一起來實操起來吧!!!

一、環境要求

老規矩,工欲善其事必先利其器,搭建環境!!

  • Python: 3.7.4
  • Tensorflow-GPU 1.14.0
  • Keras: 2.2.4
  • numpy:1.17.4

這裏建議用anaconda來快速搭建一個虛擬環境,速度很快的!!!

二、數據集準備

從互聯網上收集火焰圖片,並用labelimg進行標註,得到標註圖片以及標註的位置信息。

如下:

萬事俱備,開始coding!!!!

三、Pytorch版本的YoloV3

Pytorch_Yolov3

1.安裝模塊

requirements.txt中含有本次所需的python模塊.

  • numpy
  • torch==1.2.0
  • torchvision==0.4.0
  • matplotlib
  • tensorflow==1.13.2
  • tensorboardX==2.0
  • terminaltables
  • pillow
  • tqdm

可用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt來安裝所需的模塊。

2.下載所需的權重文件

Linux平臺下,cd weights/,之後運行bash download_weights.sh文件,即可下載所需的權重信息。

Windows平臺下,可直接編輯download_weigths.sh文件,複製其中的模型鏈接,在遊覽器中打開下載。

下載完畢後,在weights文件的內容如下:

3.修改配置文件

Linux平臺下,運行cd config/目錄,之後運行 bash create_custom_model.sh <num-classes> 其中 爲類別參數,根據你的需要修改,這裏我修改爲1.

Windows平臺下,配置git的bin目錄下的變量之後,運行sh.exe文件。之後cd config目錄之後,運行sh create_custom_model.sh <num-classes>即可

執行完畢之後,修改custom.data,修改其配置信息即可。

4.配置本次yolov3的數據格式

重點來了,重點來了,重點來了!!!

在該github下,對自定義的數據,並未闡述,只是一筆帶過。但該yolov3的版本所需的數據格式跟voc格式和coco格式都不大一樣。每張圖片對應一個txt標註信息。其第一列爲類別信息,之後的四列爲標準化的標註信息。其中 label 是類別在 data/custom/classes.names 的索引, <> 代表縮放後的比例係數

  • <1>*w = (xmax-xmin)/2 + xmin
  • <2>*h = (ymax-ymin)/2 + ymin
  • <3> = (xmax-xmin)/w
  • <4> = (ymax-ymin)/h

這裏github未提供數據轉換,這裏先新建兩個Annotations和JPEGImages的文件夾,將準備好的圖片和xml標記信息放於其中。

然後運行voc2yolov3文件,生成train.txtvalid.txt文件信息,將數據集劃分,即將圖片路徑保存在兩個txt文件中。

之後運行voc_annotation.py對xml標記信息進行處理,處理成下列的txt文件形式

並記得修改classes.names的類別名,以及將圖片複製到images文件中。即

好了,數據格式製作完成了!!!

下面可以開始訓練了.

5.運行train.py

# 訓練命令
python train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data --pretrained_weights weights/darknet53.conv.74
# 添加其他參數請見 train.py 文件
    
# 從中斷的地方開始訓練
python train.py --model_def config/yolov3-custom.cfg --data_config config/custom.data --pretrained_weights checkpoints/yolov3_ckpt_99.pth --epoch 

若出現警告解決方案UserWarning: indexing with dtype torch.uint8 is now deprecated, please use a dtype torch.bool instead.

model.py計算損失的位置 大概在 192 行左右添加以下兩句:

obj_mask=obj_mask.bool() # convert int8 to bool

noobj_mask=noobj_mask.bool() #convert int8 to bool

運行過程如圖所示:

可通過tensorboard來查看運行過程中的變化。tensorboard --logdir='logs\'

6.測試結果

叮咚,叮咚,馬上大功告成了!!!

python detect.py --image_folder data/imgs/ --weights_path checkpoints/yolov3_ckpt_99.pth --model_def config/yolov3-custom.cfg --class_path data/custom/classes.names

運行上述,其會對data/imgs 文件下的圖片進行預測,並將預測結果保存到output/imgs文件下

若是在 GPU 的電腦上訓練,在 CPU 的電腦上預測,則需要修改 model.load_state_dict(torch.load(opt.weights_path, map_location='cpu'))

好了,大功告成了!!! 立下flag!!! 明天再更一個!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章