iT邦幫忙

0

Tensorflow 的Object Detection物件辨識的問題

  • 分享至 

  • xImage

目前我已經依照以下網址
https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/tensorflow-1.14/training.html

完成到最後1個步驟
也已經匯出export_inference_graph

最後
我在該網址
https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/auto_examples/plot_object_detection_saved_model_tf1.html
下載程式Download Python source code:plot_object_detection_saved_model_tf1.py

並運用PyCharm去執行 Object Detection Demo
結果跳出一堆問題
如下!https://ithelp.ithome.com.tw/upload/images/20230311/20158643TIEp23XkwU.pnghttps://ithelp.ithome.com.tw/upload/images/20230311/20158643hLnj7vnPT5.png

Traceback (most recent call last):
File "D:\Python\Python310\lib\site-packages\keras\utils\data_utils.py", line 300, in get_file
urlretrieve(origin, fpath, DLProgbar())
File "D:\Python\Python310\lib\site-packages\keras\utils\data_utils.py", line 84, in urlretrieve
response = urlopen(url, data)
File "D:\Python\Python310\lib\urllib\request.py", line 216, in urlopen
return opener.open(url, data, timeout)
File "D:\Python\Python310\lib\urllib\request.py", line 519, in open
response = self._open(req, data)
File "D:\Python\Python310\lib\urllib\request.py", line 541, in _open
return self._call_chain(self.handle_open, 'unknown',
File "D:\Python\Python310\lib\urllib\request.py", line 496, in _call_chain
result = func(*args)
File "D:\Python\Python310\lib\urllib\request.py", line 1419, in unknown_open
raise URLError('unknown url type: %s' % type)
urllib.error.URLError:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\maggi\Downloads\plot_object_detection_saved_model_tf1 (1).py", line 43, in
IMAGE_PATHS = download_images()
File "C:\Users\maggi\Downloads\plot_object_detection_saved_model_tf1 (1).py", line 36, in download_images
image_path = tf.keras.utils.get_file(fname=filename,
File "D:\Python\Python310\lib\site-packages\keras\utils\data_utils.py", line 304, in get_file
raise Exception(error_msg.format(origin, e.errno, e.reason))
Exception: URL fetch failure on D:/TensorFlow/workspace/training_demo/images/test/RGBC130_Test_1.jpg: None -- unknown url type: d
Downloading data from D:/TensorFlow/workspace/training_demo/images/test/RGBC130_Test_1.jpg

Process finished with exit code 1

不知該怎麼辦


另外我也有從網址
https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/auto_examples/plot_object_detection_saved_model_tf1.html
下載第2個檔案用Jupyter打開

Download Jupyter notebook: plot_object_detection_saved_model_tf1.ipynb

但是也跳不出物件辨識的樣式,請問有台北人可以現場教學嗎

re.Zero iT邦研究生 5 級 ‧ 2023-03-11 23:21:13 檢舉
Update: 因為你補上內容,請無視我的發言~
https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way
請描述你遇上的狀況或情境,有能力或經驗的人有空時才方便回答你。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
re.Zero
iT邦研究生 5 級 ‧ 2023-03-12 00:48:39
最佳解答

首先, 我不熟 Tensorflow,後續只是從錯誤訊息做猜測。


我從在 Object Detection From TF1 Saved Model 提供的 plot_object_detection_saved_model_tf1.py 檔案內容,
加上你的部分錯誤訊息:

Traceback (most recent call last):
File "C:\Users\maggi\Downloads\plot_object_detection_saved_model_tf1 (1).py", line 43, in
IMAGE_PATHS = download_images()
File "C:\Users\maggi\Downloads\plot_object_detection_saved_model_tf1 (1).py", line 36, in download_images
image_path = tf.keras.utils.get_file(fname=filename,
File "D:\Python\Python310\lib\site-packages\keras\utils\data_utils.py", line 304, in get_file
raise Exception(error_msg.format(origin, e.errno, e.reason))
Exception: URL fetch failure on D:/TensorFlow/workspace/training_demo/images/test/RGBC130_Test_1.jpg: None -- unknown url type: d
Downloading data from D:/TensorFlow/workspace/training_demo/images/test/RGBC130_Test_1.jpg

我猜,你是修改 plot_object_detection_saved_model_tf1.py 原檔案的這部分(part-Begin@Line[31])而發生異常:

def download_images():
    base_url = 'https://raw.githubusercontent.com/tensorflow/models/master/research/object_detection/test_images/'
    filenames = ['image1.jpg', 'image2.jpg']

在程式的 download_images() 中, 會用 tensorflow.keras.utils.get_file() 從 「base_url + filenames」 組成的 「網路 URL」 去下載網路上的檔案, 並將傳回的本地端檔案位置存放於回傳(return)用的 image_paths 內。

故若想要直接使用本地端檔案,我能想到兩個方案,請擇一應用:

方案 #1: URL with file://

(如果 Python 環境有支援的話;只是這方案有點繞,我個人不喜歡)

part-Begin@Line[32]:

    base_url = 'file:///D:/TensorFlow/workspace/training_demo/images/test/'

方案 #2: Custom-IMAGE_PATHS

part-Begin@Line[43]:

#IMAGE_PATHS = download_images()
## 自訂 IMAGE_PATHS 內容而不使用 download_images() 與其回傳值;
IMAGE_PATHS = []
myBasePath = r'D:\TensorFlow\workspace\training_demo\images\test'
myFileNames = ['RGBC130_Test_1.jpg', 'RGBC130_Test_2.jpg']
for i in myFileNames:
    IMAGE_PATHS.append(os.path.join(myBasePath, i))

另,發文語法請參考:Markdown說明 - iT邦幫忙

另 + 另,我不是台北人~ (逃~

看更多先前的回應...收起先前的回應...
ccutmis iT邦高手 2 級 ‧ 2023-03-12 10:43:04 檢舉

我也不是台北人~ /images/emoticon/emoticon48.gif

Maggie iT邦新手 5 級 ‧ 2023-03-12 14:44:22 檢舉

謝謝,我先研究一下您的文章,如果方便的話是否能跟您要個LINE的資訊詢問

Maggie iT邦新手 5 級 ‧ 2023-03-12 15:51:26 檢舉

你好,我先試了你第一個方法:
並運用PyCharm去執行下載的plot_object_detection_saved_model_tf1.py該檔案
我依照你寫的第一個方法修改這些內容
((((base_url = 'file:///D:/TensorFlow/workspace/training_demo/images/test/'))))
又跳了一個問題,請求您幫忙~~~謝謝
https://ithelp.ithome.com.tw/upload/images/20230312/20158643zdQkgXh5NJ.png

Maggie iT邦新手 5 級 ‧ 2023-03-12 16:04:45 檢舉

這是我用第二種方法,
我從內容找到IMAGE_PATHS = download_images()
然後我看您的文章把IMAGE_PATHS = download_images()寫成#IMAGE_PATHS = download_images()
我就在那個位置學著往下寫
然後又出現了問題
很抱歉我不懂程式
也沒有基礎
在這打擾您
尋求您幫忙了https://ithelp.ithome.com.tw/upload/images/20230312/20158643XFkMV7HW3l.png

這是用方法2出現的問題

re.Zero iT邦研究生 5 級 ‧ 2023-03-12 21:35:19 檢舉

@ Maggie

你在 方案#1 遇到的問題:

https://ithelp.ithome.com.tw/upload/images/20230312/20158643zdQkgXh5NJ.png

是因為你的 TensorFlow (abbr.:TF) 與 TensorFlow Models (abbr.:TF-M) 的程式碼(版本)不匹配導致的。
基本原因是你安裝的 TF-M 使用到 tensorflow.gfile, 但你安裝的 TF 沒有這個屬性; 新版本的 TF 是以 tensorflow.io.gfile 取代舊版本的 tensorflow.gfile
(AttributeError: module 'tensorflow' has no attribute 'gfile' 有一些討論)
要處裡的話,只能自行嘗試不同版本的匹配狀況了。

因為你發問的連結有混用新舊版本(下區塊第二行的X為差異處):

(...).readthedocs.io/en/tensorflow-1.14/training.html
------------------------XXXXXXXXXXXXXXX
(...).readthedocs.io/en/latest/auto_examples/plot_(...)

我覺得你使用到不匹配的版本。
(不知你是否注意到,那兩個教程網頁的左上角有標示版本喔!)
請試著將所有 TF 相關軟體使用最新版本,或是版本釋出時期相近的。
(至少教材與教具請使用同一版本~)

Update:
我後來注意到版本不同,範例內容的差異性太大,難怪你會混用……
那就只能照前述的:試著將所有 TF 相關軟體使用最新版本,或是版本釋出時期相近的。

P.s.
TF-M 的最新版可在這裡找。
TensorFlow Official Models 2 應該就能匹配 TensorFlow 2
但跟教程能不能搭起來就是另一回事了~


你在 方案#2 遇到的問題:

https://ithelp.ithome.com.tw/upload/images/20230312/20158643XFkMV7HW3l.png

是因為你的 IMAGE_PATHS.append( ... ) 程式碼多一層小括號 (),導致 join()(myBasePath, i) 識別為 tuple 而發生例外。 請確認比對你我的程式碼差異。

Maggie iT邦新手 5 級 ‧ 2023-03-12 22:43:13 檢舉

你好,方案一有點太複雜了
所以我先再次修訂方法2
https://ithelp.ithome.com.tw/upload/images/20230312/20158643FJNkXRs27n.png
好像成功了
但是,怎麼不會跳出測試後的圖片
請問該如何像網路上
有跳出偵測的圖https://ithelp.ithome.com.tw/upload/images/20230312/201586439hWkOmhv1T.png

Maggie iT邦新手 5 級 ‧ 2023-03-12 22:52:15 檢舉

是否能跟您要個LINE ID 呢

re.Zero iT邦研究生 5 級 ‧ 2023-03-12 22:53:30 檢舉

Update: 請忽視我的 lag~

Maggie iT邦新手 5 級 ‧ 2023-03-12 22:59:08 檢舉

雖然最後執行完是跑出成功的說明如下
Running inference for D:\TensorFlow\workspace\training_demo\images\test\RGB\C130_Test_1.jpg... Done
Running inference for D:\TensorFlow\workspace\training_demo\images\test\RGB\C130_test_2.jpg... Done
但是並沒有跳出任何圖片

請問我能在程式碼裡再新增出
讓測試的圖片跳出來嗎??

Maggie iT邦新手 5 級 ‧ 2023-03-12 23:00:14 檢舉

不方便給LINE 的ID嗎??

Maggie iT邦新手 5 級 ‧ 2023-03-12 23:17:35 檢舉

@ re.Zero
請問網站下載的object_detection這個檔案,我用PyCharm Edu 2021.3.4似乎已經成功了,只是圖片並沒有跳出來。請問你能教我,後續我需要知道上網下載的內容裡,哪些地方要去將資料給成
我已經訓練好的資料、label檔、export_inference_graph導出經過訓練的推理圖

就是這個網址https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/tensorflow-1.14/training.html
以上步驟我都完成了,
現在你也教我改好下載的object_detection檔案了
但是我實在不知道裡面內容那些地方要修改成我訓練的資訊><"

re.Zero iT邦研究生 5 級 ‧ 2023-03-13 02:03:57 檢舉

@ Maggie

我昨晚提的測試方案有很大的問題,請改用下面方案試試:

plot_object_detection_saved_model_tf1.py 檔案尾部:

    plt.figure()
    plt.imshow(image_np_with_detections)
    print('Done')
plt.show()

改成

    plt.figure()
    plt.imshow(image_np_with_detections)
    plt.savefig(f'{image_path}.dt.png') ## 多這行而已;
    print('Done')
plt.show()

然後去看輸入檔案的目錄有沒多出檔名尾端為 '.dt.png' 的圖片檔案, 並檢視其內容。

Maggie iT邦新手 5 級 ‧ 2023-03-13 12:09:05 檢舉

有了,大大感謝

Maggie iT邦新手 5 級 ‧ 2023-03-13 20:36:03 檢舉

想請問說,我目前程式,照您的修訂後只有讀取2張圖,也存了兩張,假設我想讀取我整個資料夾的圖片,該如何修改呢?https://ithelp.ithome.com.tw/upload/images/20230313/20158643dUm8o65qI0.pnghttps://ithelp.ithome.com.tw/upload/images/20230313/20158643XDdFsUrRYu.png

是不是這一段要修訂呢https://ithelp.ithome.com.tw/upload/images/20230313/201586439niv5HrNya.png

re.Zero iT邦研究生 5 級 ‧ 2023-03-13 23:09:41 檢舉

Nope

2
I code so I am
iT邦高手 1 級 ‧ 2023-03-12 09:03:25

不用那麼辛苦了,直接使用Yolo,簡單多了,請參閱:
https://ithelp.ithome.com.tw/articles/10311276

看更多先前的回應...收起先前的回應...
ccutmis iT邦高手 2 級 ‧ 2023-03-12 10:39:56 檢舉

謝謝分享~
/images/emoticon/emoticon33.gif

Maggie iT邦新手 5 級 ‧ 2023-03-12 14:45:52 檢舉

謝謝您推薦我用YOLO,但是因為我目前學術研究已經到了尾聲了,時間有限,無法再下手別種辨識的方式,還是希望能用Tensorflow 的Object Detection物件辨識,希望能尋求幫忙,最後一個步驟該從何去解決

如果方便的話是否能跟您要個LINE的資訊詢問

tf.keras.utils.get_file 是自網路下載檔案,你設定 D:/TensorFlow/workspace/training_demo/images/test/RGBC130_Test_1.jpg 會有問題吧。download_images函數應改為:

def download_images():
    image_paths = ['image1.jpg', 'image2.jpg']
    return image_paths
Maggie iT邦新手 5 級 ‧ 2023-03-12 20:48:38 檢舉

您好,我依照您的教學,改成以下
但是依然有跳出一些問題
如下圖
https://ithelp.ithome.com.tw/upload/images/20230312/20158643yljyBj5xBH.pnghttps://ithelp.ithome.com.tw/upload/images/20230312/20158643cidTczNJVi.png

跳出的問題
Loading model...Done! Took 6.745026350021362 seconds
Traceback (most recent call last):
File "C:\Users\maggi\Downloads\plot_object_detection_saved_model_tf1 (4).py", line 127, in
category_index = label_map_util.create_category_index_from_labelmap(PATH_TO_LABELS,
File "D:\TensorFlow\models\research\object_detection\utils\label_map_util.py", line 229, in create_category_index_from_labelmap
categories = create_categories_from_labelmap(label_map_path, use_display_name)
File "D:\TensorFlow\models\research\object_detection\utils\label_map_util.py", line 209, in create_categories_from_labelmap
label_map = load_labelmap(label_map_path)
File "D:\TensorFlow\models\research\object_detection\utils\label_map_util.py", line 132, in load_labelmap
with tf.gfile.GFile(path, 'r') as fid:
AttributeError: module 'tensorflow' has no attribute 'gfile'. Did you mean: 'fill'?

froce iT邦大師 1 級 ‧ 2023-03-13 14:12:36 檢舉

拿新版的object dection範例來改。
https://github.com/tensorflow/models/blob/master/research/object_detection/colab_tutorials/object_detection_tutorial.ipynb

網上教學很多都是1.x時代留下來的,tf的api又經過大改,會出現很多這種狀況,你又沒程式基礎...

Maggie iT邦新手 5 級 ‧ 2023-03-13 21:44:43 檢舉

好唷我試試,謝謝,因為電腦在訓練時,TF2有點不相容,所以又用回去TF1.X

我要發表回答

立即登入回答