Win10安装YOLOv3.0
本文主要參考這個網(wǎng)址,本文是對這個網(wǎng)址所遇到錯誤的總結(jié),如有侵權(quán),請與我聯(lián)系。
0.配置深度學(xué)習(xí)環(huán)境
安裝之前,你要知道tensorflow的安裝環(huán)境,見官網(wǎng):
https://tensorflow.google.cn/install/source_windows#install_visual_c_build_tools_2015
MSVC+CUDA+cuDNN+python的版本都要正確
0.1? MSVC是VS附帶的軟件包:Microsoft Visual C++ 2015 Redistributable和Microsoft 生成工具 2015,tensorflow官網(wǎng)上說可以不用下載VS可以直接單獨下載它,但是你最好還是安裝一個VisualStudio2015,VS會附帶這兩個東西。我嘗試了很多次只安裝Microsoft Visual C++ 2015 Redistributable和Microsoft 生成工具 2015,結(jié)果CUDA裝不上。
VS2015免費版的下載可以去這個微信公眾號找:軟件安裝管家
tensorflow官網(wǎng)里有單獨的MSVC2015的下載地址,我這里也把它給出吧:
安裝 Visual C++ 生成工具 2015。此軟件包隨附在 Visual Studio 2015 中,但可以單獨安裝:
- Microsoft Visual C++ 2015 Redistributable 更新 3
- Microsoft 生成工具 2015 更新 3
這里可以看到:
選擇x64的,x64是給64位的系統(tǒng)用的,x86是給32位系統(tǒng)用的。
0.2? 關(guān)于CUDA的安裝可以參考這個網(wǎng)址里的CUDA安裝方法:
WIN10安裝TENSORFLOW(GPU版本)詳解(超詳細,從零開始) - 知乎
? ? ? ? 關(guān)于cuDNN的安裝你可以參考這個網(wǎng)址的安裝方法:
Win10+cuda8.0+cudnn5.1+tensorflow-gpu1.2.0+gtx1050ti,tensorflow環(huán)境搭建與配置_angzhangzhang123的博客-CSDN博客_gtx1050ti tensorflow
0.3? ?至于python我是下載了一個anaconda3,它的默認python版本是3.5,然后我就用Anaconda Prompt當(dāng)cmd用
1.下載代碼
本篇博客對應(yīng)的舊代碼:
帶模型版665.5MB+:
百度網(wǎng)盤鏈接?提取碼: bre5
只含代碼版5MB:
tensorflow_yolov3_mud.rar - 藍奏云
或者可以去看原作者的新代碼,這個代碼有更新,如果選擇使用新代碼,則本篇博客不適用新代碼,要根據(jù)github上的readme.md來走:
https://github.com/YunYang1994/tensorflow-yolov3.git
2.安裝第三方庫
這一步的目的就是安裝運行代碼所需要的第三方庫,requirements.txt里面就是各種依賴庫對應(yīng)的版本。
cd tensorflow-yolov3 pip install -r ./docs/requirements.txt命令行下(本人用的是Anaconda Prompt)輸入:pip install -r ./docs/requirements.txt的時候遇到很多錯誤,你可能需要符合以下兩點要求:
(1)首先是你的命令行要到tensorflow-yolov3這個目錄,
(2)然后要保證你的命令行下的python版本在3.5到3.6之間(直接輸入python查看版本)。
當(dāng)然你也可以用Anaconda Prompt命令行來一步一步安裝requirements.txt里安裝不了的依賴包。
(3)這個requirement.txt文件里安裝的tensorflow版本是GPU,1.11.0,它對你的顯卡的算力,也就是compute capability的要求是3.7以上,我的Tesla k40m的算力是3.5,每次運行demo時都不能使用GPU,都自動跑的CPU版本,所以我卸載了這個版本,換了更低的版本,如果你的tensorflow能跑下面的那個示例代碼就不用執(zhí)行這一步來卸載重裝其它版本的tensorflow了。關(guān)于你的顯卡的compute capability可以在官網(wǎng)上搜。
pip uninstall tensorflow-gpu==1.11.0 pip install tensorflow-gpu==1.10.0我NVIDIA GTX 1060的顯卡安裝tensorflow-gpu==1.12.0、tensorflow-cpu==1.12.0、tensorflow-cpu==1.5.0也可以,2.0的tensorflow則不行了。
運行這個示例代碼看看,你的tensorflow是否安裝成功以及是在GPU還是CPU上跑:
import tensorflow as tf a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') c = tf.matmul(a, b) sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) print (sess.run(c)) sess.close()tensorflow安裝成功,并可以看到我的是在GPU上跑的。?
tensorflow-cpu版的話就是這樣:
3.導(dǎo)出.pb模型文件
第3步把加載好的COCO權(quán)重導(dǎo)出為TF checkpoint (yolov3.ckpt) 和 frozen graph (yolov3_gpu_nms.pb) 。
關(guān)于這一步,它這一句話只是解釋說明你現(xiàn)在做的事,并不是指導(dǎo)你去做什么,你照著它下面的指示做就好了,不用管這句話。
如果你沒有yolov3.weights的話,去下載,然后放到./checkpoint目錄下。下載地址是:
https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz
接著anaconda prompt下或cmd下輸入命令:?
python convert_weight.py --convert --freeze這一步是把作者的這個yolov3.weights轉(zhuǎn)化成識別的時候使用的.pb文件,這個.pb文件可以識別生活中常見的物體,如果你是用yunyang1994在github上的新代碼的話就不能運行,必須使用我的舊代碼。
4.視頻識別
第4步:然后,./checkpoint目錄下就會出現(xiàn)一些.pb文件。現(xiàn)在可以跑Demo腳本了:
python nms_demo.py python video_demo.py # if use camera, set video_path = 0輸入第一個命令會報錯:ModuleNotFoundError: No module named 'cv2',則輸入命令安裝opencv2:
pip install opencv-python輸入第二個命令時,你可能會報錯:python video_demo.py # if use camera, set video_path = 0
因為你的電腦沒有攝像頭,這樣的話可以不用管。如果你的電腦有攝像頭的話,這個命令就是開啟你的攝像頭實時識別現(xiàn)實中的物體
假如你在使用攝像頭時出現(xiàn)錯誤:
Traceback (most recent call last):
? File "video_demo.py", line 29, in <module>
? ? ["Placeholder:0", "concat_9:0", "mul_6:0"])
? File "D:\tensorflow-yolov3-master\core\utils.py", line 220, in read_pb_return_tensors
? ? return_elements=return_elements)
? File "D:\Pro2\Anaconda3\lib\site-packages\tensorflow\python\framework\importer.py", line 283, in import_graph_def
? ? raise ValueError('No op named %s in defined operations.' % node.op)
ValueError: No op named GatherV2 in defined operations.
說明你的tensorflow版本太低,需升級,如果出現(xiàn)了其他的錯誤,檢查你的video_demo.py文件里使用的那個nms.pb文件是cpu還是gpu版本的,是否與你的tensorflow-cpu或gpu相匹配。
5.訓(xùn)練VOC或COCO格式的數(shù)據(jù)
到了這一步,如果你要弄VOC格式的數(shù)據(jù)集,你可以不往下看了,可以轉(zhuǎn)到下面這篇博客,而且強烈建議跳到這里,因為下面這篇博客更詳細:
tenforflow版YOLOv3下VOC數(shù)據(jù)集的準備和訓(xùn)練_UryWu的博客-CSDN博客
如果你要弄COCO格式的數(shù)據(jù)集:
官網(wǎng):
http://cocodataset.org/
5.1下載的數(shù)據(jù)圖像集是那個COCO官網(wǎng)的--》Dataset下的--》Download--》Images的--》2017 Train images [118K/18GB]
但是官網(wǎng)上的很慢,可以去這個網(wǎng)址下載。
強烈推薦用迅雷下載,因為下載到一半突然網(wǎng)絡(luò)錯誤是很痛苦的。我就踩了不用迅雷的坑。
上面那個數(shù)據(jù)集太大,建議用這個小數(shù)據(jù)集算了:
5.2下載的標注集是COCO官網(wǎng)的--》Dataset下的--》Download--》Images的--》2017 Train/Val annotations [241MB]
6.提取COCO數(shù)據(jù)集為txt
然后,就要從數(shù)據(jù)集里提取一些有用的信息了,比如邊界框,拿這些信息生成你自己的.txt文件。
python core/extract_coco.py --dataset_info_path ./data/train_data/COCO/train2017.txt?
在這個目錄里用的cmd命令行窗口里輸入上面那個命令后,報錯:
python: can't open file 'core/extract_coco.py': [Errno 2] No such file or directory
于是我去scipts這個目錄下找到這個缺失的文件,并把它放到指定的core目錄下。
?
根據(jù)教程輸入命令:
python core/extract_coco.py --dataset_info_path ./data/train_data/COCO/train2017.txt錯誤:?
File "core/extract_coco.py", line 30, in main
? ? labels = json.load(open(flags.json_path, encoding='utf-8'))
FileNotFoundError: [Errno 2] No such file or directory: '/home/yang/test/COCO/annotations/instances_train2017.json
應(yīng)該是這個文件里的路徑不對,我去改一下路徑。
?
可以看到源文件中有三個路徑對于我的文件目錄都要改?
我的三個路徑:
?
7.txt轉(zhuǎn)tfrecord
生成那個train2017.txt文件后,
接下來,要把圖像數(shù)據(jù)集轉(zhuǎn)成.tfrecord,就是用二進制來保存數(shù)據(jù)。
python core/convert_tfrecord.py --dataset_txt ./data/train_data/COCO/train2017.txt --tfrecord_path_prefix ./data/train_data/COCO/tfrecords/coco?txt文件里就是數(shù)據(jù),它的格式如下:
?--xxxx是參數(shù)標識符,這個后面就是路徑參數(shù),列如這里的--dataset_txt是路徑參數(shù)標識符,它的后面就是用來輸入的txt文件的路徑。你的路徑一定要存在,不存在的更換路徑或是自己創(chuàng)建這個目錄。后面的--tfrecord_path_prefix就是輸出的tfrecord文件的地址,我這里是./data/train_data/COCO/tfrecords/coco,我用的是相對路徑,最后面的這個coco是生成的tfrecord文件名,這個不是文件夾。
參考網(wǎng)址
這一步可能會報錯:
convert_tfrecord.py: error: unrecognized arguments: --num_tfrecords 100
于是我把這個--num_tfrecords 100配置參數(shù)去掉了,因為報錯的這個convert_tfrecord.py文件里:
?
它的參數(shù)中
?
不包括這個--num_tfrecords
繼續(xù)輸入7.開頭的那個命令,繼續(xù)報錯:
? compat.as_bytes(path), compat.as_bytes(compression_type), status)
? File "E:\Anaconda3-5.2.0-Windows-x86_64\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 526, in __exit__
? ? c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.NotFoundError: Failed to create a NewWriteableFile: ./data/train_data/COCO/tfrecords/coco.tfrecords : ??\udcd5?\udcbb\udcb5\udcbd?\udcb6\udca8\udcb5\udcc4·\udcbe\udcb6\udca1\udca3
; No such process
根據(jù)這個網(wǎng)址的提示:error when generate tfrecord · Issue #41 · datitran/raccoon_dataset · GitHub
要修改輸入輸出路徑,我覺得就是這個文件convert_tfrecord.py里的路徑錯誤,上面那個是保存數(shù)據(jù)圖片名字和標注的txt文件的路徑,下面是輸出打包后tfrecords文件的目錄,沒有這個保存目錄它會自己創(chuàng)建:
?
?我改成了:
?
繼續(xù)輸入7.開頭的那個命令,開始生成tfrecord文件,tfrecord文件就是把那些Images數(shù)據(jù)和標注好的annotations標注打包起來,生成一個tfrecord文件,并用于訓(xùn)練:
?
為了好看,我把它的名字改成了tain2017.tfrecords
之后,在這下面兩個網(wǎng)址下載用來測試的圖片和標注。
http://images.cocodataset.org/zips/test2017.zip
wget http://images.cocodataset.org/annotations/image_info_test2017.zip
根據(jù)上面第7、8的步驟,用同樣的方法生成tfrecord文件,我取名為test2017.tfrecords
8.模型訓(xùn)練、測試與評估
然后打開tensorflow-yolo3下面的quick_train.py文件:
?
1.???BATCH_SIZE是總共訓(xùn)練包的個數(shù),但你訓(xùn)練時出現(xiàn)顯存不夠(Out of range),或是藍屏、程序崩潰的時候可以嘗試把這個參數(shù)調(diào)小。
2.????STEPS是迭代次數(shù)的多少,低則識別率低,反之則否,我用3000幅左右的圖片來訓(xùn)練并且迭代2500次用了一個半小時,我迭代50000次則用了25個小時左右。
3.????CLASSES之后的路徑是存放你要識別的類別的txt文件。
4.????ANCHORS之后的路徑是你訓(xùn)練的網(wǎng)絡(luò)單元的權(quán)重文件,這個txt文件名含有anchors,我們用的是VOC格式的數(shù)據(jù),這里要改為voc_anchors.txt。
最下面的兩個train_tfrecord和test_tfrecord是之前生成的,改好路徑。改為:
?
注意這兩個tfrecords文件的路徑,你的路徑不一定和我的相同,但一定要保證你有你自己的這個路徑,并且存在這兩個文件。
然后在anaconda prompt中進入tensorflow-yolo3的根目錄,輸入命令開始訓(xùn)練:
python quick_train.py?最后會在tensorflow-yolo3/checkpoint目錄下生成三個ckpt文件,這個就是訓(xùn)練好的模型。
?
然后在anaconda prompt中輸入命令生成模型應(yīng)用文件:
python convert_weight.py -cf ./checkpoint/yolov3.ckpt-2500 -nc 1 -ap ./data/coco_anchors.txt --freeze此命令會利用上面的ckpt文件生成*cpu_nms.pb和*gpu_nms.pb文件。
?
然后打開文件:tensorflow-yolov3/quick_test.py
?
?anaconda prompt下輸入命令來測試:
python quick_test.py?這時候等一會兒,會出現(xiàn)那幅測試的圖片,被識別出來的物體會被框出來。
然后是評估模型,打開tensorflow-yolov3/evaluate.py:
?
?anaconda prompt下輸入命令來評估:
python evaluate.py??
這個mAP就是識別率。
*****完結(jié)撒花*****?
另附參考博客:
Github 項目 - YOLOV3 的 TensorFlow 復(fù)現(xiàn) - AI備忘錄
總結(jié)
以上是生活随笔為你收集整理的Win10安装YOLOv3.0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓从入门到进阶第一篇(环境搭建)
- 下一篇: java所用到的英语单词_JAVA常用英