物體檢測(cè)YOLOv3實(shí)踐

      網(wǎng)友投稿 783 2022-05-29

      物體檢測(cè)YOLOv3實(shí)踐

      進(jìn)入ModelArts

      點(diǎn)擊如下鏈接:https://www.huaweicloud.com/product/modelarts.html?, 進(jìn)入ModelArts主頁(yè)。點(diǎn)擊“立即使用”按鈕,輸入用戶名和密碼登錄,進(jìn)入ModelArts使用頁(yè)面。

      創(chuàng)建ModelArts notebook

      下面,我們?cè)贛odelArts中創(chuàng)建一個(gè)notebook開發(fā)環(huán)境,ModelArts notebook提供網(wǎng)頁(yè)版的Python開發(fā)環(huán)境,可以方便的編寫、運(yùn)行代碼,并查看運(yùn)行結(jié)果。

      第一步:在ModelArts服務(wù)主界面依次點(diǎn)擊“開發(fā)環(huán)境”、“創(chuàng)建”

      第二步:填寫notebook所需的參數(shù):

      第三步:配置好notebook參數(shù)后,點(diǎn)擊下一步,進(jìn)入notebook信息預(yù)覽。確認(rèn)無誤后,點(diǎn)擊“立即創(chuàng)建”

      第四步:創(chuàng)建完成后,返回開發(fā)環(huán)境主界面,等待Notebook創(chuàng)建完畢后,打開Notebook,進(jìn)行下一步操作。

      在ModelArts中創(chuàng)建開發(fā)環(huán)境

      接下來,我們創(chuàng)建一個(gè)實(shí)際的開發(fā)環(huán)境,用于后續(xù)的實(shí)驗(yàn)步驟。

      第一步:點(diǎn)擊下圖所示的“打開”按鈕,進(jìn)入剛剛創(chuàng)建的Notebook

      第二步:創(chuàng)建一個(gè)Python3環(huán)境的的Notebook。點(diǎn)擊右上角的"New",然后選擇TensorFlow 1.13.1開發(fā)環(huán)境。

      第三步:點(diǎn)擊左上方的文件名"Untitled",并輸入一個(gè)與本實(shí)驗(yàn)相關(guān)的名稱,如"yolo_v3"

      在Notebook中編寫并執(zhí)行代碼

      在Notebook中,我們輸入一個(gè)簡(jiǎn)單的打印語(yǔ)句,然后點(diǎn)擊上方的運(yùn)行按鈕,可以查看語(yǔ)句執(zhí)行的結(jié)果:

      開發(fā)環(huán)境準(zhǔn)備好啦,接下來可以愉快地寫代碼啦!

      數(shù)據(jù)和代碼下載

      運(yùn)行下面代碼,進(jìn)行數(shù)據(jù)和代碼的下載和解壓

      本案例使用coco數(shù)據(jù),共80個(gè)類別。

      In?[1]:

      import os from modelarts.session import Session sess = Session() if sess.region_name == 'cn-north-1': bucket_path="modelarts-labs/notebook/DL_object_detection_yolo/yolov3.tar.gz" elif sess.region_name == 'cn-north-4': bucket_path="modelarts-labs-bj4/notebook/DL_object_detection_yolo/yolov3.tar.gz" else: print("請(qǐng)更換地區(qū)到北京一或北京四") if not os.path.exists('./yolo3'): sess.download_data(bucket_path=bucket_path, path="./yolov3.tar.gz") if os.path.exists('./yolov3.tar.gz'): # 解壓文件 os.system("tar -xf ./yolov3.tar.gz") # 清理壓縮包 os.system("rm -r ./yolov3.tar.gz")

      準(zhǔn)備數(shù)據(jù)

      文件路徑定義

      In?[2]:

      from train import get_classes, get_anchors # 數(shù)據(jù)文件路徑 data_path = "./coco/coco_data" # coco類型定義文件存儲(chǔ)位置 classes_path = './model_data/coco_classes.txt' # coco數(shù)據(jù)anchor值文件存儲(chǔ)位置 anchors_path = './model_data/yolo_anchors.txt' # coco數(shù)據(jù)標(biāo)注信息文件存儲(chǔ)位置 annotation_path = './coco/coco_train.txt' # 預(yù)訓(xùn)練權(quán)重文件存儲(chǔ)位置 weights_path = "./model_data/yolo.h5" # 模型文件存儲(chǔ)位置 save_path = "./result/models/" classes = get_classes(classes_path) anchors = get_anchors(anchors_path) # 獲取類型數(shù)量和anchor數(shù)量變量 num_classes = len(classes) num_anchors = len(anchors)

      Using TensorFlow backend.

      讀取標(biāo)注數(shù)據(jù)

      In?[3]:

      import numpy as np # 訓(xùn)練集與驗(yàn)證集劃分比例 val_split = 0.1 with open(annotation_path) as f: lines = f.readlines() np.random.seed(10101) np.random.shuffle(lines) np.random.seed(None) num_val = int(len(lines)*val_split) num_train = len(lines) - num_val

      數(shù)據(jù)讀取函數(shù),構(gòu)建數(shù)據(jù)生成器。每次讀取一個(gè)批次的數(shù)據(jù)至內(nèi)存訓(xùn)練,并做數(shù)據(jù)增強(qiáng)。

      In?[4]:

      def data_generator(annotation_lines, batch_size, input_shape, data_path,anchors, num_classes): n = len(annotation_lines) i = 0 while True: image_data = [] box_data = [] for b in range(batch_size): if i==0: np.random.shuffle(annotation_lines) image, box = get_random_data(annotation_lines[i], input_shape, data_path,random=True) # 隨機(jī)挑選一個(gè)批次的數(shù)據(jù) image_data.append(image) box_data.append(box) i = (i+1) % n image_data = np.array(image_data) box_data = np.array(box_data) y_true = preprocess_true_boxes(box_data, input_shape, anchors, num_classes) # 對(duì)標(biāo)注框預(yù)處理,過濾異常標(biāo)注框 yield [image_data, *y_true], np.zeros(batch_size) def data_generator_wrapper(annotation_lines, batch_size, input_shape, data_path,anchors, num_classes): n = len(annotation_lines) if n==0 or batch_size<=0: return None return data_generator(annotation_lines, batch_size, input_shape, data_path,anchors, num_classes)

      模型訓(xùn)練

      本案例使用Keras深度學(xué)習(xí)框架搭建YOLOv3神經(jīng)網(wǎng)絡(luò)。

      可以進(jìn)入相應(yīng)的文件夾路徑查看源碼實(shí)現(xiàn)。

      構(gòu)建神經(jīng)網(wǎng)絡(luò)

      可以在./yolo3/model.py文件中查看細(xì)節(jié)

      In?[5]:

      import keras.backend as K from yolo3.model import preprocess_true_boxes, yolo_body, yolo_loss from keras.layers import Input, Lambda from keras.models import Model # 初始化session K.clear_session() # 圖像輸入尺寸 input_shape = (416, 416) image_input = Input(shape=(None, None, 3)) h, w = input_shape # 設(shè)置多尺度檢測(cè)的下采樣尺寸 y_true = [Input(shape=(h//{0:32, 1:16, 2:8}[l], w//{0:32, 1:16, 2:8}[l], num_anchors//3, num_classes+5)) for l in range(3)] # 構(gòu)建YOLO模型結(jié)構(gòu) model_body = yolo_body(image_input, num_anchors//3, num_classes) # 將YOLO權(quán)重文件加載進(jìn)來,如果希望不加載預(yù)訓(xùn)練權(quán)重,從頭開始訓(xùn)練的話,可以刪除這句代碼 model_body.load_weights(weights_path, by_name=True, skip_mismatch=True) # 定義YOLO損失函數(shù) model_loss = Lambda(yolo_loss, output_shape=(1,), name='yolo_loss', arguments={'anchors': anchors, 'num_classes': num_classes, 'ignore_thresh': 0.5})([*model_body.output, *y_true]) # 構(gòu)建Model,為訓(xùn)練做準(zhǔn)備 model = Model([model_body.input, *y_true], model_loss)

      WARNING:tensorflow:From /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version. Instructions for updating: Colocations handled automatically by placer.

      In?[6]:

      # 打印模型各層結(jié)構(gòu) model.summary()

      訓(xùn)練回調(diào)函數(shù)定義

      In?[7]:

      from keras.callbacks import ReduceLROnPlateau, EarlyStopping # 定義回調(diào)方法 reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=3, verbose=1) # 學(xué)習(xí)率衰減策略 early_stopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, verbose=1) # 早停策略

      AI開發(fā)平臺(tái)ModelArts 機(jī)器學(xué)習(xí)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Pygame基礎(chǔ)知識(shí),新手入門看過來
      下一篇:前端開發(fā)核心篇——Vue
      相關(guān)文章
      亚洲av无码成人影院一区| 亚洲成AV人片天堂网无码| 亚洲蜜芽在线精品一区| 亚洲今日精彩视频| 亚洲AV无码久久| 亚洲AV永久无码精品| 亚洲处破女AV日韩精品| 伊伊人成亚洲综合人网7777| 国产亚洲精品无码专区| 2048亚洲精品国产| 亚洲色婷婷综合久久| 国产亚洲精AA在线观看SEE| 亚洲人成网站在线播放vr| 国产亚洲精品观看91在线| 亚洲国产精品无码成人片久久| 亚洲AV无码一区二区三区系列| 亚洲人成电影福利在线播放| 亚洲av中文无码乱人伦在线咪咕| 久久久久久亚洲精品| 亚洲综合一区二区精品导航| 亚洲无线一二三四区| 国产亚洲sss在线播放| 亚洲国产成人久久精品软件| 国产成人+综合亚洲+天堂| 亚洲综合精品网站| 亚洲精品tv久久久久久久久| 亚洲男人的天堂在线播放| 亚洲国产精品白丝在线观看| 亚洲人成图片网站| 国产精品亚洲色图| 亚洲熟女少妇一区二区| 亚洲今日精彩视频| 亚洲一区二区三区无码国产| 亚洲日本va一区二区三区| 亚洲国产成人精品无码久久久久久综合 | 国产偷国产偷亚洲高清在线| 亚洲欧洲中文日韩av乱码| 亚洲国产精品VA在线看黑人| 亚洲综合激情视频| 亚洲精品无码久久| 国产亚洲精品不卡在线|