田小默的博客

  • Home

  • Tags

  • Archives

  • About

'DICOM-医疗数位影像传输协定'

Posted on 2019-01-24

最近有一个医疗图像的比赛,医疗图像以前没有接触过,对于这种格式的数据不甚了解,做了一些调研,记录一下。

定义

医疗数位影像传输协定(DICOM,Digital Imaging and Communications in Medicine)是一组通用的标准协定,在对于医学影像的处理、储存、打印、传输上。它包含了档案格式的定义及网络通信协定。DICOM是以TCP/IP为基础的应用协定,并以TCP/IP联系各个系统。两个能接受DICOM格式的医疗仪器间,可借由DICOM格式的档案,来接收与交换影像及病人资料。—— 维基百科

简言之,DICOM就是一种医疗行业使用的一种数据存储传输标准,广泛应用于各种医疗设备,如:CT、核磁共振、超声等。

内容

协议包含编码格式,图像格式、仪器厂商、仪器序列号、数据生成时间、数据采集方式、病人性别、病人年龄等等。下面是使用PYDICOM读取数据打印的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
(0008, 0005) Specific Character Set              CS: 'ISO_IR 100'
(0008, 0008) Image Type CS: ['ORIGINAL', 'PRIMARY', 'AXIAL']
(0008, 0012) Instance Creation Date DA: '20170728'
(0008, 0013) Instance Creation Time TM: '160113.752'
(0008, 0016) SOP Class UID UI: CT Image Storage
(0008, 0018) SOP Instance UID UI: *
(0008, 0020) Study Date DA: '20170728'
(0008, 0021) Series Date DA: '20170728'
(0008, 0022) Acquisition Date DA: '20170728'
(0008, 0023) Content Date DA: '20170728'
(0008, 002a) Acquisition DateTime DT: '20170728155419.080'
(0008, 0030) Study Time TM: '155226.560'
(0008, 0031) Series Time TM: '160052.584'
(0008, 0032) Acquisition Time TM: '155419'
(0008, 0033) Content Time TM: '155419.410'
(0008, 0050) Accession Number SH: '*'
(0008, 0060) Modality CS: 'CT'
(0008, 0070) Manufacturer LO: 'Philips'
(0008, 0080) Institution Name LO: '*'
(0008, 0081) Institution Address ST: '*'
(0008, 0090) Referring Physician's Name PN: '*'
(0008, 1010) Station Name SH: '*'
(0008, 1030) Study Description LO: 'CT158424'
(0008, 103e) Series Description LO: 'iDose (2)'
(0008, 1040) Institutional Department Name LO: '*'
(0008, 1080) Admitting Diagnoses Description LO: ''
(0008, 1084) Admitting Diagnoses Code Sequence 0 item(s) ----
(0008, 1090) Manufacturer's Model Name LO: '*'
(0008, 1111) Referenced Performed Procedure Step Sequence 1 item(s) ----
(0008, 1150) Referenced SOP Class UID UI: Modality Performed Procedure Step SOP Class
(0008, 1155) Referenced SOP Instance UID UI:1.3.46.670589.33.1.63636853943535791300001.5748714835418010494
---------
(0008, 1140) Referenced Image Sequence 1 item(s) ----
(0008, 1150) Referenced SOP Class UID UI: CT Image Storage
(0008, 1155) Referenced SOP Instance UID UI: 1.3.46.670589.33.1.63636853996983848400001.4836402666508773100
---------
(0008, 3010) Irradiation Event UID UI: 1.3.46.670589.33.1.63636854035098028400003.5509738905066048408
(0010, 0010) Patient's Name PN: '*'
(0010, 0020) Patient ID LO: 'a8d5f610-bd93-4446-9680-1eeb2d6e606d'
(0010, 0030) Patient's Birth Date DA: '*'
(0010, 0040) Patient's Sex CS: 'M'
(0010, 1010) Patient's Age AS: '050Y'
(0018, 0015) Body Part Examined CS: 'ABDOMEN'
(0018, 0022) Scan Options CS: 'HELIX'
(0018, 0050) Slice Thickness DS: "5"
(0018, 0060) KVP DS: "120"
(0018, 0088) Spacing Between Slices DS: "5"
(0018, 0090) Data Collection Diameter DS: "500"
(0018, 1000) Device Serial Number LO: '*'
(0018, 1020) Software Version(s) LO: '4.1'
(0018, 1030) Protocol Name LO: 'Liver C-/CTA/C+ MC /Abdomen'
(0018, 1100) Reconstruction Diameter DS: "338"
(0018, 1110) Distance Source to Detector DS: "1040"
(0018, 1111) Distance Source to Patient DS: "570"
(0018, 1120) Gantry/Detector Tilt DS: "0"
(0018, 1130) Table Height DS: "119.1"
(0018, 1150) Exposure Time IS: "470"
(0018, 1151) X-Ray Tube Current IS: "534"
(0018, 1152) Exposure IS: "251"
(0018, 1160) Filter Type SH: 'B'
(0018, 1210) Convolution Kernel SH: 'B'
(0018, 5100) Patient Position CS: 'HFS'
(0018, 9302) Acquisition Type CS: 'SPIRAL'
(0018, 9305) Revolution Time FD: 0.4
(0018, 9306) Single Collimation Width FD: 0.625
(0018, 9307) Total Collimation Width FD: 80.0
(0018, 9309) Table Speed FD: 170.4
(0018, 9310) Table Feed per Rotation FD: 109.056
(0018, 9311) Spiral Pitch Factor FD: 0.852
(0018, 9323) Exposure Modulation Type CS: '3D MODULATION'
(0018, 9324) Estimated Dose Saving FD: -3.0
(0018, 9345) CTDIvol FD: 17.04320987654321
(0020, 000d) Study Instance UID UI: adce2399-4540-41b7-8018-ee81ea48655e
(0020, 000e) Series Instance UID UI: 2d5c02e9-4a75-4e67-959d-3d705479639c
(0020, 0010) Study ID SH: '*'
(0020, 0011) Series Number IS: "201"
(0020, 0012) Acquisition Number IS: "1"
(0020, 0013) Instance Number IS: "1"
(0020, 0032) Image Position (Patient) DS: ['-161.902', '-33.1', '106.18']
(0020, 0037) Image Orientation (Patient) DS: ['1', '0', '0', '0', '1', '0']
(0020, 0052) Frame of Reference UID UI: 1.3.46.670589.33.1.63636853961048793000002.5747101679789372786
(0020, 1040) Position Reference Indicator LO: ''
(0020, 1041) Slice Location DS: "106.18"
(0020, 4000) Image Comments LT: ''
(0028, 0002) Samples per Pixel US: 1
(0028, 0004) Photometric Interpretation CS: 'MONOCHROME2'
(0028, 0010) Rows US: 512
(0028, 0011) Columns US: 512
(0028, 0030) Pixel Spacing DS: ['0.66015625', '0.66015625']
(0028, 0100) Bits Allocated US: 16
(0028, 0101) Bits Stored US: 12
(0028, 0102) High Bit US: 11
(0028, 0103) Pixel Representation US: 0
(0028, 1050) Window Center DS: ['50', '50']
(0028, 1051) Window Width DS: ['220', '220']
(0028, 1052) Rescale Intercept DS: "-1024"
(0028, 1053) Rescale Slope DS: "1"
(0040, 1001) Requested Procedure ID SH: 'CT158424'
(00e1, 0010) Private Creator LO: 'ELSCINT1'
(00e1, 1002) Private tag data SH: 'Adult'
(00e1, 1036) Private tag data CS: 'YES'
(00e1, 1040) [Image Label] SH: ''
(00e1, 1046) Private tag data OB: Array of 512 bytes
(00e1, 1050) [Acquisition Duration] DS: "2.053"
(00e1, 1063) [Patient Language] SH: 'CHINESE'
(00e1, 10c4) Private tag data DS: "1059.67504882813"
(01f1, 0010) Private Creator LO: 'ELSCINT1'
(01f1, 1001) [Acquisition Type] CS: 'SPIRAL'
(01f1, 1002) [Unknown] CS: 'STANDARD'
(01f1, 1004) [Angular Sampling Density] CS: 'NORMAL'
(01f1, 1008) [Acquisition Length] DS: "215"
(01f1, 100c) [Scanner Relative Center] DS: ['0', '-0.021']
(01f1, 100e) [Unknown] FL: 0.0
(01f1, 100f) Private tag data CS: 'IN'
(01f1, 1026) [Pitch] DS: "0.852"
(01f1, 1027) [Rotation Time] DS: "0.4"
(01f1, 1032) [Image View Convention] CS: 'RIGHT_ON_LEFT'
(01f1, 1044) [Unknown] OW: Array of 644 bytes
(01f1, 1046) [Unknown] FL: 0.625
(01f1, 1047) [Unknown] SH: '3D'
(01f1, 1049) [Unknown] DS: ''
(01f1, 104a) [Unknown] SH: 'DOM'
(01f1, 104b) [Unknown] SH: '128x0.625'
(01f1, 104d) [Unknown] SH: 'YES'
(01f1, 104e) [Unknown] SH: 'Abdomen/Pelvis'
(01f1, 1054) Private tag data IS: "22"
(01f1, 1056) Private tag data LO: '28.204652423757'
(01f7, 0010) Private Creator LO: 'ELSCINT1'
(01f7, 1014) [Unknown] OW: Array of 108 bytes
(01f7, 1019) [Unknown] OW: Array of 2160 bytes
(01f7, 1022) [Unknown] UI: 1.3.46.670589.33.1.63636854035098028400003.5509738905066048408
(01f7, 1029) [Unknown] OW: Array of 440 bytes
(01f7, 1031) [Unknown] OW: Array of 124 bytes
(01f7, 1092) Private tag data OW: Array of 890 bytes
(01f7, 1095) Private tag data OW: Array of 128 bytes
(01f7, 1097) Private tag data OW: Array of 256 bytes
(01f7, 1099) Private tag data OW: Array of 64 bytes
(01f7, 109b) Private tag data IS: "2"
(07a1, 0010) Private Creator LO: 'ELSCINT1'
(7fe0, 0010) Pixel Data OW: Array of 524288 bytes

具体内容并不关心,只看看那些可能会用到,比如病人性别、年龄。

读取显示

使用pydicom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#-*-coding:utf-8-*-
import cv2
import numpy
import pydicom as dicom
from matplotlib import pyplot as plt

data_dir = 'demo'

dcm = dicom.read_file("demo/1.dcm")
dcm.image = dcm.pixel_array * dcm.RescaleSlope + dcm.RescaleIntercept

slices = []
slices.append(dcm)
img = slices[ int(len(slices)/2) ].image.copy()
ret,img = cv2.threshold(img, 90,3071, cv2.THRESH_BINARY)
img = numpy.uint8(img)

im2, contours, _ = cv2.findContours(img,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
mask = numpy.zeros(img.shape, numpy.uint8)
for contour in contours:
cv2.fillPoly(mask, [contour], 255)
img[(mask > 0)] = 255

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2,2))
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

img2 = slices[ int(len(slices)/2) ].image.copy()
img2[(img == 0)] = -2000

plt.figure(figsize=(12, 12))
plt.subplot(131)
plt.imshow(slices[int(len(slices) / 2)].image, 'gray')
plt.title('Original')
plt.subplot(132)
plt.imshow(img, 'gray')
plt.title('Mask')
plt.subplot(133)
plt.imshow(img2, 'gray')
plt.title('Result')
plt.show()

kZ63bF.png

参考-1
参考-2

'NLP_BLEU评价指标'

Posted on 2019-01-17 | Edited on 2019-01-24

BLEU

一种机器翻译评价方法,虽然是为机器翻译提出,但后来也广泛用于NLP其他领域。

原理

语言的评价是很困难的,这不是简单的分类,涉及句子的流畅性、充分性和准确性等。然而人工去做这件事很显然是不现实的,还有就是个人会掺杂一些主观因素。

BLEU:bilingual evaluation understudy

N_Grem

指文本中连续出现的n个语词。n元语法模型是基于(n-1)阶马尔可夫链的一种概率语言模型,通过n个语词出现的概率来推断语句的结构。

  • 例子
1
2
3
原文: 猫坐在垫子上
机器翻译:The cat sat on the mat.
人工翻译:The cat is on the mat.
  1. 1_grem

匹配度是5/6
  1. 2_grem

匹配度是3/5
  1. 3_grem

匹配度是1/4
  1. 4_grem

匹配度是0

1_grem表示有多少个独立的词被翻译出来了,n>=2_grem反应翻译的流畅程度。

改进的N_grem

如果是这种情况

计算1_grem是6/6.很明显是不合理的,所以取分子部分为机器翻译和参考翻译词出现次数的最小值。

Count_clip = min(Count,Max_Ref_Count)

各阶N_grem计算公式:

$p_n=\frac{\sum_{C\in{Candidates}}\sum _ { n - g r a m \in C }Count_ { c l i p } ( n - g r a m )}{\sum_{C ^ { \prime } \in {Candidates}}\sum _ { n - g r a m ^{\prime} \in C ^{\prime}}Count_ { c l i p } ( n - g r a m ^ {\prime})}$

分子部分表示N_grem翻译和参考译文中的出现次数

以上边的句子为例,计算到4_grem

分子 = 5/6 + 3/5 + 1/4 = 202/120

分母表示N_grem在翻译译文中的出现次数:

分母 = 5/6 + 5/5 + 4/4 + 3/3 = 460/120

pn = 202/460

当句子较短时

Candidate the cat
Reference1 the cat is on the mat
Reference2 there is a cat on the mat

很明显,分母(等于2)部分会很小,导致pn很大,所以要加入短句惩罚项。

image

当翻译句长大于参考句长时,BP为1,当小于时,BP为上公式计算得出

为了使n_grem权重平均,使用了几何加权平均

最后BLEU公式如下

$\mathrm { BLEU } = \mathrm { BP } \cdot \exp \left( \sum _ { n = 1 } ^ { N } w _ { n } \log p _ { n } \right)$

使用对数形式使公式更加简洁

$\log \mathrm { BLEU } = \min \left( 1 - \frac { r } { c } , 0 \right) + \sum _ { n = 1 } ^ { N } w _ { n } \log p _ { n }$

特点

  • 优点

    • 它的计算速度快,容易,特别是与人工翻译速率模型输出相比。
    • 它无处不在。这使您可以轻松地将模型与同一任务的基准进行比较。
    • 不幸的是,这种非常便利导致人们过度使用它,即使对于那些不是最佳度量选择的任务也是如此。
  • 缺点

    • 它没有考虑句子意义
    • 它不直接考虑句子结构
    • 它不能很好地处理形态丰富的语言
    • 它不能很好地映射到人类的判断

BLEU在一定程度上解决了NLP的评价问题,但是还存在诸多缺陷,下面是大佬的一篇文章
https://medium.com/@rtatman/evaluating-text-output-in-nlp-bleu-at-your-own-risk-e8609665a213

'Topological_structural_analysis_of_digitized_binary_images_by_border_following_论文方法分析及c++实现'

Posted on 2019-01-14 | Edited on 2019-01-15

(1)框架:框架就是指图片的第一列、最后一列、第一行、最后一行像素,这四个长条组成的一个矩形框框,我们这些点是黑点,也就是0。

(2)背景:除了框架之外,和框架属于同一层级的像素点,这些点也是黑点,也就是0。

(3)外轮廓:外轮廓就是指包裹了一堆白点的最外围的白点。

(4)内轮廓:内轮廓是指在包裹了一堆白点的最内部的白点。

用一张图片表示会很清晰:

在这张图片中,S1是背景,也是框架层。S2是包裹的一堆白点,这堆白点的最外层和框架层紧密相连,B1就是S2的外轮廓,B2就是S2的内轮廓。

那么我们怎么用计算机判断一张图片上的点是外轮廓还是内轮廓呢?

那么就得进行如下的步骤:

(1)首先,我们设定外部框架的边界值NBD为1。

(2)接着忽略最外层的框架,然后从图片的第二行的最左侧开始,判断:

如果这个数字是1,并且它的左侧的像素是0,那么我们令(i,j)为这个像素,然后令(i2,j2)=(i,j-1)为它左侧的像素(如果是第一次运算,那么坐标就是(2,2),它要是1,(2,1)是0,那么(i,j)=(2,2)、(i2,j2)=(i,j-1)=(2,1))。然后我们令NBD=NBD+1,并且认为这个点是外轮廓点。

如果这个数字是大于等于1的,并且它的右侧像素是0,那么我们令(i,j)为这个像素,然后令(i2,j2)=(i,j+1)为它右侧的像素。(如果是第一次运算,那么坐标就是(2,2),它要是1,(2,3)是0,那么那么(i,j)=(2,2)、(i2,j2)=(i,j+1)=(2,3)),并且认为这个点是内轮廓点。

如果是其它的情况,那么,令直接跳到最后一步。

(3)下一步是判断这个点到底是内轮廓还是外轮廓,我们用这个表格来判断:

image

这里面B’表示的是上一个按照我们这个步骤走的点是什么轮廓。B表示我们当前的点是什么轮廓。如果这是第一次,没有上一次的点,那么直接认为是外轮廓就好了。

(4)从点(i,j)开始,它的邻近地方有8个点(3*3)的格子之内,然后我们以(i2,j2)点为起始点,然后顺时针的沿着这8个点移动,一直走走走走,唉,发现了一个不为0的像素点,并且令这个点为(i1,j1)。如果这8个点都为0的话,令中心点(i,j)为-NBD,然后直接跳到最后一步。

(5)如果(i1,j1)存在的话,那么我们令(i2,j2)=(i1,j1),(i3,j3)=(i,j)。

(6)然后我们从点(i3,j3)开始,以(i2,j2)为起始点,然后逆时针移动遍历(i,j)邻近地方的8个点。找到第一个不为0的点((i2,j2)这个点不算)。然后令它为(i4,j4)。注意这里肯定不会存在没有不为0点的情况,因为(i3,j3)=(i,j),上一次循环都循环一次了,没有早退出了。

(7)然后我们判断:如果(i3,j3)前面的点(i3,j3+1)为0的话,那么我们把(i3,j3)这个点的像素值赋予-NBD。

如果(i3,j3)点前面的点不为0,且(i3,j3)这个点的像素为1的话,那么把(i3,j3)的像素值赋予NBD。

如果是其它情况的话,这个值保持不变。

(8)判断,如果(i4,j4)=(i,j)也就是我们最开始的那个值,且(i3,j3)=(i1,j1),那么我们跳到最后一步。如果要不符合条件,我们返回到(6)继续计算直到满足条件。

(9)我们回到我们最开始选择的那个点,也就是(i,j)然后我们往右边移动一格,如果已经到达末尾了,换到下一行的左边。如果我们于(i,j)那点的像素不为1的话,我们令LNBD等于(i,j)那点的像素的绝对值。

这九步,我们就把轮廓计算完毕了。在铃木桑的论文中,它举了一个例子来说明这个算法,如下所示:

这个是它最后得到的结果,但是我有点不信,下面我按照它同样的算法,自己手算了一遍:

我的最后结果是分为4部分,4个外轮廓,没有内轮廓,而铃木的是5部分,有一个内轮廓。我认为我的里面那个-3不是内轮廓,因为内轮廓应该是八方向都封闭起来的,而这两个-3只有2个方向是封闭,两个方向直接和背景连接。所以我认为是外轮廓。

谁对谁错我不好说,你们自己分析,然后对这两个人的案例对错评论一下,告诉我哈!

这样,我们的轮廓就检测完毕了。我们用OPENCV检测也非常的简单:

(1)首先我们导入一张图片。

(2)将图片二值化变成黑白图像

(3)运用轮廓搜索算法找出轮廓

(4)显示轮廓。

终端调试工具--pudb'

Posted on 2019-01-10

在终端常用的python调试工具有pdb和ipdb,他们都是很好的调试工具,但是平时使用pycharm进行调试,使用pdb和ipdb还是感觉不好用,对于程序运行情况不能直观的看到,这个pudb很好的解决了这个问题。可以实时看到程序运行的位置,观察变量和堆栈的变换,还带有命令行窗口,可以更好的查看一些参数。

image

https://documen.tician.de/pudb/

Recognition'

Posted on 2019-01-07

读过的书

Posted on 2018-12-26

 幼时的我并不是一个爱读书的孩子,但是一个爱听故事的孩子,也许那个年纪的孩子都是这样。

 记得我读完的第一本书是表哥的《木偶奇遇记》,故事对于一个上四五年级的小学来说足够精彩,但是这并没有为我打开大门。小学时候和初中的老师总是会推荐一些课外读物,现在觉得那个时候看一些小说还是不错的,但是一些深奥的东西还是看不懂的,毕竟自己看书不想老师将课文一样可以理解到位,大部分还是似懂非懂的。

 后来有看了一本杰克.伦敦的《热爱生命》,还是表哥的书(像是好多都是表哥的一样…),可是看到最后高潮的地方发现有两张空白,感觉所有的精彩都错过了。

 后来上高一的时候不知怎么的看一本《藏地密码》,这个对于一个一个字看书的我简直是无法描述的长啊,途中中断过好几次,最后断断续续的总算看完了。

 高三的时候看的书倒是挺多的,虽说那个时候学习最为紧张,但还是想看课外书,可能那是看课外书是唯一的娱乐方式了。那时候看了《平凡的世界》、《狼图腾》、《撒哈拉的故事》、《草房子》、《我与地坛》、《天行者》、《一句顶一万句》、《龙族》、《1988,我想和这个世界谈谈》、《你若安好便是晴天:林徽因传》、《卑鄙的圣人》等。好多想不起了,好多内容也像不起了,不过慢慢发现了读书乐趣,也许因为看的都是小说类的吧。

PVANET

Posted on 2018-12-25
  • 论文
  • 代码

    Abstract 摘要

    在CV领域,不管是检测还是分割大多都是使用很大或很深的网络来提取特征,这导致需要很大的计算成本,目前存在多种的降低计算成本的模型压缩方法,如剪枝、蒸馏、权重量化、设计更小的网络等方法。这篇文章就是在模型设计之初就考虑到计算速度问题,从而设计出更加紧凑的模型。

    Network Design

    C.ReLu

    ReLU这个激活函数现在已经成了标配了,但是这里使用的ReLU还是有一些不同的。

iamge

feature 经过卷积层后,直接乘 -1 ,和从Conv输出的Concatenntion 合并,然后进行Scale\Shift 缩放和偏移,最后经过ReLU。这里的Shift相当于使ReLU的activation threshold改变了,但是那个乘 -1 着实没看懂什么意思。

Inception

Inception 是GoogleNet 中提出的,使用不同的卷积核,这样感受野的大小也不一样,可以捕捉到不同的大小的物体。

image

从上图可以看出不同大小的卷积核感受野的不同,1x1的卷积核channel是1/2,3x3和5x5和卷积核channel个数是1/4。

image

具体实现部分,左图的输入输出特征相同size时,5x5的convolution kernel是由两个3x3的conv kernel实现,这样计算量会小些。

右图是feature map需要减小尺寸是采用的方法,这里1x1的conv kernel使用stride=2 的 poo1和stride=2 的conv。

HyperNet

在特征提取层中将细粒度细节与高度抽象的信息相结合,有助于以下区域提议网络和分类网络检测不同尺度的对象。然而,由于所有抽象层的直接级联可能产生具有更高计算需求的冗余信息,因此需要仔细设计不同抽象层的数量和抽象层数。不过自己使用是都是抽取相同size下最后一层的feature map,这样总是没错的。

image

Other

将Faster-RCNN的RPN部分的feature map的channel数有512改成了128.
在Inception模块加入残差连接。

模型的具体参数量和计算量

image

在VOC2012的结果对比

image

总结

本文提出了一个轻量级的网络,取得了不错的结果。此外,本网络结果的设计完全独立于network compression and quantization. 因此,还可以进一步利用最近的模型压缩技术来提升性能。例如,基于现有网络应用truncated SVD就可以实现显著的运行时间提升!

参考文章-1

参考文章-2

参考文章-3

CTC(connectionist temporal classification)

Posted on 2018-12-24

https://senliuy.gitbooks.io/advanced-deep-learning/content/di-er-zhang-ff1a-xu-lie-mo-xing/connectionist-temporal-classification-labelling-unsegmented-sequence-data-with-recurrent-neural-networks.html

https://distill.pub/2017/ctc/

使用Django建一个项目

Posted on 2018-12-22

ssh外网透传

Posted on 2018-12-21

查看计算节点ip

[xxxx@compute-0-4 ~]$ ifconfig
enp13s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.250  netmask 255.255.255.0  broadcast 10.1.1.255
        ether fc:aa:14:f3:2c:7e  txqueuelen 1000  (Ethernet)
        RX packets 1199456446  bytes 1678434692412 (1.5 TiB)
        RX errors 0  dropped 272772  overruns 940  frame 0
        TX packets 396837618  bytes 371680298623 (346.1 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xc7120000-c713ffff

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 15441009  bytes 3801577447 (3.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15441009  bytes 3801577447 (3.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

启动你要运行的web服务

例如,使用jupyter,把ip设置为上面ifconfig得到的ip,port自己随便设但不要和别的服务重了

[xxx@compute-0-4 ~]$ jupyter-lab --ip 10.1.1.250 --port 8887
[I 02:25:39.274 LabApp] Writing notebook server cookie secret to /run/user/1015/jupyter/notebook_cookie_secret
[I 02:25:41.139 LabApp] JupyterLab beta preview extension loaded from /share/apps/anaconda3/lib/python3.6/site-packages/jupyterlab
[I 02:25:41.140 LabApp] JupyterLab application directory is /share/apps/anaconda3/share/jupyter/lab
[I 02:25:41.146 LabApp] Serving notebooks from local directory: /home/huguanghao2
[I 02:25:41.147 LabApp] 0 active kernels
[I 02:25:41.147 LabApp] The Jupyter Notebook is running at:
[I 02:25:41.147 LabApp] http://10.1.1.250:2512/
[I 02:25:41.147 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 02:25:41.147 LabApp] No web browser found: could not locate runnable browser.

管理节点使用ssh -L 把计算节点的web服务端口也就是8887透传出去

ssh -L 管理节点ip(外网可以ping通的):(服务端口号):(计算节点ip):(端口号) 用户名@(计算节点ip)

[xxx@wuxi ~]$ ssh -L 172.18.65.18:8887:10.1.1.250:8887 xxx@10.1.1.250
Last login: Fri Dec 21 02:24:22 2018 from wuxi.local
Rocks Compute Node
Rocks 7.0 (Manzanita)
Profile built 16:05 15-Nov-2018

Kickstarted 03:15 15-Nov-2018

然后就ok了

image

image

ssh太强大了,-L就是端口转发的

参考文章_1

参考文章_2

参考文章_3

12…4
田小默

田小默

33 posts
21 tags
GitHub Weibo Zhihu
© 2019 田小默
Powered by Hexo v3.8.0
|
Theme – NexT.Pisces v6.6.0
总访问量次 | 总访客人 |