OSCR

Cross-attention guided explainable deep transformer model for multi-level classification of rare neurological disorders using MRI images.

Code ↔ Paper

3 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 3 matches
  1. [1] § Research design › Soft voting-based ensemble classification ↔ model.py, lines 831–887 · score 0.63 · Transformer backbone, soft voting, GNN, SAE, DBN, classification
  2. [2] § Research design › Cross attention-based feature extraction ↔ model.py, lines 262–350 · score 0.57 · feed forward, layer normalization, residual, Cross, model
  3. [3] § Performance assessment ↔ evaluation.py, lines 280–325 · score 0.53 · AUC score, F1 score, recall, precision, accuracy

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Python · 1,002 lines · 19 KB · no license · 2 matches

  1. # ==========================================================
  2. # CNN BACKBONE
  3. # ==========================================================
  4. import torch
  5. import torch.nn as nn
  6. class CNNBackbone(nn.Module):
  7. def __init__(self):
  8. super().__init__()
  9. self.features = nn.Sequential(
  10. # ----------------------------------
  11. # BLOCK 1
  12. # ----------------------------------
  13. nn.Conv2d(
  14. 3,
  15. 64,
  16. kernel_size=3,
  17. padding=1
  18. ),
  19. nn.BatchNorm2d(64),
  20. nn.ReLU(inplace=True),
  21. nn.MaxPool2d(2),
  22. # 224 -> 112
  23. # ----------------------------------
  24. # BLOCK 2
  25. # ----------------------------------
  26. nn.Conv2d(
  27. 64,
  28. 128,
  29. kernel_size=3,
  30. padding=1
  31. ),
  32. nn.BatchNorm2d(128),
  33. nn.ReLU(inplace=True),
  34. nn.MaxPool2d(2),
  35. # 112 -> 56
  36. # ----------------------------------
  37. # BLOCK 3
  38. # ----------------------------------
  39. nn.Conv2d(
  40. 128,
  41. 256,
  42. kernel_size=3,
  43. padding=1
  44. ),
  45. nn.BatchNorm2d(256),
  46. nn.ReLU(inplace=True),
  47. nn.MaxPool2d(2),
  48. # 56 -> 28
  49. # ----------------------------------
  50. # BLOCK 4
  51. # ----------------------------------
  52. nn.Conv2d(
  53. 256,
  54. 512,
  55. kernel_size=3,
  56. padding=1
  57. ),
  58. nn.BatchNorm2d(512),
  59. nn.ReLU(inplace=True),
  60. nn.MaxPool2d(2),
  61. # 28 -> 14
  62. # ----------------------------------
  63. # BLOCK 5
  64. # ----------------------------------
  65. nn.Conv2d(
  66. 512,
  67. 768,
  68. kernel_size=3,
  69. padding=1
  70. ),
  71. nn.BatchNorm2d(768),
  72. nn.ReLU(inplace=True)
  73. )
  74. def forward(self, x):
  75. x = self.features(x)
  76. return x
  77. # ==========================================================
  78. # TRANSFORMER BACKBONE
  79. # ==========================================================
  80. import torch
  81. import torch.nn as nn
  82. class TransformerBackbone(nn.Module):
  83. def __init__(
  84. self,
  85. image_size=224,
  86. patch_size=16,
  87. embed_dim=768,
  88. depth=6,
  89. num_heads=8
  90. ):
  91. super().__init__()
  92. self.image_size = image_size
  93. self.patch_size = patch_size
  94. self.embed_dim = embed_dim
  95. # ----------------------------------
  96. # PATCH EMBEDDING
  97. # ----------------------------------
  98. self.patch_embed = nn.Conv2d(
  99. in_channels=3,
  100. out_channels=embed_dim,
  101. kernel_size=patch_size,
  102. stride=patch_size
  103. )
  104. num_patches = (
  105. image_size // patch_size
  106. ) ** 2
  107. # ----------------------------------
  108. # CLS TOKEN
  109. # ----------------------------------
  110. self.cls_token = nn.Parameter(
  111. torch.zeros(
  112. 1,
  113. 1,
  114. embed_dim
  115. )
  116. )
  117. # ----------------------------------
  118. # POSITION EMBEDDING
  119. # ----------------------------------
  120. self.pos_embed = nn.Parameter(
  121. torch.zeros(
  122. 1,
  123. num_patches + 1,
  124. embed_dim
  125. )
  126. )
  127. # ----------------------------------
  128. # TRANSFORMER ENCODER
  129. # ----------------------------------
  130. encoder_layer = nn.TransformerEncoderLayer(
  131. d_model=embed_dim,
  132. nhead=num_heads,
  133. dim_feedforward=embed_dim * 4,
  134. dropout=0.1,
  135. activation="gelu",
  136. batch_first=True
  137. )
  138. self.transformer = nn.TransformerEncoder(
  139. encoder_layer,
  140. num_layers=depth
  141. )
  142. self.norm = nn.LayerNorm(
  143. embed_dim
  144. )
  145. def forward(self, x):
  146. # ----------------------------------
  147. # PATCH EMBEDDING
  148. # ----------------------------------
  149. x = self.patch_embed(x)
  150. # [B,768,14,14]
  151. B = x.shape[0]
  152. x = x.flatten(2)
  153. # [B,768,196]
  154. x = x.transpose(1, 2)
  155. # [B,196,768]
  156. # ----------------------------------
  157. # CLS TOKEN
  158. # ----------------------------------
  159. cls_tokens = self.cls_token.expand(
  160. B,
  161. -1,
  162. -1
  163. )
  164. x = torch.cat(
  165. [cls_tokens, x],
  166. dim=1
  167. )
  168. # [B,197,768]
  169. # ----------------------------------
  170. # POSITION EMBEDDING
  171. # ----------------------------------
  172. x = x + self.pos_embed
  173. # ----------------------------------
  174. # TRANSFORMER
  175. # ----------------------------------
  176. x = self.transformer(x)
  177. x = self.norm(x)
  178. return x
  179. # ==========================================================
  180. # CROSS ATTENTION
  181. # ==========================================================
  182. import torch
  183. import torch.nn as nn
  184. class CrossAttention(nn.Module):
  185. def __init__(
  186. self,
  187. embed_dim=768,
  188. num_heads=8
  189. ):
  190. super().__init__()
  191. self.attention = nn.MultiheadAttention(
  192. embed_dim=embed_dim,
  193. num_heads=num_heads,
  194. batch_first=True
  195. )
  196. self.norm1 = nn.LayerNorm(
  197. embed_dim
  198. )
  199. self.norm2 = nn.LayerNorm(
  200. embed_dim
  201. )
  202. self.mlp = nn.Sequential(
  203. nn.Linear(
  204. embed_dim,
  205. embed_dim * 4
  206. ),
  207. nn.GELU(),
  208. nn.Linear(
  209. embed_dim * 4,
  210. embed_dim
  211. )
  212. )
  213. def forward(
  214. self,
  215. transformer_features,
  216. cnn_features
  217. ):
  218. # ----------------------------------
  219. # QUERY
  220. # ----------------------------------
  221. query = transformer_features
  222. # ----------------------------------
  223. # KEY / VALUE
  224. # ----------------------------------
  225. key = cnn_features
  226. value = cnn_features
  227. # ----------------------------------
  228. # CROSS ATTENTION
  229. # ----------------------------------
  230. attended_features, attention_weights = \
  231. self.attention(
  232. query=query,
  233. key=key,
  234. value=value
  235. )
  236. # ----------------------------------
  237. # RESIDUAL CONNECTION
  238. # ----------------------------------
  239. x = transformer_features + attended_features
  240. x = self.norm1(x)
  241. # ----------------------------------
  242. # FEED FORWARD
  243. # ----------------------------------
  244. mlp_output = self.mlp(x)
  245. x = x + mlp_output
  246. x = self.norm2(x)
  247. return x
  248. # ==========================================================
  249. # GNN LAYER
  250. # ==========================================================
  251. import torch
  252. import torch.nn as nn
  253. import torch.nn.functional as F
  254. class GraphLayer(nn.Module):
  255. def __init__(
  256. self,
  257. in_features,
  258. out_features
  259. ):
  260. super().__init__()
  261. self.linear = nn.Linear(
  262. in_features,
  263. out_features
  264. )
  265. def forward(
  266. self,
  267. x,
  268. adj
  269. ):
  270. x = torch.bmm(
  271. adj,
  272. x
  273. )
  274. x = self.linear(x)
  275. x = F.relu(x)
  276. return x
  277. # ==========================================================
  278. # GNN MODULE
  279. # ==========================================================
  280. class GNNModule(nn.Module):
  281. def __init__(
  282. self,
  283. input_dim=768,
  284. hidden_dim=512,
  285. output_dim=256
  286. ):
  287. super().__init__()
  288. self.gnn1 = GraphLayer(
  289. input_dim,
  290. hidden_dim
  291. )
  292. self.gnn2 = GraphLayer(
  293. hidden_dim,
  294. output_dim
  295. )
  296. def build_adjacency(
  297. self,
  298. batch_size,
  299. num_nodes,
  300. device
  301. ):
  302. adj = torch.eye(
  303. num_nodes,
  304. device=device
  305. )
  306. adj = adj.unsqueeze(0)
  307. adj = adj.repeat(
  308. batch_size,
  309. 1,
  310. 1
  311. )
  312. return adj
  313. def forward(
  314. self,
  315. x
  316. ):
  317. # x
  318. # [B,197,768]
  319. B, N, _ = x.shape
  320. adj = self.build_adjacency(
  321. B,
  322. N,
  323. x.device
  324. )
  325. x = self.gnn1(
  326. x,
  327. adj
  328. )
  329. x = self.gnn2(
  330. x,
  331. adj
  332. )
  333. return x
  334. # ==========================================================
  335. # RBM LAYER
  336. # ==========================================================
  337. import torch
  338. import torch.nn as nn
  339. import torch.nn.functional as F
  340. class RBMLayer(nn.Module):
  341. def __init__(
  342. self,
  343. visible_units,
  344. hidden_units
  345. ):
  346. super().__init__()
  347. self.fc = nn.Linear(
  348. visible_units,
  349. hidden_units
  350. )
  351. def forward(self, x):
  352. x = self.fc(x)
  353. x = torch.sigmoid(x)
  354. return x
  355. # ==========================================================
  356. # DBN MODULE
  357. # ==========================================================
  358. class DBNModule(nn.Module):
  359. def __init__(self):
  360. super().__init__()
  361. self.rbm1 = RBMLayer(
  362. visible_units=256,
  363. hidden_units=512
  364. )
  365. self.rbm2 = RBMLayer(
  366. visible_units=512,
  367. hidden_units=256
  368. )
  369. self.rbm3 = RBMLayer(
  370. visible_units=256,
  371. hidden_units=128
  372. )
  373. def forward(self, x):
  374. # -----------------------------
  375. # [B,197,256]
  376. # -----------------------------
  377. x = self.rbm1(x)
  378. # [B,197,512]
  379. x = self.rbm2(x)
  380. # [B,197,256]
  381. x = self.rbm3(x)
  382. # [B,197,128]
  383. return x
  384. # ==========================================================
  385. # ENCODER
  386. # ==========================================================
  387. import torch
  388. import torch.nn as nn
  389. class Encoder(nn.Module):
  390. def __init__(
  391. self,
  392. input_dim,
  393. latent_dim
  394. ):
  395. super().__init__()
  396. self.encoder = nn.Sequential(
  397. nn.Linear(
  398. input_dim,
  399. latent_dim
  400. ),
  401. nn.ReLU(inplace=True)
  402. )
  403. def forward(self, x):
  404. return self.encoder(x)
  405. # ==========================================================
  406. # DECODER
  407. # ==========================================================
  408. class Decoder(nn.Module):
  409. def __init__(
  410. self,
  411. latent_dim,
  412. output_dim
  413. ):
  414. super().__init__()
  415. self.decoder = nn.Sequential(
  416. nn.Linear(
  417. latent_dim,
  418. output_dim
  419. ),
  420. nn.ReLU(inplace=True)
  421. )
  422. def forward(self, x):
  423. return self.decoder(x)
  424. # ==========================================================
  425. # SAE MODULE
  426. # ==========================================================
  427. class SAEModule(nn.Module):
  428. def __init__(self):
  429. super().__init__()
  430. # -------------------------
  431. # ENCODERS
  432. # -------------------------
  433. self.encoder1 = Encoder(
  434. 128,
  435. 64
  436. )
  437. self.encoder2 = Encoder(
  438. 64,
  439. 32
  440. )
  441. # -------------------------
  442. # DECODERS
  443. # -------------------------
  444. self.decoder1 = Decoder(
  445. 32,
  446. 64
  447. )
  448. self.decoder2 = Decoder(
  449. 64,
  450. 128
  451. )
  452. def forward(self, x):
  453. # -------------------------
  454. # ENCODING
  455. # -------------------------
  456. x = self.encoder1(x)
  457. # [B,197,64]
  458. latent = self.encoder2(x)
  459. # [B,197,32]
  460. # -------------------------
  461. # DECODING
  462. # -------------------------
  463. x = self.decoder1(latent)
  464. x = self.decoder2(x)
  465. reconstruction = x
  466. return latent, reconstruction
  467. # ==========================================================
  468. # BRANCH CLASSIFIER
  469. # ==========================================================
  470. import torch
  471. import torch.nn as nn
  472. class BranchClassifier(nn.Module):
  473. def __init__(
  474. self,
  475. input_dim,
  476. num_classes
  477. ):
  478. super().__init__()
  479. self.classifier = nn.Sequential(
  480. nn.Linear(
  481. input_dim,
  482. 128
  483. ),
  484. nn.ReLU(inplace=True),
  485. nn.Dropout(0.3),
  486. nn.Linear(
  487. 128,
  488. num_classes
  489. )
  490. )
  491. def forward(self, x):
  492. return self.classifier(x)
  493. # ==========================================================
  494. # SOFT VOTING
  495. # ==========================================================
  496. class SoftVotingClassifier(nn.Module):
  497. def __init__(
  498. self,
  499. num_classes
  500. ):
  501. super().__init__()
  502. # ------------------------------
  503. # GNN BRANCH
  504. # ------------------------------
  505. self.gnn_classifier = BranchClassifier(
  506. input_dim=256,
  507. num_classes=num_classes
  508. )
  509. # ------------------------------
  510. # DBN BRANCH
  511. # ------------------------------
  512. self.dbn_classifier = BranchClassifier(
  513. input_dim=128,
  514. num_classes=num_classes
  515. )
  516. # ------------------------------
  517. # SAE BRANCH
  518. # ------------------------------
  519. self.sae_classifier = BranchClassifier(
  520. input_dim=32,
  521. num_classes=num_classes
  522. )
  523. def forward(
  524. self,
  525. gnn_features,
  526. dbn_features,
  527. sae_features
  528. ):
  529. # --------------------------------
  530. # GLOBAL AVERAGE TOKEN POOLING
  531. # --------------------------------
  532. gnn_features = gnn_features.mean(
  533. dim=1
  534. )
  535. dbn_features = dbn_features.mean(
  536. dim=1
  537. )
  538. sae_features = sae_features.mean(
  539. dim=1
  540. )
  541. # --------------------------------
  542. # INDIVIDUAL BRANCH PREDICTIONS
  543. # --------------------------------
  544. gnn_logits = self.gnn_classifier(
  545. gnn_features
  546. )
  547. dbn_logits = self.dbn_classifier(
  548. dbn_features
  549. )
  550. sae_logits = self.sae_classifier(
  551. sae_features
  552. )
  553. # --------------------------------
  554. # SOFTMAX PROBABILITIES
  555. # --------------------------------
  556. gnn_prob = torch.softmax(
  557. gnn_logits,
  558. dim=1
  559. )
  560. dbn_prob = torch.softmax(
  561. dbn_logits,
  562. dim=1
  563. )
  564. sae_prob = torch.softmax(
  565. sae_logits,
  566. dim=1
  567. )
  568. # --------------------------------
  569. # SOFT VOTING
  570. # --------------------------------
  571. final_prob = (
  572. gnn_prob +
  573. dbn_prob +
  574. sae_prob
  575. ) / 3.0
  576. return (
  577. final_prob,
  578. gnn_logits,
  579. dbn_logits,
  580. sae_logits
  581. )
  582. # ==========================================================
  583. # CAXDT-MLCRND
  584. # ==========================================================
  585. class CAXDT_MLCRND(nn.Module):
  586. def __init__(
  587. self,
  588. num_classes=40
  589. ):
  590. super().__init__()
  591. # ----------------------------------
  592. # CNN
  593. # ----------------------------------
  594. self.cnn = CNNBackbone()
  595. # ----------------------------------
  596. # TRANSFORMER
  597. # ----------------------------------
  598. self.transformer = TransformerBackbone()
  599. # ----------------------------------
  600. # CROSS ATTENTION
  601. # ----------------------------------
  602. self.cross_attention = CrossAttention(
  603. embed_dim=768,
  604. num_heads=8
  605. )
  606. # ----------------------------------
  607. # GNN
  608. # ----------------------------------
  609. self.gnn = GNNModule(
  610. input_dim=768,
  611. hidden_dim=512,
  612. output_dim=256
  613. )
  614. # ----------------------------------
  615. # DBN
  616. # ----------------------------------
  617. self.dbn = DBNModule()
  618. # ----------------------------------
  619. # SAE
  620. # ----------------------------------
  621. self.sae = SAEModule()
  622. # ----------------------------------
  623. # SOFT VOTING
  624. # ----------------------------------
  625. self.soft_voting = SoftVotingClassifier(
  626. num_classes=num_classes
  627. )
  628. def forward(self, x):
  629. # ==================================================
  630. # CNN
  631. # ==================================================
  632. cnn_features = self.cnn(x)
  633. # [B,768,14,14]
  634. cnn_tokens = cnn_features.flatten(2)
  635. cnn_tokens = cnn_tokens.transpose(
  636. 1,
  637. 2
  638. )
  639. # [B,196,768]
  640. # ==================================================
  641. # TRANSFORMER
  642. # ==================================================
  643. transformer_features = self.transformer(x)
  644. # [B,197,768]
  645. # ==================================================
  646. # CROSS ATTENTION
  647. # ==================================================
  648. fused_features = self.cross_attention(
  649. transformer_features,
  650. cnn_tokens
  651. )
  652. # [B,197,768]
  653. # ==================================================
  654. # GNN
  655. # ==================================================
  656. gnn_features = self.gnn(
  657. fused_features
  658. )
  659. # [B,197,256]
  660. # ==================================================
  661. # DBN
  662. # ==================================================
  663. dbn_features = self.dbn(
  664. gnn_features
  665. )
  666. # [B,197,128]
  667. # ==================================================
  668. # SAE
  669. # ==================================================
  670. sae_features, reconstruction = \
  671. self.sae(
  672. dbn_features
  673. )
  674. # sae_features
  675. # [B,197,32]
  676. # ==================================================
  677. # SOFT VOTING
  678. # ==================================================
  679. (
  680. final_prob,
  681. gnn_logits,
  682. dbn_logits,
  683. sae_logits
  684. ) = self.soft_voting(
  685. gnn_features,
  686. dbn_features,
  687. sae_features
  688. )
  689. return {
  690. "probabilities":
  691. final_prob,
  692. "gnn_logits":
  693. gnn_logits,
  694. "dbn_logits":
  695. dbn_logits,
  696. "sae_logits":
  697. sae_logits,
  698. "reconstruction":
  699. reconstruction,
  700. "cnn_features":
  701. cnn_features,
  702. "transformer_features":
  703. transformer_features,
  704. "fused_features":
  705. fused_features
  706. }

model.py at commit bd0645b, no license · at the source

Overview

Authors: Preethi Veerlapalli1, E. Laxmi Lydia2, K. Radhika3, Kancherla R. Krishna Naga Surya Alekhya4, Faten Khalid Karim5, Mohamad Khairi Ishak6, Samih M. Mostafa7
  1. Department of Computer Science and Engineering, Malla Reddy University,Hyderabad, India
  2. Department of Computer Science and Engineering, Vignan’s Institute of Engineering for Women, Visakhapatnam, 530046 Andhra Pradesh India
  3. AI&DS Department, Chaitanya Bharathi Institute of Technology,Gandipet, 500075 Hyderabad India
  4. Department of Computer Science and Engineering, Aditya University,Surampalem, India
  5. Department of Computer Sciences, College of Computer and Information Sciences, Princess Nourah bint Abdulrahman University,P.O. Box 84428, Riyadh, 11671 Saudi Arabia
  6. Department of Computer Engineering, College of Computing and Informatics, University of Sharjah,Sharjah, United Arab Emirates
  7. Computer Science Department, Faculty of Computers and Information, Qena University, Qena, 83523 Egypt
Journal: Scientific reports, volume 16, issue 1, article 19357
Dates: received 22 March 2026; accepted 15 June 2026; published online 22 June 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1038/s41598-026-58491-1 · PMID 42332136 · PMCID PMC13287759 · OpenAlex W7165575620
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: structural MRI / diffusion (modality), human (organism)
Methods: Machine learning, Statistics, Physiology & signal measures
Keywords: Rare neurological disorder, Deep learning, Bayesian optimization, Explainable artificial intelligence, Magnetic resonance imaging, Computational biology and bioinformatics, Engineering, Mathematics and computing, Neurology, Neuroscience
MeSH: Deep Learning*, Magnetic Resonance Imaging*, Nervous System Diseases*, Convolutional Neural Networks, Humans (* major topic)
Topic: Explainable Artificial Intelligence (XAI) (Artificial Intelligence, Computer Science), according to OpenAlex
Citations: not cited yet (Europe PMC); 41 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

Its files are read in the Code ↔ Paper reader above, with 3 matches between paragraphs and lines of code.

researcher010-debug/NeurologicalDisorderClassification

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: bd0645b2e710894a1dff33eb810c79a8b0d98f3e, 10 June 2026
Languages: Python (5)
Size: 6 files, 5 scripts
Software Heritage: not archived
Found in: “Code availability”
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: PyTorch (4 files), NumPy (3 files), Pillow (3 files), OpenCV (2 files), scikit-learn (2 files)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
5 files

Code availability statement

The paper has a code availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1038/s41598-026-58491-1.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 5 scripts, each with its path and the digest of its content;
  • 3 matches between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

Datasets cited

Data availability statement

The paper has a data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

Read it in the paper: doi.org/10.1038/s41598-026-58491-1.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 7 authors, 10 keywords, 5 MeSH terms, 1 funder, 33 references.

Cite

This paper

Veerlapalli, P., Laxmi Lydia, E., Radhika, K., Surya Alekhya, K. R. K. N., Karim, F. K., Ishak, M. K., & Mostafa, S. M. (2026). Cross-attention guided explainable deep transformer model for multi-level classification of rare neurological disorders using MRI images. Scientific reports, 16(1), 19357. https://doi.org/10.1038/s41598-026-58491-1

BibTeX

@article{veerlapalli2026cross,
author = {Veerlapalli, Preethi and Laxmi Lydia, E. and Radhika, K. and Surya Alekhya, Kancherla R. Krishna Naga and Karim, Faten Khalid and Ishak, Mohamad Khairi and Mostafa, Samih M.},
title = {{Cross-attention guided explainable deep transformer model for multi-level classification of rare neurological disorders using MRI images}},
journal = {Scientific reports},
year = {2026},
month = jun,
volume = {16},
number = {1},
pages = {19357},
publisher = {Nature Publishing Group},
issn = {2045-2322},
doi = {10.1038/s41598-026-58491-1},
url = {https://doi.org/10.1038/s41598-026-58491-1},
pmid = {42332136},
pmcid = {PMC13287759}
}

RIS

TY - JOUR
AU - Veerlapalli, Preethi
AU - Laxmi Lydia, E.
AU - Radhika, K.
AU - Surya Alekhya, Kancherla R. Krishna Naga
AU - Karim, Faten Khalid
AU - Ishak, Mohamad Khairi
AU - Mostafa, Samih M.
TI - Cross-attention guided explainable deep transformer model for multi-level classification of rare neurological disorders using MRI images
T2 - Scientific reports
J2 - Sci Rep
PY - 2026
DA - 2026/06/22
VL - 16
IS - 1
SP - 19357
SN - 2045-2322
PB - Nature Publishing Group
DO - 10.1038/s41598-026-58491-1
UR - https://doi.org/10.1038/s41598-026-58491-1
LA - en
ER -

CSL-JSON

{
"id": "10.1038/s41598-026-58491-1",
"type": "article-journal",
"title": "Cross-attention guided explainable deep transformer model for multi-level classification of rare neurological disorders using MRI images",
"container-title": "Scientific reports",
"author": [
{
"family": "Veerlapalli",
"given": "Preethi"
},
{
"family": "Laxmi Lydia",
"given": "E."
},
{
"family": "Radhika",
"given": "K."
},
{
"family": "Surya Alekhya",
"given": "Kancherla R. Krishna Naga"
},
{
"family": "Karim",
"given": "Faten Khalid"
},
{
"family": "Ishak",
"given": "Mohamad Khairi"
},
{
"family": "Mostafa",
"given": "Samih M."
}
],
"container-title-short": "Sci Rep",
"volume": "16",
"issue": "1",
"page": "19357",
"DOI": "10.1038/s41598-026-58491-1",
"PMID": "42332136",
"PMCID": "PMC13287759",
"ISSN": "2045-2322",
"publisher": "Nature Publishing Group",
"URL": "https://doi.org/10.1038/s41598-026-58491-1",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
22
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1002/alz.71649 [code]
Postmortem brain MRI reveals differential associations of subcortical and limbic volumes with cortical thinning and neurodegenerative pathologies.
Journal: Alzheimer's & dementia : the journal of the Alzheimer's Association
In common: OpenCV, Pillow, PyTorch, 2 other tools, structural MRI / diffusion
[2] doi:10.1093/braincomms/fcag253 [code]
Disease detection and classification in temporal lobe epilepsy: step-wise versus simultaneous AI decision models in a multisite neuroimaging study.
Journal: Brain communications
In common: OpenCV, Pillow, PyTorch, 2 other tools, structural MRI / diffusion
[3] doi:10.1038/s41598-026-55136-1 [code]
CAHA-Net: A novel MR image classification model based on DenseNet incorporating coordinate attention and hybrid augmentation.
Journal: Scientific reports
In common: OpenCV, Pillow, PyTorch, 2 other tools, structural MRI / diffusion
[4] doi:10.1038/s41598-026-50791-w [code]
Hybrid Vi+ECNN framework for advanced ADHD diagnostic accuracy in medical imaging.
Journal: Scientific reports
In common: OpenCV, Pillow, PyTorch, 2 other tools, structural MRI / diffusion
[5] doi:10.1038/s41597-026-07138-x [code]
Medical Spine Sagittal MRI Dataset for Segmentation and Foraminal Stenosis detection.
Journal: Scientific data
In common: OpenCV, Pillow, PyTorch, 2 other tools, structural MRI / diffusion
[6] doi:10.1038/s41598-026-45675-y [code]
Multi-class classification of brain tumor using a ResNet101 backbone integrated with multi-scale deformable attention module and advanced data augmentations.
Journal: Scientific reports
In common: OpenCV, Pillow, PyTorch, 2 other tools, structural MRI / diffusion
[7] doi:10.3389/frai.2026.1771088 [code]
Few-shot deployment of pretrained MRI transformers in brain imaging tasks.
Journal: Frontiers in artificial intelligence
In common: OpenCV, Pillow, PyTorch, 2 other tools, structural MRI / diffusion
[8] doi:10.1038/s42003-026-10957-8 [code]
Brain defence by the extracellular matrix protein Cochlin.
Journal: Communications biology
In common: OpenCV, Pillow, PyTorch, 2 other tools
[9] doi:10.1038/s41598-026-61605-4 [code]
Learning precise segmentation of neurofibrillary tangles from rapid manual point annotations.
Journal: Scientific reports
In common: OpenCV, Pillow, PyTorch, 2 other tools
[10] doi:10.1038/s41467-026-76837-1 [code]
Drug screen and machine learning predict neuroprotective agents in a preclinical human model of childhood dementia.
Journal: Nature communications
In common: OpenCV, Pillow, PyTorch, 2 other tools

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.