【医学+深度论文:F04】Integrated Optic Disc and Cup Segmentation with Deep Learning

该文介绍了一种2015年的深度学习方法,用于青光眼筛查中的视盘和视杯分割。通过Daubechies小波变换定位、血管去除、9层CNN分类以及动态规划细化,实现精确分割,并在两个大型数据库上测试,表现出优于其他方法的性能。

04

Integrated Optic Disc and Cup Segmentation with Deep Learning

2015 年比较老
分割问题 : 青光眼筛查,视盘分割,视杯分割
Dataset:两个大型真实数据库上的测试(SEED-DB / MESSIDOR)
Architecture: 定位 Daubechies wavelet transform method + 去掉血管 + 9-layer CNN(3conv+3maxpooling+2FC)

Methods

我们描述了一个综合的解决方案,基于应用卷积神经网络特征夸大输入强调视盘苍白无血管阻塞,以及血管扭曲的程度。生成的原始概率图,然后进行鲁棒细化程序,考虑到视网膜结构的先验知识。通过对这些概率图的分析,我们可以得到一个关于分割正确性的置信度估计,这可以用来指导最具挑战性的手工检查案例。

过程:

  • localization
    粗定位视盘,返回典型视盘宽度的两倍左右的正方形
    方法: Daubechies wavelet transform method

  • conversion
    去掉血管,将图像转换为适合视盘和杯状分割的表示形式

    • obtain a mask of the vessels by trench detection
    • 来自血管掩膜外的可信视盘背景像素填充掩膜血管像素
  • classification
    转换后图像按照像素分成三类(也就是分割)
    方法:CNN 产生 a pixel-level probability map

(gdb) disassemble memmove Dump of assembler code for function memmove: 0x76c32c20 <+0>: lui gp,0x5 0x76c32c24 <+4>: addiu gp,gp,-26832 0x76c32c28 <+8>: addu gp,gp,t9 0x76c32c2c <+12>: addiu sp,sp,-32 0x76c32c30 <+16>: subu a3,a0,a1 0x76c32c34 <+20>: sltu a3,a3,a2 0x76c32c38 <+24>: sw gp,16(sp) 0x76c32c3c <+28>: sw s0,24(sp) 0x76c32c40 <+32>: sw ra,28(sp) 0x76c32c44 <+36>: bnez a3,0x76c32c60 <memmove+64> 0x76c32c48 <+40>: move s0,a0 0x76c32c4c <+44>: lw t9,-32564(gp) 0x76c32c50 <+48>: bal 0x76c32210 <memcpy> 0x76c32c54 <+52>: nop 0x76c32c58 <+56>: b 0x76c32f04 <memmove+740> 0x76c32c5c <+60>: lw ra,28(sp) 0x76c32c60 <+64>: addu v0,a0,a2 0x76c32c64 <+68>: sltiu a0,a2,16 0x76c32c68 <+72>: move v1,a2 0x76c32c6c <+76>: bnez a0,0x76c32ee4 <memmove+708> 0x76c32c70 <+80>: addu a1,a1,a2 0x76c32c74 <+84>: andi a0,v0,0x3 0x76c32c78 <+88>: subu a3,a2,a0 0x76c32c7c <+92>: move v1,v0 0x76c32c80 <+96>: subu a2,a1,a0 0x76c32c84 <+100>: beq a1,a2,0x76c32c9c <memmove+124> 0x76c32c88 <+104>: addiu a1,a1,-1 0x76c32c8c <+108>: lbu t0,0(a1) 0x76c32c90 <+112>: addiu v1,v1,-1 0x76c32c94 <+116>: b 0x76c32c84 <memmove+100> 0x76c32c98 <+120>: sb t0,0(v1) 0x76c32c9c <+124>: andi a1,a2,0x3 0x76c32ca0 <+128>: subu v0,v0,a0 0x76c32ca4 <+132>: bnez a1,0x76c32dd4 <memmove+436> 0x76c32ca8 <+136>: srl v1,a3,0x2 0x76c32cac <+140>: andi a0,v1,0x7 0x76c32cb0 <+144>: addiu a0,a0,-1 0x76c32cb4 <+148>: sltiu a1,a0,7 0x76c32cb8 <+152>: beqz a1,0x76c32d58 <memmove+312> 0x76c32cbc <+156>: move t0,v1 0x76c32cc0 <+160>: lw a1,-32736(gp) 0x76c32cc4 <+164>: sll a0,a0,0x2 0x76c32cc8 <+168>: addiu a1,a1,29884 0x76c32ccc <+172>: addu a0,a1,a0 0x76c32cd0 <+176>: lw a0,0(a0) 0x76c32cd4 <+180>: addu a0,a0,gp 0x76c32cd8 <+184>: jr a0 0x76c32cdc <+188>: nop 0x76c32ce0 <+192>: addiu a1,a2,-8 0x76c32ce4 <+196>: addiu a0,v0,-4 0x76c32ce8 <+200>: lw t2,-4(a2) 0x76c32cec <+204>: b 0x76c32db0 <memmove+400> 0x76c32cf0 <+208>: addiu t0,v1,6 0x76c32cf4 <+212>: addiu a1,a2,-12 0x76c32cf8 <+216>: addiu a0,v0,-8 0x76c32cfc <+220>: lw t1,-4(a2) 0x76c32d00 <+224>: b 0x76c32da8 <memmove+392> 0x76c32d04 <+228>: addiu t0,v1,5 0x76c32d08 <+232>: addiu a1,a2,-16 0x76c32d0c <+236>: addiu a0,v0,-12 0x76c32d10 <+240>: lw t2,-4(a2) 0x76c32d14 <+244>: b 0x76c32da0 <memmove+384> 0x76c32d18 <+248>: addiu t0,v1,4 0x76c32d1c <+252>: addiu a1,a2,-20 0x76c32d20 <+256>: addiu a0,v0,-16 0x76c32d24 <+260>: lw t1,-4(a2) 0x76c32d28 <+264>: b 0x76c32d98 <memmove+376> 0x76c32d2c <+268>: addiu t0,v1,3 0x76c32d30 <+272>: addiu a1,a2,-24 0x76c32d34 <+276>: addiu a0,v0,-20 0x76c32d38 <+280>: lw t2,-4(a2) 0x76c32d3c <+284>: b 0x76c32d90 <memmove+368> 0x76c32d40 <+288>: addiu t0,v1,2 0x76c32d44 <+292>: addiu a1,a2,-28 0x76c32d48 <+296>: addiu a0,v0,-24 0x76c32d4c <+300>: lw t1,-4(a2) 0x76c32d50 <+304>: b 0x76c32d88 <memmove+360> 0x76c32d54 <+308>: addiu t0,v1,1 0x76c32d58 <+312>: addiu a1,a2,-32 0x76c32d5c <+316>: addiu a0,v0,-28 0x76c32d60 <+320>: b 0x76c32d80 <memmove+352> 0x76c32d64 <+324>: lw v1,-4(a2) 0x76c32d68 <+328>: lw t1,-4(a2) 0x76c32d6c <+332>: addiu a1,a2,-36 0x76c32d70 <+336>: addiu a0,v0,-32 0x76c32d74 <+340>: addiu t0,v1,-1 0x76c32d78 <+344>: lw v1,28(a1) 0x76c32d7c <+348>: sw t1,28(a0) 0x76c32d80 <+352>: lw t1,24(a1) 0x76c32d84 <+356>: sw v1,24(a0) 0x76c32d88 <+360>: lw t2,20(a1) 0x76c32d8c <+364>: sw t1,20(a0) 0x76c32d90 <+368>: lw t1,16(a1) 0x76c32d94 <+372>: sw t2,16(a0) 0x76c32d98 <+376>: lw t2,12(a1) 0x76c32d9c <+380>: sw t1,12(a0) 0x76c32da0 <+384>: lw t1,8(a1) 0x76c32da4 <+388>: sw t2,8(a0) 0x76c32da8 <+392>: lw t2,4(a1) 0x76c32dac <+396>: sw t1,4(a0) 0x76c32db0 <+400>: addiu t0,t0,-8 0x76c32db4 <+404>: lw t1,0(a1) 0x76c32db8 <+408>: beqz t0,0x76c32dcc <memmove+428> 0x76c32dbc <+412>: sw t2,0(a0) 0x76c32dc0 <+416>: addiu a1,a1,-32 0x76c32dc4 <+420>: b 0x76c32d78 <memmove+344> 0x76c32dc8 <+424>: addiu a0,a0,-32 0x76c32dcc <+428>: b 0x76c32ed0 <memmove+688> 0x76c32dd0 <+432>: sw t1,-4(a0) 0x76c32dd4 <+436>: sll t2,a1,0x3 0x76c32dd8 <+440>: li t1,32 0x76c32ddc <+444>: li a0,-4 0x76c32de0 <+448>: andi a1,v1,0x3 0x76c32de4 <+452>: li t0,2 0x76c32de8 <+456>: subu t4,t1,t2 0x76c32dec <+460>: beq a1,t0,0x76c32e1c <memmove+508> 0x76c32df0 <+464>: and a0,a2,a0 0x76c32df4 <+468>: li t0,3 0x76c32df8 <+472>: beq a1,t0,0x76c32e34 <memmove+532> 0x76c32dfc <+476>: addiu t3,a0,-12 0x76c32e00 <+480>: li t0,1 0x76c32e04 <+484>: beq a1,t0,0x76c32e48 <memmove+552> 0x76c32e08 <+488>: addiu t3,a0,-16 0x76c32e0c <+492>: addiu t0,v0,-12 0x76c32e10 <+496>: lw a1,0(a0) 0x76c32e14 <+500>: b 0x76c32e70 <memmove+592> 0x76c32e18 <+504>: lw t6,-4(a0) 0x76c32e1c <+508>: addiu t3,a0,-8 0x76c32e20 <+512>: addiu t0,v0,-4 0x76c32e24 <+516>: lw t5,0(a0) 0x76c32e28 <+520>: lw t1,-4(a0) 0x76c32e2c <+524>: b 0x76c32e98 <memmove+632> 0x76c32e30 <+528>: addiu v1,v1,2 0x76c32e34 <+532>: addiu t0,v0,-8 0x76c32e38 <+536>: lw t6,0(a0) 0x76c32e3c <+540>: lw t5,-4(a0) 0x76c32e40 <+544>: b 0x76c32e84 <memmove+612> 0x76c32e44 <+548>: addiu v1,v1,1 0x76c32e48 <+552>: lw t1,0(a0) 0x76c32e4c <+556>: lw a1,-4(a0) 0x76c32e50 <+560>: addiu t3,a0,-20 0x76c32e54 <+564>: addiu t0,v0,-16 0x76c32e58 <+568>: addiu v1,v1,-1 0x76c32e5c <+572>: srlv t5,a1,t2 0x76c32e60 <+576>: sllv a0,t1,t4 0x76c32e64 <+580>: or t1,t5,a0 0x76c32e68 <+584>: lw t6,12(t3) 0x76c32e6c <+588>: sw t1,12(t0) 0x76c32e70 <+592>: srlv t1,t6,t2 0x76c32e74 <+596>: sllv a0,a1,t4 0x76c32e78 <+600>: or a1,t1,a0 0x76c32e7c <+604>: lw t5,8(t3) 0x76c32e80 <+608>: sw a1,8(t0) 0x76c32e84 <+612>: srlv a0,t5,t2 0x76c32e88 <+616>: sllv t6,t6,t4 0x76c32e8c <+620>: or t6,a0,t6 0x76c32e90 <+624>: lw t1,4(t3) 0x76c32e94 <+628>: sw t6,4(t0) 0x76c32e98 <+632>: srlv a0,t1,t2 0x76c32e9c <+636>: sllv t5,t5,t4 0x76c32ea0 <+640>: or t5,a0,t5 0x76c32ea4 <+644>: addiu v1,v1,-4 0x76c32ea8 <+648>: lw a1,0(t3) 0x76c32eac <+652>: beqz v1,0x76c32ec0 <memmove+672> 0x76c32eb0 <+656>: sw t5,0(t0) 0x76c32eb4 <+660>: addiu t3,t3,-16 0x76c32eb8 <+664>: b 0x76c32e5c <memmove+572> 0x76c32ebc <+668>: addiu t0,t0,-16 0x76c32ec0 <+672>: srlv a1,a1,t2 0x76c32ec4 <+676>: sllv t1,t1,t4 0x76c32ec8 <+680>: or a1,a1,t1 0x76c32ecc <+684>: sw a1,-4(t0) 0x76c32ed0 <+688>: li v1,-4 0x76c32ed4 <+692>: and v1,a3,v1 0x76c32ed8 <+696>: subu a1,a2,v1 0x76c32edc <+700>: subu v0,v0,v1 0x76c32ee0 <+704>: andi v1,a3,0x3 0x76c32ee4 <+708>: subu v1,a1,v1 0x76c32ee8 <+712>: beq a1,v1,0x76c32f00 <memmove+736> 0x76c32eec <+716>: addiu a1,a1,-1 0x76c32ef0 <+720>: lbu a0,0(a1) 0x76c32ef4 <+724>: addiu v0,v0,-1 0x76c32ef8 <+728>: b 0x76c32ee8 <memmove+712> 0x76c32efc <+732>: sb a0,0(v0) 0x76c32f00 <+736>: lw ra,28(sp) 0x76c32f04 <+740>: move v0,s0 0x76c32f08 <+744>: lw s0,24(sp) 0x76c32f0c <+748>: jr ra 0x76c32f10 <+752>: addiu sp,sp,32 End of assembler dump. 以上是memmove函数的反汇编,继续分析
最新发布
11-04
(gdb) disas main Dump of assembler code for function main: 0x00400ee0 <+0>: addiu sp,sp,-32752 0x00400ee4 <+4>: sw ra,32748(sp) 0x00400ee8 <+8>: sw s8,32744(sp) 0x00400eec <+12>: addiu sp,sp,-7288 0x00400ef0 <+16>: move s8,sp 0x00400ef4 <+20>: li v0,0x9c68 0x00400ef8 <+24>: addu v0,v0,s8 0x00400efc <+28>: sw a0,0(v0) 0x00400f00 <+32>: li v0,0x9c6c 0x00400f04 <+36>: addu v0,v0,s8 0x00400f08 <+40>: sw a1,0(v0) 0x00400f0c <+44>: lui v0,0x7fff 0x00400f10 <+48>: ori v0,v0,0xffff 0x00400f14 <+52>: sw v0,28(s8) 0x00400f18 <+56>: lw v0,28(s8) 0x00400f1c <+60>: nop 0x00400f20 <+64>: sw v0,24(s8) 0x00400f24 <+68>: addiu v0,s8,24 0x00400f28 <+72>: move a1,v0 0x00400f2c <+76>: li a0,4 0x00400f30 <+80>: jal 0x402550 <setrlimit@plt> 0x00400f34 <+84>: nop 0x00400f38 <+88>: addiu v0,s8,32 0x00400f3c <+92>: li a2,20000 0x00400f40 <+96>: li a1,49 0x00400f44 <+100>: move a0,v0 0x00400f48 <+104>: jal 0x4025a0 <memset@plt> 0x00400f4c <+108>: nop 0x00400f50 <+112>: addiu v0,s8,32 0x00400f54 <+116>: addiu v0,v0,20000 0x00400f58 <+120>: li a2,20000 0x00400f5c <+124>: li a1,50 0x00400f60 <+128>: move a0,v0 0x00400f64 <+132>: jal 0x4025a0 <memset@plt> 0x00400f68 <+136>: nop 0x00400f6c <+140>: addiu v0,s8,32 0x00400f70 <+144>: addiu v0,v0,100 0x00400f74 <+148>: addiu v1,s8,32 0x00400f78 <+152>: addiu v1,v1,16 0x00400f7c <+156>: li a2,30000 0x00400f80 <+160>: move a1,v1 0x00400f84 <+164>: move a0,v0 0x00400f88 <+168>: jal 0x402590 <memmove@plt> 0x00400f8c <+172>: nop 0x00400f90 <+176>: addiu v0,s8,32 0x00400f94 <+180>: addiu v0,v0,16 0x00400f98 <+184>: addiu v1,s8,32 0x00400f9c <+188>: addiu v1,v1,100 0x00400fa0 <+192>: li a2,30000 0x00400fa4 <+196>: move a1,v1 0x00400fa8 <+200>: move a0,v0 0x00400fac <+204>: jal 0x402590 <memmove@plt> 0x00400fb0 <+208>: nop 0x00400fb4 <+212>: li a0,10 0x00400fb8 <+216>: jal 0x402560 <sleep@plt> 0x00400fbc <+220>: nop 0x00400fc0 <+224>: b 0x400fb4 <main+212> 0x00400fc4 <+228>: nop
11-03
int main(int argc, char *argv[]) { struct rlimit rlimit_new; rlimit_new.rlim_cur = rlimit_new.rlim_max = RLIM_INFINITY; setrlimit(RLIMIT_CORE, &rlimit_new); char test[40000]; memset(test, '1', 40000/2); memset(test + 40000/2, '2', 40000/2); memmove(test + 100, test + 16, 30000); memmove(test + 16, test + 100, 30000); abort(); return 0; } 以上是我写的main函数,发现在第二次memmove之后,(test, test+30000)之间出现大量空洞,时预期之外的空字符。我没有memmove函数的源码,只有libc.so*。 以下是我gdb反汇编main函数,帮我分析出现空洞的原因。 (gdb) disassemble main Dump of assembler code for function main: 0x00400ef0 <+0>: addiu sp,sp,-48 0x00400ef4 <+4>: sw ra,44(sp) 0x00400ef8 <+8>: sw s8,40(sp) 0x00400efc <+12>: move s8,sp 0x00400f00 <+16>: sw a0,48(s8) 0x00400f04 <+20>: sw a1,52(s8) 0x00400f08 <+24>: lui v0,0x7fff 0x00400f0c <+28>: ori v0,v0,0xffff 0x00400f10 <+32>: sw v0,32(s8) 0x00400f14 <+36>: lw v0,32(s8) 0x00400f18 <+40>: nop 0x00400f1c <+44>: sw v0,28(s8) 0x00400f20 <+48>: addiu v0,s8,28 0x00400f24 <+52>: move a1,v0 0x00400f28 <+56>: li a0,4 0x00400f2c <+60>: jal 0x402570 <setrlimit@plt> 0x00400f30 <+64>: nop 0x00400f34 <+68>: li a0,0x9c40 0x00400f38 <+72>: jal 0x402590 <malloc@plt> 0x00400f3c <+76>: nop 0x00400f40 <+80>: sw v0,24(s8) 0x00400f44 <+84>: li a2,20000 0x00400f48 <+88>: li a1,49 0x00400f4c <+92>: lw a0,24(s8) 0x00400f50 <+96>: jal 0x4025c0 <memset@plt> 0x00400f54 <+100>: nop 0x00400f58 <+104>: lw v0,24(s8) 0x00400f5c <+108>: nop 0x00400f60 <+112>: addiu v0,v0,20000 0x00400f64 <+116>: li a2,20000 0x00400f68 <+120>: li a1,50 0x00400f6c <+124>: move a0,v0 0x00400f70 <+128>: jal 0x4025c0 <memset@plt> 0x00400f74 <+132>: nop 0x00400f78 <+136>: lw v0,24(s8) 0x00400f7c <+140>: nop 0x00400f80 <+144>: addiu v1,v0,100 0x00400f84 <+148>: lw v0,24(s8) 0x00400f88 <+152>: nop 0x00400f8c <+156>: addiu v0,v0,16 0x00400f90 <+160>: li a2,30000 0x00400f94 <+164>: move a1,v0 0x00400f98 <+168>: move a0,v1 0x00400f9c <+172>: jal 0x4025b0 <memmove@plt> 0x00400fa0 <+176>: nop 0x00400fa4 <+180>: lw v0,24(s8) 0x00400fa8 <+184>: nop 0x00400fac <+188>: addiu v1,v0,16 0x00400fb0 <+192>: lw v0,24(s8) 0x00400fb4 <+196>: nop 0x00400fb8 <+200>: addiu v0,v0,100 0x00400fbc <+204>: li a2,30000 0x00400fc0 <+208>: move a1,v0 0x00400fc4 <+212>: move a0,v1 0x00400fc8 <+216>: jal 0x4025b0 <memmove@plt> 0x00400fcc <+220>: nop 0x00400fd0 <+224>: lw a0,24(s8) 0x00400fd4 <+228>: jal 0x4025e0 <free@plt> 0x00400fd8 <+232>: nop 0x00400fdc <+236>: jal 0x4025d0 <abort@plt> 0x00400fe0 <+240>: nop End of assembler dump.
11-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值