【完整源碼+數據集+部署教程】倉庫物品分類檢測圖像分割系統源碼和數據集:改進yolo11-convnextv2

背景意義

研究背景與意義
隨著現代物流和倉儲管理的快速發展,物品分類與檢測技術在提高倉庫運營效率、降低人工成本方面發揮著越來越重要的作用。傳統的物品管理方式往往依賴人工識別和分類,效率低下且容易出錯。為了解決這一問題,基于計算機視覺的自動化物品分類檢測系統應運而生。近年來,深度學習技術的進步,尤其是目標檢測算法的不斷優化,使得這一領域的研究取得了顯著的進展。

YOLO(You Only Look Once)系列算法作為目標檢測領域的佼佼者,以其高效的實時檢測能力和良好的準確性,成為了許多應用場景的首選。YOLOv11作為該系列的最新版本,結合了更先進的網絡結構和優化策略,能夠在復雜環境中實現更高效的物品檢測和分類。然而,現有的YOLOv11模型在特定應用場景中的表現仍有提升空間,尤其是在倉庫物品的細粒度分類和圖像分割任務中。

本研究旨在基于改進的YOLOv11算法,構建一個針對倉庫物品的分類檢測與圖像分割系統。我們將使用包含2000張圖像的5S數據集,該數據集涵蓋了12種不同類別的物品,包括箱子、手推車、托盤等。這些類別的多樣性為模型的訓練和評估提供了豐富的樣本,能夠有效提升模型的泛化能力和實際應用效果。

通過對YOLOv11的改進,我們希望能夠在物品檢測的準確性和速度上實現突破,進而為倉庫管理提供更為智能化的解決方案。該系統的成功實施將為物流行業的數字化轉型提供有力支持,推動智能倉儲技術的發展,并為相關領域的研究提供新的思路和方法。

圖片效果

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

數據集信息

本項目數據集信息介紹

本項目旨在通過改進YOLOv11模型,構建一個高效的倉庫物品分類檢測圖像分割系統,以提升倉庫管理的智能化水平。為實現這一目標,我們構建了一個專門的數據集,主題圍繞“5S”管理理念展開,強調在倉庫環境中物品的整理、整頓、清掃、清潔和素養的重要性。該數據集包含11個類別,涵蓋了倉庫中常見的物品類型,具體包括:BOX(箱子)、BUNDLING(捆綁物)、GULUNGAN(卷筒)、HAND-PALLET(手動托盤)、KONTAINER(集裝箱)、KURSI-BESI(鐵椅)、OTHER(其他物品)、PALLET(托盤)、PENGKI(鏟子)、SAPU(掃帚)和TRASH(垃圾)。這些類別的選擇不僅反映了倉庫管理的實際需求,也為物品的分類和檢測提供了多樣化的視角。

數據集中的圖像經過精心挑選和標注,確保每個類別的樣本數量均衡,且涵蓋了不同的拍攝角度、光照條件和背景環境。這種多樣性使得模型在訓練過程中能夠學習到更為豐富的特征,從而提高其在實際應用中的魯棒性和準確性。此外,數據集還考慮到了不同物品之間的相似性和差異性,確保模型能夠有效地區分相近類別,減少誤檢和漏檢的情況。

通過對該數據集的深入分析和應用,我們期望能夠顯著提升YOLOv11在倉庫物品分類檢測中的性能,進而推動“5S”管理理念在倉庫環境中的落地實施。最終,我們希望該系統不僅能提高物品管理的效率,還能為倉庫的整體運營提供數據支持和決策依據。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

核心代碼

以下是代碼中最核心的部分,并附上詳細的中文注釋:

import torch
import torch.nn as nn

class KANConvNDLayer(nn.Module):
def init(self, conv_class, norm_class, input_dim, output_dim, spline_order, kernel_size,
groups=1, padding=0, stride=1, dilation=1,
ndim: int = 2, grid_size=5, base_activation=nn.GELU, grid_range=[-1, 1], dropout=0.0):
super(KANConvNDLayer, self).init()

    # 初始化參數self.inputdim = input_dim  # 輸入維度self.outdim = output_dim    # 輸出維度self.spline_order = spline_order  # 樣條的階數self.kernel_size = kernel_size  # 卷積核大小self.padding = padding  # 填充self.stride = stride  # 步幅self.dilation = dilation  # 膨脹self.groups = groups  # 分組卷積的組數self.ndim = ndim  # 數據的維度(1D, 2D, 3D)self.grid_size = grid_size  # 網格大小self.base_activation = base_activation()  # 基礎激活函數self.grid_range = grid_range  # 網格范圍# 如果設置了dropout,則根據維度選擇相應的Dropout層self.dropout = Noneif dropout > 0:if ndim == 1:self.dropout = nn.Dropout1d(p=dropout)elif ndim == 2:self.dropout = nn.Dropout2d(p=dropout)elif ndim == 3:self.dropout = nn.Dropout3d(p=dropout)# 檢查分組參數的有效性if groups <= 0:raise ValueError('groups must be a positive integer')if input_dim % groups != 0:raise ValueError('input_dim must be divisible by groups')if output_dim % groups != 0:raise ValueError('output_dim must be divisible by groups')# 初始化基礎卷積層和樣條卷積層self.base_conv = nn.ModuleList([conv_class(input_dim // groups,output_dim // groups,kernel_size,stride,padding,dilation,groups=1,bias=False) for _ in range(groups)])self.spline_conv = nn.ModuleList([conv_class((grid_size + spline_order) * input_dim // groups,output_dim // groups,kernel_size,stride,padding,dilation,groups=1,bias=False) for _ in range(groups)])# 初始化歸一化層和激活層self.layer_norm = nn.ModuleList([norm_class(output_dim // groups) for _ in range(groups)])self.prelus = nn.ModuleList([nn.PReLU() for _ in range(groups)])# 創建樣條網格h = (self.grid_range[1] - self.grid_range[0]) / grid_sizeself.grid = torch.linspace(self.grid_range[0] - h * spline_order,self.grid_range[1] + h * spline_order,grid_size + 2 * spline_order + 1,dtype=torch.float32)# 使用Kaiming均勻分布初始化卷積層的權重for conv_layer in self.base_conv:nn.init.kaiming_uniform_(conv_layer.weight, nonlinearity='linear')for conv_layer in self.spline_conv:nn.init.kaiming_uniform_(conv_layer.weight, nonlinearity='linear')def forward_kan(self, x, group_index):# 對輸入應用基礎激活函數,并進行線性變換base_output = self.base_conv[group_index](self.base_activation(x))x_uns = x.unsqueeze(-1)  # 擴展維度以進行樣條操作target = x.shape[1:] + self.grid.shape  # 計算目標形狀grid = self.grid.view(*list([1 for _ in range(self.ndim + 1)] + [-1, ])).expand(target).contiguous().to(x.device)# 計算樣條基bases = ((x_uns >= grid[..., :-1]) & (x_uns < grid[..., 1:])).to(x.dtype)# 計算多個階數的樣條基for k in range(1, self.spline_order + 1):left_intervals = grid[..., :-(k + 1)]right_intervals = grid[..., k:-1]delta = torch.where(right_intervals == left_intervals, torch.ones_like(right_intervals),right_intervals - left_intervals)bases = ((x_uns - left_intervals) / delta * bases[..., :-1]) + \((grid[..., k + 1:] - x_uns) / (grid[..., k + 1:] - grid[..., 1:(-k)]) * bases[..., 1:])bases = bases.contiguous()bases = bases.moveaxis(-1, 2).flatten(1, 2)  # 重新排列和展平基# 通過樣條卷積層進行輸出spline_output = self.spline_conv[group_index](bases)x = self.prelus[group_index](self.layer_norm[group_index](base_output + spline_output))# 如果設置了dropout,則應用dropoutif self.dropout is not None:x = self.dropout(x)return xdef forward(self, x):# 將輸入按組分割split_x = torch.split(x, self.inputdim // self.groups, dim=1)output = []for group_ind, _x in enumerate(split_x):y = self.forward_kan(_x.clone(), group_ind)  # 對每個組進行前向傳播output.append(y.clone())y = torch.cat(output, dim=1)  # 合并輸出return y

代碼核心部分說明:
KANConvNDLayer類:這是一個自定義的多維卷積層,支持1D、2D和3D卷積。它結合了基礎卷積和樣條卷積的特性。
初始化方法:初始化卷積層、歸一化層、激活函數和樣條網格,并進行必要的參數檢查。
forward_kan方法:實現了對輸入數據的前向傳播,計算基礎卷積和樣條卷積的輸出,并應用激活函數和歸一化。
forward方法:將輸入數據按組分割,并對每個組調用forward_kan進行處理,最后合并輸出。
這個程序文件定義了一個名為 KANConv 的卷積層,主要用于深度學習中的卷積神經網絡(CNN)。它是一個可擴展的多維卷積層,支持1D、2D和3D卷積,具有自定義的樣條基函數(spline basis)和歸一化層。程序中包含了一個基類 KANConvNDLayer 和三個子類 KANConv1DLayer、KANConv2DLayer 和 KANConv3DLayer,分別用于處理一維、二維和三維數據。

在 KANConvNDLayer 類的構造函數中,首先初始化了一些參數,包括輸入和輸出維度、卷積核大小、樣條階數、分組數、填充、步幅、擴張、網格大小、激活函數、網格范圍和丟棄率。然后,程序檢查分組數是否為正整數,并確保輸入和輸出維度可以被分組數整除。

接下來,基于傳入的卷積類(如 nn.Conv1d、nn.Conv2d 或 nn.Conv3d),程序創建了基礎卷積層和樣條卷積層的模塊列表。每個組都有獨立的卷積層和歸一化層,以及 PReLU 激活函數。程序還生成了一個網格,用于計算樣條基函數。

在 forward_kan 方法中,首先對輸入進行基礎激活,然后通過基礎卷積層進行線性變換。接著,程序計算樣條基函數,并將其傳遞給樣條卷積層。最后,輸出經過歸一化和激活函數處理的結果,并在需要時應用丟棄層。

forward 方法將輸入張量按組分割,并對每個組調用 forward_kan 方法進行處理,最后將所有組的輸出拼接在一起。

子類 KANConv1DLayer、KANConv2DLayer 和 KANConv3DLayer 繼承自 KANConvNDLayer,分別指定了適用于一維、二維和三維卷積的卷積類和歸一化類。

總體來說,這個程序實現了一個靈活的卷積層,結合了基礎卷積和樣條卷積的優點,適用于多種類型的輸入數據,并提供了多種可調參數以適應不同的應用場景。

10.4 repvit.py
以下是代碼中最核心的部分,并附上詳細的中文注釋:

import torch.nn as nn
import torch

def _make_divisible(v, divisor, min_value=None):
“”"
確保所有層的通道數是8的倍數
:param v: 輸入的通道數
:param divisor: 需要被整除的數
:param min_value: 最小值,默認為divisor
:return: 調整后的通道數
“”"
if min_value is None:
min_value = divisor
new_v = max(min_value, int(v + divisor / 2) // divisor * divisor)
# 確保向下取整不會減少超過10%
if new_v < 0.9 * v:
new_v += divisor
return new_v

class Conv2d_BN(torch.nn.Sequential):
“”"
包含卷積層和批歸一化層的組合
“”"
def init(self, a, b, ks=1, stride=1, pad=0, dilation=1,
groups=1, bn_weight_init=1):
super().init()
# 添加卷積層
self.add_module(‘c’, torch.nn.Conv2d(
a, b, ks, stride, pad, dilation, groups, bias=False))
# 添加批歸一化層
self.add_module(‘bn’, torch.nn.BatchNorm2d(b))
# 初始化批歸一化層的權重
torch.nn.init.constant_(self.bn.weight, bn_weight_init)
torch.nn.init.constant_(self.bn.bias, 0)

@torch.no_grad()
def fuse_self(self):"""融合卷積層和批歸一化層為一個卷積層"""c, bn = self._modules.values()# 計算融合后的權重和偏置w = bn.weight / (bn.running_var + bn.eps)**0.5w = c.weight * w[:, None, None, None]b = bn.bias - bn.running_mean * bn.weight / \(bn.running_var + bn.eps)**0.5# 創建新的卷積層m = torch.nn.Conv2d(w.size(1) * self.c.groups, w.size(0), w.shape[2:], stride=self.c.stride, padding=self.c.padding, dilation=self.c.dilation, groups=self.c.groups,device=c.weight.device)m.weight.data.copy_(w)m.bias.data.copy_(b)return m

class RepViTBlock(nn.Module):
“”"
RepViT的基本模塊,包含通道混合和標記混合
“”"
def init(self, inp, hidden_dim, oup, kernel_size, stride, use_se, use_hs):
super(RepViTBlock, self).init()
assert stride in [1, 2]
self.identity = stride == 1 and inp == oup
assert(hidden_dim == 2 * inp)

    if stride == 2:# 當步幅為2時,使用卷積和SqueezeExciteself.token_mixer = nn.Sequential(Conv2d_BN(inp, inp, kernel_size, stride, (kernel_size - 1) // 2, groups=inp),nn.Identity() if not use_se else SqueezeExcite(inp, 0.25),Conv2d_BN(inp, oup, ks=1, stride=1, pad=0))self.channel_mixer = nn.Sequential(Conv2d_BN(oup, 2 * oup, 1, 1, 0),nn.GELU() if use_hs else nn.Identity(),Conv2d_BN(2 * oup, oup, 1, 1, 0, bn_weight_init=0),)else:assert(self.identity)# 當步幅為1時,使用RepVGGDW模塊self.token_mixer = nn.Sequential(RepVGGDW(inp),nn.Identity() if not use_se else SqueezeExcite(inp, 0.25),)self.channel_mixer = nn.Sequential(Conv2d_BN(inp, hidden_dim, 1, 1, 0),nn.GELU() if use_hs else nn.Identity(),Conv2d_BN(hidden_dim, oup, 1, 1, 0, bn_weight_init=0),)def forward(self, x):# 前向傳播return self.channel_mixer(self.token_mixer(x))

class RepViT(nn.Module):
“”"
RepViT模型的主類
“”"
def init(self, cfgs):
super(RepViT, self).init()
self.cfgs = cfgs
input_channel = self.cfgs[0][2]
# 構建初始層
patch_embed = torch.nn.Sequential(Conv2d_BN(3, input_channel // 2, 3, 2, 1), torch.nn.GELU(),
Conv2d_BN(input_channel // 2, input_channel, 3, 2, 1))
layers = [patch_embed]
# 構建反向殘差塊
for k, t, c, use_se, use_hs, s in self.cfgs:
output_channel = _make_divisible(c, 8)
exp_size = _make_divisible(input_channel * t, 8)
layers.append(RepViTBlock(input_channel, exp_size, output_channel, k, s, use_se, use_hs))
input_channel = output_channel
self.features = nn.ModuleList(layers)

def forward(self, x):# 前向傳播,返回特征圖features = []for f in self.features:x = f(x)features.append(x)return features

def repvit_m0_9(weights=‘’):
“”"
構建RepViT模型的特定配置
“”"
cfgs = [
# k, t, c, SE, HS, s
[3, 2, 48, 1, 0, 1],
# 其他配置…
]
model = RepViT(cfgs)
if weights:
model.load_state_dict(torch.load(weights)[‘model’])
return model
代碼核心部分解釋:
_make_divisible: 確保通道數是8的倍數,適用于模型結構的要求。
Conv2d_BN: 封裝了卷積層和批歸一化層,提供了權重初始化和融合方法。
RepViTBlock: 定義了RepViT的基本構建塊,負責通道和標記的混合。
RepViT: 主模型類,負責根據配置構建整個網絡結構。
repvit_m0_9: 提供了一個特定配置的RepViT模型構建函數。
以上是代碼的核心部分及其詳細注釋,幫助理解模型的結構和功能。

這個程序文件 repvit.py 實現了一個基于深度學習的模型,主要是 RepViT(Residual Vision Transformer)架構的實現。該模型結合了卷積神經網絡(CNN)和視覺變換器(ViT)的優點,適用于圖像分類等任務。

首先,程序導入了必要的庫,包括 PyTorch 的神經網絡模塊、NumPy 和一些特定的層(如 SqueezeExcite)。接著,定義了一些全局變量,表示不同版本的 RepViT 模型。

replace_batchnorm 函數用于遍歷網絡中的所有子模塊,將 BatchNorm2d 層替換為 Identity 層。這通常用于模型推理階段,以減少計算開銷。

_make_divisible 函數確保所有層的通道數都是 8 的倍數,這在一些模型架構中是一個常見的要求,以提高計算效率。

Conv2d_BN 類定義了一個包含卷積層和批歸一化層的復合模塊,并在初始化時對批歸一化的權重進行初始化。fuse_self 方法用于將卷積層和批歸一化層融合為一個卷積層,以提高推理速度。

Residual 類實現了殘差連接的功能,允許在訓練時添加隨機噪聲以提高模型的魯棒性。它也包含了一個 fuse_self 方法,用于在推理時融合卷積層。

RepVGGDW 類定義了一個深度可分離卷積模塊,結合了卷積和批歸一化,輸出經過激活函數處理的結果。

RepViTBlock 類實現了 RepViT 的基本構建塊,包含了通道混合和標記混合的功能,使用了前面定義的模塊。

RepViT 類是整個模型的核心,負責構建模型的不同層次。它接受一個配置列表,構建相應的卷積層和 RepViT 塊,并在前向傳播中返回特征圖。

switch_to_deploy 方法用于將模型切換到推理模式,替換掉所有的 BatchNorm 層。

update_weight 函數用于更新模型的權重,將預訓練模型的權重加載到當前模型中。

接下來,定義了多個函數(如 repvit_m0_9, repvit_m1_0, 等),這些函數用于構建不同配置的 RepViT 模型,并可以選擇性地加載預訓練權重。

最后,在 main 部分,程序實例化了一個 RepViT 模型,并對隨機生成的輸入數據進行前向傳播,輸出各層的特征圖尺寸。

總體而言,這個程序實現了一個靈活且高效的深度學習模型,適用于各種計算機視覺任務,尤其是在圖像分類領域。

源碼文件

在這里插入圖片描述

源碼獲取

歡迎大家點贊、收藏、關注、評論啦 、查看👇🏻獲取聯系方式👇🏻

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

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

相關文章

瀏覽器穩定性提升之路:線上崩潰率優化中的 Return 與 CHECK 之爭

一、前言在大型 C 工程&#xff08;例如 Chrome 瀏覽器內核&#xff09;中&#xff0c;開發者經常會遇到這樣的選擇&#xff1a; 到底應該在關鍵點使用 CHECK 直接崩潰&#xff0c;還是使用 return、LOG 記錄錯誤然后繼續執行&#xff1f;這看似只是一個代碼風格問題&#xff0…

【數據結構與算法Trip第3站】雙指針

我們來詳細講解一下算法中非常常用且重要的技巧——雙指針法。 這是一個概念清晰但應用極其廣泛的技術&#xff0c;掌握它能幫助你高效解決許多問題。 一、什么是雙指針法&#xff1f; 核心思想&#xff1a;顧名思義&#xff0c;就是在遍歷對象&#xff08;通常是數組或鏈表&am…

時序數據庫選型指南:基于大數據視角的IoTDB應用優勢分析詳解!

目錄 一、時序數據庫選型的基本原則 1.1 數據特征與需求分析 1.1.1 數據規模與寫入負載 1.1.2 查詢需求 1.1.3 數據保留與歸檔策略 1.1.4 系統擴展性與高可用性 1.2 技術架構與系統性能評估 1.2.1 寫入性能 1.2.2 查詢性能 1.2.3 數據壓縮能力 1.2.4 高可用性與災備…

緩存三大劫攻防戰:穿透、擊穿、雪崩的Java實戰防御體系(三)

第三部分&#xff1a;緩存雪崩——大量key失效引發的“系統性崩潰” 緩存雪崩的本質是“大量緩存key在同一時間失效&#xff0c;或緩存集群整體故障”&#xff0c;導致請求全量穿透至DB&#xff0c;引發“系統性崩潰”。 案例4&#xff1a;電商首頁的“批量過期”災難 故障現場…

解決docker配置了鏡像源但還會拉取官方鏡像源的問題

&#x1f3d3;我們有時候雖然配置了Docker國內鏡像源&#xff0c;但是還是會繞過去請求官方鏡像源&#xff08;docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded&#xff09;&#xff0c;現在我們就來解決一…

R語言水文、水環境模型優化:從最速上升法、嶺分析到貝葉斯優化與異方差處理,涵蓋采樣設計、代理模型與快速率定等

在水利工程、環境治理、生態保護、機械設計與航天航空等現代工業與科學領域&#xff0c;數學模型已成為不可或缺的核心分析、預測與決策工具。然而&#xff0c;隨著系統復雜性的日益增長&#xff0c;模型構建的精確性、參數率定的效率以及不確定性量化的重要性被提到了前所未有…

關于數據采集與處理心得(一)

目前所實踐的經驗告知我&#xff01;1. 別企圖妄想一個腳本解決所有問題要學會對問題分解&#xff0c;編寫多個腳本一步步將問題解決&#xff0c;如果每一個步驟都為了下一個階段的成果打地基&#xff0c;也是非常OK的。同時要盡可能將每一個編寫的腳本都盡到最大的利用率2. 編…

IvorySQL 適配 LoongArch? 龍架構

IvorySQL 社區很高興向您宣布&#xff0c;IvorySQL 已成功適配LoongArch 龍架構&#xff0c;為國產數據庫與國產芯片的深度融合邁出了堅實一步。這一里程碑標志著 IvorySQL 在推動國產化生態建設、賦能信創產業方面取得了重大突破&#xff0c;為用戶提供更高效、穩定、安全的數…

數據庫分庫分表是考慮ShardingSphere 還是Mycat?

http://www.mycat.org.cn/ https://shardingsphere.apache.org/ 這是一個非常核心且優秀的問題。在選擇 ShardingSphere 和 Mycat 之間&#xff0c;對于游戲這種高性能、高復雜度的場景&#xff0c;目前行業內的主流選擇和發展趨勢毫無疑問是 ShardingSphere。 我會為你詳細對…

mysql分庫分表數據量核查問題

場景&#xff1a; 使用分庫分表的業務有時分庫數量幾百甚至上千&#xff0c;當主管需要查詢每個庫中的數據&#xff0c;掌握數據分布情況。要你查看哪些庫中的表數量大于某個量級的給找出來 &#xff0c;你會怎么做。 例子 &#xff1a; mysql庫數量&#xff1a;db_xx_devicein…

python之socket網絡編程

引言 在互聯網時代&#xff0c;網絡編程已經成為開發人員必備的技能之一。無論是Web開發、實時通信還是分布式計算&#xff0c;都離不開網絡編程的支持。Python提供的socket模塊為我們提供了簡潔而強大的接口&#xff0c;可以輕松實現客戶端和服務器之間的通信。 Socket編程是網…

WPF Telerik.Windows.Controls.Data.PropertyGrid 自定義屬性編輯器

1.AI幫忙定義新用戶控件 2.在屬性上添加TelerikEditorAttribute特性 private ObservableCollection<string> _axisOrder;[Display(Description "點位", GroupName "通用", Name "軸&順序", Order 1)][DataMember][TelerikEditorAt…

【超詳細】別再看零散的教程了!一篇搞定Gitee從注冊、配置到代碼上傳與管理(內含避坑指南最佳實踐)

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題、洛谷刷題、C/C基礎知識知識強化補充、C/C干貨分享&學習過程記錄 &#x1f349;學習方向&#xff1a;C/C方向學習者…

43.shell腳本循環與函數

shell腳本循環與函數 for 循環 for 循環用于一次性讀取多個信息&#xff0c;逐一對信息進行操作處理&#xff0c;特別適合處理有范圍的數據 語法 for 變量名 in 取值列表 do命令序列 done批量創建用戶 #!/bin/bashtouch /root/users.txt echo aka blues cloe dio foks > /ro…

模型部署:(四)安卓端部署Yolov8-v8.2.99實例分割項目全流程記錄

模型部署&#xff1a;&#xff08;四&#xff09;安卓端部署Yolov8-v8.2.99實例分割項目全流程記錄1、下載ncnn2、下載opencv-mobile3、文件拷貝4、andorid_studio相關配置5、文件內參數設置5、重構項目&#xff1a;6、打包apk7、部署自己訓練的實例分割模型1、下載ncnn 地址&…

高并發、低延遲全球直播系統架構

一、 核心架構圖 整個系統的數據流和工作流程如下圖所示&#xff0c;它清晰地展示了從主播推流到觀眾觀看的完整過程&#xff1a; #mermaid-svg-QzNpj0DWxd5FERPC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QzN…

AWS strands agents 當智能體作為獨立服務/容器部署時,它們無法共享進程內狀態

當智能體作為獨立服務/容器部署時&#xff0c;它們無法共享進程內狀態。 以下是針對分布式部署中動態內存庫的生產就緒解決方案&#xff1a;1. 基于外部存儲的內存庫基于 DynamoDB 的共享內存import boto3 from strands import Agent, tool from typing import Dict, Any impor…

第五節 JavaScript——引用類型、DOM/BOM 與異步編程

JavaScript 的第五節課通常會深入探討 ??引用類型、DOM 操作、BOM 操作、事件處理以及異步編程?? 等核心概念。這些知識能讓你創建動態交互豐富的網頁。下面我將詳細講解這些內容并提供示例。 ?? JavaScript 第五節:引用類型、DOM/BOM 與異步編程 ? 一、引用類型 引…

使用Pycharm進行遠程ssh(以Featurize為例)

使用Pycharm進行遠程ssh&#xff08;以Featurize為例&#xff09;文章目錄介紹應用背景遠程連接Python連接Jupyter介紹應用背景 在使用Pycharm 專業版的時候進行遠程ssh連接服務器&#xff08;Featurize&#xff09;的Python解釋器和Jupyter 遠程連接Python 打開Pycharm點擊…

深入研究:ClickHouse中arrayExists與hasAny在ORDER BY場景下的性能差異

最近公司大數據情況下ClickHouse查詢性能極差&#xff0c;后來發現在大數據量ORDER BY場景下&#xff0c;arrayExists(x -> x in ...)比hasAny性能快10倍&#xff01;&#xff01;&#xff01;&#xff01; 一、問題重述與研究背景 在大數據量 ORDER BY場景下&#xff0c;…