国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Yolov5 + Deepsort 重新訓(xùn)練自己的數(shù)據(jù)(保姆級(jí)超詳細(xì))

這篇具有很好參考價(jià)值的文章主要介紹了Yolov5 + Deepsort 重新訓(xùn)練自己的數(shù)據(jù)(保姆級(jí)超詳細(xì))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

從下面github庫中拿代碼:

https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorchhttps://github.com/mikel-brostrom/Yolov5_DeepSort_PytorchGitHub - Sharpiless/Yolov5-Deepsort: 最新版本yolov5+deepsort目標(biāo)檢測(cè)和追蹤,能夠顯示目標(biāo)類別,支持5.0版本可訓(xùn)練自己數(shù)據(jù)集最新版本yolov5+deepsort目標(biāo)檢測(cè)和追蹤,能夠顯示目標(biāo)類別,支持5.0版本可訓(xùn)練自己數(shù)據(jù)集 - GitHub - Sharpiless/Yolov5-Deepsort: 最新版本yolov5+deepsort目標(biāo)檢測(cè)和追蹤,能夠顯示目標(biāo)類別,支持5.0版本可訓(xùn)練自己數(shù)據(jù)集https://github.com/Sharpiless/Yolov5-Deepsort

下載好匹配的deeosort和yolov5代碼很重要,題主折騰了一天,坑在版本上了??!

題主用的deeosort v3.0和yolov5 5.0版本,master似乎還不完善,沒跑通,要是跑通了的讀者希望可以交流一下。

直接進(jìn)入正題:

一.目標(biāo)追蹤整體代碼

deepsort yolov5訓(xùn)練自己的數(shù)據(jù),目標(biāo)檢測(cè)和跟蹤,目標(biāo)檢測(cè),目標(biāo)跟蹤,python,神經(jīng)網(wǎng)絡(luò)

?分別主體是yolov5和deep_sort。

二.訓(xùn)練自己的數(shù)據(jù)集

yolov5和deep_sort分開訓(xùn)練。首先訓(xùn)練yolov5,這個(gè)不難,超鏈接如下。

Yolov5 超詳細(xì)教程_武大人民泌外I科人工智能團(tuán)隊(duì)的博客-CSDN博客首先github拿代碼:GitHub - ultralytics/yolov5: YOLOv5 ?? in PyTorch > ONNX > CoreML > TFLiteYOLOv5 ?? in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.https://github.com/ultralythttps://blog.csdn.net/weixin_53711236/article/details/123766920

三.訓(xùn)練deep_sort

準(zhǔn)備deep_sort的數(shù)據(jù)集,和yolov5不一樣,這是一個(gè)分類的數(shù)據(jù)集。

我們用代碼把圖像中的檢測(cè)目標(biāo)扣出來,作為我們的數(shù)據(jù)集。

代碼如下:

import cv2
import xml.etree.ElementTree as ET
import numpy as np

import xml.dom.minidom
import os
import argparse


def main():
    # JPG文件的地址
    img_path = '/home/zqy/Desktop/yolov5-master/nxm_data/images_all/'
    # XML文件的地址
    anno_path = '/home/zqy/Desktop/yolov5-master/nxm_data/labels_xml/'
    # 存結(jié)果的文件夾

    cut_path = '/home/zqy/Desktop/yolov5-master/nxm_data/crops/'
    if not os.path.exists(cut_path):
        os.makedirs(cut_path)
    # 獲取文件夾中的文件
    imagelist = os.listdir(img_path)
    # print(imagelist
    for image in imagelist:
        image_pre, ext = os.path.splitext(image)
        img_file = img_path + image
        img = cv2.imread(img_file)
        xml_file = anno_path + image_pre + '.xml'
        # DOMTree = xml.dom.minidom.parse(xml_file)
        # collection = DOMTree.documentElement
        # objects = collection.getElementsByTagName("object")

        tree = ET.parse(xml_file)
        root = tree.getroot()
        # if root.find('object') == None:
        #     return
        obj_i = 0
        for obj in root.iter('object'):
            obj_i += 1
            print(obj_i)
            cls = obj.find('name').text
            xmlbox = obj.find('bndbox')
            b = [int(float(xmlbox.find('xmin').text)), int(float(xmlbox.find('ymin').text)),
                 int(float(xmlbox.find('xmax').text)),
                 int(float(xmlbox.find('ymax').text))]
            img_cut = img[b[1]:b[3], b[0]:b[2], :]
            path = os.path.join(cut_path, cls)
            # 目錄是否存在,不存在則創(chuàng)建
            mkdirlambda = lambda x: os.makedirs(x) if not os.path.exists(x) else True
            mkdirlambda(path)
            try:
                cv2.imwrite(os.path.join(cut_path, cls, '{}_{:0>2d}.jpg'.format(image_pre, obj_i)), img_cut)
            except:
                continue

            print("&&&&")


if __name__ == '__main__':
    main()

注意:這里數(shù)據(jù)集可能會(huì)存在負(fù)樣本,導(dǎo)致img_cut為空,我在這里修改了代碼,加了try判斷,只算入了正樣本。

上述代碼在自己的數(shù)據(jù)集上生成了crops文件夾,目錄如下:

deepsort yolov5訓(xùn)練自己的數(shù)據(jù),目標(biāo)檢測(cè)和跟蹤,目標(biāo)檢測(cè),目標(biāo)跟蹤,python,神經(jīng)網(wǎng)絡(luò)

接著要把這些數(shù)據(jù)分為訓(xùn)練集和驗(yàn)證集,跟類別有關(guān)系,注意類別和目標(biāo)是兩個(gè)概念。

我在這檢測(cè)的目標(biāo)只有一個(gè),但是可以有不同的類別,在這里的類別有112個(gè),因此訓(xùn)練集和測(cè)試集下邊的類別就應(yīng)該有112個(gè)。可以自己整理,也可以用代碼分,代碼如下:

import os
from PIL import Image
from shutil import copyfile, copytree, rmtree, move

PATH_DATASET = '/home/zqy/Desktop/yolov5-master/nxm_data/crops'  # 需要處理的文件夾
PATH_NEW_DATASET = '/home/zqy/Desktop/yolov5-master/nxm_data/stitches'  # 處理后的文件夾
PATH_ALL_IMAGES = PATH_NEW_DATASET + '/all_images'
PATH_TRAIN = PATH_NEW_DATASET + '/train'
PATH_TEST = PATH_NEW_DATASET + '/test'


# 定義創(chuàng)建目錄函數(shù)
def mymkdir(path):
    path = path.strip()  # 去除首位空格
    path = path.rstrip("\\")  # 去除尾部 \ 符號(hào)
    isExists = os.path.exists(path)  # 判斷路徑是否存在
    if not isExists:
        os.makedirs(path)  # 如果不存在則創(chuàng)建目錄
        print(path + ' 創(chuàng)建成功')
        return True
    else:
        # 如果目錄存在則不創(chuàng)建,并提示目錄已存在
        print(path + ' 目錄已存在')
        return False


class BatchRename():
    '''
    批量重命名文件夾中的圖片文件
    '''

    def __init__(self):
        self.path = PATH_DATASET  # 表示需要命名處理的文件夾

    # 修改圖像尺寸
    def resize(self):
        for aroot, dirs, files in os.walk(self.path):
            # aroot是self.path目錄下的所有子目錄(含self.path),dir是self.path下所有的文件夾的列表.
            filelist = files  # 注意此處僅是該路徑下的其中一個(gè)列表
            # print('list', list)

            # filelist = os.listdir(self.path) #獲取文件路徑
            total_num = len(filelist)  # 獲取文件長(zhǎng)度(個(gè)數(shù))

            for item in filelist:
                if item.endswith('.jpg'):  # 初始的圖片的格式為jpg格式的(或者源文件是png格式及其他格式,后面的轉(zhuǎn)換格式就可以調(diào)整為自己需要的格式即可)
                    src = os.path.join(os.path.abspath(aroot), item)

                    # 修改圖片尺寸到128寬*256高
                    im = Image.open(src)
                    out = im.resize((128, 256), Image.ANTIALIAS)  # resize image with high-quality
                    out.save(src)  # 原路徑保存

    def rename(self):

        for aroot, dirs, files in os.walk(self.path):
            # aroot是self.path目錄下的所有子目錄(含self.path),dir是self.path下所有的文件夾的列表.
            filelist = files  # 注意此處僅是該路徑下的其中一個(gè)列表
            # print('list', list)

            # filelist = os.listdir(self.path) #獲取文件路徑
            total_num = len(filelist)  # 獲取文件長(zhǎng)度(個(gè)數(shù))

            i = 1  # 表示文件的命名是從1開始的
            for item in filelist:
                if item.endswith('.jpg'):  # 初始的圖片的格式為jpg格式的(或者源文件是png格式及其他格式,后面的轉(zhuǎn)換格式就可以調(diào)整為自己需要的格式即可)
                    src = os.path.join(os.path.abspath(aroot), item)

                    # 根據(jù)圖片名創(chuàng)建圖片目錄
                    dirname = str(item.split('_')[0])
                    # 為相同車輛創(chuàng)建目錄
                    # new_dir = os.path.join(self.path, '..', 'bbox_all', dirname)
                    new_dir = os.path.join(PATH_ALL_IMAGES, dirname)
                    if not os.path.isdir(new_dir):
                        mymkdir(new_dir)

                    # 獲得new_dir中的圖片數(shù)
                    num_pic = len(os.listdir(new_dir))

                    dst = os.path.join(os.path.abspath(new_dir),
                                       dirname + 'C1T0001F' + str(num_pic + 1) + '.jpg')
                    # 處理后的格式也為jpg格式的,當(dāng)然這里可以改成png格式    C1T0001F見mars.py filenames 相機(jī)ID,跟蹤指數(shù)
                    # dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')    這種情況下的命名格式為0000000.jpg形式,可以自主定義想要的格式
                    try:
                        copyfile(src, dst)  # os.rename(src, dst)
                        print('converting %s to %s ...' % (src, dst))
                        i = i + 1
                    except:
                        continue
            print('total %d to rename & converted %d jpgs' % (total_num, i))

    def split(self):
        # ---------------------------------------
        # train_test
        images_path = PATH_ALL_IMAGES
        train_save_path = PATH_TRAIN
        test_save_path = PATH_TEST
        if not os.path.isdir(train_save_path):
            os.mkdir(train_save_path)
            os.mkdir(test_save_path)

        for _, dirs, _ in os.walk(images_path, topdown=True):
            for i, dir in enumerate(dirs):
                for root, _, files in os.walk(images_path + '/' + dir, topdown=True):
                    for j, file in enumerate(files):
                        if (j == 0):  # test dataset;每個(gè)車輛的第一幅圖片
                            print("序號(hào):%s  文件夾: %s  圖片:%s 歸為測(cè)試集" % (i + 1, root, file))
                            src_path = root + '/' + file
                            dst_dir = test_save_path + '/' + dir
                            if not os.path.isdir(dst_dir):
                                os.mkdir(dst_dir)
                            dst_path = dst_dir + '/' + file
                            move(src_path, dst_path)
                        else:
                            src_path = root + '/' + file
                            dst_dir = train_save_path + '/' + dir
                            if not os.path.isdir(dst_dir):
                                os.mkdir(dst_dir)
                            dst_path = dst_dir + '/' + file
                            move(src_path, dst_path)
        rmtree(PATH_ALL_IMAGES)


if __name__ == '__main__':
    demo = BatchRename()
    demo.resize()
    demo.rename()
    demo.split()

分好后train和test下各有112個(gè)文件夾,代表著112個(gè)類別。

將train和test移動(dòng)到deep_sort/deep目錄下。

修改train.py中train dataset的預(yù)處理如下:

transform_train = torchvision.transforms.Compose([
    torchvision.transforms.Resize((128, 64)),
    torchvision.transforms.RandomCrop((128, 64), padding=4),
    torchvision.transforms.RandomHorizontalFlip(),
    torchvision.transforms.ToTensor(),
    torchvision.transforms.Normalize(
        [0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

?接著修改147行,以免權(quán)重保存覆蓋原始權(quán)重:

        torch.save(checkpoint, './checkpoint/ckpt1.t7')

接著在model.py中修改類別,這類是112個(gè)類別:


class Net(nn.Module):
    def __init__(self, num_classes= 112 ,reid=False):
        super(Net,self).__init__()
        # 3 128 64
        self.conv = nn.Sequential(
            nn.Conv2d(3,64,3,stride=1,padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),
            # nn.Conv2d(32,32,3,stride=1,padding=1),
            # nn.BatchNorm2d(32),
            # nn.ReLU(inplace=True),
            nn.MaxPool2d(3,2,padding=1),
        )

然后在deep_sort/deep目錄下打開終端,運(yùn)行:

python train.py --data-dir data/

得到結(jié)果如下:

deepsort yolov5訓(xùn)練自己的數(shù)據(jù),目標(biāo)檢測(cè)和跟蹤,目標(biāo)檢測(cè),目標(biāo)跟蹤,python,神經(jīng)網(wǎng)絡(luò)

?權(quán)重結(jié)果保存在deep/checkpoint中。

四.測(cè)試結(jié)果

python track.py --yolo_weights 你的權(quán)重 --source 你的視頻 --deep_sort_weights 你的權(quán)重 --device 0 --save-vid

?--save-vid要調(diào)用,否則不會(huì)保存結(jié)果。

結(jié)束!

ps:如果報(bào)錯(cuò)

 File "/home/zqy/Desktop/Yolov5_DeepSort_Pytorch-3.0/deep_sort_pytorch/deep_sort/deep/feature_extractor.py", line 37, in _resize
    return cv2.resize(im.astype(np.float32)/255., size)
cv2.error: OpenCV(4.5.5) /io/opencv/modules/imgproc/src/resize.cpp:4052: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

原因,track.py里的iou和nms調(diào)太低了,如果仍然報(bào)錯(cuò),建議加個(gè)try跳過這些空的im。文章來源地址http://www.zghlxwxcb.cn/news/detail-804034.html

到了這里,關(guān)于Yolov5 + Deepsort 重新訓(xùn)練自己的數(shù)據(jù)(保姆級(jí)超詳細(xì))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【零基礎(chǔ)玩轉(zhuǎn)yolov5】yolov5訓(xùn)練自己的數(shù)據(jù)集(CPU訓(xùn)練+GPU訓(xùn)練)

    【零基礎(chǔ)玩轉(zhuǎn)yolov5】yolov5訓(xùn)練自己的數(shù)據(jù)集(CPU訓(xùn)練+GPU訓(xùn)練)

    ?博主也是最近開始玩yolov5的,甚至也是最近開始使用python的,很多東西都沒有接觸過,因此訓(xùn)練自己的數(shù)據(jù)集花了不少時(shí)間,所以想寫篇博客記錄一下,希望同樣是零基礎(chǔ)的小伙伴們可以更加輕松的上手。同時(shí)大家如果發(fā)現(xiàn)了錯(cuò)誤和理解偏差,歡迎指正。 參考資料: Yolo

    2024年02月06日
    瀏覽(31)
  • yolov5訓(xùn)練自己的數(shù)據(jù)集問題排除

    D:ProgramDataAnaconda3envsyolov5python.exe D:/yxt/yolov5-master/train.py Traceback (most recent call last): ? File \\\"D:ProgramDataAnaconda3envsyolov5libsite-packagesgit__init__.py\\\", line 140, in module ? ? refresh() ? File \\\"D:ProgramDataAnaconda3envsyolov5libsite-packagesgit__init__.py\\\", line 127, in refresh ? ? if not Git.refresh(p

    2024年04月11日
    瀏覽(96)
  • 【YOLO】yolov5訓(xùn)練自己的數(shù)據(jù)集

    【YOLO】yolov5訓(xùn)練自己的數(shù)據(jù)集

    【Python】樸實(shí)無華的yolov5環(huán)境配置(一) ??上面前期教程中,大致介紹了yolov5開發(fā)環(huán)境的配置方法和yolov5項(xiàng)目的基本結(jié)構(gòu),下一步就是基于yolov5預(yù)訓(xùn)練模型來訓(xùn)練自己的數(shù)據(jù)集,這對(duì)于只是想要使用yolov5這個(gè)工具的人,還是想要深入研究yolov5類似的目標(biāo)識(shí)別算法的人,都是

    2024年02月11日
    瀏覽(93)
  • YOLOv5訓(xùn)練自己的數(shù)據(jù)集實(shí)現(xiàn)視頻的識(shí)別

    YOLOv5訓(xùn)練自己的數(shù)據(jù)集實(shí)現(xiàn)視頻的識(shí)別

    寫在前面 我本來是使用這個(gè)模型進(jìn)行手寫簽名的定位,但是因?yàn)楸荣惖闹鬓k方原因,數(shù)據(jù)不允許公開,所以我使用動(dòng)物世界的一段開頭視屏來制作我的數(shù)據(jù)集。這整個(gè)模型跑通的過程中,我參考了很多不錯(cuò)的博客,寫這篇博客的原因是記錄一下我的所見所感。我的模型是在

    2024年02月02日
    瀏覽(95)
  • YOLOv5-第Y2周:訓(xùn)練自己的數(shù)據(jù)集

    YOLOv5-第Y2周:訓(xùn)練自己的數(shù)據(jù)集

    ?? 本文為??365天深度學(xué)習(xí)訓(xùn)練營 中的學(xué)習(xí)記錄博客 ?? 原作者:K同學(xué)啊 電腦系統(tǒng):Windows 10 語言環(huán)境:Python 3.8.5 編譯器:colab在線編譯 深度學(xué)習(xí)環(huán)境:PyTorch 文件夾目錄結(jié)構(gòu): ??主目錄: paper_ data (創(chuàng)建個(gè)文件夾,將數(shù)據(jù)放到這里) Annotations (放置我們的.xm文件) images (放置圖

    2024年01月20日
    瀏覽(96)
  • yolov5-7.0訓(xùn)練自己的VOC數(shù)據(jù)集

    yolov5-7.0訓(xùn)練自己的VOC數(shù)據(jù)集

    這個(gè)筆記可能只適用于7.0版本的,寫這個(gè)筆記主要是給工作室伙伴參考的,大佬請(qǐng)繞行 有錯(cuò)誤之處歡迎指出 yolov5的GitHub倉庫地址:Release v7.0 - YOLOv5 SOTA Realtime Instance Segmentation · ultralytics/yolov5 (github.com) 需要下載源碼和預(yù)訓(xùn)練模型 將源碼解壓,在其文件夾里面新建一個(gè)weights文

    2024年02月12日
    瀏覽(86)
  • YOLOv5如何訓(xùn)練自己的數(shù)據(jù)集(生活垃圾數(shù)據(jù)集為例)

    YOLOv5如何訓(xùn)練自己的數(shù)據(jù)集(生活垃圾數(shù)據(jù)集為例)

    本文主要介紹如何利用YOLOv5訓(xùn)練自己的數(shù)據(jù)集 以生活垃圾數(shù)據(jù)集為例子 生活垃圾數(shù)據(jù)集(YOLO版) 點(diǎn)擊這里直接下載本文生活垃圾數(shù)據(jù)集 生活垃圾數(shù)據(jù)集組成: YOLO數(shù)據(jù)有三個(gè)要點(diǎn) images,存放圖片 labes,對(duì)應(yīng)Images圖片的標(biāo)簽 data_txt, 劃分images圖片的數(shù)據(jù)集,形成三個(gè)txt 文件

    2024年02月07日
    瀏覽(91)
  • 通過AutoDL使用yolov5.7訓(xùn)練自己的數(shù)據(jù)集

    通過AutoDL使用yolov5.7訓(xùn)練自己的數(shù)據(jù)集

    AutoDL 選擇基礎(chǔ)鏡像 創(chuàng)建之后 點(diǎn)擊 開機(jī) ,也可在更多里面選擇無卡模式開機(jī)(此模式不能訓(xùn)練,但是可以上傳文件且更便宜)。開機(jī)之后,上傳代碼可通過xshell工具或者可以通過快捷工具JupyterLab。我兩種方法都來演示一遍。yolov5代碼 復(fù)制登錄指令 回車后會(huì)要求輸入密碼,

    2024年02月05日
    瀏覽(89)
  • AI學(xué)習(xí)筆記四:yolov5訓(xùn)練自己的數(shù)據(jù)集

    AI學(xué)習(xí)筆記四:yolov5訓(xùn)練自己的數(shù)據(jù)集

    若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處。 一般情況下,大部分人的電腦都是沒有cpu的,cpu也是可以訓(xùn)練的,但花費(fèi)的時(shí)間太長(zhǎng),實(shí)際200張圖片,使用CPU訓(xùn)練300輪花了3天,本章記錄使用云服務(wù)器來訓(xùn)練自己的數(shù)據(jù)集。 使用的云服務(wù)器是AutoDL,一直在使用,性價(jià)比還是比較高的

    2024年02月15日
    瀏覽(76)
  • YOLOv8實(shí)例分割訓(xùn)練自己的數(shù)據(jù)集保姆級(jí)教程

    YOLOv8實(shí)例分割訓(xùn)練自己的數(shù)據(jù)集保姆級(jí)教程

    1.1Labelme 安裝方法 首先安裝 Anaconda,然后運(yùn)行下列命令: 1.2Labelme 使用教程 使用 labelme 進(jìn)行場(chǎng)景分割標(biāo)注的教程詳見:labelme ? ? 對(duì)數(shù)據(jù)集進(jìn)行轉(zhuǎn)換和劃分。注意:在數(shù)據(jù)標(biāo)注的時(shí)候?qū)D片和json文件放在不同的文件夾里。如下圖所示,另外新建兩個(gè)文件夾txt 和split。 ?2.1將

    2024年02月02日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包