日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习入门篇--手把手教你用 TensorFlow 训练模型

發布時間:2025/3/8 pytorch 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习入门篇--手把手教你用 TensorFlow 训练模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎大家前往騰訊云技術社區,獲取更多騰訊海量技術實踐干貨哦~

作者:付越?

導語

Tensorflow在更新1.0版本之后多了很多新功能,其中放出了很多用tf框架寫的深度網絡結構(https://github.com/tensorflow/models?),大大降低了開發難度,利用現成的網絡結構,無論fine-tuning還是重新訓練方便了不少。最近筆者終于跑通TensorFlow Object Detection API的ssd_mobilenet_v1模型,這里記錄下如何完整跑通數據準備到模型使用的整個過程,相信對自己和一些同學能有所幫助。

Object Detection API提供了5種網絡結構的預訓練的權重,全部是用COCO數據集進行訓練,這五種模型分別是SSD+mobilenet、SSD+inception_v2、R-FCN+resnet101、faster RCNN+resnet101、faster RCNN+inception+resnet101。各個模型的精度和計算所需時間如下。下面及介紹下如何使用Object Detection去訓練自己的模型。

這里TensorFlow的安裝就不再說明了,網上的教程一大把,大家可以找到很詳盡的安裝TensorFlow的文檔。

訓練前準備:

使用protobuf來配置模型和訓練參數,所以API正常使用必須先編譯protobuf庫,這里可以下載直接編譯好的pb庫(https://github.com/google/protobuf/releases?),解壓壓縮包后,把protoc加入到環境變量中:

$ cd tensorflow/models$ protoc object_detection/protos/*.proto --python_out=.

?

(我是把protoc加到環境變量中,遇到找不到*.proto文件的報錯,后來把protoc.exe放到models/object_detection目錄下,重新執行才可以)

然后將models和slim(tf高級框架)加入python環境變量:

PYTHONPATH=$PYTHONPATH:/your/path/to/tensorflow/models:/your/path/to/tensorflow/models/slim

?

數據準備:

數據集需要轉化成PASCAL VOC結構,API提供了create_pascal_tf_record.py,把VOC結構數據集轉換成.record格式。不過我們發現更簡單的方式,Datitran提供一種更簡單生產.record格式的方法。

首先需要先要標注圖像相應標簽,這里可以使用labelImg工具。每標注一張樣本,即生成一個xml的標注文件。然后,把這些標注的xml文件,按訓練集與驗證集分別放置到兩個目錄下,在Datitran提供了xml_to_csv.py腳本。這里只要指定標注的目錄名即可。接下來,然后需要我們把對應的csv格式轉換成.record格式。

def main():# image_path = os.path.join(os.getcwd(), 'annotations')image_path = r'D:\training-sets\object-detection\sunglasses\label\test'xml_df = xml_to_csv(image_path)xml_df.to_csv('sunglasses_test_labels.csv', index=None)print('Successfully converted xml to csv.')

?

調用generate_tfrecord.py,注意要指定--csv_input與--output_path這兩個參數。執行下面命令:

python generate_tfrecord.py --csv_input=sunglasses_test_labels.csv --output_path=sunglass_test.record

?

這樣就生成了訓練及驗證用的train.record與test.record。接下來指定標簽名稱,仿照models/ object_detection/data/ pet_label_map.pbtxt,重新創建一個文件,指定標簽名。

item {id: 1name: 'sunglasses' }

?

訓練:

根據自己的需要,選擇一款用coco數據集預訓練的模型,把前綴model.ckpt放置在待訓練的目錄,這里meta文件保存了graph和metadata,ckpt保存了網絡的weights,這幾個文件表示預訓練模型的初始狀態。

打開ssd_mobilenet_v1_pets.config文件,并做如下修改:

  • num_classes:修改為自己的classes num
  • 將所有PATH_TO_BE_CONFIGURED的地方修改為自己之前設置的路徑(共5處)
  • 其他參數均保持默認參數。

    準備好上述文件后就可以直接調用train文件進行訓練。

    python object_detection/train.py \ --logtostderr \ --pipeline_config_path= D:/training-sets /data-translate/training/ssd_mobilenet_v1_pets.config \ --train_dir=D:/training-sets/data-translate/training

    ?

    TensorBoard監控:

    通過tensorboard工具,可以監控訓練過程,輸入西面指令后,在瀏覽器輸入localhost:6006(默認)即可。

    tensorboard --logdir= D:/training-sets/data-translate/training

    ?

    這里面有很多指標曲線,甚至有模型網絡架構,筆者對于這里面很多指標含義還沒有弄明白,不過感覺出TensorBoard這個工具應該是極其強大。不過我們可以通過Total_Loss來看整體訓練的情況。

    從整體上看,loss曲線確實是收斂的,整體的訓練效果還是滿意的。另外,TensorFlow還提供了訓練過程中利用驗證集驗證準確性的能力,但是筆者在調用時,仍有些問題,這里暫時就不詳細說明了。

    Freeze Model模型導出:

    查看模型實際的效果前,我們需要把訓練的過程文件導出,生產.pb的模型文件。本來,tensorflow/python/tools/freeze_graph.py提供了freeze model的api,但是需要提供輸出的final node names(一般是softmax之類的最后一層的激活函數命名),而object detection api提供提供了預訓練好的網絡,final node name并不好找,所以object_detection目錄下還提供了export_inference_graph.py。

    python export_inference_graph.py \ --input_type image_tensor --pipeline_config_path D:/training-sets /data-translate/training/ssd_mobilenet_v1_pets.config \ --trained_checkpoint_prefix D:/training-sets /data-translate/training/ssd_mobilenet_v1_pets.config /model.ckpt-* \ --output_directory D:/training-sets /data-translate/training/result

    ?

    導出完成后,在output_directory下,會生成frozen_inference_graph.pb、model.ckpt.data-00000-of-00001、model.ckpt.meta、model.ckpt.data文件。

    調用生成模型:

    目錄下本身有一個調用的例子,稍微改造如下:

    import cv2 import numpy as np import tensorflow as tf from object_detection.utils import label_map_util from object_detection.utils import visualization_utils as vis_utilclass TOD(object):def __init__(self):self.PATH_TO_CKPT = r'D:\lib\tf-model\models-master\object_detection\training\frozen_inference_graph.pb'self.PATH_TO_LABELS = r'D:\lib\tf-model\models-master\object_detection\training\sunglasses_label_map.pbtxt'self.NUM_CLASSES = 1self.detection_graph = self._load_model()self.category_index = self._load_label_map()def _load_model(self):detection_graph = tf.Graph()with detection_graph.as_default():od_graph_def = tf.GraphDef()with tf.gfile.GFile(self.PATH_TO_CKPT, 'rb') as fid:serialized_graph = fid.read()od_graph_def.ParseFromString(serialized_graph)tf.import_graph_def(od_graph_def, name='')return detection_graphdef _load_label_map(self):label_map = label_map_util.load_labelmap(self.PATH_TO_LABELS)categories = label_map_util.convert_label_map_to_categories(label_map,max_num_classes=self.NUM_CLASSES,use_display_name=True)category_index = label_map_util.create_category_index(categories)return category_indexdef detect(self, image):with self.detection_graph.as_default():with tf.Session(graph=self.detection_graph) as sess:# Expand dimensions since the model expects images to have shape: [1, None, None, 3]image_np_expanded = np.expand_dims(image, axis=0)image_tensor = self.detection_graph.get_tensor_by_name('image_tensor:0')boxes = self.detection_graph.get_tensor_by_name('detection_boxes:0')scores = self.detection_graph.get_tensor_by_name('detection_scores:0')classes = self.detection_graph.get_tensor_by_name('detection_classes:0')num_detections = self.detection_graph.get_tensor_by_name('num_detections:0')# Actual detection.(boxes, scores, classes, num_detections) = sess.run([boxes, scores, classes, num_detections],feed_dict={image_tensor: image_np_expanded})# Visualization of the results of a detection.vis_util.visualize_boxes_and_labels_on_image_array(image,np.squeeze(boxes),np.squeeze(classes).astype(np.int32),np.squeeze(scores),self.category_index,use_normalized_coordinates=True,line_thickness=8)cv2.namedWindow("detection", cv2.WINDOW_NORMAL)cv2.imshow("detection", image)cv2.waitKey(0)if __name__ == '__main__':image = cv2.imread('image.jpg')detecotr = TOD()detecotr.detect(image)

    ?

    下面是一些圖片的識別效果:

    相關閱讀

    當強化學習遇見泛函分析

    google cloud :窮人也能玩深度學習

    [ I am Jarvis ] :聊聊 FaceID 背后的深度學習視覺算法

    此文已由作者授權騰訊云技術社區發布,轉載請注明文章出處
    原文鏈接:https://cloud.tencent.com/community/article/351424

    總結

    以上是生活随笔為你收集整理的深度学习入门篇--手把手教你用 TensorFlow 训练模型的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91狠狠操| 国产一区二区三区麻豆 | 久久综合影院 | 无罩大乳的熟妇正在播放 | 高跟91娇喘 | xxxx999| 国产制服在线 | 波多在线视频 | 亚洲男女视频在线观看 | 国产精品久久久久一区二区 | 国产成人精品一区二区在线观看 | 性xxxx欧美老肥妇牲乱 | 精品人妻一区二区三区久久夜夜嗨 | 韩国成年人网站 | 羞羞色院91蜜桃 | 狠狠鲁视频| 精品动漫3d一区二区三区免费版 | 国产77777 | 麻豆国产一区 | 国产精品免费一区二区三区 | 热99精品视频 | 精品国产一区二区三区四区 | 一区二区三区日 | 成年人在线观看网站 | 久操伊人 | 欧美特一级 | 在线播放无码后入内射少妇 | 日本女优在线看 | 中文字幕精品在线视频 | 日本不卡一二三区 | 欧美黑人一区二区 | 国产精品久久久久久久久久免费 | 国产清纯在线 | 大桥未久av在线播放 | 妓院一钑片免看黄大片 | 特级西西444www高清大胆 | 中文字幕高清在线观看 | av成人在线电影 | 玖玖热视频 | 日韩一区二区在线观看视频 | 亚洲成人第一页 | 国产吃瓜在线 | 伊人网色 | 曰本丰满熟妇xxxx性 | 青青草视频免费播放 | 狠狠人妻久久久久久综合 | 婷婷伊人综合中文字幕 | 国产精品欧美综合亚洲 | 国模av | 粉嫩久久99精品久久久久久夜 | 99一区二区三区 | 欧美国产日韩一区二区 | 国产精品熟妇一区二区三区四区 | 聚色屋| 我的邻居在线观看 | 亚洲丝袜在线观看 | 国内少妇精品 | 日韩欧美高清在线 | 一级特黄aa大片欧美 | 一卡二卡三卡视频 | 99久久九九| 999免费 | 日本少妇吞精囗交 | 欧美第二页 | 夜夜嗨国产 | 成人毛片网站 | 男女做爰猛烈刺激 | 99视频在线观看视频 | 欧美打屁股 | 爱爱视频欧美 | 国产精品嫩草影院av蜜臀 | 国产精品久久久精品三级 | 一区二区三区免费高清视频 | 欧美生活一级片 | 依依成人在线 | 伊人激情综合 | 亚洲精品视屏 | 国产乡下妇女三片 | 岛国大片在线 | 欧美福利一区 | 成人福利午夜 | 久久免费视频1 | 国产中文字幕精品 | 影音先锋制服 | 日韩第一区 | 天天婷婷 | 天堂免费在线视频 | 性午夜| 日本一区二区三区在线观看 | 姐姐你真棒插曲快来救救我电影 | 日本一区二区在线观看视频 | 黄色91免费观看 | 韩国毛片基地 | 亚洲精品久久久蜜桃网尤妮丝 | 97狠狠操 | 日韩福利视频网 | 亚洲综合久久婷婷 | 教练含着她的乳奶揉搓揉捏动态图 | 天天碰天天碰 |