tensorflow模型導(dǎo)出與OpenCVDNN中使用_第1頁(yè)
tensorflow模型導(dǎo)出與OpenCVDNN中使用_第2頁(yè)
tensorflow模型導(dǎo)出與OpenCVDNN中使用_第3頁(yè)
tensorflow模型導(dǎo)出與OpenCVDNN中使用_第4頁(yè)
tensorflow模型導(dǎo)出與OpenCVDNN中使用_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、OpenCV DNN1 塊Deep Neural Network - DNN 是OpenCV中的深度神經(jīng)網(wǎng)絡(luò)模塊,支持基 于深度學(xué)習(xí)模塊前饋網(wǎng)絡(luò)運(yùn)行、實(shí)現(xiàn)圖像與視頻場(chǎng)景中的?圖像分類?對(duì)象檢測(cè)?圖像分割其模型導(dǎo)入與加載的相關(guān)API支持以下深度學(xué)習(xí)框架? tensorflow - readNetFromTensorflow? caffe - readNetFromCaffe? pytorch - readNetFromTorch? darknet - readNetFromDarknetOpenCV3.4.1以上版本支持tensorflow1.11版本以上的對(duì)象檢測(cè)框架(object detet

2、ion) 模型導(dǎo)出使用,當(dāng)前支持的模型包括以下:ModelVersionMobileNet-SSD v12017_11_17weightsconfigMobileNet-SSD v1 PPN2018_07_03weightsconfigMobileNet-SSD v22018_03_29weightsconfigInception-SSD v22017_11_17weightsconfigPaster-RCNN Inception v22018_01_28weightsconfigFaster-RCNN Res Net-502018_01_23weightsconfig也就是說(shuō)通過 tenso

3、rflow object detection API框架進(jìn)行遷移學(xué)習(xí)訓(xùn)練模型,導(dǎo)出預(yù)測(cè)圖之后,可以通過OpenCV3.4.1以上版本提供幾個(gè)python腳本導(dǎo)出graph配置文件,然后就可以在OpenCV DNN真塊中使用tensorflow 相關(guān)的模型了。感覺十分方便,下面就按照操作走一波!使用t ensorf l ow模型OpenCV DNN 模塊根據(jù)tensoflow中遷移學(xué)習(xí)或者下載預(yù)訓(xùn)練模型不同,提供如下可以使用腳本生成對(duì)應(yīng)的模型配置文件tf_text_graph_ssd.pytf_text_graph_faster_rcnn.pytf_text_graph_mask_rcnn.py

4、這是因?yàn)?,OpenCV DNNB要由g據(jù)text版本的模型描述文件來(lái)解析 tensorflow 的pb文件,實(shí)現(xiàn)網(wǎng)絡(luò)模型加載。對(duì)SSD對(duì)象檢測(cè)模型,生成模型描述文件運(yùn)行以下命令行即可(在一行執(zhí)行):python tf_text_graph_ssd.py-input /path/to/model.pb-config /path/to/example.config-output /path/to/graph.pbtxt以MobileNet-SSD v2 版本為例,首先下載該模型,解壓縮以后會(huì)發(fā)現(xiàn)里面有一個(gè) frozen_inference_graph.pb 文件,使用 tensorflow力口載預(yù)

5、測(cè)圖進(jìn)行預(yù)測(cè)的代碼如下:import tensorflow as tfimport cv2 as cv# Read the graph.model_dir = 'D:/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_g raph.pb'with tf.gfile.FastGFile(model_dir, 'rb') as f:graph_def = tf.GraphDef()graph_def.ParseFromString(f.read()with tf.Session() as ses

6、s:# Restore sessionsess.graph.as_default()tf.import_graph_def(graph_def, name='')# Read and preprocess an image.img = cv.imread('D:/images/objects.jpg')rows = img.shape0cols = img.shape1inp = cv.resize(img, (300, 300)inp = inp:, :, 2, 1,0 # BGR2RGB# Run the modelout = sess.run(sess.g

7、raph.get_tensor_by_name('num_detections:0'), sess.graph.get_tensor_by_name('detection_scores:0'), sess.graph.get_tensor_by_name('detection_boxes:0'),sess.graph.get_tensor_by_name('detection_classes:0'), feed_dict='image_tensor:0': inp.reshape(1, inp.shape0, in

8、p.shape1, 3)# Visualize detected bounding boxes.num_detections = int(out00)for i in range(num_detections):classId = int(out30i)score = float(out10i)bbox = float(v) for v in out20iif score > 0.3:x = bbox1 * colsy = bbox0 * rowsright = bbox3 * colsbottom = bbox2 * rowscv.rectangle(img, (int(x), int

9、(y), (int(right), int(bottom), (125, 255, 51), thick ness=2) cv.imshow('TensorFlow MobileNet-SSD', img) cv.waitKey()運(yùn)行結(jié)果如下:基于 frozen_inference_graph.pb 生成 graph.pbtxt模型酉己置文件,命令行運(yùn)行截圖如下:使用 OpenCV DNN®塊力口載 tensorflow 模型(frozen_inference_graph.pb與graph.pbtxt),實(shí)現(xiàn)預(yù)測(cè)圖使用的代碼如下(注意此時(shí)不需要依賴tensorflo

10、w)import cv2 as cvmodel_path = 'D:/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/frozenJnference_ graph.pb'config_path = 'D:/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/graph.pbtxt'net = cv.dnn.readNetFromTensorflow(model_path, config_path)frame = cv.imread('D:/images/objects.jpg&#

11、39;)rows = frame.shape0cols = frame.shape1net.setInput(cv.dnn.blobFromImage(frame, size=(300, 300), swapRB=True, crop=Fal se)cvOut = net.forward()print(cvOut)for detection in cvOut0,0,:,:score = float(detection2)if score > 0.3:left = detection3 * colstop = detection4 * rowsright = detection5 * co

12、lsbottom = detection6 * rowscv.rectangle(frame, (int(left), int(top), (int(right), int(bottom), (23, 230, 210), thickness=2)cv.imshow('opencv-dnn-ssd-detect', frame)cv.waitKey()運(yùn)行結(jié)果如下(跟tensorflow中的運(yùn)行結(jié)果完全一致,OpenCV DNNM然靠譜):OpenCV DNN行人檢測(cè)本人嘗試了基于 tensoflow object detection API使用 MobileNet-SSDv2

13、遷移學(xué)習(xí)實(shí)現(xiàn)自定義數(shù)據(jù)集訓(xùn)練,導(dǎo)出預(yù)測(cè)圖之后,使用 OpenCV DNN 模塊的python腳本生成對(duì)象的圖配置文件 graph.pbtxt ,通過 OpenCVto 載模型使用,實(shí)時(shí)預(yù)測(cè),最后上一張運(yùn)行結(jié)果圖:OpenCV DNNM用代碼如下 import cv2 as cv inference_pb = "D:/pedestrian_data/export_pb/frozen_inference_graph.pb" graph_text = "D:/pedestrian_data/export_pb/graph.pbtxt"# load tensor

14、flow modelnet = cv.dnn.readNetFromTensoflow(inference_pb, graph_text) image = cv.imread("D:/python/Pedestrian-Detection/test_images/3600.jpg")h = image.shape0w = image.shape1# 獲得所有層名稱與索引layerNames = net.getLayerNames()lastLayerld = net.getLayerId(layerNames-1)lastLayer = net.getLayer(lastL

15、ayerId)print(lastLayer.type)# 檢測(cè)net.setInput(cv.dnn.blobFromImage(image, size=(300, 300), swapRB=True, crop=Fal se)cvOut = net.forward()for detection in cvOut0,0,:,:score = float(detection2)if score > 0.5:left = detection3*wtop = detection4*hright = detection5*wbottom = detection6*h#繪制cv.rectangle(image, (int(left), int(top), (int(right), int(bottom), (0, 255, 0), thic

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論