使用darkflow結合yolo影像辨識
darkflow將darknet(yolo)轉換成tensorflow方式執行,就可以使用tensorflow讀取yolo的設定檔與權重進行圖片與影片辨識。
Step1)安裝虛擬環境
#conda create -n darkflow python=3.7
#conda activate darkflow
Step2)安裝所需套件,tensorflow不能使用2以上的版本。
#pip install opencv-contrib-python
#pip install tensorflow==1.15
#pip install tensorflow-gpu=1.15
#pip install Cython
Step3)下載與安裝darkflow,切換到指定的資料夾
#git clone https://github.com/thtrieu/darkflow
#cd darkflow
#pip install -e .
Step4)重新安裝protobuf,需要3.20以前的版本
#pip uninstall protobuf
#pip install protobuf==3.20
Step5)下載yolo設定檔、權重檔與label.txt
使用yello(https://github.com/adriacabeza/Yello)的darkflow設定檔、權重檔與label.txt,將label.txt取代darkflow程式碼資料夾下的label.txt
(1)設定檔:https://github.com/pjreddie/darknet/blob/master/cfg/yolov2-tiny-voc.cfg,放置於darkflow程式碼資料夾下的cfg資料夾下。
(2)權重檔:https://pjreddie.com/media/files/yolov2-tiny-voc.weights,放置於darkflow程式碼資料夾下的cfg資料夾下。
(3)label.txt:https://github.com/adriacabeza/Yello/blob/master/labels.txt
Step6)在darkflow程式碼資料夾下,執行以下命令,辨識資料夾sample_img下所有圖片,並將辨識結果放置於out資料夾。
#python flow --model cfg\yolov2-tiny-voc.cfg --load cfg\yolov2-tiny-voc.weights --imgdir sample_img\
辨識結果如下。
Step6)啟用內建攝影機(/dev/camera0),
#python flow --model cfg\yolov2-tiny-voc.cfg --load cfg\yolov2-tiny-voc.weights --demo camera
出現以下錯誤
Traceback (most recent call last):
File "..\darkflow\flow", line 6, in <module>
cliHandler(sys.argv)
File "C:\darkflow\darkflow\darkflow\cli.py", line 29, in cliHandler
tfnet.camera()
File "C:\darkflow\darkflow\darkflow\net\help.py", line 87, in camera
cv2.namedWindow('', 0)
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:447: error: (-215:Assertion failed) !winname.empty() in function 'cv::namedWindow'
修改darkflow\net\help.py
第87行:cv2.namedWindow('camera', 0) #新增視窗的標題camera
第90行:cv2.resizeWindow('camera', width, height) #新增視窗的標題camera
第134行:cv2.imshow('camera', postprocessed) #新增視窗的標題camera
Step7)辨識影片,在darkflow資料夾下新增影片night.mp4,執行以下指令,會儲存辨識結果到檔案video.avi。
#python flow --model cfg\yolov2-tiny-voc.cfg --load cfg\yolov2-tiny-voc.weights --demo night.mp4 --saveVideo true
Step8)以下需要Nvidia GPU(筆者使用NVIDIA GeForce GTX 1660 Ti)的電腦,下載cuda10.0與cuDNN v7.6.4,並安裝tensorflow-gpu 1.15.0
解壓縮cuDNN v7.6.4,將資料夾bin、include、lib拷貝到cuda10.0資料夾下,請參考Windows10上安裝TensorFlow GPU套件。
安裝tensorflow-gpu 1.15.0
#pip install tensorflow-gpu==1.15.0
新增指令「--gpu 1.0」表示使用GPU進行辨識。
#python flow --model cfg\yolov2-tiny-voc.cfg --load cfg\yolov2-tiny-voc.weights --demo night.mp4 --saveVideo true --gpu 1.0
出現以下訊息表示成功啟用GPU。
2022-06-29 10:46:35.078005: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2022-06-29 10:46:35.621500: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
name: NVIDIA GeForce GTX 1660 Ti major: 7 minor: 5 memoryClockRate(GHz): 1.59
pciBusID: 0000:01:00.0
2022-06-29 10:46:35.621759: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
2022-06-29 10:46:35.642083: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_100.dll
2022-06-29 10:46:35.658661: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_100.dll
2022-06-29 10:46:35.668024: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_100.dll
2022-06-29 10:46:35.693681: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_100.dll
2022-06-29 10:46:35.710151: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_100.dll
2022-06-29 10:46:35.758278: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2022-06-29 10:46:35.758720: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
2022-06-29 10:46:37.345658: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
2022-06-29 10:46:37.345803: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165] 0
2022-06-29 10:46:37.346780: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0: N
2022-06-29 10:46:37.351854: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6144 MB memory) -> physical GPU (device: 0, name: NVIDIA GeForce GTX 1660 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
參考資料:
(1)https://github.com/thtrieu/darkflow
(2)AI – Yolo Model Training – 「Darkflow」 Environment Setting
(3)解决Could not load dynamic library ‘cudnn64_7.dll‘; dlerror cudnn64_7.dll not found
https://blog.csdn.net/qq_43203949/article/details/108550960
(4)Windows在Yolov2的配置