This is an article on the design of feature extraction blocks developed to improve multi-scale object detection whileining fast inference in real-world applications. Այս հոդվածը գրում է գործառույթների արտահանման բլոգների նախագծման մասին, որը մշակվել է բազմազանց ծախսերի գործառույթների դիզայնի բարելավման համար, իսկ իրական աշխարհում օգտագործված ծրագրերի արագ դիզայնը: CSP (Cross-stage partial connections) սարքավորումներ Առաջին, WongKinYiu et al. Այս դիզայնային նորարարությունը ներկայացվել է եւ լուծել է ավելի մեծ convolutional neural network backbones- ում ծախսված gradient տեղեկատվության խնդիրը: Դիզայնի հիմնական նպատակն է ծախսել gradient ինտերնետները, իսկ ցածրում է համակարգչային ծախսերը: Cross-stage partial connections (CSP) պահպանում է gradient diversity- ը, որը համատեղում է առանձնահատկությունները քարտերը, քանի որ ամեն ցանցի մակերեսի սկսած եւ վերջում: բազան մակերեսի առանձնահատկությունները կտրված են երկու մասերի վրա: մեկը անցնում է խոշոր բլոգը եւ փոխանցման մակերեսը, իսկ մեկը փոխանցում է այս ճանապարհը եւ մուտքագրում է հաջորդ մակերեսին: Այս դիզ 1 CSP-DenseNet- ը պահպանում է DenseNet- ի առանձնահատկությունների վերցնելը, իսկ նվազեցնում է կրկնակի gradient տեղեկատվությունը, կտրելով gradient flow- ը, որը հասանելի է մի հիերժիկ առանձնահատկությունների զրուցման ռազմավարության միջոցով մի մասական փոխանցման մակերեսում: Ըստ The Այս մեթոդը նվազեցնում է գործառույթը 20% -ով, իսկ ImageNet- ի տվյալների միասնական կամ նույնիսկ գերազանց ճշգրիտությունը ստանում է: Author`s փորձեր C3 Տեսակներ YOLOv4 եւ YOLOv5 օգտագործում են Cross Stage Partial (CSP) մոդուլը, որը բարելավել է գործառույթների արտադրությունը bottleneck- ում: C3 բլոգը այս CSP դիզայնի գործառույթ է: YOLO մոդելներ Ուլտրաձայնային C3- ի բլոգում տպագրական առանձնահատկությունները կտրված են երկու մասով: Մեկ մասը մշակվում է 1×1- ի Convolution- ի հետ, հետո: Երկու մետաղական բլոգներ, իսկ այլ մասը անցնում է մի մասնավոր 1×1 convolution- ի միջոցով եւ ամբողջությամբ վերցնում է մետաղական մետաղական բլոգները: Այս երկու մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետ n Input (x) │ ┌────────┴─────────┐ │ │ [1x1 Conv] [1x1 Conv] (cv1) (cv2) │ │ [Bottlenecks] │ (m: n blocks) │ │ │ └────────┬─────────┘ │ [Concat along C] │ [1x1 Conv → cv3] │ Output Արդյունաբերական բաղադրիչները ( )՝ GitHub-ի կապը class C3(nn.Module): """CSP Bottleneck with 3 convolutions.""" def __init__(self, c1: int, c2: int, n: int = 1, shortcut: bool = True, g: int = 1, e: float = 0.5): """ Initialize the CSP Bottleneck with 3 convolutions. Args: c1 (int): Input channels. c2 (int): Output channels. n (int): Number of Bottleneck blocks. shortcut (bool): Whether to use shortcut connections. g (int): Groups for convolutions. e (float): Expansion ratio. """ super().__init__() c_ = int(c2 * e) # hidden channels self.cv1 = Conv(c1, c_, 1, 1) self.cv2 = Conv(c1, c_, 1, 1) self.cv3 = Conv(2 * c_, c2, 1) self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, k=((1, 1), (3, 3)), e=1.0) for _ in range(n))) def forward(self, x: torch.Tensor) -> torch.Tensor: """Forward pass through the CSP bottleneck with 3 convolutions.""" return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1)) Cross-stage Partial հետ 2F կապներ (C2F) C2f բլոգը կառուցում է CSPNet- ում, որը ավելին լայնում է այն: Միայն բլոգի ուղեցույց helyett, այն ներառում է երկու հարմարավետ ֆունկցիոնալ բլոգի կապներ, յուրաքանչյուրը կասկած է արտադրանքի ցանցերի քանակը: Այս գաղափարը, որը առաջին անգամ հայտնվել է YOLOv7 եւ YOLOv8 [ Հիմնական [...] ], հետեւում է CSP- ի հետ միասին պայմանները, որը կտրում է input feature map- ից, որպեսզի նվազեցնում է compute redundancy- ը եւ բարելավել feature reuse- ը: 2 3 C2f բլոգում ներառային tensor- ը կտրված է երկու ճանապարհներին: մեկը Bottleneck- ի մակերեսները վերցնում է, իսկ մեկը վերցնում է բազմաթիվ Bottleneck- ի մակերեսները: Հիմնական CSP- ի տարբերությամբ, որը օգտագործում է միայն վերջնական Bottleneck- ի արտադրանքը, C2f- ը հավաքում է բոլոր Bottleneck- ի intermediate արտադրանքը եւ բաղադրում է նրանց, որը բարձրացնում է առանձնահատկություններների տարբերությունը եւ արտադրությունը: Այս dual feature fusion (2F) պլաստիկը նաեւ օգնում է ցանցը ավելի լավ վերահսկել բաղադրիչը, ինչպիսիք է, որ բաղադրիչները ավելի հզոր են կասենյակների մեջ: Արդյունաբերական բաղադրիչներ ( )՝ GitHub-ի կապը class C2f(nn.Module): """Faster Implementation of CSP Bottleneck with 2 convolutions.""" def __init__(self, c1: int, c2: int, n: int = 1, shortcut: bool = False, g: int = 1, e: float = 0.5): """ Initialize a CSP bottleneck with 2 convolutions. Args: c1 (int): Input channels. c2 (int): Output channels. n (int): Number of Bottleneck blocks. shortcut (bool): Whether to use shortcut connections. g (int): Groups for convolutions. e (float): Expansion ratio. """ super().__init__() self.c = int(c2 * e) # hidden channels self.cv1 = Conv(c1, 2 * self.c, 1, 1) self.cv2 = Conv((2 + n) * self.c, c2, 1) # optional act=FReLU(c2) self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=((3, 3), (3, 3)), e=1.0) for _ in range(n)) def forward(self, x: torch.Tensor) -> torch.Tensor: """Forward pass through C2f layer.""" y = list(self.cv1(x).chunk(2, 1)) y.extend(m(y[-1]) for m in self.m) return self.cv2(torch.cat(y, 1)) def forward_split(self, x: torch.Tensor) -> torch.Tensor: """Forward pass using split() instead of chunk().""" y = self.cv1(x).split((self.c, self.c), 1) y = [y[0], y[1]] y.extend(m(y[-1]) for m in self.m) return self.cv2(torch.cat(y, 1)) Cross Stage Partial with kernel size 2 (C3k2) բլոգը Հիմնական հոդվածը11 [ ] օգտագործում է հետեւյալ C3K2 բլոգներ, որոնք օգտագործվում են բլոգների արտադրանքի համար իր բլոգի տարբեր մակարդակներում, որպեսզի մշակել բազմազանական բլոգներ - մի այլ զարգացման Classic CSP bottleneck. The C3K2 բլոգը կտրում է բլոգը բլոգը եւ մշակում է այն բազմաթիվ հեշտ 3×3 convolutions- ի հետ, այնուհետեւ բաղադրում է արդյունքները: Այսպիսով բարելավվում է տեղեկատվության թռիչքը, իսկ այն ավելի հզոր է, քան ամբողջական CSP bottleneck- ը, որը նվազեցնում է դասընթացային պարամետրերի מספרը: 4 C3K բլոգը պահպանում է նույն հիմնական կառուցվածքը, ինչպիսիք են C2f- ը, բայց չի կտրում արտադրանքը առաջին convolution- ից հետո: Bottleneck- ի մակերեսները intermediate concatenations- ի հետ, որը ավարտվում է վերջնական 1×1 convolution- ի հետ: C2f- ի տարբերությամբ, C3K- ը ավելացնում է լայնությունը customizable kernel sizes- ի հետ, որը օգնում է մոդելը ավելի լավ վերցնել մանրամասները տարբեր ախտորմներում: n Այն սկսվում է Conv բլոգով, մի քանի C3K բլոգներ պտուտակում է, իրենց արտադրանքը համատեղում է Original Input- ի հետ, եւ ավարտվում է մի այլ Conv- ի բլոգով - CSP- ի split-fusion պտուտակը համատեղում է հարմարավետ բլոգների հետ արագության, պարամետրային արդյունավետության եւ ավելի խոշոր multi-scale առանձնահատկության արտահանման համար: Input: [Batch, c1, H, W] │ [cv1] (1x1 Conv) → splits channels into 2c │ ┌─────────────┐ │ │ Branch 1 Branch 2 (Bypass) (Bottleneck chain) │ │ ├─> C3k Block #1 │ ├─> C3k Block #2 │ ... (n times) │ └─────────────┬─────────────┐ Concatenate [Bypass, Split, C3k outputs] │ [cv2] (1x1 Conv) │ Output: [Batch, c2, H, W] Ամեն C3K բլոգը օգտագործում է parallel Bottlenecks- ի հետ custom kernels- ի հետ, որը ապահովում է ավելի հարմարավետությունը գործառույթների արտահանման համար եւ թույլ է տալիս մոդելը ավելի լավ հարմարեցնել հարմարեցված մոդելների համար: C3k Input: [Batch, c, H, W] │ [cv1] (1x1 Conv, expand/split) │ ┌───────────────┐ │ │ ByPass Bottleneck blocks │ ┌─────────────┐ │ B1, B2, ...Bn (parallel) └─────────────┘ └───────────────┬───────┘ Concatenate │ [cv2] (1x1 Conv) │ C3k Output: [Batch, c, H, W] Արդյունաբերական բաղադրիչներ ( )՝ GitHub-ի կապը class C3k(C3): """C3k is a CSP bottleneck module with customizable kernel sizes for feature extraction in neural networks.""" def __init__(self, c1: int, c2: int, n: int = 1, shortcut: bool = True, g: int = 1, e: float = 0.5, k: int = 3): """ Initialize C3k module. Args: c1 (int): Input channels. c2 (int): Output channels. n (int): Number of Bottleneck blocks. shortcut (bool): Whether to use shortcut connections. g (int): Groups for convolutions. e (float): Expansion ratio. k (int): Kernel size. """ super().__init__(c1, c2, n, shortcut, g, e) c_ = int(c2 * e) # hidden channels # self.m = nn.Sequential(*(RepBottleneck(c_, c_, shortcut, g, k=(k, k), e=1.0) for _ in range(n))) self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, k=(k, k), e=1.0) for _ in range(n))) class C3k2(C2f): """Faster Implementation of CSP Bottleneck with 2 convolutions.""" def __init__( self, c1: int, c2: int, n: int = 1, c3k: bool = False, e: float = 0.5, g: int = 1, shortcut: bool = True ): """ Initialize C3k2 module. Args: c1 (int): Input channels. c2 (int): Output channels. n (int): Number of blocks. c3k (bool): Whether to use C3k blocks. e (float): Expansion ratio. g (int): Groups for convolutions. shortcut (bool): Whether to use shortcut connections. """ super().__init__(c1, c2, n, shortcut, g, e) self.m = nn.ModuleList( C3k(self.c, self.c, 2, shortcut, g) if c3k else Bottleneck(self.c, self.c, shortcut, g) for _ in range(n) ) Հյուրատետր Հասկածապես, նորաձեւ YOLO դիզայնները վերլուծվում են, ինչպես նաեւ C3, C2f, C3k եւ C3k2 բլոգներ, որոնք բոլորը կառուցված են Cross-Stage Partial (CSP) կապների կենտրոնական գաղափարով: Այս CSP- ի վերլուծությունը նվազեցնում է բլոգը եւ միասին բարձրացնում է առանձնահատկությունները արտադրությունը: Block Outer Structure Inner Structure Kernel flexibility C3 Parallel Bottlenecks Bottlenecks Fixed kernels C2f Serial Bottlenecks Bottlenecks Fixed kernels C3k Parallel Bottlenecks Bottlenecks Custom kernels C3k2 Serial C3k blocks Each C3k has parallel Bottlenecks Custom kernels C3 Տեսակներ Փաթեթավորում Bottlenecks Խաղատուններ Հիմնական kernels C2F Serial Bottlenecks- ը Խաղատուններ Հիմնական kernels 3 k Փաթեթավորում Bottlenecks Խաղատուններ Custom սերտիֆիկներ C3 k2 Serial C3k բլոգներ Ամեն C3k-ը ունի parallel Bottlenecks Custom սերտիֆիկներ Այս դիզայնային մանրամասները միասին օգնում են YOLO մոդելների բարձր վերահսկողության ճշգրտությունը, իսկ հեշտությամբ եւ ճշգրտության համար ճշգրիտ ժամանակի տեղադրման համար, որը կարեւոր է տարբեր օգտագործման համար: Բրիտանիա https://arxiv.org/pdf/1911.11929 https://arxiv.org/pdf/2207.02696 https://arxiv.org/pdf/2408.15857 https://arxiv.org/html/2410.17725v1#S3