智能技術引領未來:自動圖像標注的創新應用與發展

🍑個人主頁:Jupiter.
🚀 所屬專欄:傳知代碼
歡迎大家點贊收藏評論😊

在這里插入圖片描述

在這里插入圖片描述

目錄

  • 概述
  • 算法原理
  • 核心邏輯
  • 效果演示
  • 使用方式
  • 參考文獻


參考文獻:需要本文的詳細復現過程的項目源碼、數據和預訓練好的模型可從該地址處獲取完整版:地址

概述

本文基于論文 Multi-Label Classification using Deep Convolutional Neural Network[1] 實現圖像自動標注程序。

計算機技術的進步和互聯網產業的不斷發展導致了網絡圖像數量的爆炸式增長,如何管理種類繁多的海量圖像成為了一個重要問題。自動圖像標注(Automatic Image Tagging)作為一項重要的圖像管理技術,可以利用計算機自動為每張圖像打上與其內容有關的標簽,從而幫助用戶更好地搜索和訪問圖像。
在這里插入圖片描述

圖1:圖像自動標注任務
近年來,隨著深度學習技術的發展,深度神經網絡能夠捕捉到更多且更加復雜的圖像特征,這使得圖像標注算法的性能也隨之受益。圖像標注與圖像多標簽分類有著天然的緊密連系,后者會根據內容將一張圖像歸納到多個類別中。綜上,本文基于目前先進的深度神經網絡 VGG-Net[2] 和大規模圖像多標簽分類數據集 MS-COCO-2017[3] 訓練自動圖像標注模型。

算法原理

VGG-Net 是一種經典的卷積神經網絡 (Convolutional Neural Network) 架構,其核心思想是通過更深的網絡結構以及使用較小的卷積核來提取更豐富的圖像特征。VGG-Net 通過堆疊多個卷積層來加深網絡,且卷積層全部采用大小為 3×3 的小卷積核,步長為 1,填充為 1。這種設計通過堆疊多個小卷積核來增加網絡的非線性表達能力,且相比使用較大的卷積核,能減少參數數量。在若干卷積層后,VGG-Net 使用 2×2 的最大池化層,步長為 2。池化層用于減少特征圖的尺寸,并保留主要的特征。在最后的卷積層之后,VGG-Net 通過三個全連接層對特征進行進一步處理,最后輸出分類結果。在每個卷積層和全連接層之后,VGG-Net 使用 ReLU (Rectified Linear Unit) 激活函數,以增加網絡的非線性。

在這里插入圖片描述
本文使用一個線性層和 Sigmoid 函數構建模型的分類器,并利用二元交叉熵損失(Binary Cross-Entropy, BCE)進行訓練。
Sigmoid(x)=11+e?x

在這里插入圖片描述

在這里插入圖片描述

核心邏輯

程序的核心代碼如下所示:

 # transformtransform = v2.Compose([v2.Resize(256),v2.CenterCrop(224),v2.RandomHorizontalFlip(),v2.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2),v2.ToImage(),v2.ToDtype(torch.float32, scale=True),v2.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),])# devicedevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')# datasettrain_dataset = COCO_Dataset(configs['train_annotations_path'], configs['train_images_dir'], transform)train_dataloader = DataLoader(train_dataset, batch_size = configs['batch_size'], shuffle = True, num_workers=8, pin_memory=True)test_dataset = COCO_Dataset(configs['test_annotations_path'], configs['test_images_dir'], transform)test_dataloader = DataLoader(test_dataset, batch_size = configs['batch_size'], shuffle = False, num_workers=8, pin_memory=True)# modelmodel = ImageTaggingModel().to(device)optimizer = optim.Adam(model.parameters(), lr=configs['learning_rate'], weight_decay=configs['weight_decay'])lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=configs['lr_decay_step'], gamma=configs['lr_decay_rate'])# logloss_epoch = []precise_epoch = []recall_epoch = []f1_epoch = []# train & testfor epoch_id in range(configs['epochs']):current_loss = 0# trainmodel.train()for batch in tqdm(train_dataloader, desc='Training(Epoch %d)' % epoch_id, ascii=' 123456789#'):optimizer.zero_grad()images = batch['images'].to(device)labels = batch['labels'].to(device)logits = model(images)loss = F.binary_cross_entropy_with_logits(logits, labels)current_loss += loss.item()loss.backward()optimizer.step()lr_scheduler.step()current_loss /= len(train_dataloader)print('Current Average Loss:', current_loss)loss_epoch.append(current_loss)plt.plot(loss_epoch)plt.xlabel('Epoch')plt.ylabel('Loss')plt.title('Loss-Epoch')plt.savefig(os.path.join(configs['logs_dir'], "Loss.png"), dpi=300)plt.clf()# testmodel.eval()TT_num = 0FT_num = 0FF_num = 0with torch.no_grad():for batch in tqdm(test_dataloader, desc='Testing(Epoch %d)' % epoch_id, ascii=' 123456789#'):images = batch['images'].to(device)labels = batch['labels'].to(device)logits = model(images)probs = F.sigmoid(logits)predictions = (probs > configs['threshold']).to(labels.dtype)TT_num += torch.sum(predictions * labels).item()FT_num += torch.sum(predictions * (1 - labels)).item()FF_num += torch.sum((1 - predictions) * labels).item()precise = TT_num / (TT_num + FT_num)recall = TT_num / (TT_num + FF_num)f1_score = 2 * precise * recall / (precise + recall)precise_epoch.append(precise)recall_epoch.append(recall)f1_epoch.append(f1_score)print("Precise = %.2f, Recall = %.2f, F1-score = %.2f" % (precise, recall, f1_score))plt.plot(precise_epoch, label='Precise')plt.plot(recall_epoch, label='Recall')plt.plot(f1_epoch, label='F1-score')plt.xlabel('Epoch')plt.ylabel('Value')plt.title('Result')plt.legend()plt.savefig(os.path.join(configs['logs_dir'], "Result.png"), dpi=300)plt.clf()# save modeltorch.save(model.state_dict(), configs['checkpoint'])

以上代碼僅作展示,更詳細的代碼文件請參見附件。

效果演示

配置環境并運行 main.py腳本,效果如圖4所示。

在這里插入圖片描述
此外,網站還提供了在線體驗功能。用戶只需要輸入一張大小不超過 1MB 的 JPG 圖像,網站就會自動為圖像打上標記并展示詞云,如圖5所示。

在這里插入圖片描述

使用方式

解壓附件壓縮包并進入工作目錄。如果是Linux系統,請使用如下命令:

unzip ImageCaptioning.zip
cd ImageCaptioning

代碼的運行環境可通過如下命令進行配置:

pip install -r requirements.txt

如果在本地測試自動圖像標注程序,請運行如下命令:

python main.py

如果希望在線部署,請運行如下命令:

python main-flask.py

參考文獻

  • [1] Lydia A A, Francis F S. Multi-label classification using deep convolutional neural network[C]//2020 international conference on innovative trends in information technology (ICITIIT). IEEE, 2020: 1-6.

  • [2] Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.

  • [3] Lin T Y, Maire M, Belongie S, et al. Microsoft coco: Common objects in context[C]//Computer Vision–ECCV 2014: 13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part V 13. Springer International Publishing, 2014: 740-755.

參考文獻:需要本文的詳細復現過程的項目源碼、數據和預訓練好的模型可從該地址處獲取完整版:地址


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62831.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言-排序

常見的排序算法分為以下四種,插入排序,選擇排序,交換排序,歸并排序。 一、插入排序 (一)直接插入排序 直接插入排序,將一段數組看做被分成已排序序列和未排序序列,排序過程是從未排序序列的元素開始&…

【Java筆記】LinkedList 底層結構

一、LinkedList 的全面說明 LinkedList底層實現了雙向鏈表和雙端隊列特點可以添加任意元素(元素可以重復),包括null線程不安全,沒有實現同步 二、LinkedList 的底層操作機制 三、LinkedList的增刪改查案例 public class LinkedListCRUD { public stati…

網管平臺(基礎篇):路由器的介紹與管理

路由器簡介 路由器(Router)是一種計算機網絡設備,它的主要作用是將數據通過打包,并按照一定的路徑選擇算法,將網絡傳送至目的地。路由器能夠連接兩個或更多個網絡,并根據信道的情況自動選擇和設定路由&…

排序算法(2):選擇排序

問題 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 選擇排序 選擇排序每次從待排序序列中選出最小(或最大)的元素,將其放到序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(或最大)元素…

Tongweb8命令行使用收集(by lqw)

文章目錄 聲明對應版本修改thanos用戶密碼部署應用到默認實例節點相關操作新增節點(一般一個服務器ip只能裝一個節點)啟動節點(需確認節點沒有運行)停止節點刪除節點節點新增應用節點查看應用節點啟動應用節點停止應用節點卸載應用(謹慎操作,卸載后應用就沒有了,建議備份后…

Artec Leo3D掃描儀在重型機械設備定制中的應用【滬敖3D】

挑戰:一家加拿大制造商需要有效的方法,為富于變化且難度較高的逆向工程,快速、安全、準確地完成重型機械幾何采集。 解決方案:Artec Leo, Artec Studio, Geomagic for SOLIDWORKS 效果:Artec Leo三維掃描代替過去的手動…

Nginx 限制只能白名單 uri 請求的配置

實際生產項目中,大多數時候我們會將后端的 http 接口通過前置 nginx 進行反向代理,對互聯網用戶提供服務。往往我們后端服務所能提供的接口服務是大于互聯網用戶側的實際請求的接口地址數量的(例如后端服務一共有100個api接口,經過…

題海拾貝:力扣 141.環形鏈表

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》 歡迎點贊&#xff0c;關注&#xff01; 1、題…

Vite快速構建Vue教程

步驟 1: 初始化項目目錄 創建一個名為 projects 的文件夾&#xff0c;作為存放所有 Vite 項目的根目錄。這個文件夾將容納多個獨立的 Vite 項目。 步驟 2: 創建 Vite 項目 右鍵點擊 projects 文件夾并選擇“在此處打開終端”或使用您偏好的代碼編輯器&#xff08;如 VSCode&…

深入理解 CSS 文本換行: overflow-wrap 和 word-break

前言 正常情況下&#xff0c;在固定寬度的盒子中的中文會自動換行。但是&#xff0c;當遇到非常長的英文單詞或者很長的 URL 時&#xff0c;文本可能就不會自動換行&#xff0c;而會溢出所在容器。幸運的是&#xff0c;CSS 為我們提供了一些和文本換行相關的屬性&#xff1b;今…

【NumPy進階】:內存視圖、性能優化與高級線性代數

目錄 1. 深入理解 NumPy 的內存視圖與拷貝1.1 內存視圖&#xff08;View&#xff09;1.1.1 創建視圖1.1.2 視圖的特點 1.2 數組拷貝&#xff08;Copy&#xff09;1.2.1 創建拷貝1.2.2 拷貝的特點 1.3 視圖與拷貝的選擇 2. NumPy 的優化與性能提升技巧2.1 向量化操作示例&#x…

HarmonyOS 5.0應用開發——屬性動畫

【高心星出品】 文章目錄 屬性動畫animateTo屬性動畫animation屬性動畫 屬性動畫 屬性接口&#xff08;以下簡稱屬性&#xff09;包含尺寸屬性、布局屬性、位置屬性等多種類型&#xff0c;用于控制組件的行為。針對當前界面上的組件&#xff0c;其部分屬性&#xff08;如位置屬…

機器學習支持向量機(SVM)算法

一、引言 在當今數據驅動的時代&#xff0c;機器學習算法在各個領域發揮著至關重要的作用。支持向量機&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;作為一種強大的監督學習算法&#xff0c;以其在分類和回歸任務中的卓越性能而備受矚目。SVM 具有良好的泛化…

介紹一款docker ui 管理工具

http://vm01:18999/main.html 管理員登陸賬號 jinghan/123456 ui啟動命令所在文件夾目錄 /work/docker/docker-ui 參考鏈接 DockerUI&#xff1a;一款功能強大的中文Docker可視化管理工具_docker ui-CSDN博客

Motrix WebExtension 使用教程

Motrix WebExtension 使用教程 項目地址:https://gitcode.com/gh_mirrors/mo/motrix-webextension 項目介紹 Motrix WebExtension 是一個瀏覽器擴展,用于與 Motrix 下載管理器集成。該擴展允許用戶通過 Motrix 下載管理器自動下載文件,而不是使用瀏覽器的原生下載管理器。…

前端(四)css選擇器、css的三大特性

css選擇器、css的三大特性 文章目錄 css選擇器、css的三大特性一、css介紹二、css選擇器2.1 基本選擇器2.2 組合選擇器2.3 交集并集選擇器2.4序列選擇器2.5屬性選擇器2.6偽類選擇器2.7偽元素選擇器 三、css三大特性3.1 繼承性3.2 層疊性3.3 優先級 一、css介紹 CSS全稱為Casca…

《探索視頻數字人:開啟未來視界的鑰匙》

一、引言 1.1視頻數字人技術的崛起 在當今科技飛速發展的時代&#xff0c;視頻數字人技術如一顆璀璨的新星&#xff0c;正逐漸成為各領域矚目的焦點。它的出現&#xff0c;猶如一場科技風暴&#xff0c;徹底改變了傳統的視頻制作方式&#xff0c;為各個行業帶來了前所未有的機…

【ETCD】[源碼閱讀]深度解析 EtcdServer 的 processInternalRaftRequestOnce 方法

在分布式系統中&#xff0c;etcd 的一致性與高效性得益于其強大的 Raft 協議模塊。而 processInternalRaftRequestOnce 是 etcd 服務器處理內部 Raft 請求的核心方法之一。本文將從源碼角度解析這個方法的邏輯流程&#xff0c;幫助讀者更好地理解 etcd 的內部實現。 方法源碼 …

免費下載 | 2024算網融合技術與產業白皮書

《2024算網融合技術與產業白皮書&#xff08;2023年&#xff09;》的核心內容概括如下&#xff1a; 算網融合發展概述&#xff1a; 各國細化算網戰略&#xff0c;指引行業應用創新升級。 算網融合市場快速增長&#xff0c;算力互聯成為投資新熱點。 算網融合產業模式逐漸成型…

基于卷積神經網絡的圖像二分類檢測模型訓練與推理實現教程 | 幽絡源

前言 對于本教程&#xff0c;說白了&#xff0c;就是期望能通過一個程序判斷一張圖片是否為某個物體&#xff0c;或者說判斷一張圖片是否為某個缺陷。因為本教程是針對二分類問題&#xff0c;因此主要處理 是 與 不是 的問題&#xff0c;比如我的模型是判斷一張圖片是否為蘋果…