array_slice,caffe多标签学习有没有方法显示整体的精确度?
拷贝convert_imageset,生成新工程convert_imageset_multi_label

修改源码
std::ifstream infile(argv[2]); std::vector<std::pair<std::string, std::vector<float>> > lines; std::string filename; std::string label_count_string = argv[5]; int label_count = std::atoi(label_count_string.c_str()); std::vector<float> label(label_count); while (infile >> filename) { for (int i = 0; i < label_count; i++) infile >> label[i]; lines.push_back(std::make_pair(filename, label)); } if (FLAGS_shuffle) { // randomly shuffle data LOG(INFO) << "Shuffling data"; shuffle(lines.begin(), lines.end()); } LOG(INFO) << "A total of " << lines.size() << " images."; if (encode_type.size() && !encoded) LOG(INFO) << "encode_type specified, assuming encoded=true."; int resize_height = std::max<int>(0, FLAGS_resize_height); int resize_width = std::max<int>(0, FLAGS_resize_width); // Create new DB scoped_ptr<db::DB> db_image(db::GetDB(FLAGS_backend)); scoped_ptr<db::DB> db_label(db::GetDB(FLAGS_backend)); db_image->Open(argv[3], db::NEW); db_label->Open(argv[4], db::NEW); scoped_ptr<db::Transaction> txn_image(db_image->NewTransaction()); scoped_ptr<db::Transaction> txn_label(db_label->NewTransaction());// // Create new DB// scoped_ptr<db::DB> db(db::GetDB(FLAGS_backend));// db->Open(argv[3], db::NEW);// scoped_ptr<db::Transaction> txn(db->NewTransaction()); // Storing to db std::string root_folder(argv[1]); Datum datum_image; Datum datum_label; int count = 0; int data_size = 0; bool data_size_initialized = false; for (int line_id = 0; line_id < lines.size(); ++line_id) { bool status; std::string enc = encode_type; if (encoded && !enc.size()) { // Guess the encoding type from the file name string fn = lines[line_id].first; size_t p = fn.rfind('.'); if ( p == fn.npos ) LOG(WARNING) << "Failed to guess the encoding of '" << fn << "'"; enc = fn.substr(p); std::transform(enc.begin(), enc.end(), enc.begin(), ::tolower); } status = ReadImageToDatum(root_folder + lines[line_id].first, lines[line_id].second[0], resize_height, resize_width, is_color, enc, &datum_image); if (status == false) continue; if (check_size) { if (!data_size_initialized) { data_size = datum_image.channels() * datum_image.height() * datum_image.width(); data_size_initialized = true; } else { const std::string& data = datum_image.data(); CHECK_EQ(data.size(), data_size) << "Incorrect data field size " << data.size(); } } // sequential string key_str = caffe::format_int(line_id, 8) + "_" + lines[line_id].first; // Put in db string out; CHECK(datum_image.SerializeToString(&out)); txn_image->Put(key_str, out); ////////////////////////////////////////////////////////////////////////// datum_label.set_channels(label_count); datum_label.set_height(1); datum_label.set_width(1); datum_label.clear_data(); datum_label.clear_float_data(); datum_label.set_encoded(false); std::vector<float> label_vec = lines[line_id].second; for (int i = 0; i < label_vec.size();i++) { datum_label.add_float_data(label_vec[i]); } string out_label; CHECK(datum_label.SerializeToString(&out_label)); txn_label->Put(key_str, out_label); ////////////////////////////////////////////////////////////////////////// if (++count % 1000 == 0) { // Commit db txn_image->Commit(); txn_image.reset(db_image->NewTransaction()); txn_label->Commit(); txn_label.reset(db_label->NewTransaction()); LOG(INFO) << "Processed " << count << " files."; } } // write the last batch if (count % 1000 != 0) { txn_image->Commit(); txn_label->Commit(); LOG(INFO) << "Processed " << count << " files."; }上述方式使用了二个data层,编译之后,使用如下方式生成:
Build\x64\Release>convert_imageset_multi_label.exe ./ train.txt data/train_image_lmdb data/train_label_lmdb 4
train.txt文件格式如下:
data/00A03AF5-41C7-4966-8EF3-8B2C90DCF75C_cgfn.jpg 1 2 3 6data/00A15FBD-9637-44C5-B2E7-81611263C88C_tmph.jpg 2 5 6 4
网络配置文件需要加入slice层将标签分割开来
layer { name: "slice" type: "Slice" bottom: "label" top: "label_1" top: "label_2" top: "label_3" top: "label_4" slice_param { axis: 1 slice_point: 1 slice_point: 2 slice_point: 3 }}
也可以通过python直接生成lmdb格式,其方式如下:
# -*- coding: utf-8 -*-"""Created on Sat Dec 24 20:57:28 2016 @author: zhouly"""import lmdbfrom skimage import ioimport numpy as np import syscaffe_root = '../../'sys.path.insert(0, caffe_root + '/python')import caffeimport cv2root = '../../'file_input=open(root+'data/train.txt','r') in_image_db=lmdb.open(root+'examples/99/train_image_lmdb', map_size=int(1e12)) in_label_db=lmdb.open(root+'examples/99/train_label_lmdb', map_size=int(1e12)) in_image_txn = in_image_db.begin(write=True) in_label_txn = in_label_db.begin(write=True)for in_idx, in_ in enumerate(file_input): content = in_.strip() content = content.split(' ') im_file = root + 'data/verification/' + content[0] try: im = io.imread(im_file) except: print '-------------------------', im_file continue im = im[:,:, 3] im = cv2.resize(im, (224, 224), interpolation=cv2.INTER_LINEAR) data = np.zeros((3, 224, 224), np.uint8) data[0, :, :] = im[:, :] data[1, :, :] = im[:, :] data[2, :, :] = im[:, :] im_dat = caffe.io.array_to_datum(data) in_image_txn.put('{:0>10d}'.format(in_idx), im_dat.SerializeToString()) print 'data train: {} [{}]'.format(content[0], in_idx + 1) del im_file, im, im_dat, data target_label = np.zeros((4, 1, 1)) target_label[0, 0, 0] = int(content[1]) target_label[1, 0, 0] = int(content[2]) target_label[2, 0, 0] = int(content[3]) target_label[3, 0, 0] = int(content[4]) label_data = caffe.io.array_to_datum(target_label) in_label_txn.put('{:0>10d}'.format(in_idx), label_data.SerializeToString()) del target_label, label_data in_image_txn.commit() in_label_txn.commit() in_image_db.close() in_label_db.close() file_input.close()切片文是什么意思?
切片文(Slice Article)通常指的是利用图片或视频素材,通过剪切、拼接和加工等手法,创作出具有独特视觉效果的文章。切片文通常具有较高的艺术性和创意性,可以为读者带来视觉上的享受。
在社交媒体和网络上,许多用户会分享切片文,这些文章通常以图片、视频或动画的形式呈现,以吸引读者的注意力。切片文可以用于宣传、营销、娱乐等场景,具有广泛的应用价值。同时,切片文的制作过程也需要一定的设计和编辑能力,因此对于有兴趣从事这一领域的人来说,学习相关技能是很有必要的。
怎么生成uint8类型的数组python?
Uint8Array对象8位无符号整数值的类型化数组。内容将初始化为0。如果无法分配请求数目的字节,则将引发异常。转换成普通数组的方法:
1、构造uint8Array=newUint8Array(length);
2、转换方法:(1)vararray=Array.from(uint8Array)(2)vararray=[].slice.call(uint8Array)
前端刷算法用什么语言?
选用JS
leecode可以用js刷题了,我大js越来越被认可了是吧。但是刷题中会因为忽略js的一些特性掉入坑里。我这里总结一下我掉过的坑。
坑1:js中数组对象是引用对象
js中除了object还有数组对象也是引用对象,这点常常被忽视,所以在递归的时候传递数组要用arr.slice(0)这样复制一个一样的新数组,不然会出现你传入的数组会被同级的递归改变,结果就不对了。
所以只要数组复制的地方最好都要这么写,除非你真的想引用。而且注意是slice不是splice这两个方法差别很大,你如果用splice(0)也能得到数组的复制,但是你将会删了原数组,因为splice是一个操作
增加和删除的元素,返回值是删除的元素的集合。splice(0)是表示从idx为0开始删除到数组尾部,所以得到的返回值也是这个数组。slice(start,end)可以理解为切片,省略end表示到数组尾部,如果end为负
则从数组尾部开始数。
坑2:js中的sort是默认以字典序排序
一般排序的时候都以为如果是升序就不用写compare函数,然而js中的arr.sort()是按字典序排序的,这就导致你如果数组中都是非负数用sort可以得到你想要的效果,但是有负数的话就不对了。
比如 arr = [-1,-3,-5,7,4,-2] ; arr.sort() ;console.log(arr) ;
你会得到 [-1, -2, -3, -5, 4, 7]
所以要记得写compare函数,不要偷懒,写成匿名函数的形式最好 。
坑3:函数没有变量提升
其实这个一般不容易犯,主要当时我是和第二个坑结合了,我自定义compare函数的时候写的是 var compare = function(a,b){return a-b;} ,本来没错,但是我写在了sort的下面,于是sort找不到compare函数就按照默认的字符顺序排列,搞的
我还以为是compare定义出现了问题。函数中定义变量是有“变量提升”的,就是说你在函数的任何位置定义var a都相当于在函数最开始的地方定义了var a,所以用习惯了之后就忘了函数不是变量,没有变量提升了。你在下面定义会找不到。所以写compare函数的时
候写成匿名函数吧。
坑4:浮点数运算不精确
试试console.log(0.3-0.2)你会发现是0.09999999999999998。我发现只要有奇数的浮点数存在,js就无法精确计算。这应该跟浮点数在js中存储的机制有关系。这个问题没有太好的解决办法,一般来讲答案是要求保留2位或3位小数的,利用toFixed(n)直接保留
n位就可以了,这个方法本来就是四舍五入的。但是总有些情况你可能不想四舍五入而是想取上下界什么的,这样就只能靠一些方法hack比如你想取前两位:(a*100-b*100)/100这样。
坑5:判断数组为空
判断数组为空时不能像变量一样直接用 if(!arr),因为数组不会像变量那样隐式转换,所以可以在你知道arr是个数组的情况下使用arr.length>0判断,但有些情况下可能那个变量还不是数组,就不能去length,所以网上看了一个比较周全的方法,就是先判断该对象到
底是不是数组类型的,然后再取长度判断
cass标注面积快捷键?
是快速标注吗?如果那就应该是 “qdim” ,其他就简单了 下面的提供参考,希望对你有帮助:
F1: 获取帮助
F2: 实现作图窗和文本窗口的切换
F3: 控制是否实现对象自动捕捉
F4: 数字化仪控制
F5: 等轴测平面切换
F6: 控制状态行上坐标的显示方式
F7: 栅格显示模式控制
F8: 正交模式控制
F9: 栅格捕捉模式控制
F10: 极轴模式控制
F11: 对象追 踪式控制
Ctrl+A:全选
Ctrl+B: 栅格捕捉模式控制(F9)
Ctrl+C: 将选择的对象复制到剪切板上
Ctrl+D:开/关坐标值
Ctrl+E:确定轴测图方向
Ctrl+F: 控制是否实现对象自动捕捉(f3)
Ctrl+G: 栅格显示模式控制(F7)
Ctrl+H:pickstyle
Ctrl+I:空
Ctrl+J: 重复执行上一步命令
Ctrl+K: 超级链接
Ctrl+L:正交开/关
Ctrl+M: 打开选项对话框
Ctrl+N: 新建图形文件
Ctrl+O: 打开图象文件
Ctrl+P: 打开打印对说框
Ctrl+Q:退出
Ctrl+R:空
Ctrl+S: 保存文件
Ctrl+T:数字化仪关
Ctrl+U: 极轴模式控制(F10)
Ctrl+V: 粘贴剪贴板上的内容
Ctrl+W: 对象追 踪式控制(F11)
Ctrl+X: 剪切所选择的内容
Ctrl+Y: 重做
Ctrl+Z: 取消前一步的操作
Ctrl+1: 打开特性对话框
Ctrl+2: 打开图象资源管理器
Ctrl+3:打开工具选项板
Ctrl+4:图纸集管理器
Ctrl+5:信息选项板
Ctrl+6: 打开图象数据原子
Ctrl+7:标记集管理器
Ctrl+8:超级计算器
Ctrl+9:隐藏/显示命令行
Ctrl+0:隐藏/显示快捷图标
AA: 测量区域和周长(area)
AL: 对齐(align)
AR: 阵列(array)
AP: 加载*lsp程系
AV: 打开 视图对话框(dsviewer)
SE: 草图设置
①捕捉和栅格
②极轴追踪
③对象捕捉
④动态输入
ST: 打开字体设置对话框(style)
SO: 绘制二围面( 2d solid)
SP: 拼音的校核(spell)
SC: 缩放比例 (scale)
SN: 栅格捕捉模式设置(snap)
DT: 文本的设置(dtext)
DI: 测量两点间的距离
OI: 插入外部对相
A: 绘圆弧
B: 定义块
C: 画圆
D: 尺寸资源管理器
E: 删除
F: 倒圆角
G: 对相组合
H: 填充
I: 插入
J:合并
K:空
L: 直线
M: 移动
N:空
O: 偏移
P: 移动
Q:空
R:redraw
S: 拉伸
T: 文本输入
U: 恢复上一次操做
V: 设置当前坐标
W: 定义块并保存到硬盘中
X: 炸开
Y:空
Z: 缩放
autocad中鼠标键(快捷键)功能使用详解
鼠标的功能!
二键式鼠标
左键 : 选择功能键(选象素 选点 选功能)
右键: 绘图区-----快捷菜单或[ENTER]功能
1.变量 SHORTCUTMENU 等于0或偶数---------[ENTER]
2.变量 SHORTCUTMENU为基数---------快捷菜单
3.或用于环境选项--------使用者设定---------快捷菜单开关设定
[shift]+右键:对象捕捉快捷菜单
三键式鼠标
左键 : 选择功能键(选象素 选点 选功能)
右键: 绘图区-----快捷菜单或[ENTER]功能
1.变量 SHORTCUTMENU 等于0或偶数---------[ENTER]
2.变量 SHORTCUTMENU 为基数---------快捷菜单
3.或用于环境选项--------使用者设定---------快捷菜单开关设定
中间键 :Mbuttonpan=1(系统默认值)
压着不放并拖曳 实现平移
双击 ZOOM ------E缩放成实际范围
[Shift]+压着不放并拖曳:作垂直或水平的实时平移
[Ctrl]+压着不放并拖曳:随意式实时平移
Mbuttonpan=0:对象捕捉快捷菜单
[Shift]+右键:对象捕捉快捷菜单
二键+中间滚轮鼠标
左键 : 选择功能键(选象素 选点 选功能)
右键: 绘图区-----快捷菜单或[ENTER]功能
1.变量 SHORTCUTMENU 等于0或偶数---------[ENTER]
2.变量 SHORTCUTMENU 为基数---------快捷菜单
3.或用于环境选项--------使用者设定---------快捷菜单开关设定
中间滚轮 1.旋转轮子向前或向后,实时缩放、拉近、拉远
2.压轮子不放并拖曳 实时平移
3.双击 ZOOM ------E缩放成实际范围
[Shift]+压轮子不放并拖曳 作垂直或水平的实时平移
[Ctrl]+压轮子不放并拖曳 随意式实时平移
Mbuttonpan=0 (系统默认值=1) 按一下轮子 对象捕捉快捷菜单
[Shift]+右键 对象捕捉快捷菜单
AutoCAD 命令
acad.pgp文件
我已经将其命令的内容翻译出来,希望对用快捷键的朋友有点帮助吧
3A, *3DARRAY
;三维阵列
3DO, *3DORBIT
;三维动态观察器
3F, *3DFACE
;曲面三维面
3P, *3DPOLY
;三维多段线
A, *ARC
;圆弧
ADC, *ADCENTER
;AutoCAD 设计中心
AA, *AREA
;查询面积
AL, *ALIGN
;将实体对象输出到ACIS文件中
AP, *APPLOAD
;加载应用程序
AR, *ARRAY
;阵列
-AR, *-ARRAY
;阵列
ATT, *ATTDEF
;定义属性
-ATT, *-ATTDEF
;修改定义属性
ATE, *ATTEDIT
;修改块属性
-ATE, *-ATTEDIT
;命令行修改块属性
ATTE, *-ATTEDIT
;命令行修改块属性
B, *BLOCK
;做块
-B, *-BLOCK
;修改块
BH, *BHATCH
;图案填充
BO, *BOUNDARY
;图案填充中的边界
-BO, *-BOUNDARY
;修改图案填充中的边界
BR, *BREAK
;打断
C, *CIRCLE
;画圆
CH, *PROPERTIES
;特性
-CH, *CHANGE
;不使用特性对话框进行特性修改
CHA, *CHAMFER
;倒角
COL, *COLOR
;指定当前图层颜色
COLOUR, *COLOR
;指定当前图层颜色
CO, *COPY
;复制选择
D, *DIMSTYLE
;标注样式
DAL, *DIMALIGNED
;对齐标注
DAN, *DIMANGULAR
;角度标注
DBA, *DIMBASELINE
;基线标注
DBC, *DBCONNECT
;数据库
DCE, *DIMCENTER
;圆心中心标记
DCO, *DIMCONTINUE
;连续标注
DDA, *DIMDISASSOCIATE
;删除选定择标注的关联性
DDI, *DIMDIAMETER
;直径标注
DED, *DIMEDIT
;编辑标注
DI, *DIST
;距离查询
DIV, *DIVIDE
;定数等分在线上加点
DLI, *DIMLINEAR
;线性标注
DO, *DONUT
;圆环
DOR, *DIMORDINATE
;标注坐标
DOV, *DIMOVERRIDE
;标注替代
DR, *DRAWORDER
;显示顺序
DRA, *DIMRADIUS
;半径标注
DRE, *DIMREASSOCIATE
;重新关联标注
DS, *DSETTINGS
;捕捉设置
DST, *DIMSTYLE
;标注样式
DT, *DTEXT
单行文本
DV, *DVIEW
;定义平行投影或透视视图
E, *ERASE
;删除
ED, *DDEDIT
编辑多行文字或文字
EL, *ELLIPSE
;椭圆
EX, *EXTEND
;延伸
EXIT, *QUIT
;退出
EXP, *EXPORT
;输出文件
EXT, *EXTRUDE
;实体拉伸
F, *FILLET
;倒圆角
FI, *FILTER
;对象选择过滤器
G, *GROUP
;建组
-G, *-GROUP
;用命令行编辑建立组
GR, *DDGRIPS
;选项
H, *BHATCH
;填充
-H, *HATCH
;用命令行填充
HE, *HATCHEDIT
;图案填充编辑
HI, *HIDE
;3D消隐
I, *INSERT
;插入块
-I, *-INSERT
;命令行插入块
IAD, *IMAGEADJUST
;图像调整
IAT, *IMAGEATTACH
;插入光栅图像
ICL, *IMAGECLIP
;剪裁图像
IM, *IMAGE
;图像管理器
-IM, *-IMAGE
;命令行方式图像管理器
IMP, *IMPORT
;插入其它格式文件
IN, *INTERSECT
;3D实体编辑交集
INF, *INTERFERE
;3D实体干涉
IO, *INSERTOBJ
;插入OLE对象
L, *LINE
;绘直线
LA, *LAYER
;管理图层和图层特性
-LA, *-LAYER
;用命令行管理图层和图层特性
LE, *QLEADER
;注释引线
LEN, *LENGTHEN
;修改对象的长度和圆弧的包含角
LI, *LIST
;查询
LINEWEIGHT, *LWEIGHT
;设置线宽
LO, *-LAYOUT
;命令行布局设置
LS, *LIST
;查询
LT, *LINETYPE
;加载、设置和修改线型
-LT, *-LINETYPE
;命令行设置、加载和修改线型
LTYPE, *LINETYPE
;加载、设置和修改线型
-LTYPE, *-LINETYPE
;命令行设置、加载和修改线型
LTS, *LTSCALE
;设置全局线型比例因子
LW, *LWEIGHT
;设置线宽
M, *MOVE
;移动
MA, *MATCHPROP
;匹配特性(扫把)
ME, *MEASURE
;定距等分
MI, *MIRROR
;镜像
ML, *MLINE
;多线
MO, *PROPERTIES
;特性
MS, *MSPACE
;从图纸空间切换到模型空间视口
MT, *MTEXT
;多行文本编辑器
MV, *MVIEW
;创建并控制布局视口
O, *OFFSET
;偏移
OP, *OPTIONS
;选项
ORBIT, *3DORBIT
;三维动态观察器
OS, *OSNAP
;对象捕捉
-OS, *-OSNAP
;命令行的对象捕捉
P, *PAN
;实时平移
-P, *-PAN
;命令行实时平移
PA, *PASTESPEC
PARTIALOPEN, *-PARTIALOPEN
;将选定视图或图层的几何图形加载到图形中
PE, *PEDIT
;编辑多段线和三维多边形网格
PL, *PLINE
;创建二维多段线
PO, *POINT
;创建点对象
POL, *POLYGON
;正多边形
PR, *OPTIONS
;特性
PRCLOSE, *PROPERTIESCLOSE
;关闭“特性”窗口
PROPS, *PROPERTIES
打开特性窗口
PRE, *PREVIEW
;打印预览
PRINT, *PLOT
;打印
PS, *PSPACE
;从模型空间视口切换到图纸空间
PTW, *PUBLISHTOWEB
;网上发布
PU, *PURGE
;清理文件
-PU, *-PURGE
;命令行的清理文件
R, *REDRAW
;刷新当前视口中的显示
RA, *REDRAWALL
;重画
RE, *REGEN
;重生成
REA, *REGENALL
;全部重生成
REC, *RECTANGLE
;恢复被 UNDEFINE 忽略的 AutoCAD 内部命令
REG, *REGION
;面域
REN, *RENAME
;重命名
-REN, *-RENAME
;命令行的重命名
REV, *REVOLVE
;实体旋转
RM, *DDRMODES
;草图设置
RO, *ROTATE
;旋转
RPR, *RPREF
;设置渲染系统配置
RR, *RENDER
;渲染渲染
S, *STRETCH
;拉伸
SC, *SCALE
;缩放
SCR, *scrīpt
;运行脚本
SE, *DSETTINGS
;对象捕捉设置
SEC, *SECTION
;实体 截面
SET, *SETVAR
;设置变量
SHA, *SHADE
;这个不知道是做什么的
SL, *SLICE
;实体剖切
SN, *SNAP
;规定光标按指定的间距移动
SO, *SOLID
;二维填充
SP, *SPELL
;拼写检查
SPL, *SPLINE
;样条曲线
SPE, *SPLINEDIT
;编辑样条曲线
ST, *STYLE
;文字样式
SU, *SUBTRACT
;实体编辑差集
T, *MTEXT
;多行文本
-T, *-MTEXT
;命令行的多行文本
TA, *TABLET
;数字化仪定点
TH, *THICKNESS
;显示图形统计信息、模式及范围
TI, *TILEMODE
;这个也不知道是做什么的
TO, *TOOLBAR
;自定义设置
TOL, *TOLERANCE
;创建形位公差
TOR, *TORUS
;实体圆环体
TR, *TRIM
;修剪
UC, *DDUCS
;命名UC
UCP, *DDUCSP
;正交UCS
UN, *UNITS
;图形单位
-UN, *-UNITS
;命令行图形单位
UNI, *UNION
;并集
V, *VIEW
;视图
-V, *-VIEW
;命令行设置视图
VP, *DDVPOINT
;三维视图视点预置
-VP, *VPOINT
;命令行三维视图视点预置
W, *WBLOCK
;写块
-W, *-WBLOCK
;命令行的写块
WE, *WEDGE
;实体楔体
X, *EXPLODE
;这个不用说了吧,爆开
XA, *XATTACH
;外部参照
XB, *XBIND
;绑定
-XB, *-XBIND
;命令行的绑定
XC, *XCLIP
;定义外部参照或块剪裁边界,并且设置前剪裁面和后剪裁面
XL, *XLINE
;构造线
XR, *XREF
;外部参照管理器
-XR, *-XREF
;命令行的外部参照管理器
Z, *ZOOM
;缩放
=====================
记住部分常用的就好哦!
觉得有用点个赞吧


还没有评论,来说两句吧...