<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jhsignal的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/jhsignal</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; jhsignal]]></copyright><item><title><![CDATA[剑指 Offer 57 - II. 和为s的连续正数序列（python）]]></title><link>https://blog.csdn.net/jhsignal/article/details/119791270</link><guid>https://blog.csdn.net/jhsignal/article/details/119791270</guid><author>jhsignal</author><pubDate>Wed, 18 Aug 2021 23:38:40 +0800</pubDate><description><![CDATA[剑指 Offer 57 - II. 和为s的连续正数序列
输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
示例 1：
输入：target = 9
输出：[[2,3,4],[4,5]]
示例 2：
输入：target = 15
输出：[[1,2,3,4,5],[4,5,6],[7,8]]
题解;
class Solution:
    def findContinuousSequence(self,]]></description><category></category></item><item><title><![CDATA[二分查找法剖析]]></title><link>https://blog.csdn.net/jhsignal/article/details/117711036</link><guid>https://blog.csdn.net/jhsignal/article/details/117711036</guid><author>jhsignal</author><pubDate>Tue, 08 Jun 2021 17:43:49 +0800</pubDate><description><![CDATA[一、你真的了解二分法吗？
​		二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始，如果中间元素正好是要查找的元素，则搜索过程结束；如果某一特定元素大于或者小于中间元素，则在数组大于或小于中间元素的那一半中查找，而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空，则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
举个栗子

给定一个排好序（升序）的列表与待查找的关键字，成功则返回其索引，失败则返回-1

def search(list, key):
    l]]></description><category></category></item><item><title><![CDATA[pytorch中的nn.CrossEntropyLoss()损失]]></title><link>https://blog.csdn.net/jhsignal/article/details/117474902</link><guid>https://blog.csdn.net/jhsignal/article/details/117474902</guid><author>jhsignal</author><pubDate>Wed, 02 Jun 2021 17:25:04 +0800</pubDate><description><![CDATA[在使用pytorch深度学习框架，计算分类损失时经常会遇到这么一个函数nn.CrossEntropyLoss()，该损失函数结合了nn.LogSoftmax()和nn.NLLLoss()两个函数。它在做分类（具体几类）训练的时候是非常有用的，如下我将对该函数的原理使用代码和实例进行分析。
    
首先输入是size是(minibatch,C)。这里的C是类别数。损失函数的计算如下：

损失函数中也有权重weight参数设置，若设置权重，则公式为：

注意这里的标签值class，并不参与直接计算，而是作为一]]></description><category></category></item><item><title><![CDATA[Faster-rcnn篇三-RNP网络anchors生成]]></title><link>https://blog.csdn.net/jhsignal/article/details/117301229</link><guid>https://blog.csdn.net/jhsignal/article/details/117301229</guid><author>jhsignal</author><pubDate>Wed, 26 May 2021 18:58:51 +0800</pubDate><description><![CDATA[生成一个batch图像的所有anchors信息,shape为[b,21420,4]
anchor_sizes = ((32,), (64,), (128,), (256,), (512,))
aspect_ratios = ((0.5, 1.0, 2.0),) * len(anchor_sizes)
rpn_anchor_generator = AnchorsGenerator(anchor_sizes, aspect_ratios）
anchors = self.anchor_generator(imag]]></description><category></category></item><item><title><![CDATA[Faster-rcnn之RNP网络代码详解B]]></title><link>https://blog.csdn.net/jhsignal/article/details/117297763</link><guid>https://blog.csdn.net/jhsignal/article/details/117297763</guid><author>jhsignal</author><pubDate>Wed, 26 May 2021 18:20:48 +0800</pubDate><description><![CDATA[1. 首先将一个batch内的图片经过resnet50-fpn网络输出得到featrues，经过FPN层以后会输出5个特征图，在每个特征图上的每个点上进行预测3个坐标框
        # RPN uses all feature maps that are available
        # features是所有预测特征层组成的OrderedDict
        features = list(features.values())

        # 计算每个预测特征层上的预测目标概率和bbo]]></description><category></category></item><item><title><![CDATA[Faster-rcnn中的数据预处理]]></title><link>https://blog.csdn.net/jhsignal/article/details/117293949</link><guid>https://blog.csdn.net/jhsignal/article/details/117293949</guid><author>jhsignal</author><pubDate>Wed, 26 May 2021 16:13:49 +0800</pubDate><description><![CDATA[该代码中讲的是faster-rcnn中在进行训练过程中，对图片进行预处理操作。
对图像进行预处理
在faster-rcnn训练过程中，需要对传入网络中的图片进行预处理，其中包括减均值，除方差，对图像进行缩放等。使用如下函数进行调用。
注意其中images，targets代表的是在pytorch框进中打包好的一个batch_size的图片和其对应的标签
from transform import GeneralizedRCNNTransform

images, targets = self.transfor]]></description><category></category></item><item><title><![CDATA[python类的继承]]></title><link>https://blog.csdn.net/jhsignal/article/details/117261237</link><guid>https://blog.csdn.net/jhsignal/article/details/117261237</guid><author>jhsignal</author><pubDate>Tue, 25 May 2021 18:01:52 +0800</pubDate><description><![CDATA[python继承父类的属性和方法
让子类直接拥有父类的属性和方法的过程就是继承
父类 - 被继承者(又叫超类)
子类 - 继承者
在子类中添加类属性和方法
类属性和方法的添加不会因为继承而收到任何影响
添加对象属性
对象属性是怎么被继承：继承的时候因为init方法被继承，间接继承了对象属性
类中的方法的调用过程(重要)
通过类或者对象在调用方法的时候，会先看当前类中有没有这个方法，如果有就直接调用自己类中的方法；没有就看父类中有没有定义这个方法，如果父类定义了就调用父类的；父类没有定义，就看父类的父类中有没]]></description><category></category></item><item><title><![CDATA[pycharm中debug代码参数的设置]]></title><link>https://blog.csdn.net/jhsignal/article/details/116269543</link><guid>https://blog.csdn.net/jhsignal/article/details/116269543</guid><author>jhsignal</author><pubDate>Thu, 29 Apr 2021 15:09:46 +0800</pubDate><description><![CDATA[1.当使用pycharm调式代码时候，会经常加一些参数，但是在pycharm中只有run和debug，其中并没有带参数的调试。
如下我们可以选择

加入需要的参数

重点：
由于在windows下，脚本的工作路径会和linux下不同，所以使用相对路径的时候特别注意，参数的相对路径的设置。当然具体如何设置呢?如下所示
1.首先找到该脚本代码predict_cls.py的工作路径，找法如下：

然后看看加入的参数的路径相对于这个工作路径的目录，添加到参数中即可。

...]]></description><category></category></item><item><title><![CDATA[ResNet论文解读]]></title><link>https://blog.csdn.net/jhsignal/article/details/115827593</link><guid>https://blog.csdn.net/jhsignal/article/details/115827593</guid><author>jhsignal</author><pubDate>Sun, 18 Apr 2021 22:04:42 +0800</pubDate><description><![CDATA[ResNet论文解读
一、提出背景
随着深度学习的大热，使用卷积神经网络来作为图像的特征提取，从开始的浅层神经网络逐渐向深层神经网络发展（ALexNet–VGG–GoogLeNet，网络结构在不断的加深，这是因为更深的网络可以进行更加复杂的特征模式的提取，从而理论上更深的网络可以得到更好的结果。但是通过简单的叠加层的方式来增加网络深度，可能会带来更多的训练错误率，如下图所示，56层的训练错误率要高于22层网络的错误率，这个问题的出现是由于网络加深，可能引来梯度消失/梯度爆炸的问题：


...]]></description><category></category></item><item><title><![CDATA[一文搞懂BN的原理及其实现过程（Batch Normalization）]]></title><link>https://blog.csdn.net/jhsignal/article/details/115749349</link><guid>https://blog.csdn.net/jhsignal/article/details/115749349</guid><author>jhsignal</author><pubDate>Fri, 16 Apr 2021 10:47:27 +0800</pubDate><description><![CDATA[1. 在讲BN之前我要向大家提出几个问题，就是为什么要引入BN呢？在神经网络训练的时候输入图片不是引入了image normalization吗？所以BN到底是什么呢？

Batch Normalization是由google提出的一种训练优化方法。
原论文地址：https://arxiv.org/abs/1502.03167

2.引入BN的原因？
我们在图像预处理过程中通常会对图像进行标准化处理，也就是image normalization，使得每张输入图片的数据分布能够统均值为u，方差为h的分布。这样]]></description><category></category></item><item><title><![CDATA[os.path.dirname(__file__)，os.path.basename(_file_)，os.path.abspath(_file_)在python中的用法]]></title><link>https://blog.csdn.net/jhsignal/article/details/115300607</link><guid>https://blog.csdn.net/jhsignal/article/details/115300607</guid><author>jhsignal</author><pubDate>Mon, 29 Mar 2021 14:50:27 +0800</pubDate><description><![CDATA[我在windows磁盘F:\debug\1文件下创建了一个test.py的python文件，下面在这个python代码中解释os.path.dirname(__file__)，os.path.basename(_file_)，os.path.abspath(_file_)等用法

1.os.path.abspath(file)
os.path.dirname(file) 返回脚本的绝对路径
# -*- coding: utf-8 -*-
import os 
 
#os.path.abspath(__fil]]></description><category></category></item><item><title><![CDATA[opencv保存单通道图片]]></title><link>https://blog.csdn.net/jhsignal/article/details/115230756</link><guid>https://blog.csdn.net/jhsignal/article/details/115230756</guid><author>jhsignal</author><pubDate>Fri, 26 Mar 2021 10:36:15 +0800</pubDate><description><![CDATA[由于opencv读取完图片在保存图片时候，图片的通道需要时三通道，否则在保存的时候会报错。如下代码可以完成单通道图片的保存。


注：opencv读取图片的通道数默认为b,g,r。故在使用cv2.cvtColor函数转成rgb的时候，仍然需要对图片进行通道转换，故需要使用img= img[:, :, ::-1]才能使用cv2.imwrite()函数保存图片。


import cv2

img = cv2.imread('1.png')
if len(img.shape) == 2 or img.sha..]]></description><category></category></item><item><title><![CDATA[力扣-160. 相交链表（python）]]></title><link>https://blog.csdn.net/jhsignal/article/details/115226090</link><guid>https://blog.csdn.net/jhsignal/article/details/115226090</guid><author>jhsignal</author><pubDate>Fri, 26 Mar 2021 09:12:39 +0800</pubDate><description><![CDATA[160. 相交链表
编写一个程序，找到两个单链表相交的起始节点。
如下面的两个链表：

输入：intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
输出：Reference of the node with value = 8
输入解释：相交节点的值为 8 （注意，如果两个链表相交则不能为 0）。从各自的表头开始算起，链表 A 为 [4,1,8,4,5]，链表 B 为 [5,0,1,8,4,5]。]]></description><category></category></item><item><title><![CDATA[力扣142.环形链表 II（python求解）]]></title><link>https://blog.csdn.net/jhsignal/article/details/115211869</link><guid>https://blog.csdn.net/jhsignal/article/details/115211869</guid><author>jhsignal</author><pubDate>Thu, 25 Mar 2021 16:29:59 +0800</pubDate><description><![CDATA[142. 环形链表 II
给定一个链表，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。
为了表示给定链表中的环，我们使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。 如果 pos 是 -1，则在该链表中没有环。注意，pos 仅仅是用于标识环的情况，并不会作为参数传递到函数中。
说明：不允许修改给定的链表。
进阶：
你是否可以使用 O(1) 空间解决此题？

示例 1：
输入：head = [3,2,0,-4], pos = 1
输出：返回索引为 1 的链表节点
解释：]]></description><category></category></item><item><title><![CDATA[剑指 Offer 40. 最小的k个数（python求解）]]></title><link>https://blog.csdn.net/jhsignal/article/details/115192436</link><guid>https://blog.csdn.net/jhsignal/article/details/115192436</guid><author>jhsignal</author><pubDate>Thu, 25 Mar 2021 08:02:00 +0800</pubDate><description><![CDATA[剑指 Offer 40. 最小的k个数
输入整数数组 arr ，找出其中最小的 k 个数。例如，输入4、5、1、6、2、7、3、8这8个数字，则最小的4个数字是1、2、3、4。

题解;
比较直观的想法是使用堆数据结构来辅助得到最小的 k 个数。堆的性质是每次可以找出最大或最小的元素。我们可以使用一个大小为 k 的最大堆（大顶堆），将数组中的元素依次入堆，当堆的大小超过 k 时，便将多出的元素从堆顶弹出。
。
class Solution:
    def getLeastNumbers(self, arr]]></description><category></category></item><item><title><![CDATA[python如何判断图像是几通道图片]]></title><link>https://blog.csdn.net/jhsignal/article/details/115133075</link><guid>https://blog.csdn.net/jhsignal/article/details/115133075</guid><author>jhsignal</author><pubDate>Tue, 23 Mar 2021 17:38:24 +0800</pubDate><description><![CDATA[1.在图像处理的过程中，图像的种类各异，有单通道8bit的，有3通道，24bit的，还有4通道32bit的，当然如果不加判断的读取图片有时候可能会导致代码的bug，所以在读取图片的过程中要先判断图像是什么类型，针对不同的类型图片采取不同的处理方式，如下代码采用PIL来判断图像是几通道图片。
"coding = utf-8"

import shutil
import os,sys
import cv2
from PIL import Image
import numpy as np

input_path ]]></description><category></category></item><item><title><![CDATA[VGG16_BN网络结构]]></title><link>https://blog.csdn.net/jhsignal/article/details/114978942</link><guid>https://blog.csdn.net/jhsignal/article/details/114978942</guid><author>jhsignal</author><pubDate>Thu, 18 Mar 2021 14:51:43 +0800</pubDate><description><![CDATA[VGG16_BN
Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): ReLU(inplace=True)
(3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), p]]></description><category></category></item><item><title><![CDATA[pycharm专业版连接远程docker容器]]></title><link>https://blog.csdn.net/jhsignal/article/details/114542789</link><guid>https://blog.csdn.net/jhsignal/article/details/114542789</guid><author>jhsignal</author><pubDate>Mon, 08 Mar 2021 18:35:49 +0800</pubDate><description><![CDATA[pycharm专业版连接远程docker容器
一.windows环境下pycharm专业版的安装
如果想使用pycharm远程连接docker容器，需要在windows环境下安装专业版的pycharm，专业版下载链接https://www.jetbrains.com/pycharm/
二.配置远程docker容器
1.启动带有端口的docker容器。
6006端口是用来运行tensorboard的，这里重要的是22端口。如果希望通过ssh远程连接docker，需要对容器的22端口做端口映射。
docker ]]></description><category></category></item><item><title><![CDATA[短视频去除logo(抖音)]]></title><link>https://blog.csdn.net/jhsignal/article/details/114291010</link><guid>https://blog.csdn.net/jhsignal/article/details/114291010</guid><author>jhsignal</author><pubDate>Tue, 02 Mar 2021 18:09:13 +0800</pubDate><description><![CDATA[Video-removal -logo
​        本代码仓库使用opencv中的图像修复技术来对视频中的每一帧进行修复，从而得到干净去除掉水印的视频，同时保留了视频的音频部分。
Dependent environment
pip install opencv-python
pip install moviepy
pip install pydub

How to remove
1.找到水印的位置，对于视频中logo会出现在相对固定位置的去除方法。比如抖音，快手，logo会出现在视频的左上角或者视频的]]></description><category></category></item><item><title><![CDATA[剑指 Offer 32 - III. 从上到下打印二叉树 III]]></title><link>https://blog.csdn.net/jhsignal/article/details/113949244</link><guid>https://blog.csdn.net/jhsignal/article/details/113949244</guid><author>jhsignal</author><pubDate>Mon, 22 Feb 2021 18:46:25 +0800</pubDate><description><![CDATA[请实现一个函数按照之字形顺序打印二叉树，即第一行按照从左到右的顺序打印，第二层按照从右到左的顺序打印，第三行再按照从左到右的顺序打印，其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#        ]]></description><category></category></item></channel></rss>