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

【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別

這篇具有很好參考價(jià)值的文章主要介紹了【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言


參考文章:

最初參考的兩篇:
【Pytorch】基于CNN手寫漢字的識(shí)別
「Pytorch」CNN實(shí)現(xiàn)手寫漢字識(shí)別(數(shù)據(jù)集制作,網(wǎng)絡(luò)搭建,訓(xùn)練驗(yàn)證測(cè)試全部代碼)
模型:
EfficientNetV2網(wǎng)絡(luò)詳解
數(shù)據(jù)集(不必從這里下載,可以看一下它的介紹):
CASIA Online and Offline Chinese Handwriting Databases

鑒于已經(jīng)3202年了,大模型都出來(lái)了,網(wǎng)上還是缺乏漢字識(shí)別這種基礎(chǔ)神經(jīng)網(wǎng)絡(luò)的能讓新手直接上手跑通的手把手教程,我就斗膽自己寫一篇好了。

本文的主要特點(diǎn):

  1. 使用EfficientNetV2模型真正實(shí)現(xiàn)3755類漢字識(shí)別

  2. Demo開源

  3. 預(yù)訓(xùn)練模型可以下載

  4. 預(yù)制數(shù)據(jù)集,無(wú)需處理直接使用

數(shù)據(jù)集


使用中科院制作的手寫漢字?jǐn)?shù)據(jù)集,鏈接直達(dá)官網(wǎng),所以我這里不多介紹,只有滿腔敬意。

上面參考的博客可能要你自己下載之后按照它的辦法再預(yù)處理一下,但是在這個(gè)環(huán)節(jié)出現(xiàn)問題的朋友挺多,我把預(yù)處理的數(shù)據(jù)已經(jīng)傳到【夸克云盤】,有人反映說這個(gè)有損壞了,但是我自己用bandizip智能解壓一切正常,沒損壞。如果還是報(bào)錯(cuò),則使用這個(gè)別人傳的【百度網(wǎng)盤】。

預(yù)訓(xùn)練模型已經(jīng)上傳了(后面有鏈接),但是如果想自己訓(xùn)一下,就需要下載這個(gè)數(shù)據(jù)集,解壓到項(xiàng)目結(jié)構(gòu)里的data文件夾如下所示

data文件夾和log文件夾需要自己建。

項(xiàng)目結(jié)構(gòu)


完整源代碼:【項(xiàng)目源碼】

【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別

目錄結(jié)構(gòu)

重點(diǎn)注意data文件夾的結(jié)構(gòu),不要把數(shù)據(jù)集放錯(cuò)位置了或者多嵌套了文件夾

├─Chinese_Character_Rec(項(xiàng)目)
│ ├─asserts
│ │ ├─*.png
│ ├─char_dict
│ ├─Data.py
│ ├─EfficientNetV2
│?│ ├─demo.py
│ │ ├─EffNetV2.py
│ │ ├─Evaluate.py
│ │ ├─model.py
│ │ └─Train.py
│ ├─Utils.py
│ ├─VGG19
│ │ ├─demo.py
│ │ ├─Evaluate.py
│ │ ├─model.py
│ │ ├─Train.py
│ │ └─VGG19.py
│ └─README.md
├─data(數(shù)據(jù)集)
│ ├─test(測(cè)試數(shù)據(jù)集)
│?│ ├─00000
│ │ ├─00001
│ │ └─...
│ ├─test.txt(程序生成)
│ ├─train(訓(xùn)練數(shù)據(jù)集)
│ │ ├─00000
│ │ ├─00001
│?│?└─ ...
│ └─train.txt(程序生成)
├─log(模型參數(shù)存放位置)
? ? ├─log1.pth
? ? └─…

神經(jīng)網(wǎng)絡(luò)模型


預(yù)訓(xùn)練模型【參數(shù)鏈接】(包含vgg19和efficientnetv2)

請(qǐng)將.pth文件重命名為log+數(shù)字.pth的格式,例如log1.pth,放入log文件夾。方便識(shí)別和retrain。

VGG19

這里先后用了兩種神經(jīng)網(wǎng)絡(luò),我先用VGG19試了一下,分類前1000種漢字。訓(xùn)得有點(diǎn)慢,主要還是這模型有點(diǎn)老了,參數(shù)量也不小。而且要改到3755類的話還用原參數(shù)的話就很難收斂,也不知道該怎么調(diào)參數(shù)了,估計(jì)調(diào)好了也會(huì)規(guī)模很大,所以這里VGG19模型的版本只能分類1000種,就是數(shù)據(jù)集的前1000種(準(zhǔn)確率>92%)。

EfficientNetV2

這個(gè)模型很不錯(cuò),主要是卷積層的部分非常有效,參數(shù)量也很少。直接用small版本去分類3755個(gè)漢字,半小時(shí)就收斂得差不多了。所以本文用來(lái)實(shí)現(xiàn)3755類漢字的模型就是EfficientNetV2(準(zhǔn)確率>89%),后面的教程都是基于這個(gè),VGG19就不管了,在源碼里感興趣的自己看吧。

以下代碼不用自己寫,前面已經(jīng)給出完整源代碼了,下面的教程是結(jié)合源碼的講解而已。

運(yùn)行環(huán)境


顯存>=4G(與batchSize有關(guān),batchSize=512時(shí)顯存占用4.8G;如果是256或者128,應(yīng)該會(huì)低于4G,雖然會(huì)導(dǎo)致訓(xùn)得慢一點(diǎn))

內(nèi)存>=16G(訓(xùn)練時(shí)不太占內(nèi)存,但是剛開始加載的時(shí)候會(huì)突然占一下,如果小于16G還是怕爆)

如果你沒有安裝過Pytorch,啊,我也不知道怎么辦,你要不就看看安裝Pytorch的教程吧。(總體步驟是,有一個(gè)不太老的N卡,先去驅(qū)動(dòng)里看看cuda版本,安裝合適的CUDA,然后根據(jù)CUDA版本去pytorch.org找到合適的安裝指令,然后在本地pip install)

以下是項(xiàng)目運(yùn)行環(huán)境,我是3060 6G,CUDA版本11.6

這個(gè)約等號(hào)不用在意,可以都安裝最新版本,反正我這里應(yīng)該沒用什么特殊的API


torch~=1.12.1+cu116
torchvision~=0.13.1+cu116
Pillow~=9.3.0

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


首先定義classes_txt方法在Utils.py中(不是我寫的,是CSDN那兩篇博客的,MyDataset同):

生成每張圖片的路徑,存儲(chǔ)到train.txt或test.txt。方便訓(xùn)練或評(píng)估時(shí)讀取數(shù)據(jù)


def classes_txt(root, out_path, num_class=None):
    dirs = os.listdir(root)
    if not num_class:
        num_class = len(dirs)

    with open(out_path, 'w') as f:
        end = 0
        if end < num_class - 1:
            dirs.sort()
            dirs = dirs[end:num_class]
            for dir1 in dirs:
                files = os.listdir(os.path.join(root, dir1))
                for file in files:
                    f.write(os.path.join(root, dir1, file) + '\n')

定義Dataset類,用于制作數(shù)據(jù)集,為每個(gè)圖片加上對(duì)應(yīng)的標(biāo)簽,即圖片所在文件夾的代號(hào)


class MyDataset(Dataset):
    def __init__(self, txt_path, num_class, transforms=None):
        super(MyDataset, self).__init__()
        images = []
        labels = []
        with open(txt_path, 'r') as f:
            for line in f:
                if int(line.split('\\')[1]) >= num_class: # 超出規(guī)定的類,就不添加,例如VGG19只添加了1000類
                    break
                line = line.strip('\n')
                images.append(line)
                labels.append(int(line.split('\\')[1]))
        self.images = images
        self.labels = labels
        self.transforms = transforms

    def __getitem__(self, index):
        image = Image.open(self.images[index]).convert('RGB')
        label = self.labels[index]
        if self.transforms is not None:
            image = self.transforms(image)
        return image, label

    def __len__(self):
        return len(self.labels)

入口


我把各種超參都放在了args里方便改,請(qǐng)根據(jù)實(shí)際情況自行調(diào)整。這套defaults就是我訓(xùn)練這個(gè)模型時(shí)使用的超參,圖片size默認(rèn)32是因?yàn)槲绎@存太小辣??!但是數(shù)據(jù)集給的圖片大小普遍不超過64,如果想訓(xùn)得更精確,可以試試64*64的大小。

如果你訓(xùn)練時(shí)爆mem,請(qǐng)調(diào)小batch_size,試試256,128,64,32


parser = argparse.ArgumentParser(description='EfficientNetV2 arguments')
parser.add_argument('--mode', dest='mode', type=str, default='demo', help='Mode of net')
parser.add_argument('--epoch', dest='epoch', type=int, default=50, help='Epoch number of training')
parser.add_argument('--batch_size', dest='batch_size', type=int, default=512, help='Value of batch size')
parser.add_argument('--lr', dest='lr', type=float, default=0.0001, help='Value of lr')
parser.add_argument('--img_size', dest='img_size', type=int, default=32, help='reSize of input image')
parser.add_argument('--data_root', dest='data_root', type=str, default='../../data/', help='Path to data')
parser.add_argument('--log_root', dest='log_root', type=str, default='../../log/', help='Path to model.pth')
parser.add_argument('--num_classes', dest='num_classes', type=int, default=3755, help='Classes of character')
parser.add_argument('--demo_img', dest='demo_img', type=str, default='../asserts/fo2.png', help='Path to demo image')
args = parser.parse_args()


if __name__ == '__main__':
    if not os.path.exists(args.data_root + 'train.txt'): # 只生成一次
        classes_txt(args.data_root + 'train', args.data_root + 'train.txt', args.num_classes)
    if not os.path.exists(args.data_root + 'test.txt'): # 只生成一次
        classes_txt(args.data_root + 'test', args.data_root + 'test.txt', args.num_classes)

    if args.mode == 'train':
        train(args)
    elif args.mode == 'evaluate':
        evaluate(args)
    elif args.mode == 'demo':
        demo(args)
    else:
        print('Unknown mode')

訓(xùn)練


在前面CSDN博客的基礎(chǔ)上,增加了lr_scheduler自行調(diào)整學(xué)習(xí)率(如果連續(xù)2個(gè)epoch無(wú)改進(jìn),就調(diào)小lr到一半),增加了連續(xù)訓(xùn)練的功能:

先在log文件夾下尋找是否存在參數(shù)文件,如果沒有,就認(rèn)為是初次訓(xùn)練;如果有,就找到后綴數(shù)字最大的log.pth,在這個(gè)基礎(chǔ)上繼續(xù)訓(xùn)練,并且每訓(xùn)練完一個(gè)epoch,就保存最新的log.pth,代號(hào)是上一次的+1。這樣可以多次訓(xùn)練,防止訓(xùn)練過程中出錯(cuò),參數(shù)文件損壞前功盡棄。

其中has_log_file和find_max_log在Utils.py中有定義。


def train(args):
    print("===Train EffNetV2===")
    # 歸一化處理,不一定要這樣做,看自己的需求,只是預(yù)訓(xùn)練模型的訓(xùn)練是這樣設(shè)置的
    transform = transforms.Compose(
        [transforms.Resize((args.img_size, args.img_size)), transforms.ToTensor(),
         transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
         transforms.ColorJitter()])  

    train_set = MyDataset(args.data_root + 'train.txt', num_class=args.num_classes, transforms=transform)
    train_loader = DataLoader(train_set, batch_size=args.batch_size, shuffle=True)
    device = torch.device('cuda:0')
    # 加載模型
    model = efficientnetv2_s(num_classes=args.num_classes)
    model.to(device)
    model.train()
    criterion = nn.CrossEntropyLoss()
    optimizer = optim.Adam(model.parameters(), lr=args.lr)
    # 學(xué)習(xí)率調(diào)整函數(shù),不一定要這樣做,可以自定義
    scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', patience=2, factor=0.5)
    print("load model...")
    
    # 加載最近保存了的參數(shù)
    if has_log_file(args.log_root):
        max_log = find_max_log(args.log_root)
        print("continue training with " + max_log + "...")
        checkpoint = torch.load(max_log)
        model.load_state_dict(checkpoint['model_state_dict'])
        optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
        loss = checkpoint['loss']
        epoch = checkpoint['epoch'] + 1
    else:
        print("train for the first time...")
        loss = 0.0
        epoch = 0

    while epoch < args.epoch:
        running_loss = 0.0
        for i, data in enumerate(train_loader):
            inputs, labels = data[0].to(device), data[1].to(device)
            optimizer.zero_grad()
            outs = model(inputs)
            loss = criterion(outs, labels)
            loss.backward()
            optimizer.step()
            running_loss += loss.item()
            if i % 200 == 199:
                print('epoch %5d: batch: %5d, loss: %8f, lr: %f' % (
                    epoch + 1, i + 1, running_loss / 200, optimizer.state_dict()['param_groups'][0]['lr']))
                running_loss = 0.0

        scheduler.step(loss)
        # 每個(gè)epoch結(jié)束后就保存最新的參數(shù)
        print('Save checkpoint...')
        torch.save({'epoch': epoch,
                    'model_state_dict': model.state_dict(),
                    'optimizer_state_dict': optimizer.state_dict(),
                    'loss': loss},
                   args.log_root + 'log' + str(epoch) + '.pth')
        print('Saved')
        epoch += 1

    print('Finish training')

評(píng)估


跑測(cè)試集,算總體準(zhǔn)確率。有一點(diǎn)不完善,就是看不到每一個(gè)類具體的準(zhǔn)確率。我的預(yù)訓(xùn)練模型其實(shí)感覺有幾類是過擬合的,但是我懶得調(diào)整了。


def evaluate(args):
    print("===Evaluate EffNetV2===")
    # 這個(gè)地方要和train一致,不過colorJitter可有可無(wú)
    transform = transforms.Compose(
        [transforms.Resize((args.img_size, args.img_size)), transforms.ToTensor(),
         transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
         transforms.ColorJitter()])

    model = efficientnetv2_s(num_classes=args.num_classes)
    model.eval()
    if has_log_file(args.log_root):
        file = find_max_log(args.log_root)
        print("Using log file: ", file)
        checkpoint = torch.load(file)
        model.load_state_dict(checkpoint['model_state_dict'])
    else:
        print("Warning: No log file")

    model.to(torch.device('cuda:0'))
    test_loader = DataLoader(MyDataset(args.data_root + 'test.txt', num_class=args.num_classes, transforms=transform),batch_size=args.batch_size, shuffle=False)
    total = 0.0
    correct = 0.0
    print("Evaluating...")
    with torch.no_grad():
        for i, data in enumerate(test_loader):
            inputs, labels = data[0].cuda(), data[1].cuda()
            outputs = model(inputs)
            _, predict = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predict == labels).sum().item()
    acc = correct / total * 100
    print('Accuracy'': ', acc, '%')

推理


輸入文字圖片,輸出識(shí)別結(jié)果:

其中char_dict就是每個(gè)漢字在數(shù)據(jù)集里的代號(hào)對(duì)應(yīng)的gb2312編碼,這個(gè)模型的輸出結(jié)果是它在數(shù)據(jù)集里的代號(hào),所以要查這個(gè)char_dict來(lái)獲取它對(duì)應(yīng)的漢字。


def demo(args):
    print('==Demo EfficientNetV2===')
    print('Input Image: ', args.demo_img)
    # 這個(gè)地方要和train一致,不過colorJitter可有可無(wú)
    transform = transforms.Compose(
        [transforms.Resize((args.img_size, args.img_size)), transforms.ToTensor(),
         transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])])
    img = Image.open(args.demo_img)
    img = transform(img)
    img = img.unsqueeze(0) # 增維
    model = efficientnetv2_s(num_classes=args.num_classes)
    model.eval()
    if has_log_file(args.log_root):
        file = find_max_log(args.log_root)
        print("Using log file: ", file)
        checkpoint = torch.load(file)
        model.load_state_dict(checkpoint['model_state_dict'])
    else:
        print("Warning: No log file")

    with torch.no_grad():
        output = model(img)
    _, pred = torch.max(output.data, 1)
    f = open('../char_dict', 'rb')
    dic = pickle.load(f)
    for cha in dic:
        if dic[cha] == int(pred):
            print('predict: ', cha)
    f.close()

例如輸入圖片為:

【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別

程序運(yùn)行結(jié)果:

【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別

其他說明


如遇到Module not found之類的錯(cuò),重新寫一下import,從實(shí)際的位置導(dǎo)入。

這個(gè)模型我通過ChaquoPy嘗試移植到了Android平臺(tái),不過效果一般,我也沒好好做:手寫漢字識(shí)別APP,借用開源手寫板

另外,這個(gè)模型對(duì)于太細(xì)太黑的字體,準(zhǔn)確度貌似不是很好,可能還是有點(diǎn)過擬合了。建議輸入的圖片與數(shù)據(jù)集的風(fēng)格靠攏,黑色盡量淺一點(diǎn),線不要太細(xì)。

B站同步文章:(【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別 - 嗶哩嗶哩)

2023年9月更新:本項(xiàng)目已不再做,只是本人的學(xué)習(xí)實(shí)踐,教程只是幫你跑通一個(gè)簡(jiǎn)單有效果的深度學(xué)習(xí),事實(shí)上移動(dòng)端和PC端應(yīng)該都有比EffNetV2更加合適的模型,且需要仔細(xì)設(shè)定學(xué)習(xí)策略。有鏈接失效可以B站私信扣我,我過來(lái)補(bǔ)鏈接。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-470255.html

到了這里,關(guān)于【模型+代碼/保姆級(jí)教程】使用Pytorch實(shí)現(xiàn)手寫漢字識(shí)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

  • 【數(shù)學(xué)建?!砍S梦⒎址匠棠P?+ 詳細(xì)手寫公式推導(dǎo) + Matlab代碼實(shí)現(xiàn)

    【數(shù)學(xué)建?!砍S梦⒎址匠棠P?+ 詳細(xì)手寫公式推導(dǎo) + Matlab代碼實(shí)現(xiàn)

    微分方程基本概念 微分方程在數(shù)學(xué)建模中的應(yīng)用 微分方程常用模型(人口增長(zhǎng)模型、傳染病模型) 2022.06.19 微分方程,是指含有未知函數(shù)及其導(dǎo)數(shù)的關(guān)系式。解微分方程就是找出未知函數(shù)。 微分方程是伴隨著微積分學(xué)一起發(fā)展起來(lái)的。微積分學(xué)的奠基人Newton和Leibniz的著作中

    2024年02月09日
    瀏覽(24)
  • 實(shí)踐教程|基于 pytorch 實(shí)現(xiàn)模型剪枝

    實(shí)踐教程|基于 pytorch 實(shí)現(xiàn)模型剪枝

    PyTorch剪枝方法詳解,附詳細(xì)代碼。 一,剪枝分類 1.1,非結(jié)構(gòu)化剪枝 1.2,結(jié)構(gòu)化剪枝 1.3,本地與全局修剪 二,PyTorch 的剪枝 2.1,pytorch 剪枝工作原理 2.2,局部剪枝 2.3,全局非結(jié)構(gòu)化剪枝 三,總結(jié) 參考資料 所謂模型剪枝,其實(shí)是一種從神經(jīng)網(wǎng)絡(luò)中移除\\\"不必要\\\"權(quán)重或偏差(

    2024年02月12日
    瀏覽(16)
  • 在樹莓派上實(shí)現(xiàn)numpy的conv2d卷積神經(jīng)網(wǎng)絡(luò)做圖像分類,加載pytorch的模型參數(shù),推理mnist手寫數(shù)字識(shí)別,并使用多進(jìn)程加速

    在樹莓派上實(shí)現(xiàn)numpy的conv2d卷積神經(jīng)網(wǎng)絡(luò)做圖像分類,加載pytorch的模型參數(shù),推理mnist手寫數(shù)字識(shí)別,并使用多進(jìn)程加速

    這幾天又在玩樹莓派,先是搞了個(gè)物聯(lián)網(wǎng),又在嘗試在樹莓派上搞一些簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò),這次搞得是卷積識(shí)別mnist手寫數(shù)字識(shí)別 訓(xùn)練代碼在電腦上,cpu就能訓(xùn)練,很快的: 然后需要自己在dataset里導(dǎo)出一些圖片:我保存在了mnist_pi文件夾下,“_”后面的是標(biāo)簽,主要是在pc端導(dǎo)

    2024年02月07日
    瀏覽(33)
  • Unity教程2:保姆級(jí)教程.幾行代碼實(shí)現(xiàn)輸入控制2D人物的移動(dòng)

    Unity教程2:保姆級(jí)教程.幾行代碼實(shí)現(xiàn)輸入控制2D人物的移動(dòng)

    目錄 人物的創(chuàng)建以及剛體的設(shè)置 圖層渲染層級(jí)設(shè)置 角色碰撞箱設(shè)置 使用代碼控制人物移動(dòng) 創(chuàng)建腳本文件 ?初始函數(shù)解釋 控制移動(dòng)代碼 初始化變量 ?獲得鍵盤輸入 ?調(diào)用函數(shù) 手冊(cè)鏈接在這:Unity User Manual (2019.3) - Unity 手冊(cè) 沒有控制人物移動(dòng)的2D游戲就太說不過去了!那么接

    2024年02月06日
    瀏覽(17)
  • Unity中使用Mixamo為3D模型添加動(dòng)畫(保姆級(jí)教程)

    Unity中使用Mixamo為3D模型添加動(dòng)畫(保姆級(jí)教程)

    最近在做為Unity的3D人物添加動(dòng)畫,淺淺記錄一下操作方法。 打開Unity Hub,點(diǎn)擊New Project,然后按照下圖步驟操作: 打開項(xiàng)目——GameObject——3D Object——Plane,這一步非必要,如果已有3D場(chǎng)景,可忽略這一步。 點(diǎn)此打開Mixamo 打開Mixamo后進(jìn)入如下界面,這里有一些3D角色和動(dòng)畫可

    2024年02月07日
    瀏覽(37)
  • 文本識(shí)別CRNN模型介紹以及pytorch代碼實(shí)現(xiàn)

    文本識(shí)別CRNN模型介紹以及pytorch代碼實(shí)現(xiàn)

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 文本識(shí)別是圖像領(lǐng)域的一個(gè)常見任務(wù),場(chǎng)景文字識(shí)別OCR任務(wù)中,需要先檢測(cè)出圖像中文字位置,再對(duì)檢測(cè)出的文字進(jìn)行識(shí)別,文本介紹的CRNN模型可用于后者, 對(duì)檢測(cè)出的文字進(jìn)行識(shí)別。 An End-to-End Tra

    2024年02月07日
    瀏覽(15)
  • 【PyTorch 實(shí)戰(zhàn)2:UNet 分割模型】10min揭秘 UNet 分割網(wǎng)絡(luò)如何工作以及pytorch代碼實(shí)現(xiàn)(詳細(xì)代碼實(shí)現(xiàn))

    【PyTorch 實(shí)戰(zhàn)2:UNet 分割模型】10min揭秘 UNet 分割網(wǎng)絡(luò)如何工作以及pytorch代碼實(shí)現(xiàn)(詳細(xì)代碼實(shí)現(xiàn))

    ??U-Net,自2015年誕生以來(lái),便以其卓越的性能在生物醫(yī)學(xué)圖像分割領(lǐng)域嶄露頭角。作為FCN的一種變體,U-Net憑借其Encoder-Decoder的精巧結(jié)構(gòu),不僅在醫(yī)學(xué)圖像分析中大放異彩,更在衛(wèi)星圖像分割、工業(yè)瑕疵檢測(cè)等多個(gè)領(lǐng)域展現(xiàn)出強(qiáng)大的應(yīng)用能力。UNet是一種常用于圖像分割的卷

    2024年04月28日
    瀏覽(18)
  • 人工智能概論報(bào)告-基于PyTorch的深度學(xué)習(xí)手寫數(shù)字識(shí)別模型研究與實(shí)踐

    人工智能概論報(bào)告-基于PyTorch的深度學(xué)習(xí)手寫數(shù)字識(shí)別模型研究與實(shí)踐

    本文是我人工智能概論的課程大作業(yè)實(shí)踐應(yīng)用報(bào)告,可供各位同學(xué)參考,內(nèi)容寫的及其水,部分也借助了gpt自動(dòng)生成,排版等也基本做好,大家可以參照。如果有需要word版的可以私信我,或者在評(píng)論區(qū)留下郵箱,我會(huì)逐個(gè)發(fā)給。word版是我最后提交的,已經(jīng)調(diào)整統(tǒng)一了全文格

    2024年02月05日
    瀏覽(110)
  • 高級(jí)圣誕樹代碼實(shí)現(xiàn)合集-保姆級(jí)教程【前端三件套實(shí)現(xiàn)—0基礎(chǔ)直接運(yùn)行】

    高級(jí)圣誕樹代碼實(shí)現(xiàn)合集-保姆級(jí)教程【前端三件套實(shí)現(xiàn)—0基礎(chǔ)直接運(yùn)行】

    0基礎(chǔ)直接運(yùn)行教程: 1.新建txt文本: 2.將代碼粘貼到txt文本里: 3.將后綴改為html 4.雙擊打開html文件,觀察效果~ 這段代碼是一個(gè)用HTML和JavaScript實(shí)現(xiàn)的圣誕樹動(dòng)畫效果。我將代碼分成幾個(gè)部分進(jìn)行講解。 HTML結(jié)構(gòu): 在 head 標(biāo)簽中定義了頁(yè)面的標(biāo)題、字符集和樣式。 樣式部分

    2024年02月04日
    瀏覽(20)
  • CNN實(shí)現(xiàn)手寫數(shù)字識(shí)別(Pytorch)

    CNN實(shí)現(xiàn)手寫數(shù)字識(shí)別(Pytorch)

    CNN(卷積神經(jīng)網(wǎng)絡(luò))主要包括卷積層、池化層和全連接層。輸入數(shù)據(jù)經(jīng)過多個(gè)卷積層和池化層提取圖片信息后,最后經(jīng)過若干個(gè)全連接層獲得最終的輸出。 CNN的實(shí)現(xiàn)主要包括以下步驟: 數(shù)據(jù)加載與預(yù)處理 模型搭建 定義損失函數(shù)、優(yōu)化器 模型訓(xùn)練 模型測(cè)試 以下基于Pytorch框

    2024年02月03日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包