国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        使用Google云平臺實戰基于PyTorch的yolo-v3模型

        2020-06-13 08:58
        磐創AI
        關注

        對于計算機視覺愛好者來說,YOLO (You Only Look Once)是一個非常流行的實時目標檢測算法,因為它非常快,同時性能非常好。在本文中,我將共享一個視頻處理的代碼,以獲取視頻中每個對象目標的邊框。我們將不討論YOLO的概念或架構,因為很多好的文章已經在媒體中詳細闡述了這些知識點。這里我們只討論函數代碼。

        開始

        谷歌Colab地址:https://colab.research.google.com/github/vindruid/yolov3-in-colab/blob/master/yolov3_video.ipynb。yolo的git倉庫:https://github.com/ultralytics/yolov3。盡管倉庫已經包含如何使用YOLOv3的教程,教程只需要運行python detect.py --source file.mp4,但是我簡化了代碼,具體在谷歌Colab / Jupyter筆記本中。準備YoloV3和LoadModel首先克隆YoloV3倉庫,然后導入通用包和repo函數!git clone https://github.com/ultralytics/yolov3import timeimport globimport torchimport os

        import argparsefrom sys import platform%cd yolov3from models import *from utils.datasets import *from utils.utils import *

        from IPython.display import HTMLfrom base64 import b64encode設置參數解析器,初始化設備(CPU / CUDA),初始化YOLO模型,然后加載權重。parser = argparse.ArgumentParser()parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='*.cfg path')parser.add_argument('--names', type=str, default='data/coco.names', help='*.names path')parser.add_argument('--weights', type=str, default='weights/yolov3-spp-ultralytics.pt', help='weights path')parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)')parser.add_argument('--conf-thres', type=float, default=0.3, help='object confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.6, help='IOU threshold for NMS')parser.add_argument('--device', default='', help='device id (i.e. 0 or 0,1) or cpu')parser.add_argument('--classes', nargs='+', type=int, help='filter by class')parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')opt = parser.parse_args(args = [])
        weights = opt.weightsimg_size =  opt.img_size

        # 初始化設備device = torch_utils.select_device(opt.device)

        # 初始化模型model = Darknet(opt.cfg, img_size)

        # 加載權重attempt_download(weights)if weights.endswith('.pt'):  # pytorch格式    model.load_state_dict(torch.load(weights, map_location=device)['model'])else:  # darknet 格式    load_darknet_weights(model, weights)

        model.to(device).eval();# 獲取名字和顏色names = load_classes(opt.names)colors = [[random.randint(0, 255) for _ in range(3)] for _ in range(len(names))]

        %cd ..我們正在使用YOLOv3-sp-ultralytics權值,該算法稱其在平均精度上遠遠優于其他YOLOv3模型functiontorch_utils.select_device()將自動找到可用的GPU,除非輸入是“cpu”對象Darknet在PyTorch上使用預訓練的權重來初始化了YOLOv3架構(此時我們不希望訓練模型)預測視頻中的目標檢測接下來,我們將讀取視頻文件并使用矩陣框重寫視頻。def predict_one_video(path_video):    cap  = cv2.VideoCapture(path_video)    _, img0 = cap.read()

        save_path = os.path.join(output_dir, os.path.split(path_video)[-1])     fps = cap.get(cv2.CAP_PROP_FPS)    w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))    h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))    vid_writer = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'MP4V'), fps, (w, h))我們使用MP4格式寫入新的視頻,變量為vid_writer,而寬度和高度則根據原始視頻來設置。開始對視頻中的每一幀進行循環以獲得預測。while img0 is not None:

        img = letterbox(img0, new_shape=opt.img_size)[0]

        # 轉換        img = img[:, :, ::-1].transpose(2, 0, 1)  # BGR 到 RGB, 到 3xHxW        img = np.ascontiguousarray(img)        img = torch.from_numpy(img).to(device)        img = img.float()  # uint8 到 fp16/32        img /= 255.0  # 0 - 255 到 0.0 - 1.0        if img.ndimension() == 3:            img = img.unsqueeze(0)

        pred = model(img)[0]        # 應用 NMS        pred = non_max_suppression(pred, opt.conf_thres, opt.iou_thres, classes=opt.classes, agnostic=opt.agnostic_nms)這個模型的圖像大小是416,letterbox函數調整了圖像的大小,并給圖像進行填充,使得圖像可以被32整除。第二部分是將圖像轉換為RGB格式,并將通道設置到第一維,即(C,H,W),然后將圖像數據放入設備(GPU或CPU)中,將像素從0-255縮放到0-1。在我們將圖像放入模型之前,我們需要使用img.unsqeeze(0)函數,因為我們必須將圖像重新格式化為4維(N,C,H,W), N是圖像的數量,在本例中為1。對圖像進行預處理后,將其放入模型中得到預測框,但是預測有很多的框,所以我們需要非最大抑制方法來過濾和合并框。

        畫邊界框和標簽,然后寫入視頻我們在NMS之后循環所有的預測(pred)來繪制邊界框,但是圖像已經被調整為416像素大小了,我們需要使用scale_coords函數將其縮放為原始大小,然后使用plot_one_box函數來繪制框 # 檢測        for i, det in enumerate(pred):  #檢測每個圖片            im0 = img0

        if det is not None and len(det):                # 更改框的大小                det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round()

        # 寫入結果                for *xyxy, conf, cls in det:                    label = '%s %.2f' % (names[int(cls)], conf)                    plot_one_box(xyxy, im0, label=label, color=colors[int(cls)])        vid_writer.write(im0)        _, img0 = cap.read()播放Colab的視頻視頻在函數predict_one_video被寫入為Mp4格式,我們壓縮成h264格式,所以視頻可以在谷歌Colab / Jupyter上直接播放。顯示原始視頻我們使用IPython.display.HTML來顯示視頻,其寬度為400像素,視頻是用二進制讀取的。path_video = os.path.join("input_video","opera_house.mp4")save_path = predict_one_video(path_video)

        # 顯示視頻mp4 = open(path_video,'rb').read()data_url = "data:video/mp4;base64," + b64encode(mp4).decode()HTML("""<video width=400 controls>      <source src="%s" type="video/mp4"></video>""" % data_url)壓縮和顯示處理過的視頻OpenCV視頻寫入器的輸出是一個比原始視頻大3倍的Mp4視頻,它不能在谷歌Colab上顯示,解決方案之一是我們對視頻進行壓縮。我們使用ffmpeg -i {save_path} -vcodec libx264 {compressed_path}path_video = os.path.join("input_video","opera_house.mp4")save_path = predict_one_video(path_video)# 壓縮視頻compressed_path = os.path.join("output_compressed", os.path.split(save_path)[-1])os.system(f"ffmpeg -i {save_path} -vcodec libx264 {compressed_path}")

        #顯示視頻mp4 = open(compressed_path,'rb').read()data_url = "data:video/mp4;base64," + b64encode(mp4).decode()HTML("""<video width=400 controls>      <source src="%s" type="video/mp4"></video>""" % data_url)結果

        左邊是原始視頻,右邊是使用代碼處理過的視頻試試你自己的視頻轉到GitHub上的谷歌Colab文件上傳你的視頻在input_video文件夾中,只需運行最后一個單元格即可(predict & show video)。

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 茶陵县| 尤物一区| 恩施市| 正宁县| 黑人又粗又长又大| 亚洲午夜av| 99啪啪| 国产jizz| 茄子av| 正在播放夫妇露脸自拍| 一本色道久久综合狠狠| 平湖市| 淫荡人妻中文字幕| 黑人成人网| 荥阳市| 亚洲成人Av| 99视频精品3| A片网| 中文字幕日韩精品人妻| 欧美又粗又大又爽| 夜夜撸影院| 国产V在线| 色啪视频| 久久伊人五月天| 日韩男人天堂| 象山县| 亚洲av二区| 人人人操| 日韩激情一区二区| 北条麻妃无码视频| 静海县| 巴塘县| 1024欧美日韩| 熟女中文字幕| 东京热大乱w姦| 连城县| 3?p在线| 一区二区三区四区视频| 白浆网站| 熟女Www亚洲国产W| 丰镇市|