本文是筆者在Windows 10上用python3.6 + Tensorflow gpu 1.9.0以egohand(一份手部檢測數據集)訓練過程當中遇到的問題:
從頭開始提及,筆者看到github上的一份已訓練實現的手部識別源碼
https://github.com/victordibia/handtracking
跑通一遍。實際已經運行成功了。只是用的是原有已訓練完的模型。python
第二步,是但願在源訓練數據集上用Tensorflow從新訓練一遍。linux
簡述一下步驟:git
下載手部檢測數據
來自於
http://vision.soic.indiana.edu/projects/egohands/github
若是當前目錄下沒有egohands_data.zip則下載,即調用download_egohands_dataset() 建議此步驟分紅本身手動先下載好壓縮包後再拷貝進來,避免下載過程當中斷續
不然解壓egohands_data.zip並獲得egohands文件夾,並對其中的圖片數據執行rename_files()
rename_files()會將全部的圖片重命名,加上其父文件夾的名稱,避免圖片名重複,並調用generate_csv_files()
generate_csv_files()讀取每一個場景下的圖片,調用get_bbox_visualize(),根據標註文件polygons.mat繪製手部輪廓和Anchor Box並顯示,同時將圖片標註轉換並存儲爲csv文件,所有處理完後,再調用split_data_test_eval_train()
split_data_test_eval_train()完成訓練集和測試集的分割,在images文件夾中新建train和test兩個文件夾,分別存放對應的圖片和csv標註
完成以上工做後,即可以手動刪除一開始解壓獲得的egohands文件夾api
3.調用generate_tfrecord.py(不在該git中,從https://github.com/datitran/raccoon_dataset/blob/master/generate_tfrecord.py
直接拷貝過來),將訓練集和測試集整理成TFRecord文件app
因爲這裏只須要檢測手部,所以物體類別只有一種即hand,若是須要定製其餘物體檢測任務,generate_tfrecord.py中修改如下代碼便可dom
def class_text_to_int(row_label): if row_label == 'hand': return 1 else: None
接下來將generate_tfrecord.py放到與egohands_dataset_clean.py同級目錄中,運行python generate_tfrecord.py --csv_input=images/train/train_labels.csv --output_path=train.record
報以下錯誤:
Traceback (most recent call last):
File "generate_tfrecord.py", line 100, in <module>
tf.app.run()
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\platform\app.py", line 125, in run
_sys.exit(main(argv))
File "generate_tfrecord.py", line 91, in main
tf_example = create_tf_example(group, path)
File "generate_tfrecord.py", line 46, in create_tf_example
encoded_jpg = fid.read()
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 125, in read
self._preread_check()
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 85, in _preread_check
compat.as_bytes(self.__name), 1024 * 512, status)
File "D:\PycharmProjects\OpenCV_Tensor_Env\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 519, in exit
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile failed to Create/Open: CARDS_COURTYARD_B_T_frame_0011.jpg : ϵͳ\udcd5Ҳ\udcbb\udcb5\udcbdָ\udcb6\udca8\udcb5\udcc4\udcceļ\udcfe\udca1\udca3
; No such file or directoryide
最後一行錯誤 建立、打開CARDS_COURTYARD_B_T_frame_0011.jpg文件失敗
CARDS_COURTYARD_B_T_frame_0011.jpg文件在images/train/目錄下,相信花時間找generate_tfrecord中讀文件的路徑修改下便可。
本人偷了下懶,既然是獲取本目錄下的圖片文件,那麼只要將generate_tfrecord移動到images/train/目錄下
再運行python generate_tfrecord.py --csv_input=train_labels.csv --output_path=train.record
生成train.record成功。學習
網上stackflow中,有提到改變系統環境,用linux運行。這個步驟耗費太大,建議先按筆者的步驟嘗試看看。測試
以後就要用原有模型調優了。按handtracking介紹須要用到
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py
結果,訪問Page not found 404.
如今tensorflow調優已經改用tensorflow hub
https://github.com/tensorflow/hub
須要繼續學習了~~~
(舊版retrain.py仍是有人分享了出來
https://blog.csdn.net/daydayup_668819/article/details/68060483)研究下,跑通了告訴你們