精华内容
下载资源
问答
  • 这两天做了一个小项目,是一个文因互联文本分类的竞赛题目,但已经过期了,只是使用它的数据做一下。本次使用的RNN+LSTM模型,最终训练的正确率为87%,不过每次训练正确率有些差别,并且还有很多可调参数没有调整,...

    这两天做了一个小项目,是一个文因互联文本分类的竞赛题目,但已经过期了,只是使用它的数据做一下。本次使用的RNN+LSTM模型,最终训练的正确率为87%,不过每次训练正确率有些差别,并且还有很多可调参数没有调整,只是当一个练手的了。由于训练时间很长,完整的代码以及持久化的模型和字典在我的github上可以下载,当然也可以自己重新训练。
    本文的RNN结构主要使用了finch的结构,并在此稍微做了修改。
    本文使用到的模块:

    import tensorflow as tf
    import sklearn
    import numpy as np
    import pandas as pd
    import math
    import jieba
    import pickle
    import time
    from collections import Counter

    RNN+LSTM

    在此贴出实现RNN的代码:

    class RNNTextClassifier():
        def __init__(self,vocab_size, n_out, embedding_size=128, cell_size=128,
                     grad_clip=5.0,sess=tf.Session()):
            self.vocab_size = vocab_size
            self.embedding_size = embedding_size
            self.cell_size = cell_size
            self.grad_clip = grad_clip
            self.n_out = n_out
            self.sess = sess
            self._pointer = None
            self.buildgraph()
    
        def buildgraph(self):
            self.add_input_layer()
            self.add_wordembedding_layer()
            self.add_dynamic_rnn()
            self.add_output_layer()
            self.add_optimizer()
    
        def add_input_layer(self,):
            self.X = tf.placeholder(tf.int32, [None, None])
            self.Y = tf.placeholder(tf.int64, [None])
            self.X_seq_len = tf.placeholder(tf.int32, [None])
            self.keep_prob = tf.placeholder(tf.float32)
            self.lr = tf.placeholder(tf.float32)
            self._pointer = self.X
    
        def add_wordembedding_layer(self):
            embedding = tf.get_variable("encoder",
                                        [self.vocab_size,self.embedding_size],
                                        dtype=tf.float32,
                                        initializer=tf.random_uniform_initializer(-1.0,1.0))
            embedded = tf.nn.embedding_lookup(embedding, self._pointer)
            # self._pointer = tf.nn.dropout(embedded, keep_prob=self.keep_prob)
            self._pointer = embedded
    
        def lstm_cell(self):
            lstm_cell = tf.nn.rnn_cell.LSTMCell(num_units=self.cell_size,initializer=tf.orthogonal_initializer())
            return tf.nn.rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob= self.keep_prob)
    
        def add_dynamic_rnn(self):
            self.outputs, self.last_state = tf.nn.dynamic_rnn(
                cell=self.lstm_cell(),
                inputs=self._pointer,
                sequence_length=self.X_seq_len,
                dtype=tf.float32
            )
        def add_output_layer(self):
            self.logits = tf.layers.dense(self.last_state.h, self.n_out)
    
        def add_optimizer(self):
            self.loss = tf.reduce_mean(
                tf.nn.sparse_softmax_cross_entropy_with_logits(
                    logits=self.logits, labels=self.Y
                )
            )
            self.acc = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(self.logits, axis=1),self.Y),dtype=tf.float32))
            #gradient clipping
            params = tf.trainable_variables()
            gradients = tf.gradients(ys=self.loss, xs=params)
            clipped_gradients, _ = tf.clip_by_global_norm(t_list=gradients, clip_norm=self.grad_clip)
            self.train_op = tf.train.AdamOptimizer(self.lr).apply_gradients(zip(clipped_gradients, params))
    
        def fit(self, X, Y, val_data=None, n_epoch=10, batch_size=128, exp_decay=True,
                isshuffle=True, keep_prob=0.5):
            if val_data is None:
                print("Train %d samples" % len(X))
            else:
                print("Train %d samples | Test %d samples" % (len(X), len(val_data[0])))
            log = {'loss':[], 'acc':[], 'val_loss':[], 'val_acc':[]}
            global_step = 0
            self.sess.run(tf.global_variables_initializer())
            saver = tf.train.Saver()
            for epoch in range(n_epoch):
                if isshuffle:
                    X, Y = sklearn.utils.shuffle(X,Y)
                for local_step, ((X_batch, X_batch_lens), Y_batch) in enumerate(
                        zip(self.next_batch(X, batch_size), self.gen_batch(Y, batch_size))):
                    lr = self.decrease_lr(exp_decay,global_step, n_epoch, len(X), batch_size)
                    _, loss, acc = self.sess.run([self.train_op, self.loss, self.acc],
                                                 feed_dict={self.X:X_batch,
                                                            self.Y:Y_batch,
                                                            self.X_seq_len:X_batch_lens,
                                                            self.lr:lr,
                                                            self.keep_prob:keep_prob})
                    global_step += 1
                    if local_step % 50 == 0:
                        print("Epoch %d | Step %d%d | Train loss: %.4f | Train acc: %.4f | lr: %.4f" % (
                            epoch+1, local_step, int(len(X)/batch_size), loss, acc, lr
                        ))
                    log['loss'].append(loss)
                    log['acc'].append(acc)
    
                if val_data is not None:
                    val_loss_list, val_acc_list = [],[]
                    for (X_test_batch,X_test_batch_lens), Y_test_batch in zip(self.next_batch(val_data[0], batch_size),
                                                                              self.gen_batch(val_data[1],batch_size)):
                        v_loss, v_acc = self.sess.run([self.loss, self.acc],feed_dict={
                            self.X: X_test_batch, self.Y: Y_test_batch,
                            self.X_seq_len:X_test_batch_lens, self.keep_prob:1.0
                        })
                        val_loss_list.append(v_loss)
                        val_acc_list.append(v_acc)
                    val_loss, val_acc = self.list_avg(val_loss_list), self.list_avg(val_acc_list)
                    log['val_loss'].append(val_loss)
                    log['val_acc'].append(val_acc)
                    print("val_data loss: %.4f | val_data acc: %.4f" % (val_loss, val_acc))
            saver.save(self.sess,"c:/users/ll/desktop/model/model.ckpt")
            return log
    
        def predict(self, X_test, batch_size=128):
            batch_pred_list = []
            for (X_test_batch, X_test_batch_lens) in self.next_batch(X_test, batch_size):
                batch_pred = self.sess.run(self.logits,feed_dict={
                    self.X: X_test_batch,
                    self.X_seq_len: X_test_batch_lens,
                    self.keep_prob: 1.0
                })
                batch_pred_list.append(batch_pred)
            return np.argmax(np.vstack(batch_pred_list), 1)
    
        def pad_sentence_batch(self, sentence_batch, pad_int=0):
            max_lens = max([len(sentence) for sentence in sentence_batch])
            padded_seqs = []
            seq_lens = []
            for sentence in sentence_batch:
                padded_seqs.append(sentence + [pad_int] * (max_lens-len(sentence)))
                seq_lens.append(len(sentence))
    
            return padded_seqs, seq_lens
    
        def next_batch(self, arr, batch_size):
            for i in range(0, len(arr), batch_size):
                padded_seqs, seq_lens = self.pad_sentence_batch(arr[i:i+batch_size])
                yield padded_seqs, seq_lens
    
        def gen_batch(self, arr, batch_size):
            for i in range(0, len(arr), batch_size):
                yield arr[i: i+batch_size]
    
        def list_avg(self, l):
            return sum(l)/len(l)
    
        def decrease_lr(self, exp_decay, global_step, n_epoch, len_x, batch_size):
            if exp_decay:
                max_lr = 0.005
                min_lr = 0.001
                decay_rate = math.log(min_lr/max_lr) / (-n_epoch*len_x/batch_size)
                lr = max_lr*math.exp(-decay_rate*global_step)
            else:
                lr = 0.001
            return lr
    

    文本的输入及分词

    下面讲解的是数据的输入。它的训练数据是csv文件,第一列是类别标签,第二列是文本,即每行对应一个标签和相应的文本,总共11个类别。我是使用pandas读取,并进行文本的分词。由于分词时间比较长,所以我使用pickle把结果持久化。

    def load_data(file_in_path, pickle_text=True, pickle_out_path=None):
        '''
        file_in_path=".../input/training.csv"
        pickle_out_path=".../output/texting.txt"
        '''
        train_data = pd.read_csv(file_in_path, header=None, names=['ind', 'text'])
        texts = train_data['text']
        ind = train_data['ind']
        ind = np.asarray(ind)
        text1 = []
        for text in texts:
            text1.append(" ".join(jieba.cut(text)))
        text1 = [s.split(" ") for s in text1]
        if pickle_text:
            if pickle_out_path is not None:
                dictionary = {'ind':ind, 'texts': text1}
                with open(pickle_out_path, "wb") as f:
                    pickle.dump(dictionary, f)
            else:
                print("you should provide pickle_out_path")
    
        return ind, text1

    构建词典

    构建词典,首先提取文本的关键词,我使用的方法是TF-IDF抽取关键词。其中,count是一个Counter字典,countlist是一个包含Counter字典的列表。

    def _tf(word, count):
        return count[word] / sum(count.values())
    
    def _containing(word, countlist):
        return sum(1 for count in countlist if word in count)
    
    def _idf(word,countlist):
        return math.log(len(countlist)/(1+_containing(word, countlist)))

    我的想法是,对每行抽取一定数目的关键词(在代码中为row_key_word),把它加入到字典这个集合中,然后限制字典的大小(limits),我使用的为10000个词,并增加一个不在字典中的词的标志[UNK],最后把它们变成索引的形式,至此,已完成字典的构建。

    def add_dict(texts,row_key_word=5, limits=3000):
        countlist = []
        dictionary = set()
        word2index = dict()
        for text in texts:
            countlist.append(Counter(text))
        for count in countlist:
            tfidf = dict()
            for word in count:
                tfidf[word] = _tf(word, count) * _idf(word, countlist)
            sorted_word = sorted(tfidf.items(), key=lambda x: x[1], reverse=True)[:row_key_word]
            word = [w[0] for w in sorted_word]
            for w in word:
                dictionary.add(w)
            if len(dictionary) > limits+1:
                break
        for i, word in enumerate(dictionary):
            word2index[word] = i+1 #need add the unknown word, index 0
        word2index['UNK'] = 0
        return word2index

    文本转化为字典索引

    这一步要把分词后的文本转化为索引以feed到RNN模型中去,这一步还是比较耗时的,所以我进行了序列化,在这一步中可调的参数是每行提取关键字的个数(row_key_word)和字典的大小(limits),当然字典是越大越好,但是耗时也非常长。最终得到的是一个文本列表。

    def convert_text(texts,row_key_word=5, limits=20000, ispickle=False, pickle_out_path=None):
        textlist = []
        word2index = add_dict(texts, row_key_word, limits)
        for text in texts:
            wordlist = []
            for word in text:
                if word in word2index:
                    wordlist.append(word2index[word])
                else:
                    wordlist.append(word2index["UNK"])
            textlist.append(wordlist)
        if ispickle is not None:
            with open(pickle_out_path, 'wb') as f:
                pickle.dump(textlist, f)
        return textlist

    训练文本

    #ind, texts = load_data(".../input/training.csv", True, ".../output/text.txt")
    #id, test_texts = load_data(".../input/testing.csv",True, ".../output/test_texts.txt")
    with open(".../output/text.txt", 'rb') as f:
        train_data = pickle.load(f)
    with open(".../output/test_texts.txt", 'rb') as f:
        test_data = pickle.load(f)

    这一步载入数据是比较耗时间的,因为它要进行分词,所以可以持久化。在这里展示的是使用序列化的文件。

    ind, train_texts = train_data['ind'], train_data['texts']
    ind -= 1
    _, test_texts = test_data['ind'], test_data['texts']

    这一步把类别标签和文本分开以容易处理文本。ind之所以减去1,是因为给定的数据标签是从1开始的,然而训练及预测的时候是从0开始的,所以为了对应应该减去1,但最后输出的时候还要变成原来从1开始的标签。

    接下来是把文本转换为字典中对应的索引:

    # textlist_train = convert_text(train_texts, row_key_word=7, limits=10000,
    #                         ispickle=True, pickle_out_path=".../output/textlist_train.txt")
    # textlist_test = convert_text(test_texts, row_key_word=7, limits=10000,
    #                         ispickle=True, pickle_out_path=".../output/textlist_test.txt")
    # print(textlist_train[:2])
    with open(".../output/textlist_train.txt", 'rb') as f:
        textlist_train = pickle.load(f)
    with open(".../output/textlist_test.txt", 'rb') as f:
        textlist_test = pickle.load(f)

    同样是使用的序列化后的文件,当然也可以自己改变字典的大小和每行抽取的关键字数。

    最后就是使用RNN进行训练,预测testset的类别,并写入csv文件

    rnn = RNNTextClassifier(10004, 11)
    t1 = time.time()
    log = rnn.fit(textlist_train,ind)
    t2 = time.time() - t1
    print(t2)
    result = rnn.predict(textlist_test)
    result = result + 1 #to be the labels needed
    t3 = time.time() - t2
    print(t3)
    print("training time: %f, testing time: %f" % (t2, t3))
    print(result)
    result = pd.DataFrame(list(result))
    result.to_csv(".../output/result.csv", sep=",")

    至此,一个完整的处理文本分类数据的过程就结束了。不过我没有进行参数的调整,因此该模型还可以进行优化。

    展开全文
  • 一直想重新调整自己的博客,想尽可能写的前后连贯一点,同时希望自己写的更通熟易懂些,可是迟迟没有动笔修改曾经的博文,哎,还是慢慢跟着自己的理解再修改之前的文章吧,今儿就写写关于深度学习训练中最关键的一步...
             好久没有写博客,一直想重新调整自己的博客,想尽可能写的前后连贯一点,同时希望自己写的更通熟易懂些,可是迟迟没有动笔修改曾经的博文,哎,还是慢慢跟着自己的理解再修改之前的文章吧,今儿就写写关于深度学习训练中最关键的一步,数据问题,也就是样本库的建立!来记录一下自己的心得以及思考!

    绪言

            为啥要写数据,又说数据是深度学习中最关键的一步呢?算法是重要,但是呢,真正实际工程中,业务需求 > 数据  > 算法!根据业务需求来选择适合的数据,我们对数据的处理也是来源业务的需求!而数据选择何种增广方式也需要根据实际做的项目来确定的,举个例子!比如:做车型识别,大家可以想象到,车型识别是干嘛的?嗯,“型”是什么?就是形状有所差别吧!很多人可能已经想到了,对,处理数据是,我们就先从几何形状来增广数据!那么如果是车身颜色呢?又有小伙伴会想到是不是先从颜色来入手来增广数据呢?对了嘛,就是的呢!不过,你不能排除其他的影响,你可以先从你可以想到的角度入手,也要测试一下其他的变化方式!比如说,车型对形状敏感,做完形状之后,你来改变一下亮度或者对比度的变化等等!
            本文代码实现是用的Matlab!

    一, 原始样本的采集制作

          训练的第一步就是采集数据制作样本!这个我觉得还是挺关键的,我看了很多视频课以及一些博客什么的,很多没有在这里写一些东西,来告知我们一些注意的问题,就是尽可能能保持现实生活中真实的模样,那么是增广的数据也需要注意模拟现实生活中数据模样,通熟一点就是,贴近现实生活场景!
    举例子:
            我们需要从图a中截取出Bus,扣出来的图片,当我们送去训练的时候,还需要将所有样本调整到一样的大小!假定我们调整的到128*128大小,如果我们不做任何补缺部分,我们就会出现图b中的左边的图,这个图是发生改变的,也就是说形状发生了改变与真实数据有了偏差!但是我们在确实部分有0来补缺,就会像图b中的左图!如果你来选择你会选择哪一张图呢?毋庸置疑,图b中的左图作为训练数据,同时这个数据还模拟了现实生活中那些被遮挡的数据,你说是不是呢?从这里你有没有得到一个启发,就是如果这是一个完整的车,你可不可以通过将部分置黑来起到数据增广的作用呢?

        
                                                                                                                                            图 a 
         
    图 b



    二, 数据增广

           在不改变图像类别的情况下,增加数据量,能提高模型的泛化能力!自然图像的数据增广方式包括很多!从几何角度来看,常用的有:水平翻转(也就通差说的是镜像), 一定程度的位移,裁剪,旋转等!从像素变换来看,常用的有:颜色抖动(color jittering),增加噪声,例如椒盐噪声,高斯噪声等。此外还可以尝试多种操作的组合, 例如同时做旋转和随机尺度变换,此外还可以把每个patch中所有像素在HSV颜色空间中的饱和度和明度提升0.25-4次幂方,乘以0.7-1.4之间的一个因子,再加一个-0.1-0.1之间的值。同样你可以在色调通道(H)对每张图片或patch的所有像素增加一个-0.1-0.1之间的值。

    1. 几何变换

        (1)翻转
                例如:水平翻转,竖直翻转!其实翻转也不是随意翻转的,要根据实际情况来翻转,比如,关于人脸,你上下翻转了就变成倒的人脸了,这个就没有了实际意义,如果是左右翻转了,也没有太大的实际意义,因为人脸是对称的,你翻转之后还是一样的!但是对于那些没有对称结构的物体图片,你做翻转还是挺有作用的,就相当于有两条数据了啊!不过你,你做测试的时候,可以看看对这个翻转数据敏感不敏感,如果敏感,你就把那些检测错误的数据添加到样本库,或者以低于某个概率的样本增加到样本库!这就起到它的作用了!
    matlab代码实现:
    bmp = imread(filname);
    I = fliplr(bmp);
    filename是图片的文件名路径;镜像操作之后的图片如下图所示:
          (2)平移
                   这个位置的移动,模拟了现实生活中的那些图片不居中的情况,发生位置的扰动!
    matlab代码实现:
    bmp = imread(filename);  %读入图片
    se= translate(strel(1), [y, x]);
    Img = imdilate(bmp, se); 
    strel用来创建形态学结构元素;
    translate(se, [y, x])在原结构元素se上进行上下偏移,以及左右偏移,y>0 是向下移动,y<0是向上移动;x>0是向左,x<0是向右;
    imdilate是形态学膨胀。
    平移之后的图片,最左边是原图,中间是向下以及向左平移,最右边的是向上以及向左平移的结果!


         (3)部分置黑
                 这个数据模拟了那些被部分遮挡的数据样本
    matlab代码实现:
    I = imread(filename);
    Img = I;
    Img(1:up, left:right,:) = 0;
    Img(down:row, left:right,:) = 0;
    Img(up:down, 1:left,:) = 0;
    Img(up:down, right:col,:) = 0;


         (4)旋转
      matlab代码实现:
    bmp = imread(filename);
    I = imrotate(bmp, 10, 'bilinear', 'crop'); 
    
    这里10只是一个数值,可以改为你想旋转的度数。正数向右,负数向左!
    这个比较简单,如图所示:
        (5)截切
    matlab代码实现:
    RGB=imread('1,jpg');
    RGB1=imcrop(RGB,[60,255,400,425]);
    注意,剪切的时候,在原始的数据上剪切!其实,我觉得这个功能有类似于平移的功能!发生一些位置的偏移!
         (6)缩放(scale)
    这个其实就是现实图片放大或者缩小功能!这里的缩放不同于训练前数据统一调整到一样大小的缩放!这只是在原始中稍微改动一些截取的区域,也就是增加或者较少背景的调整,最终还是需要将这些数据调整到你规定的训练数据大小的!

          几何变换暂时先写这么多,后续再进行补充!

    2,像素变换

        (1)增加噪声和滤波

    matlab代码实现:
    bmp = imread(filename);
    I1 = imnoise(bmp, 'salt & pepper'); %椒盐噪声
    w = [1 2 1; 2 4 2; 1 2 1];
    I2 = imfilter(bmp, w, 'corr', 'replicate'); %高斯噪声
    w = [1 1 1; 1 1 1; 1 1 1] / 9;
    I3 = imfilter(bmp, w, 'corr', 'replicate'); %平均平滑
    I4 = medfilt2(bmp, [3, 3]);  %中值滤波

    噪声的方式也比较多,比如椒盐噪声,高斯噪声,中值滤波等等!
       
        (2)变换通道
                就是调整RBG三个通道的顺序
    matlab代码实现:
    bmp = imread(filename);
    I1 = cat(3, bmp(:,:,3), bmp(:,:,2), bmp(:,:,1));
    I2 = cat(3, bmp(:,:,1), bmp(:,:,3), bmp(:,:,2));
    
         
        (3)调整对比度和亮度
             这个模拟了不同光照的影响!这个暂时先不讲了,百度太多了,再写就是重复工作(不过,不排除之后还是补充写一下,哈哈)

    其实关于数据像素除了的也还有,就如我刚刚在开头写的都已经帮大家列出来了!
      

    结束语

           写这篇文章的目的其实为了梳理一下,在数据处理方便的方法有哪些,如果大家还有一些好的方法,希望大家可以指点我一下!知识在于分享,你知道一个给我一个,我知道一个分享一个给你,那么我们就有两个知识!


    展开全文
  • 杆言杆摄话ps 受疫情影响,很多影友不能外出采风,只能在家静修。应影友要求,给大家在...于是我将下载的文件整理后传给有兴趣的影友,为了方便实用,我做了一个简单的说明,希望能给影友们调整图片带来帮助。 Ad...

    c8e32ceece45ec89ee28ebd63875c16f.gif

    83cf2e8daced07abbee925b0d3996655.gif

    杆言杆摄话ps

    2c6f48524273a1cb30fec17c34d32d85.png

    a5164082039b944bb78634606e3c775d.gif

        受疫情影响,很多影友不能外出采风,只能在家静修。应影友要求,给大家在网上搞起摄影公益课堂直播。在互动中,知道很多影友还没有安装Adobe相关插件,尤其是简单实用的ACR,有些影友也没接触过。正好Adobe公司升级Adobe Camera Raw。于是我将下载的文件整理后传给有兴趣的影友,为了方便实用,我做了一个简单的说明,希望能给影友们调整图片带来帮助。

    59dfff5b974ed0fcd2e5aa649eec26c8.png

    3cc625a44154aa140099230f74baf7b3.png

        Adobe Camera Raw作为通用型RAW处理引擎是图像处理软件老大Photoshop配置的插件,并且Adobe公司经常根据新发布的相机来更新版本,是众多形色主义会员的首选,简称ACR.最近更新到12.2版,效果有明显提升。

    c019bbd0b6ee9df139858e1aad8a3942.png

      时下相机市场风云变幻,不同数码相机所生成的RAW文件也千差万别,对于摄影师们来说,处理RAW文件实在是一个令人头疼棘手的问题。Adobe Camera Raw可以很轻易解决这个问题,有了它,就能够在熟悉的Photoshop界面和Adobe Bridge打开并编辑这些RAW文件了。

       Adobe camera raw 12.2中文版可以轻松解释RAW这种相机原始数据文件,并且允许用户导入和增强原始格式图像,比如设置图片显示的比例、显示的色调、自动美化图片、手动设置对比对、曝光、白色、黑色、阴影等功能,是用户处理raw文件的实用帮手。

       全新的Adobe camera raw 12.2中文版功能进行了全面升级和优化,能够为其中的每个应用程序提供了导入和处理相机原始数据文件的功能,也可以使用Camera Raw来处理JPEG和TIFF文件。新版本增加了新相机的支持并修复了一些问题。

      Adobe camera raw 12.2中文版已经支持大部分主流相机,可以让用户在PS中处理各种形态的RAW文件,非常好用。软件可用于导入和增强原始图像.

    6964a6e0829dc92155a4c9a38dde3a70.png

     Adobe camera raw 12.2中文版主要更新:

    1、增强了 GPU 支持,以加速图像编辑对于包含多处调整的照片和高分辨率显示器(4K 及更高),GPU 加速可以显著加快图像处理速度。您可以在 Camera Raw 偏好设置的性能选项卡中,在受支持的系统上启用新的 GPU 加速功能。

    3f981af1b8074e778983cb9899d076ba.png

    2、360 度全景图中的边缘感知编辑以前,在对 360 度全景图进行调整时,可能会导致合并后的边缘出现接缝,尤其是在进行“清晰度”或“去除薄雾”编辑操作时。从此版本开始,即使您在调整“清晰度”或“去除薄雾”时,也可以对 360 度全景图进行无缝编辑。

    59d1b816ff7e7e49eee684eb88fd4b85.png

     Adobe camera raw 主要功能

    1:调整颜色颜色调整包括白平衡、色调以及饱和度。您可以在“基本”选项卡上进行大多数调整,然后使用其它选项卡上的控件对结果进行微调。如果希望 Camera Raw 分析图像并应用大致的色调调整,请单击“基本”选项卡中的“自动”。

    9ceb5b2fcc284d7d5600f6aca7f60817.png

    2:要应用上一个图像使用的设置,或要应用相机型号、相机或 ISO 设置的默认设置,请从“Camera Raw 设置”菜单  中选择相应的命令。

    2921bc4fb84321e6962ee2ee4324bff2.png

    3:进行其它调整和图像校正使用“Camera Raw”对话框中的其它工具和控件执行如下任务:对图像进行锐化处理、减少杂色、纠正镜头问题以及重新修饰。

    c019bbd0b6ee9df139858e1aad8a3942.png

    4:将图像设置存储为预设或默认图像设置。要随后将相同的调整应用于其它图像,请将这些设置存储为预设。要将调整存储为默认设置以应用于来自特定相机型号、特定相机或特定 ISO 设置的所有图像,请将图像设置存储为新的 Camera Raw 默认值。

    ad2e0bb5705bd20fbff14684617d8061.png

    5: Photoshop 设置工作流程选项。设置选项以指定从 Camera Raw 中存储图像的方式以及指定 Photoshop 应该如何打开这些图像。可通过单击“Camera Raw”对话框中图像预览下方的链接,访问“工作流程选项”设置。

    a948236485190ef6a12eec7098526513.png

    6:存储图像,或者在 Photoshop 或 After Effects 中打开它。 Camera Raw 中调整图像完毕后,可将调整应用于相机原始数据文件、在 Photoshop 或 After Effects 中打开经过调整的图像、将经过调整的图像存储为其它格式或者取消并放弃调整。如果从 After Effects 中打开“Camera Raw”对话框,则“存储图像”和“完成”按钮不可用。

    52d9a2757e07652894a0269d976e0ba9.png

    camera raw 12图像调整选项卡包括以下各项:

    1、基本 调整白平衡、颜色饱和度以及色调。

    9ed7929b430620d2bd1da18d66cf4415.png

    2、色调曲线 使用“参数”曲线和“点”曲线对色调进行微调。

    9be039f27e1f9c1c6a825b348a1769bd.png

    3、细节 对图像进行锐化处理或减少杂色。

    814dbef50328e0baf7ef0d1c070e7da8.png

    4、HSL/调整使用“色相”、“饱和度”和“明亮度”调整对颜色进行微调。

    b755ae378a01db358372d0dc33518313.png

    5、分离色调 为单色图像添加颜色,或者为彩色图像创建特殊效果。

    6964a6e0829dc92155a4c9a38dde3a70.png

    6、镜头校正 补偿相机镜头造成的色差、几何扭曲和晕影。

    f9285c48851276b37ad19363598083e8.png

    7、效果 模拟胶片颗粒或应用裁切后晕影。

    5bc79710dfad356196f3b2bdcb282742.png

    8、相机校准 将相机配置文件应用于原始图像,用于校正色调和调整非中性色,以补偿相机图像传感器的行为。

    0fdbfc61868213c5fd772f459f86b8e6.png

    9、预设 将多组图像调整存储为预设并进行应用。

    18aa77ad4bd8dfc06989ffe67c4821bf.png

    10、快照 创建照片的多个版本,记录它在编辑过程中任意时间的状态。

    2b23258d4cf8fbfce9a3b3644a657f08.png

    ·  Camera Raw安装方法(以64位系统为例)

     退出所有 Adobe 应用程序。

    1、下载解压,得到adobe camera raw 12中文版,直接安装即可

    ad25e27a2ba77344013d9e03259941ed.png

    2、成功安装即可免费使用

    9c94b2d6ee2b2156b9183cfcd6e03f07.png

    系统要求

    macOS 10.13 至 10.15、Microsoft® Windows® 7 Service Pack 1 或 Windows 10(版本 1703 或更高版本)

    好吧,最后请关注留言索取下载链接。

    以Adobe Bridge打开Adobe camera raw 12.2处理接片为例说说如何使用:

    1:打开Adobe Bridge

    13da454626311da6d3d06fe775544a35.png

    2:选中已拍好的接片素材,点击鼠标右键,点击“在 camera raw中打开”

    dca4350a9afeeff945e141515cf54164.png

    3:点击左上角“全选”

    ab862f2f02118b4dbe86f970f7f7ba85.png

    4:再点击“合并到全景图”。

    107c6613e852f20b880fb63abadcb509.png

    5:不要急,慢慢的已经开始自动连接拍好的图片。

    8fb3201c7707430b5918d2b8b6483383.png

    6:根据需要,点击“填充边缘”,

    c9da71d890423244b89f458eb5fd66a1.png

    7:然后点击“合并”“保存”

    2e74ca72d621c5aaaea77c1598435832.png

    8:自动接片后,就是这个样子。

    38544e3bbff2a100514efc04d4c0311a.png

    9:可以选择打开“预设”调整图片,在预设里找到自己喜欢的色调,图片会一键调色。

    1ac40e65e664b533dc9b854f63898178.png

    注:一些预设需要自己加入,以后我会慢慢给大家说明,并整理一些实用的预设送给喜欢ps的影友。

    7644e025f81a9277e1af0fcf059cf0bd.gif

    ◆ ps2020没那么神 别听忽悠 还有很多不方便 所谓黑科技是更简单更好用的Photoshop Elements2020

    如何

    下载

    14da42472a40b6eb10f5894d5a95a1a8.png

      首先关注本公众号,然后打开下面的链接博文(卧龙谷的水),在博文的下面留言:声明已关注本公众号,需要Adobe camera raw 12.2,然后留下信箱,工作人员会把下载链接发给你。

    链接文章:

       婺源不止有油菜花 还有让人流连忘返的卧龙谷 这组图片我是这样处理的

    6ec28a51bcf83111d89f65ccb203233b.png

    fe02e72275eb4730b3d5f47454f182df.gif92c057ee11246005f8009fd9dc226f86.gif
    展开全文
  • 组学数据图谱前处理

    2020-07-29 18:00:35
    由于经常遇到坑,其他方法也有局限性,选择了这种方法的原始数据处理,里面的参数还需要根据实际图谱进行调整。 基于R的XCMS包进行图谱原始数据处理,版本3.6以上 安装XCMS包,最新的版本 if (!requireNamespace...

    由于经常遇到坑,其他方法也有局限性,选择了这种方法的原始数据处理,里面的参数还需要根据实际图谱进行调整。

    1. 基于R的XCMS包进行图谱原始数据额处理,版本3.6以上 安装XCMS包,最新的版本
    if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
    BiocManager::install("xcms")
    Library(XCMS)
    

    1. 导入数据,原始数据是.RAW文件,需转换为mzXML文件,依靠 ProteoWizard并读取所有的.mzXML文件
    f.in <- list.files(path="D:\\XSHPCOS1",pattern=".mzXML",recursive = TRUE,full.names=TRUE)
    
    1. 数据信息分组
    pd <- data.frame(sample_name = sub(basename(f.in), pattern = ".mzXML",replacement = "", fixed = TRUE),sample_group = c(rep("H", 104), rep("LC", 43)),stringsAsFactors = FALSE)
    raw_data <- readMSData(files = f.in, pdata = new("NAnnotatedDataFrame", pd), mode = "onDisk")
    
    1. 峰检测
    cwp <- CentWaveParam(snthresh = 3, noise = 10, ppm = 100,peakwidth = c(3, 8))
    xdata <- findChromPeaks(raw_data, param = cwp)
    
    1. 峰对齐及分组,方法有很多种,看具体所需
    pdp <- PeakDensityParam(sampleGroups = xdata$sample_group,minFraction = 0.2)
    xdata <- groupChromPeaks(xdata, param = pdp)
    
    1. 峰补齐,这一步可以不要,后续数据处理可进行不同的峰缺失值处理
    xdata <- fillChromPeaks(xdata)
    

    7.合并有用信息,包括m/z信息,RT信息,峰面积等

    feature1<-featureDefinitions(xdata)
    feature1<-feature1[,1:9]
    feature2<-featureValues(xdata, method = c("medret", "maxint","sum"), value = "into", intensity = "into", filled = TRUE,missing = NA)
    feature.table <- cbind(feature1, feature2)
    

    8.写入csv文件

    write.csv(feature.table,"D:\\proteomics analysis\\1.csv")
    

    下期再见,有需要其他组学分析的方法可评论,我努力去完成,哈哈哈
    如有安装问题,有偿咨询哈,联系方式QQ: 1194452793

    展开全文
  • 在数据处理之前,浏览一下原始数据,看数据的好坏。 Plot - Channel data(scroll) 会打开eegplot()窗口,在窗口中可以用Settings和Display的一些选项调整图像: Time range to display(一个窗口的x轴范围); ...
  • 可能会导致点周围的曲面补丁偏离原始曲面,因此通常需要通过以下步骤对3D扫描仪获得的数据进行原始点云数据处理: 1.去除噪声点常见的检查方法是在图形终端上显示点云,或生成曲面,并使用半交互式半自动平滑方法...
  • 2013-10-19 ...本节,对原始数据data不做处理,只是通过调整坐标系scale的方法来放大视图,得到合适的结果。 1. 修改data的声明定义 为了防止数据丢失,对data数据的类型调整为float,即把Point改成Po
  • 文章目录TensorFlow图像数据处理之图像预处理TFRecord输入数据格式为什么要把数据转化为TFRecord格式TFRecord样例程序图像数据处理TensorFlow图像处理函数输出原始矩阵和原始图像对图像进行大小调整对图像进行按...
  • 主要包括1)矢量流程图绘制(流程图、机制图、封面图、论文摘要图)2)图片类数据处理(色差调整、图片规整、图片修复)3)数值类数据绘制(各类数值类数据的制图)4)数据排版制图(用于论文排版、SCI投稿)5)数据统计(原始数据...
  • Canoco是一款简单好用的生态数据处理软件,该软件为4.5版本,如果你对该版本有需求的话,可以下载体验,它是一个在生态学及几个相关领域内使用ordination methods来进行多变量统计分析的最常用的程序包,为生态数据...
  • Python中的CT数据处理 概述 CTPy是Python函数的集合,可帮助从代表3D体积的2D断层图像堆栈到根据其灰度值分割为用户定义区域的相同体积。 这些功能基于构建,可帮助用户实现以下目标: 加载代表整个数据集切片的...
  • python数据处理list补零问题

    千次阅读 2020-06-03 14:41:02
    近日在调整代码时遇到一...此处对x_进行补零时,x列表内容同样补零,在最终网络返回时,这种操作修改了原始输入x,如果不进行循环操作,改使用不会被发现,一旦使用了循环,则会出现输入数据的变化。 修改方法: ...
  • //调整使用占位符进行处理,时间:2017/9/29 string strql = @"select * from SYS_User where username=@username and userpwd=@userpwd "; //创建连接对象 SqlConnection con ...
  • Kettle处理300万条数据-问题整理

    千次阅读 2019-05-09 06:26:31
    Kettle处理300万条数据。 初始配置都没有更改,运行,一直报timeout。问题定位:表输入,读取来源数据数据量太大报错。 进行以下过程进行优化: 1.调整java内存占用为最大 2.调整表输出线程,将线程数调整为8 3....
  • SincNet是用于处理原始音频样本的神经体系结构。 这是一种新颖的卷积神经网络(CNN),它鼓励第一个卷积层发现更多有意义的滤波器。 SincNet基于参数化的Sinc函数,这些函数实现了带通滤波器。 与学习每个滤波器的...
  • 一个模型所能提供的信息一般来源于两个方面,一是训练数据中蕴含的信息;...先验信息也可以直接施加在数据集上,即根据特定的先验假设去调整,变换或扩展训练数据,让其展现出更多更有用的信息,以利...
  • 主要包括1)矢量流程图绘制(流程图、机制图、封面图、论文摘要图)2)图片类数据处理(色差调整、图片规整、图片修复)3)数值类数据绘制(各类数值类数据的制图)4)数据排版制图(用于论文排版、SCI投稿)5)数据统计(原始数据...
  • 由于DS9(另一个查看和处理FITS图像的软件)可以更好地处理彩色地图缩放,因此我有了一个想法:使用DS9打开FITS文件来调整图像的颜色映射将此图像保存到PNG文件中在matplotlib中加载这个PNG文件,并从原始FITS文件中...
  • Camera Raw是Photoshop CC 2019的一个组件,它在处理照片时,不仅可以读取数码相机的原始数据,而且不会损坏照片的原始数据,可以最大限度地保留照片细节。 1. 认识数码照片处理大师Camera RawCamera Raw是专门处理...
  • Resize Sense是适用于Mac的灵活批处理图像处理实用程序。消除了调整,裁剪,拉直,旋转,翻转和重命名许多图像所需的冗长乏味的工作!一次编辑多个图像中的IPTC甚至EXIF元数据。Resize Sense for Mac软件介绍Resize ...
  • 主要包括1)矢量流程图绘制(流程图、机制图、封面图、论文摘要图)2)图片类数据处理(色差调整、图片规整、图片修复)3)数值类数据绘制(各类数值类数据的制图)4)数据排版制图(用于论文排版、SCI投稿)5)数据统计(原始数据...
  • 主要包括1)矢量流程图绘制(流程图、机制图、封面图、论文摘要图)2)图片类数据处理(色差调整、图片规整、图片修复)3)数值类数据绘制(各类数值类数据的制图)4)数据排版制图(用于论文排版、SCI投稿)5)数据统计(原始数据...
  • 工作原理白平衡是一个很抽象的概念,最通俗的理解就是让白色所成的像依然为白色,那其他景物的影像就会接近人眼的色彩视觉习惯。调整白平衡的过程叫做白平衡...色温曲线色温的概念,并且知道sensor原始图像中的白色...
  • 主要包括1)矢量流程图绘制(流程图、机制图、封面图、论文摘要图)2)图片类数据处理(色差调整、图片规整、图片修复)3)数值类数据绘制(各类数值类数据的制图)4)数据排版制图(用于论文排版、SCI投稿)5)数据统计(原始数据...
  • 主要包括1)矢量流程图绘制(流程图、机制图、封面图、论文摘要图)2)图片类数据处理(色差调整、图片规整、图片修复)3)数值类数据绘制(各类数值类数据的制图)4)数据排版制图(用于论文排版、SCI投稿)5)数据统计(原始数据...
  • 图像编码处理 将图像转为一个三维矩阵,并使用三维...import matplotlib.pyplot as plt# 读取原始图像数据 image_raw_data = tf.gfile.FastGFile("/tensorflow_google/cat.jpg", 'rb').read()with tf.Session() as s
  • 本示例说明了如何通过重新映射数据值以填充整个可用强度范围[0,255...并排显示原始图像和调整后的图像。请注意,调整后的图像对比度增加。 imshowpair(I,J,'montage')绘制调整图像的直方图。请注意,调整后图像的直...
  • 主要包括1)矢量流程图绘制(流程图、机制图、封面图、论文摘要图)2)图片类数据处理(色差调整、图片规整、图片修复)3)数值类数据绘制(各类数值类数据的制图)4)数据排版制图(用于论文排版、SCI投稿)5)数据统计(原始数据...
  • disp('原始数据不服从正态分布'); disp(i); end %%%%%%%%%%%%%%%%%%%% [mu(i),sigma(i)]=normfit(data1(i,:)); a(:,i) = mu(i) + sqrt(sigma(i)) .* randn(94,1); [h(i,:),sig(i,:),ci(i,:)]=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 435
精华内容 174
关键字:

原始数据调整处理