背景
本文原先基於百度的AIstudio訓練,但是五月份的時候百度停止了對tensorflow框架的支持,所以以下僅作為參考。
百度AiStudio訓練yolov3模型
AiStudio分為work和data兩個文件夾,work保留永久文件,data每次重啟都不會保存
因此將我們需要的代碼、數據集和安裝包都先打包成數據集上傳,啟動項目前添加數據集。
以下是我的使用步驟:
本教程前置工作
需要安裝好Anaconda、tensorflow-gpu、keras、keras-yolo3目錄和keras-yolo3目錄下的VOCdevkit目錄和logs/000目錄。
安裝Anaconda
這里選用miniconda,因為每次重啟系統都要解壓文件,原版太大了不好。在官網上下載Linux64位的版本。啟動系統后,從/data/dataXXX目錄中復制到/work/conda3目錄,用bash miniconda.sh安裝。路徑不要選擇默認路徑,選擇~/work下的目錄。
bash ~/work/Miniconda3.sh
source ~/work/conda3/bin/activate
安裝tensorflow-gpu
注意這里不要換用清華源,清華的cuda最高版本為8.0,而我們需要10.0
conda install python=3.6
conda insntall tensorflow-gpu==1.14.0
pip install keras==2.1.5
pip install Pillow
pip install matplotlib
conda install ffmpeg
pip install opencv-contrib-python
建立VOC格式目錄
VOCdevkit
└── VOC2007
├── Annotations
├── ImageSets
│ ├── Layout
│ ├── Main
│ └── Segmentation
├── JPEGImages
└── labels
上傳數據集
這里把kears-yolo3代碼和自己處理好的jpeg圖片以及xml上傳為數據集,並在自己的項目中選擇這個數據集。
PS.可以提前將jpeg圖片文件夾名字改為JPEGImages,xml文件夾名稱改為Annotations,使用時直接復制過去就好。
- 從/data/dataXXX目錄中解壓到/data目錄
cp ~/data/dataxxx/data.zip ~/data
ls
unzip data.zip
- 移動到keras-yolo3/VOCdevkit對應子目錄下
cd ~/data
mv JPEGImage ~/work/keras-yolo3/VOCdevkit/VOC2007/
mv Annotations ~/work/keras-yolo3/VOCdevkit/VOC2007/
數據集划分
在VOC2007目錄內新建python腳本,將數據集划分為訓練集和測試集。
代碼見從零開始配置yolov3(keras)訓練測試自己的數據中的第三節。
cd ~/work/keras-yolo3/VOCdevkit/VOC2007
python create_ImageSets.py
生成2017train等文件
運行keras-yolo3下的voc_annotation.py文件,這時主目錄下會出現2007為前綴的幾個文件。
cd ~/work/keras-yolo3
python voc_annotation.py
修改anchors
運行kmeans.py文件,將model_data中的yolo_anchors.txt文件修改成剛才輸出的數據。
修改bacth
修改train.py中的batch_size。總共有兩處,最好改成2,過大可能會報錯。epoch按需修改,大概loss可以降至17到30。
運行代碼
python train.py
使用訓練后的模型
將/logs/000下的trained_weights_final.h5
移動到model_data下,修改名字成yolo.h5
文件畫圖導出
修改yolo.py和yolo_vedio.py文件,改成下面github倉庫里對應的文件。代碼見下:keras-yolo3
運行下面的代碼可以生成圖片對應的txt預測結果,去掉--txt則生成識別的圖片。
python yolo_video.py --imgdir ~/work/keras-yolo3/imagetest --txt
最后從指定的文件夾中,使用左邊的可視界面下載到本機即可。
查看訓練過程
本機安裝Anaconda和tensorflow,使用命令tensorboard --logdir=C:\Users\XXX\Desktop\logs
,
在瀏覽器上運行http://localhost:6006/
即可查看