text:
\section{Introduction}
\label{sec1}
\noindent Hard exudate is one of the most significant manifestation of diabetic retinopathy (DR) \cite{klein1987wisconsin}. Automated and accurate segmentation of hard exudate in colour fundus images has several potential applications in clinical such as large-scale automated DR screening, computer-aided diagnosis and severity level assessment of DR \cite{sasaki2013quantitative}.

The segmentation of hard exudate can be formulated as a dense classification problem.  At the era of deep learning, without any exception, the first choice is fully convolutional networks (FCNs). Its goal is to optimise parameters in designed FCNs to best fit the exudate ground-truth via minimising a specified loss function. However, achieving this goal is challenge due to two issues:
\begin{itemize}
	\item \textbf{ Extreme class imbalance.} To illustrate how extreme the class imbalance is, we account the ratio of negative samples (i.e. background pixels) to positive samples (i.e. hard exudate pixels) in two public datasets for hard exudate segmentation, i.e.  DDR \cite{DDR} and IDRiD \cite{idrid2018} (see Table. \ref{ratio}). The ratio in DDR \cite{DDR} and IDRiD \cite{idrid2018} is $512$ and $110$ respectively. With those serious extreme class imbalanced data, how to design loss function and train the segmentation model to alleviate the bias towards majority class becomes critical.

	\item \textbf{Enormous variation in size across connected components of hard exudate regions.} Most of hard exudate connected regions are small. In particular, we calculate the relative area of connected hard exudate regions and find that almost $90\%$ hard exudate pixels belong to connected regions whose relative area to the whole fundus image is less than $9.7\times 10^{-5}$ in DDR \cite{DDR} and $1.1\times10^{-4}$ in IDRiD \cite{idrid2018}. More seriously, there are $10\%$ hard exudate pixels belonging to connected hard exudate regions with relative areas less than $2.0\times10^{-6}$ in DDR \cite{DDR} and $5.0\times 10^{-6}$ in IDRiD \cite{idrid2018} respectively. The size variations of largest $10\%$ and smallest $10\%$ in DDR \cite{DDR} and IDRiD \cite{idrid2018} are almost $48$ and $22$ times, respectively. This variation in size which the FCN model needs to handle is enormous and rises a huge challenge for representation and classifier learning.
\end{itemize}

\begin{table}[t]
	\caption{Class distribution imbalance and exudate region size variation existing in exudate segmentation datasets DDR \cite{DDR} and IDRiD \cite{idrid2018}. $Ratio_{neg/pos}$ denotes the ratio of background pixels and hard exudate pixels. $Size_{large}$ and $Size_{small}$ are the relative size to images of the top $10\%$ largest exudate regions and top $10\%$ smallest exudate regions in the whole dataset.}
	\centering

	\begin{tabular}{c|c|c}
		\hline Dataset &  $Ratio_{neg/pos}$ & $Size_{large}$/$Size_{small}$ \\ \hline
		DDR & 512 &  $9.7\times10^{-5}$/$2.0\times 10^{-6}$\\
		IDRiD & 110 & $1.1\times 10^{-4}$/$5.0\times 10^{-6}$ \\ \hline
	\end{tabular}

	\label{ratio}
\end{table}

An intuitive way for hard exudate segmentation is to fine-tune semantic segmentation networks, such as HED \cite{HED}, PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and Deeplabv3+ \cite{Deeplabv3plus}, which are originally designed for dense classification tasks on natural scene images. Those methods handle the issue of class imbalance via using class balanced cross-entropy (CBCE) loss rather than the traditionally used cross-entropy loss. Inspired by HED \cite{HED}, Guo et al. \cite{guo2019l-seg, binloss} propose a variant of CBCE loss called bin loss and fine-tune the parameters in HED \cite{HED} for hard exudate segmentation. Bin loss \cite{guo2019l-seg, binloss} considers not only the class imbalance problem but also the hardness of background pixels to be correctly classified. FCNs trained with CBCE loss successfully avoid background bias. However, directly up-weighting loss of minority class and down-weighting loss of majority class according to the inverse class frequency is too rough. This makes the segmentation model be biased in favour of exudate pixels. Taking PSPNet \cite{PSPNet} as example, when training it with CBCE loss, the model always wrongly identifies confusion structures and background regions around hard exudates, as shown in Fig.~\ref{eg4intro} (b) and (f).
\begin{figure*}[t]
	\centering
	\includegraphics[width=\textwidth]{figs/eg4intro}
	\caption{Segmentation results by PSPNet \cite{PSPNet} trained with CBCE loss and Dice loss and our proposed dual-branch network. For better visualisation, we show the segmentation results of the entire image in (a) in the first row and zooming in the white solid window in (a) in the second row. Pixels in yellow are exudate pixels that are correctly classified. Pixels in red are background pixels that are wrongly classified as exudate pixels. Pixels in green are exudate pixels that are wrongly classified as background pixels. Dashed cyan box highlights background regions wrongly identified as exudate and dashed magenta box highlights exudate regions wrongly identified as background. From this figure we can see that PSPNet \cite{PSPNet} trained with CBCE loss tends to classify background as exudate while it trained with Dice loss tends to result in misidentification on hard exudate in small size. On the contrary, our dual-branch segmentation with DSM loss based on PSPNet \cite{PSPNet} achieves better than the single branch ones.}
	\label{eg4intro}
\end{figure*}

An alternate strategy is to train FCNs with Dice loss \cite{diceloss}. Dice loss \cite{diceloss} is a regional loss which measures the overlapping error between the prediction and ground truth. It works better than CBCE loss when class imbalance issue is serious. However, because the costs on small exudate regions in terms of Dice loss are slight comparing to that on large hard exudate regions, FCNs trained with Dice loss is biased towards large hard exudate regions and results in dentification on small large hard exudates. The large variation in size across connected components of hard exudate makes the bias more serious. Fig. \ref{eg4intro} (c) and (g) show the results by PSPNet \cite{PSPNet} trained with Dice loss, which tends to mis-classifiy small hard exudate regions as background.

In this paper, we propose a dual-branch network with dual-sampling modulated Dice loss to take care of both large and small hard exudate connected regions. As shown in Fig. \ref{framework}, our dual-branch network consists of two branches: large hard exudate biased segmentation branch and small hard exudate biased segmentation branch. It is trained with a dual-sampling modulated (DSM) Dice loss. Each branch separately performs its own duties for representation and classifier learning for hard exudates in different sizes. Large hard exudate biased segmentation branch learns a segmentation model which is large hard exudate biased while small hard exudate biased segmentation branch is biased in supporting small hard exudates. The bias of both learning branches is achieved by the proposed DSM loss. For large hard exudate biased segmentation branch, Dice loss with uniform pixel sampler is used. For small hard exudate biased segmentation branch, a re-balanced pixel sampler is used to oversample hard exudate pixels and undersample background pixels. Thus hard exudate pixels are sampled multiple times, which increases the penalty on misidentification of small hard exudate regions. In this way it well compensates the large hard exudate biased segmentation branch. The bias of two branches are shifted by modulation with regard to learning epoch. We evaluate the effectiveness of the proposed dual-branch network on DDR \cite{DDR} and IDRiD \cite{idrid2018} and results show that our dual-branch network outperforms existing hard exudate segmentation methods. Furthermore, to demonstrate the effectiveness of underlying thoughts of dual-branch network, we combine it with several dense classification networks. Results show that dual-branch networks trained with our proposed dual-sampling modulated Dice loss achieve superior performance to single branch networks trained with Dice loss.

In summary, the contributions of this paper are as follows:
\begin{itemize}
	\item 	We propose a novel framework named dual-branch network to handle the issues of extreme class imbalance and enormous variation in size existed in the task of automated hard exudate segmentation from colour fundus images.
	\item  We propose a dual-sampling modulated Dice loss to guide the learning process of dual-branch network, which is an easy-to-difficult learning strategy and adaptively modulates the losses of two branches such that dual-branch network gradually shifts the attention to easy task of large hard exudate segmentation to hard task of small hard exudate segmentation.
	\item We conduct extensive experiments on two public datasets DDR \cite{DDR} and IDRiD \cite{idrid2018} and demonstrate that dual-branch network achieves state-of-the-art performance on hard exudate segmentation.
\end{itemize}

\begin{figure*}[t]
	\centering
	\includegraphics[width=\textwidth]{figs/framework}
	\caption{Illustration of dual-branch network. The left part is the dual-branch network which is constructed with two identical segmentation branches with partial weight sharing. We note here arbitrary segmentation models such as PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED} are desired. The right part illustrates the proposed dual-sampling modulated Dice loss, which uses a uniform pixel sampler and a re-balanced pixel sampler sample pixels involving loss calculation. The two losses are adaptively modulated by a hyper-parameter which is set according to training epoch.}
	\label{framework}
\end{figure*}

\section{Related Work}
\textbf{Unsupervised Hard Exudate Segmentation Methods.} Earlier methods such as \cite{walter2002contribution, sopharak2008automatic, ravishankar2009automated, welfer2010coarse} adopt morphological operations to enhance exudates, then use a simple thresholding to partition exudate from background. Similarly, Pereira et al. \cite{pereira2015exudate} propose to use median filtering and normalisation on green plane fundus image for enhancement. J. Kaur and D. Mittal \cite{kaur2018a} first remove the vessel and optic disc, then enhance the image by adaptive image quantization and normalisation. Finally, adaptive thresholding is used to identify exudates. Those kinds of methods are simple and do not need expensive annotations by ophthalmologists, but they always fail on confused structures which have high contrast to background.

\textbf{Coarse-to-fine Supervised Hard Exudate Segmentation Methods.} Those methods are data-driven and require expert annotation. They commonly involve two stages: (1) coarse detection stage for candidate detection and (2) fine segmentation stage to finally determine whether the candidate is hard exudate region. For example, in \cite{zhang2014exudate, wang2020hard}, candidates are extracted by mathematical morphology first, then a random forest is trained for classification. Rather than learning to determine whether the candidate is hard exudate, other researchers focus on high quality candidate extraction via learning. For example, Liu et al. \cite{liu2017location} first learn to extract multiscale hard exudate candidate patches and reduces numerous background regions, then identify hard exudate regions from candidate patches according to their characteristics such as intensity contrast to background and area. Kusakunniran et al. \cite{kusakunniran2018hard} first learn a multilayer perceptron for the detection of candidate hard exudate seeds. With the clusters of initial seeds, iterative graph-cut is used for segmentation. Additionally,  Parham et al. \cite{khojasteh2019novel, khojasteh2019exudate} propose to identify exudate patches from non-exudate patches by either training a lightweight deep network on candidate patches or training a support vector machine with features extracted by pre-trained deep network Resnet-50 \cite{ResNet}. However, how to extract hard exudate candidate patches from whole images during testing phase still needs to be solved.

\textbf{End-to-end Hard exudate Segmentation Methods.} Recent hard exudate segmentation methods adopt an end-to-end manner to train an FCN with a loss function. Mo et al. \cite{mo2018exudate} design a fully convolutional residual network named FCRN for exudate segmentation while Guo et al. \cite{LWENet} design a lightweight neural network named LWENet. In \cite{guo2019l-seg}, L-seg is proposed for multi-lesion segmentation. All of those methods take the class imbalance problem into consideration and train the networks with CBCE loss. In \cite{binloss}, an improved CBCE loss incorporating hard negative mining is proposed for hard exudate segmentation. Both CBCE and bin loss avoid the background bias by increasing the cost of wrong classification on exudate pixels. However, due to the imbalanced cost weights, FCNs trained with CBCE loss and bin loss turn to suffer from exudate-bias.

It is noteworthy to mention that dual-network and dual-sampling have been used for class imbalance classification. In \cite{zhou2020bbn}, bilateral branch network (BBN) equipped with two samplers is proposed for class imbalance image classification. In \cite{ouyang2020dual}, a dual-sampling network (DSN) which consists of two separate branches with two samplers is proposed for diagnosis of COVID-19. Our method is inspired by BBN \cite{zhou2020bbn} and DSN \cite{ouyang2020dual}. Although all of those methods contain dual-branches with dual-samplers, ours differs from BBN \cite{zhou2020bbn} and DSN \cite{ouyang2020dual} in three aspects: (1) our dual-branch network is designed for dense classification while BBN \cite{zhou2020bbn} and DSN \cite{ouyang2020dual} are for image-level classification; (2) Images fed into
dual-branch network are randomly sampled from training set while images fed into BBN \cite{zhou2020bbn} and DSN \cite{ouyang2020dual} are sampled according to the pre-defined samplers. (3) Samplers in dual-branch network are used on predicted segmentation masks which sample pixels involving Dice loss calculation while samplers in BBN \cite{zhou2020bbn} and DSN \cite{ouyang2020dual} are used in input layer which sample images for representation and classifier learning.

\section{Method}
\subsection{Overall Framework}
Our goal is to pursuit deep network parameters that best fit the hard exudate ground-truth in different sizes with given training images. For hard exudates in different sizes, learning representation and classifier in different manners is desired. To this end, we propose to adopt two branches to separately learn representation and classifier. One branch, named large hard exudate biased segmentation branch, is mainly responsible for hard exudates in large size. The other, named small hard exudate  biased segmentation branch, is responsible for hard exudates in small size. To achieve the size bias of each branch adaptively, we design a dual-sampling modulated Dice loss, termed DSM. Fig. \ref{framework} illustrates our proposed dual-branch network.

Formally, let $X\in \mathcal{R}^{H\times W\times3}$ denote a training colour fundus image size of $H\times W$ and $Y\in \mathcal{R}^{H\times W}$ is the corresponding ground-truth, which is a binary map within the context of hard exudate segmentation. From training set, we randomly fetch two images $\{X_L, Y_L\}$ and $\{X_S, Y_S\}$ and feed them into large hard exudate biased segmentation branch and small hard exudate biased segmentation branch respectively to obtain the final predictions $\hat{Y}_L$ and $\hat{Y}_S$. Next we elaborate the architecture of our dual-branch network and training details with our dual-sampling modulated Dice loss.

\subsection{Dual-Branch Segmentation Network}

We let both branches economically share the same segmentation network structure, as illustrated in Fig. \ref{framework}. Our dual-branch segmentation network can adopt arbitrary segmentation network. In this paper, we take three state-of-the-art segmentation networks, i.e. PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED} as examples to introduce our dual-branch segmentation network. PSPNet \cite{PSPNet} and Deeplabv3 \cite{Deeplabv3} adopt ResNet50 \cite{ResNet} equipped with dilation convolution \cite{Deeplab} in the last two stages as the backbone while HED \cite{HED} adopts the five-stage VGG16 \cite{VGGNet} as backbone. Both ResNet50 \cite{ResNet} and VGG16 \cite{VGGNet} contain five stages of convolutions. Additionally, in PSPNet \cite{PSPNet}, a pyramid pooling module is attached in the last convolutional stage, then a classifier is followed to make dense predictions. An auxiliary classifier is attached on the second convolution stage and auxiliary loss is generated to help optimise the learning process. In Deeplabv3 \cite{Deeplabv3}, an atrous spatial pyramid pooling module is attached on the last convolutional stage to generate multiscale feature maps. In HED \cite{HED}, five side-output layers are stitched on five convolutional stages and finally a fusion layer is used to aggregate the side-output predictions. To reduce the model complexity and speed up the inference, for PSPNet \cite{PSPNet} and Deeplabv3 \cite{Deeplabv3} as segmentation branch, weights in first four stages of backbone networks are shared while rest weights are learned separately. For HED \cite{HED}, only the first three stages of backbone networks are shared. In this way, the representations for final classifiers are specific to hard exudate in different sizes. The loss items in PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED} are replaced with our proposed dual-sampling modulated Dice loss.

\subsection{Loss Function}
In each training iteration, two pairs of fundus images and their ground truth denoted by $\{X_L, Y_L\}$ and $\{X_S, Y_S\}$ are randomly fetched. $X_L$ is fed into the large hard exudate biased segmentation branch and predictions are obtained and denoted by $\hat{Y}_L$. Similarly, $X_S$ is fed into the small hard exudate biased segmentation branch and predictions are obtained and denoted by $\hat{Y}_S$. As hard exudate segmentation suffers from the issues of extreme class imbalance and large variation in size, rather than using the class balanced cross-entropy loss \cite{guo2019l-seg, binloss}, we propose the dual-sampling modulated Dice loss (DSM loss). As shown in Fig. \ref{framework}, the total loss can be expressed as:
\begin{equation}
\mathcal{L}_{total} = \mathcal{L}_{DSM}\;.
\label{eq:largefinal}
\end{equation}

\textbf{Dual-Sampling Modulated Dice Loss.}  In our design of DSM loss, two different samplers are used to sample pixels from predictions by two branches separately. Then Dice loss is used to measure the dissimilarity between set of sampled pixels and their ground truths.

For large hard exudate biased segmentation branch, with predicted segmentation mask $\hat{Y}_L$, we use a uniform pixel sampler which samples hard exudate pixels and background pixels with equal probability. We denote the sampled pixel set with $\hat{\mathcal{S}}_{L}=\{\hat{y}_{L,n}\}_{n=1}^{N}$ where $N=H\times W$ and the corresponding set of ground truth with $\mathcal{S}_{L}=\{y_{L,n}\}_{n=1}^{N}$ where $y_{L, n}$ is ground truth of $\hat{y}_{L, n}$. We use Dice loss \cite{diceloss} to calculate the dissimilarity between sampled pixel set and the corresponding ground truth labels:
\begin{equation}
\mathcal{L}_{L}(\hat{\mathcal{S}}_L, \mathcal{S}_{L}) = 1- \mathcal{D}(\hat{\mathcal{S}}_L, \mathcal{S}_{L})\;,
\label{eq:largefinal}
\end{equation}
where $\mathcal{D}(\hat{\mathcal{S}}_L, \mathcal{S}_{L})$ measures the overlapping degree between two sets:
\begin{equation}
\mathcal{D}(\hat{\mathcal{S}}_L, \mathcal{S}_{L}) = \frac{\sum_{\hat{y}_{L,n}\in \hat{\mathcal{S}}_L} 2  \hat{y}_{L,n} y_{L,n}} {\sum_{\hat{y}_{L,n}\in \hat{\mathcal{S}_L}}  \hat{y}_{L,n} + \sum_{y_{L,n}\in \mathcal{S}_L} y_{L,n}}\;.
\label{eq:dice}
\end{equation}
Obviously, the loss defined by Eq. (\ref{eq:largefinal}) and (\ref{eq:dice}) focuses on overlapping error, which greatly alleviates the bias towards majority class like cross-entropy loss as well as minority class like CBCE loss. Dice loss produces serious penalty on misidentification of large hard exudate regions while slight penalty on misidentification of small hard exudate regions, which results in bias towards large hard exudate regions.

To remedy the misidentification on small hard exudate regions, from prediction by small hard exudate biased segmentation branch, we use a re-balanced pixel sampler to sample pixels involving loss calculation. Particularly, we oversample the exudate pixels and undersample background pixels. Thus hard exudate pixels in small regions are sampled multiple times with a high confidence, which increases the penalty of misidentification on small hard exudate regions. As a result, the learning focus is shifted into small hard exudate regions. In formulation, we randomly sample $N_1$ hard exudate pixels and $N-N_1$ background pixels with replacement. We denote the sampled pixel set with $\hat{\mathcal{S}}_{S}=\{\hat{y}_{S,n}\}_{n=1}^{N}$ and the corresponding set of ground truth with $\mathcal{S}_{S}=\{y_{S,n}\}_{n=1}^{N}$ where $y_{S, n}$ is ground truth of $\hat{y}_{S, n}$. Similarly, the loss for small hard exudate biased segmentation branch is calculated as follows:
\begin{equation}
\mathcal{L}_{S}(\hat{\mathcal{S}}_S, \mathcal{S}_{S}) = 1- \mathcal{D}(\hat{\mathcal{S}}_S, \mathcal{S}_{S})\;,
\label{eq:smallfinal}
\end{equation}
where $\mathcal{D}(\hat{\mathcal{S}}_S, \mathcal{S}_{S})$ is the Dice coefficient which is computed same with Eq. (\ref{eq:dice}).

As the segmentation of hard exudates in large size is much easier than in small size, we propose an easy-to-difficult learning strategy. We adaptively modulate the losses of two branches such that the dual-branch network first learns to handle the easy task, then focuses on difficult task. At the beginning of learning, we multiply the loss of large hard exudate biased segmentation branch by a large weight $\alpha$ while the loss of small hard exudate biased segmentation branch by a small weight $1 - \alpha$ to enforce dual-branch network learn to segment hard exudate in large size. As the large hard exudate biased segmentation branch becomes more and more sophisticated in segmentation of large hard exudates, we gradually decrease the loss weight $\alpha$ and increase $1-\alpha$. In this way, the focus of dual-branch network is shifted to segmentation of small hard exudates gradually. Formally, we express our proposed dual-sampling modulated Dice loss as
\begin{equation}
\mathcal{L}_{DSM} = (1-\alpha) \cdot \mathcal{L}_{L}(\hat{\mathcal{S}}_L, \mathcal{S}_{L}) + \alpha\cdot  \mathcal{L}_{S}(\hat{\mathcal{S}}_S, \mathcal{S}_{S})\;,
\label{eq:smallfinal}
\end{equation}
where $\alpha$ is relative to learning epoch
\begin{equation}
\alpha = 1 -\left( \frac{epoch}{epoch_{max}}\right)^2\;.
\label{eq:smallfinal}
\end{equation}

\textbf{Inference.} In inference phase, the test fundus image is fed into both branches and two predictions are obtained. As both branches are equally important, we simply perform element-wise average on two predictions to obtain the final prediction.

\section{Experiments}
In this section, we first introduce the data and evaluation metrics for hard exudate segmentation, and present the implementation details, then give ablation analysis and finally make comparisons with state-of-the-arts.

\subsection{Data and Evaluation Metrics}
\textbf{Data.} In our experiments, we validate our method on two public datasets for hard exudate segmentation. The first one is the DDR dataset \cite{DDR}, which is made public for diabetic retinopathy classification, lesion segmentation and detection in 2019. To our best knowledge, DDR \cite{DDR} is the largest dataset for hard exudate segmentation. Fundus images in DDR \cite{DDR} are collected from 147 hospitals, covering 23 provinces in China and their size ranges from $1088\times1920$ to $3456\times5184$. The large variant in image size and large domain gap make the classification and segmentation on DDR \cite{DDR} more challenge. Specific to lesion segmentation, DDR \cite{DDR} provides 757 fundus images with pixel-level annotation, among which 383 images are for training, 149 for validation and 225 for testing. The other is IDRiD \cite{idrid2018, idrid2020}, provided by a grand challenge on "Diabetic Retinopathy – Segmentation and Grading" in 2018. It provides 81 fundus images size of $4288\times2848$ with pixel-level hard exudate annotations, among which 54 images are used for training and 27 for testing. All of those images are acquired from an eye clinic in India.

\textbf{Evaluation Metrics.} We evaluate segmentation methods at both pixel-level and region-level. With regard to pixel-level metrics, following \cite{DDR} and \cite{idrid2020}, Intersection of Union (IoU) and Area Under Precision-Recall Curve (AUPR) are adopted. We also adopt F-score for evaluation, which is harmonic mean of sensitivity ($SN$) and positive predicted value ($PPV$).

With regard to region-level metrics, we follow \cite{zhang2014exudate, liu2017location, binloss} and re-define true positive (TP), false positive (FP) and false negative (FN). We denote predicted hard exudate connected component set with $\hat{C}=\{\hat{C}_1,\cdots, \hat{C}_N \}$ and ground truth hard exudate connected component set with $C = \{C_1, \cdots, C_M\}$. A pixel is defined as a TP if, and only if, it belongs to:
\begin{equation}
\{\hat{C} \cap C\} \cup \left\{ \hat{C}_i \bigg| \frac{|\hat{C}_i \cap C|}{|\hat{C}_i|} > \sigma \right\} \cup \left\{ C_i \bigg| \frac{|\hat{C}_i \cap C|}{|C_i|} > \sigma \right\}\;,
\end{equation}
where $|\cdot|$ accounts the cardinality and $\sigma\in [0,1]$ is the overlap ratio threshold. The larger $\sigma$ is, more rigorous the condition that a pixel is treated as a TP is. A pixel is considered as an FP if, and only if it belongs to
\begin{equation}
\{\hat{C}_i | \hat{C}_i \cap C = \emptyset \}
\cup \left\{ \hat{C}_i \cap \bar{C} \bigg| \frac{|\hat{C}_i \cap C|}{|\hat{C}_i|} \leq \sigma \right\}\;,
\end{equation}
where $\bar{C}$ is complementary set to $C$. A pixel is considered as an FN if, and only if it belongs to
\begin{equation}
\{C_i | \hat{C} \cap C_i = \emptyset \}
\cup \left\{ C_i \cap \bar{\hat{C}} \bigg| \frac{|C_i \cap \bar{\hat{C}}|}{|C_i|} \leq \sigma \right\}\;,
\end{equation}
where $\bar{\hat{C}}$ is complementary set to $\hat{C}$. Rest pixels are considered as TNs. The region-level F-score is defined as
\begin{equation}
F_{\sigma} = \frac{2\times SN_\sigma \times PPV_\sigma}{SN_\sigma + PPV_\sigma}\;,
\end{equation}
where $SN_\sigma$ is sensitivity defined as $SN_\sigma=\frac{TP}{TP+FN}$ and $PPV_\sigma$ is positive predictive value defined as $PPV_\sigma=\frac{TP}{TP+FP}$. In our experiment, $F_{0.2}$, $F_{0.35}$, $F_{0.5}$, $F_{0.65}$ and $F_{0.8}$ are reported.

\subsection{Implementation Details}
\textbf{Data Preprocessing and Augmentation.} For images in DDR \cite{DDR}, we first crop the bounding box of field of view, then for cropped boxes whose short side is less than 1024, we enlarge the short side to equal length of long side via zero padding. Finally, we resize them to $1024\times1024$. For images in IDRiD \cite{idrid2018, idrid2020}, we directly resize images to $1440\times960$. Following \cite{guo2019l-seg, binloss}, on both datasets, two tricks are adopted to augment the training data: rotation (90$^{\circ}$, 180$^{\circ}$ and 270$^{\circ}$) and flipping (horizontal and vertical).

\textbf{Experimental Setting.} We build three variants of dual-branch segmentation network based on PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED}. We call them dual-PSPNet, dual-Deeplabv3 and dual-HED respectively and implement them within PyTorch framework. We initialise the parameters in backbones with the pre-trained model on ImageNet \cite{ImageNet} and the parameters associated with classifiers with Gaussian distribution with zero mean and standard deviation of 0.01. SGD is used for parameter optimisation. Hyper-parameters include: initial learning rate(0.03 poly policy with power of 0.9), weight decay (0.0005), momentum (0.9), batch size (2) and iteration epoch (100 on DDR \cite{DDR} and 40 on IDRiD \cite{idrid2018}). Sample rate $N_1/N$ in re-balanced pixel sampler is set to 0.5. The models are trained on GeForce RTX 2080 Ti with two GPUs.

\subsection{Ablation Study}
\label{subsction:AblationStudy}
\textbf{Effect of Sample Rate.} We take dual-PSPNet as example and first explore the effectiveness of sample rate $N_1/N$ of re-balanced pixel sampler. We set it to 0.25, 0.5, 0.75 and reversed class frequency and train dual-PSPNet on DDR \cite{DDR} training set separately. Results on test set are reported in Table. \ref{AblationSampleRate}.  They show that our dual-PSPNet network achieves best when sample rate $N_1/N$ is set to 0.5. In what follows, except for extra illustration,  $N_1/N = 0.5$  is the default setting.

\begin{table*}[tbh!]
	\caption{Effect of sample rate of re-balanced sampler in our Dual PSPNet on DDR \cite{DDR} test set. $SN_{pixel}$, $PPV_{pixel}$ and $F_{pixel}$ are pixel-level sensitivity, positive predicted value and F-score.}
	\centering

	\begin{tabular}{|c|c|c|c|c|c|}
		\hline
		$N_1/N$ & $SN_{pixel}$ & $PPV_{pixel}$  & $F_{pixel}$ & $IoU$ & $AUPR$\\	\hline
		0.25 &	0.5863 & 	\textbf{0.5706} &	0.5784 	& 0.4069 & 0.5468 \\
		0.5	& \textbf{0.6077} &	0.5582 &	\textbf{0.5819}  & \textbf{0.4103} & \textbf{0.5587} \\
		0.75 & 0.5947  & 0.5628 & 0.5783  & 0.4068 & 0.5491 \\
		reverse class frequency &0.5673 & 0.5547 & 0.5609 & 0.3898 & 0.5202 \\\hline
	\end{tabular}
	\label{AblationSampleRate}
\end{table*}

\begin{table*}[tbh!]
	\caption{Comparisons of single branch PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED} with CBCE loss and Dice loss and our dual-branch ones with DSM loss on DDR \cite{DDR} test set.}
	\centering
	\begin{tabular}{|c||c|c|c||c||c||c|c|c|c|c|}
		\hline
		Method & $SN_{pixel}$ &  $PPV_{pixel}$ & $F_{pixel}$ & $IoU$ & $AUPR$ & $F_{\sigma=0.2}$ & $F_{\sigma=0.35}$ & $F_{\sigma=0.5}$ & $F_{\sigma=0.65}$ & $F_{\sigma=0.8}$\\
		\hline
		PSPNet + CBCE & \textbf{0.7014} & 0.2934 & 0.4137 & 0.2608  & 	0.4906 & 0.7441  & 0.5880 & 0.4917 & 0.4587 & 0.4257\\
		PSPNet + Dice & 0.4425 & \textbf{0.7372} & 0.5530 & 0.3822  & 	0.4730 & 0.8640 & 0.7790 & 0.6954 & \textbf{0.6467} & 0.5902 \\
		Dual PSPNet + DSM & 0.6077 & 0.5582 & \textbf{0.5819} & \textbf{0.4103}  & \textbf{0.5587} & \textbf{0.8887} & \textbf{0.8454} & \textbf{0.7543} & 0.6428 & \textbf{0.6034} \\ \hline

		Deeplabv3 + CBCE & \textbf{0.6557} & 0.3431 & 0.4505 & 0.2907 &  	0.4881 & 0.7968 & 0.6652 & 0.5564 & 0.4856 & 0.4617 \\
		Deeplabv3 + Dice & 0.4210 & \textbf{0.7395} & 0.5366 & 0.3667 & 	0.4495 & 0.8310 & 0.7341 & 0.6768 & 0.6334 & 0.5754 \\
		{Dual Deeplabv3+DSM} & 0.5170 & 0.6569 & \textbf{0.5786} & 	\textbf{0.4071} & \textbf{0.5701} & \textbf{0.8811} & \textbf{0.8372} & \textbf{0.7542} & \textbf{0.6562} & \textbf{0.6053} \\\hline

		HED + CBCE & \textbf{0.7302} & 0.2617 & 0.3853 & 0.2386 & \textbf{0.5342} & 0.6823 & 0.5672 & 0.4705 & 0.4317 & 0.3959 \\
		HED + Dice  & 0.4899 & \textbf{0.7032} & 0.5775 & 0.4060 &  	0.4775 & 0.8451 & 0.7807 & 0.7107 & \textbf{0.6776} & \textbf{0.6164} \\
		Dual HED + DSM & 0.6006 & 0.5714 & \textbf{0.5856} & \textbf{0.4140}  & 	0.5294 & \textbf{0.8809} & \textbf{0.8402} & \textbf{0.7205} & 0.6419 & 0.6099 \\\hline
	\end{tabular}
	\label{AblationDDR}
\end{table*}

\begin{table*}[tbh!]
	\caption{Comparisons of single branch PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED} with CBCE losse and Dice loss and  our dual-branch ones with DSM loss on IDRiD \cite{idrid2018} test set. }
	\centering
	\begin{tabular}{|c||c|c|c||c||c||c|c|c|c|c|}

		\hline
		Method & $SN_{pixel}$ &  $PPV_{pixel}$ & $F_{pixel}$ & $IoU$ & $AUPR$ & $F_{\sigma=0.2}$ & $F_{\sigma=0.35}$ & $F_{\sigma=0.5}$ & $F_{\sigma=0.65}$ & $F_{\sigma=0.8}$\\
		\hline
		PSPNet + CBCE & \textbf{0.9632} & 0.3361 &	0.4983 & 0.3318 & 0.7475 & 0.8254 &	0.7036 	&0.6268 	&0.5463 	&0.5024  \\
		PSPNet + Dice	& 0.7358 &	\textbf{0.7819} & 0.7582 & 0.6106& 0.7878 &0.9388 	&0.9297 	&0.9160 &	0.8924 &	0.8304 \\
		Dual PSPNet + DSM & 0.7748  & 0.7572 &
		\textbf{0.7659} & \textbf{0.6206} & \textbf{0.7977} &	\textbf{0.9469} &	\textbf{0.9386} &	\textbf{0.9241} &	\textbf{0.8946} &	\textbf{0.8351} \\\hline

		Deeplabv3 + CBCE & 	\textbf{0.9492} 	& 0.3518  &	0.5134 & 0.3453 & 0.7335 & 	0.8532 & 0.7410 & 0.6467 & 	0.5244 & 0.5190\\
		Deeplabv3 + Dice & 0.7527 	& \textbf{0.7690} &	0.7607 & 0.6139 & \textbf{0.7891} & 	0.9462 & 0.9344 & 0.9198 & 0.8925 & 0.8320 \\
		{Dual Deeplabv3+DSM} & 0.7686 &	0.7621 & \textbf{0.7653}  & \textbf{0.6198} & 0.7890 & 	\textbf{0.9478}& 	\textbf{0.9374}& 	\textbf{0.9240}& 	\textbf{0.8973}& 	\textbf{0.8347}  \\\hline

		HED + CBCE & \textbf{0.9019} & 	0.4065  & 0.5604 & 0.3893 & 0.7740 & 0.9013 & 	0.8219 & 0.7419 &  0.5967 & 	0.5664 \\
		HED + Dice & 0.7211 &	0.7640   & 0.7419 & 0.5897 & 0.7894 & 	0.9429 & 	0.9325 & 	\textbf{0.9202} & 	0.8698 & 	0.8038\\
		Dual HED + DSM & 0.7630 & \textbf{0.7739}  & \textbf{0.7684} & \textbf{0.6239} & \textbf{0.8296} & 	\textbf{0.9446} & 	\textbf{0.9348} & 	0.9184 & 	\textbf{0.8971} & 	\textbf{0.8353} \\\hline
	\end{tabular}
	\label{AblationIDRiD}
\end{table*}

\begin{figure*}[tbh!]
	\centering
	\includegraphics[width=\textwidth]{figs/ablation_study_ddr1}
	\caption{Visual comparisons of proposed dual-branch networks with DSM loss to single branch networks with CBCE loss and Dice loss on DDR \cite{DDR}. The single branch networks are PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED}. Pixels in yellow are exudate pixels that are correctly classified. Pixels in red are background pixels that are wrongly classified as exudate pixels. Pixels in green are exudate pixels that are wrongly classified as background pixels. Dashed magenta boxes highlight hard exudates that are misidentified.}
	\label{ablation_study_ddr1}
\end{figure*}

\begin{figure*}[tbh!]
	\centering
	\includegraphics[width=\textwidth]{figs/ablation_study_idirid1}
	\caption{Visual comparisons of proposed dual-branch networks with DSM loss to single branch networks with CBCE loss and Dice loss on IDRiD \cite{idrid2018}. The single branch networks are PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED}. Pixels in yellow are exudate pixels that are correctly classified. Pixels in red are background pixels that are wrongly classified as exudate pixels. Pixels in green are exudate pixels that are wrongly classified as background pixels. Dashed magenta boxes highlight hard exudates that are misidentified.}
	\label{ablation_study_idirid1}
\end{figure*}

\textbf{Ablation Study on Different Losses.} To evaluate dual-branch network, we conduct experiments on three state-of-the-art dense classification methods PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED} with several settings, including single branch network with CBCE loss, single branch network with Dice loss \cite{diceloss} and our proposed dual-branch network with DSM loss on both DDR \cite{DDR} and IDRiD \cite{idrid2018}.

Table. \ref{AblationDDR} reports the results on DDR \cite{DDR}. Obviously, single branch networks with Dice loss \cite{diceloss} are much more sophisticated in hard exudate segmentation than with CBCE loss. This is because that CBCE loss re-weights costs according to reverse class frequency. It over-weights costs on hard exudate pixels and under-weights costs on background pixels, which makes the network be biased in favour of hard exudates. Thus the pixel-level sensitivity is very high while the PPV is very low. The harmonic mean i.e. pixel-level F-score is low. On the contrary, single network branches trained with Dice loss improve the pixel-level PPV significantly but inferior sensitivity. Nevertheless, final pixel-level F-score has been greatly improved. Compared with single branch networks with Dice loss, our dual branch networks with proposed DSM loss further improve the performance. In terms of IoU, our dual-branch ones with DSM loss are superior to the single branch ones. In terms of AUPR, our dual-branch ones outperform single branch ones except for the dual HED. In terms of region-level evaluation metrics, from Table. \ref{AblationDDR}, we can see that dual Deeplabv3 \cite{Deeplabv3} with DSM loss consistently achieves better than single branch ones. Our dual PSPNet with DSM outperforms the single branch PSPNet \cite{PSPNet} with CBCE loss and Dice loss  except for $\sigma=0.65$. Our dual HED  with DSM outperforms the single branch HED \cite{HED} with Dice loss when $\sigma$ is small. As $\sigma$ is larger than 0.5, our dual HED with DSM loss achieve inferior regional F-score to single branch network trained with Dice loss. The possible reason is that our dual HED with DSM segment small sized hard exudates coarsely and background pixels around small sized hard exudates are misidentified. When $\sigma$ is small, those misidentified background pixels are treated as true positives. Thus our dual HED with DSM loss achieve high regional F-scores than single branch network with Dice loss. When $\sigma$ increases, those misidentified background pixels are considered as false positives, thus the regional F-scores of ours are lower than single branch one with Dice loss. On IDRiD \cite{idrid2018}, from Table. \ref{AblationIDRiD} we can see that our dual-branch networks with DSM outperform single branch networks with CBCE and Dice loss except for Dual HED with DSM when $\sigma$ is 0.5.

In terms of number of parameters, parameters in two branches with PSPNet \cite{PSPNet} and Deeplabv3 \cite{Deeplabv3}  are almost 1.5 times of those in single branches while two branches with HED \cite{HED} is 1.9 times of that in single branch.

Visual comparisons on DDR \cite{DDR} and IDRiD \cite{idrid2018} of our dual-branch networks with DSM loss to single branch networks with CBCE and Dice losses are provided in Fig. \ref{ablation_study_ddr1} and Fig. \ref{ablation_study_idirid1} respectively. We can see that single networks with CBCE loss are prone to misidentify background pixels around hard exudates. Single networks with Dice loss are prone to misidentify small size hard exudates. Our dual-branch networks work better than single branch networks.

\subsection{Comparison with State-of-the-arts}
On DDR \cite{DDR}, we compare our three dual-branch networks with three deep learning based methods: Deeplabv3+ \cite{Deeplabv3plus}, DNL \cite{yin2020disentangled} and SPNet \cite{hou2020strip}. For DNL \cite{yin2020disentangled} and SPNet \cite{hou2020strip}, we provide results with two losses: CBCE and Dice loss. All these methods are originally designed for natural scene image segmentation. Table. \ref{rstDDR} reports the results. We note that results of Deeplabv3+ \cite{Deeplabv3plus} in the first row are provided by \cite{DDR} and the rest are obtained by fine-tuning on DDR \cite{DDR}. As shown in Table. \ref{rstDDR}, our dual-branch networks achieve superior performance in terms of both pixel-level and region-level metrics.

On IDRiD \cite{idrid2018}, we compare our dual-branch network with five deep learning based  methods: DNL \cite{yin2020disentangled}, SPNet \cite{hou2020strip}, L-seg \cite{guo2019l-seg}, LWENet \cite{LWENet} and Bin loss \cite{binloss}. For LWENet \cite{LWENet} and L-seg \cite{guo2019l-seg}, the predicted binary masks are provided by authors. With them, $IoU$, $F_{pixel}$ and the region-level metrics are computed. For the rest methods, results are obtained by fine-tuning. Table. \ref{rstIDRiD} reports the results. We can see that our dual-branch network achieves superior results than compared methods.

\begin{table*}[tbh!]
	\caption{Comparison of other segmentation methods on DDR \cite{DDR} test set. Results of Deeplabv3+ \cite{Deeplabv3plus} are directly borrowed from \cite{DDR}.}
	\centering

	\begin{tabular}{|c||c|c|c||c|c|c|c|c|}
		\hline
		Method  & $IoU$ & $F_{pixel}$ & $AUPR$ & $F_{\sigma=0.2}$ & $F_{\sigma=0.35}$ & $F_{\sigma=0.5}$ & $F_{\sigma=0.65}$ & $F_{\sigma=0.8}$\\
		\hline
		Deeplabv3+ \cite{Deeplabv3plus} & 0.3118 &- &-	&- 	&- 	&- 	&- 	&-\\
		DNL \cite{yin2020disentangled} + CBCE & 0.1643  & 	0.2822  & 	0.5125 & 0.4923  & 0.3617  & 	0.3308  & 	0.3186  & 	0.2957 \\
		DNL \cite{yin2020disentangled} + Dice & 0.3862 & 0.5572 & 0.4854 &			0.8683 & 0.8116 & 0.7026 &	0.5970 & 0.5611 \\
		SPNet \cite{hou2020strip} + CBCE & 0.1034 & 0.1874 & 0.5034 &			0.2856 & 0.2395 & 0.2264 & 0.2073 & 0.1942  \\
		SPNet \cite{hou2020strip} + Dice & 0.3089 & 0.4720 & 0.3748 &			0.7469 & 0.7151 & 0.6291 &	0.5395 & 0.4948 \\	\hline
		{Dual PSPNet + DSM  (Ours)} &	0.3822  & 0.5530 &  	0.4730 & 0.8640 & 0.7790 & 0.6954 & {0.6467} & 0.5902

		\\
		{Dual Deeplabv3 + DSM  (Ours)}& {0.4071} &	{0.5786} & {0.5701} & {0.8811} & {0.8372} & {0.7542} & {0.6562} & {0.6053} \\
		Dual HED + DSM (Ours) &  {0.4140}  & {0.5856} &	{0.5294} & {0.8809} & {0.8402} & {0.7205} & 0.6419 & 0.6099
		\\\hline
	\end{tabular}

	\label{rstDDR}
\end{table*}

\begin{table*}[tbh!]

	\caption{Comparison of other segmentation methods on IDRiD \cite{idrid2018} test set.}
	\centering

	\begin{tabular}{|c||c|c||c||c|c|c|c|c|}
		\hline
		\textbf{Method} & ${IoU}$ & ${F_{pixel}}$ & $AUPR$ & ${F_{\sigma=0.2}}$ & ${F_{\sigma=0.35}}$ & ${F_{\sigma=0.5}}$ & ${F_{\sigma=0.65}}$ & ${F_{\sigma=0.8}}$\\
		\hline

		DNL\cite{yin2020disentangled} + CBCE & 0.2304 &	0.3745 & 0.6807 &			0.6709 &	0.5753 &	0.4671 &	0.3771 &	0.3760 \\
		DNL\cite{yin2020disentangled} + Dice & 0.5715 & 0.7273 & 0.6891 &		0.9413 & 0.9283 &	0.9062 & 0.8698 & 0.8041 \\
		SPNet \cite{hou2020strip} + CBCE & 0.2143 & 0.3530 & 0.6223 &			0.6412 &	0.5384 &	0.4420 &	0.3568 &	0.3552  \\
		SPNet \cite{hou2020strip} + Dice & 0.4923 &	0.6598 &	0.6064 	&		0.9258 &	0.8883 &	0.8642 &	0.8145 &	0.7147  \\
		L-seg \cite{guo2019l-seg} & 0.5909 & 0.7429 & - &0.9508 &	0.9417 &	0.9271 &	0.8754 &	0.8038
		\\
		LWENet \cite{LWENet} & 0.5226 & 0.6865 & - &0.9191 & 0.8942& 0.8582& 0.8179& 0.7160\\
		Bin loss \cite{binloss} &
		0.3582 &	0.5275&	0.7047 &0.9070& 	0.8056 &	0.6890 &	0.5400 &	0.5319 		\\\hline
		Dual PSPNet + DSM (Ours) & {0.6206} &	{0.7659} & 0.7977&	{0.9469} &	{0.9386} &	{0.9241} &	{0.8946} &	{0.8351} \\

		Dual Deeplabv3 + DSM  (Ours) &  {0.6198} &  {0.7653}  & 0.7890 & 	{0.9478}& 	{0.9374} & 	{0.9240}& 	{0.8973}& 	{0.8347}  \\

		Dual HED + DSM & {0.6239} & {0.7684} &  {0.8296} & 	{0.9446} & 	{0.9348} & 	0.9184 & 	{0.8971} & 	{0.8353}\\	\hline
	\end{tabular}

	\label{rstIDRiD}
\end{table*}

Visual comparisons between previous methods and ours on DDR \cite{DDR} and IDRiD \cite{idrid2018} are performed. In Fig. \ref{VisualComparisonDDR}, the segmentation results by our dual-branch networks based on PSPNet \cite{PSPNet}, Deeplabv3 \cite{Deeplabv3} and HED \cite{HED}, DNL \cite{yin2020disentangled} with CBCE loss and Dice loss, SPNet \cite{hou2020strip} with CBCE loss and Dice loss are shown. We can see that (1) the compared DNL \cite{yin2020disentangled} and SPNet \cite{hou2020strip} with CBCE loss are hard exudate biased and prone to misidentify background pixels as hard exudate pixels; (2) SPNet \cite{hou2020strip} with Dice loss are background biased and prone to misidentify hard exudate pixels as background pixels; (3) Our dual-branch networks achieve better than them. In Fig. \ref{VisualComparisonIDRiD}, the segmentation results by ours, DNL \cite{yin2020disentangled} SPNet \cite{hou2020strip},  L-seg \cite{guo2019l-seg}, LWENet \cite{LWENet}, and Bin loss \cite{binloss} are shown. Similarly, we can see that (1) DNL \cite{yin2020disentangled} and SPNet \cite{hou2020strip} with CBCE loss are hard exudate biased while with Dice loss are background biased; (2) L-seg \cite{guo2019l-seg} is background biased while LWE \cite{LWENet} and Bin loss \cite{binloss} are hard exudate biased; (3) ours achieve better than the compared methods.

\begin{figure*}[t]
	\centering
	\includegraphics[width=\textwidth]{figs/sota_ddr_2}
	\caption{Visual comparisons with DNL \cite{yin2020disentangled}, SPNet \cite{hou2020strip} with CBCE loss and Dice loss on DDR \cite{DDR}. Pixels in yellow are exudate pixels that are correctly classified. Pixels in red are background pixels that are wrongly classified as exudate pixels. Pixels in green are exudate pixels that are wrongly classified as background pixels.}
	\label{VisualComparisonDDR}
\end{figure*}

\begin{figure*}[t]
	\centering
	\includegraphics[width=0.96\textwidth]{figs/sota_idrid_2}
	\caption{Visual comparisons of with DNL \cite{yin2020disentangled}, SPNet \cite{hou2020strip} with CBCE loss and Dice loss, L-seg \cite{guo2019l-seg}, LWENet \cite{LWENet} and Bin loss \cite{binloss} on IDRiD \cite{idrid2018}. Pixels in yellow are exudate pixels that are correctly classified. Pixels in red are background pixels that are wrongly classified as exudate pixels. Pixels in green are exudate pixels that are wrongly classified as background pixels.}
	\label{VisualComparisonIDRiD}
\end{figure*}

\newpage
\section{Conclusion}
In this paper, we propose dual-branch network to address the issues of extreme class imbalance and enormous variation in size across target regions for segmentation of hard exudate in colour fundus images. Our dual-branch network uses two branches with partial weight sharing to learn representations and classifiers for hard exudates in different sizes. It is trained with the proposed dual-sampling modulated Dice loss, which enables dual-branch network to first learn to segment large hard exudates then small hard exudates. Experimental results on two public datasets for hard exudate segmentation demonstrate that our dual-branch network outperforms existing segmentation networks with both CBCE loss and Dice loss.

\bibliographystyle{aaai21}

\begin{small}

redpajama_set_name: RedPajamaArXiv


The Cardprotector is like the vault of the Secrid product line.
The aluminium Cardprotector protects your most important cards, against bending and breaking, and against your RFID cards being scanned (such as the transportation pass, ID card, the latest credit cards and business cards). Store up to six cards in the Cardprotector, including one with embossing. Or up to five cards, three with embossing.


text:
Podthingy
Episode 29: "Go Out In Spectacular Fashion"
In this episode, it's all about the Marvel and DC cinematic universes, as we talk about the movie lineups through 2020, and discuss which movies we're most and least looking forward to. On the DC side, we explore the rumors surrounding the new Wonder Woman movie, why Shazam isn't part of DC continuity, the possibility of Jared Leto playing The Joker in Suicide Squad, the pros and cons of individual versus team movies, and the prospect of a Green Lantern reboot. On the Marvel side, we talk about our most anticipated films from Marvel's recently announced Phase 3, Black Panther playing a large part in movies to come, the Avengers: Age of Ultron trailer, Robert Downey Jr. returning as Tony Stark in Civil War, and our choices for Captain Marvel, plus we debate the idea that long term announcements spoil the surprise of what's to come. On the TV front, we discuss The Flash, Gotham, Constantine, Supergirl, Krypton, Peggy Carter, Agents of SHIELD, Daredevil, and more. DRINK OF THE WEEK - Jager Bombs
All content © 2019 Podthingy.

redpajama_set_name: RedPajamaCommonCrawl


text:
Publication & Promotion
The article everyone in traditional publishing is reading today
Thread starter stephenspower
stephenspower
In the recent NYer, George Packer sums up Amazon's relationship to the publishing industry pretty well:
George Packer: Is Amazon Bad for Books? : The New Yorker
Amazon doesn't come off too well. Nor do the traditional publishers.
Reactions: psychotick and Black Dragon
buyjupiter
Maester
I do find it remarkable that the only people willing to talk about Amazon are former employees. (I'm aware that some companies have "gag" rules when talking to media, but surely if it's as bad as the claims made by the author of the article, someone would have come forward under anonymity and talked.)
I think the writer tried to present both sides of the story, but I kept seeing bias creep in, especially in how he framed the "he saids, she saids" portions of the piece. There are ways of conveying a he said-she said, while not making it seem like the person who said it didn't happen that way is lying, in my opinion. There is something so telling about claims that only have he said-she said evidence to back them up. And as always, extraordinary claims require extraordinary evidence.
I did love how he threw out the fact that Bezos' wife published through Knopf, like that said everything that needed to be said about where "real" publishing happened. Maybe she had a dream to be published by Knopf, and that was the only publisher she wanted? (I seriously want to see one of my stories under the TOR imprint. I'll accept being published under a different imprint/by a different house (because whoohoo publication!), but that's what I dream of when I think of writing "success".)
I'm not drinking the kool-aid in either direction, but I did hope to see something more substantial than rumor, ex-employees grievances, etc.
If any of it is true, and at this point I have serious doubts as to the validity of any of the claims in the article because of how poorly (and biased) it was presented, it seems like par for the course for any of the big companies in the world today. Which would be disappointing, because...darnit surely the publishing industry (Amazon and the Big 5) can make profits without screwing people over like it's 1892, right?
It's pretty spot on, especially when it comes to negotiations over terms and the lack of any data they give to publishers. The elimination of buy buttons is a by now standard tactic on their part. I was glad to see the focus on co-op, that is, payola for books. B&N's no different in this respect. I think (and I wish I could recall my source) that half their profits are from co-op.
It reads like Dallas with books instead of oil!
Cheers, Greg.
Article Concerning an Internal Fight Inside the Romance Writers of America
Garren Jacobsen
An outrageous article on Self Publishing
Demesnedenoir
Great Article on Book Piracy
Self-publishing article
Caged Maiden
Self-Published By Choice - interesting article
PaulineMRoss
ThinkerX


Anyway, as some of you may already know (or not, i guess), i have http://LinuxIntro.com which is (obviously) a Linux and open source software oriented website. I am too damned busy to keep up with creating new articles, and updating out of date articles, and exploring new areas of Linux and Open Source software to educate myself enough to make articles for others to learn it.
I have been running my unfinished Content Management System on this site (and on my political reform website, that is likewise falling into a state of neglect for the same reasons), and noticed that many others are trying to assist the open source movement by publishing their own articles on their own little home pages, or blogs.
So now it is a community content management system; a hybrid between a wiki, a blog, and a high-end commercial CMS. It allows users who have any at least Level 1 privileges (normal 'users' are level 0) to publish articles and edit articles (even if they did not create it, as sometimes another user may have more experience, and thus more useful information to add to an existing article), and for users with Level 2 privileges to move articles and upload images, and for users with Level 3 (highest you can be) privileges to delete articles and to delete images.
I don't have any publishing guidelines written yet, but for the most part it is common sense. All articles must be filed in the appropriate category (just try your best, and at worst i will just move it to the correct category), and limit only 1 video per article page (articles can have many pages).
When you log in, you can click on "Account" and then "My Website" to enter your own website address for others to see. When a user reads an article you've written, they can click on your name below the article, and see your profile, which will display anything you want to share (website, bio, interests, etc). If you publish an article, you are not limited to keeping it only on Linux Intro. You can publish it on your own site, or any other site; however you cannot delete it, as others may have made a contribution to your article, and that would not be fair to them. You can add YOUR VERY OWN you tube videos that you already have, or any new ones that you make; just remember 1 video per page. Also, if you DO post a video with your article, make sure that what you do and say in the video is typed out in the article's paragraphs. This is not a video site, and so textual content is mandatory for articles; also text is accessible and video is not, so i try to adhere to 801 standards as much as possible (or practicable).
For the record, in case anyone is wondering, this is NOT an attempt to 'steal users' from this website. It is only an attempt to create a more user-engaged, comprehensive, and in-depth informational material for new Linux and Open Source users to benefit from; and to make it MUCH easier to publish content.
Oh, almost forgot, if you have been a member of this forum for longer than 4 months, and have over 200 posts, PM me HERE with your Linux Intro user name, and i will raise your security clearance on Linux Intro so that you can publish articles (otherwise you're only a user). If you already have a moderator/maintainer/admin status here on this forum, then PM me HERE with your user name on Linux Intro and i will raise your security level on Linux Intro.
I know that the site may still look like crap, but i'm about to redesign it again to look much more clean (like i just did with http://Ionisis.com ) and presentable. I am brainstorming for ideas atm, and should begin with a new design tomorrow.
Also, if you do not find an appropriate category for your article, then feel free to suggest one; but i believe that i have a fairly comprehensive --yet still generalized-- list to choose from. And please do let me know what you think about this system.
Try to remember that "articles" are not the same as "article pages". An article is an object that is independent from its pages, and has a parent-children --or one-to-many relationship with its pages. You publish the ARTICLE's details, like its title, keywords, and description, and THEN you publish any/all of the pages that belong to that article. You can completely ignore the "previous" and "next" options, as the system takes care of pagination automatically; those are for advanced use, namely, chainlinking disparate articles together (the end of one article leading to the beginning of another).
Enjoy, and please do give feedback!
I have moved this article to web management because the contents of the post are about your web management system.
The idea of a wiki form of article publishing is quite interesting, however this leads me to question how you plan to control the content to limit inaccurate information and spam posts within existing articles. Do you have functions built in to identify only revised text and the author who revised them to the readers? Is there a tool in place that you can use to quickly remove specific changes from a particular user?
If so please point me to a page that identifies the modification and the user responsible so I can see the output.
Additionally, is this platform based upon open source software, commercial software or a mixed platform. Would you publish a guide to setting up a similar system so others can test the functionality on their own sites to speed up development. If this is your own creation, then I would highly recommend setting up a guide about the setup and a section on your site for just the framework, so that other can use it and share ideas/solutions to make your site the core location for development of the system.


text:
Dosimetry for in vitro assessment of targeted alpha therapy
Type Seminar
La physique dans tous ses états
Date June 22 > 22, 2021 - 11h
Time 11h
March 17, 2023 - 11:00
The quest for the sterile neutrino: a journey between nuclear and particle physics
Room 105, GANIL, Caen | France
Stepping towards the island of stability
February 03, 2023 - 14:00
Nuclear physics from first principles: establishing a continuous thread between few-body and heavy-nuclear observables using effective field theories
Alpha room, GANIL, Caen | France
by Tibaux Jacquet
Abstract: Targeted alpha therapy (TAT) is a method of cancer treatment based on the action of a specific radiolabeled molecule, i.e. an alpha emitter linked with a molecule that will target the desired area. The choice of using alpha particles is based on the fact that their LET is higher than the one of beta particles, and therefore their range is about a few tens of micrometers in the body. This allows to limit the dose received by the healthy cells in the vicinity. However, this extreme locality can become a disadvantage during in-vitro studies. Indeed, the spatial distribution of radionuclides in the culture medium must be known precisely to know the dose received by these cells. Measuring the dose with accuracy allows to compare the different treatment methods and thus affirm their efficiency.
The main goal of this internship was to study a device allowing the dosimetric calculation of irradiated cells in culture wells. The experimental device is based on the use of a silicon semiconductor diode underneath a cell culture well in which are placed radioelements. The diode records the energy spectrum emitted through the well. The first part of the work was the characterization of the measurement chain (repeatability, reproductibility etc…). Then to characterize the spatial distribution of 223Ra in culture wells, the energy spectra were acquired and deconvoluted using Monte-Carlo simulations. The first results about the inhomogeneity of radioelements in the wells tend to show the adequacy with a previous study.


text:
Home /Stray City: A Novel (Paperback)
Stray City: A Novel (Paperback)
By Chelsey Johnson
This book combines four of the best elements to make an interesting novel: the 90s, rock'n'roll, Portland, and an accidental pregnancy. Andy moved to Portland to escape her conservative parents who disapproved of her being a lesbian. She never thought she would be pregnant, live an almost heterosexual life, until she met Ryan, who changed all that...kind of...Complex characters who don't really know what they want drive this story, making it a fascinating read clear to the end.
— Lulu
To anyone who hates Portlandia as much as I, Stray City is a true ode to the Portland of the 90's. With healthy doses of bicycles, queers, and punk discord, Johnson weaves a story of belonging – or not belonging: the struggle of being at odds with those you love and care about. It's about life testing your convictions and making it through.
Tissues may come in handy towards the end with Johnson's heartwarming story that echoes voices of runaway youth, finding a sense of place, family, and growing up.
— Marissa Santillan
April 2018 Indie Next List
"A coming-of-age story about Andrea, a Midwestern, Catholic, artistic lesbian who escapes her family to try and find herself. After moving to Portland, Oregon, in the '90s, Andrea gets involved in printmaking and music, meets a circle of people she depends upon, experiences a breakup, and finds a new friend. I could not put this novel down once I started it. When I was down to the last 10 pages, I read as slowly as I could, savoring every last word about the people I had come to know in Stray City. Such a good story!"
— Nona Camuel, CoffeeTree Books, Morehead, KY
"A thoughtful and joyous literary experience that celebrates its characters and liberally rewards its readers." —New York Times Book Review, Editors' Choice
"I tore through this novel like an orphaned reader seeking a home in its ragtag yet shimmering world." — Carrie Brownstein
"Our '90s nostalgia is hella high these days, and this tender, funny story made our aging hipster hearts sing." — Marie Claire
A warm, funny, and whip-smart debut novel about rebellious youth, inconceivable motherhood, and the complications of belonging—to a city, a culture, and a family—when none of them can quite contain who you really are.
All of us were refugees of the nuclear family . . .
Twenty-three-year-old artist Andrea Morales escaped her Midwestern Catholic childhood—and the closet—to create a home and life for herself within the thriving but insular lesbian underground of Portland, Oregon. But one drunken night, reeling from a bad breakup and a friend's betrayal, she recklessly crosses enemy lines and hooks up with a man. To her utter shock, Andrea soon discovers she's pregnant—and despite the concerns of her astonished circle of gay friends, she decides to have the baby.
A decade later, when her precocious daughter Lucia starts asking questions about the father she's never known, Andrea is forced to reconcile the past she hoped to leave behind with the life she's worked so hard to build.
A thoroughly modern and original anti-romantic comedy, Stray City is an unabashedly entertaining literary debut about the families we're born into and the families we choose, about finding yourself by breaking the rules, and making bad decisions for all the right reasons.
Chelsey Johnson received an MFA from the Iowa Writers' Workshop and a Stegner Fellowship from Stanford University. Her stories and essays have appeared in Ploughshares, One Story, Ninth Letter, The Rumpus, and NPR's Selected Shorts, among other outlets. She has received fellowships to the MacDowell Colony, the Virginia Center for Creative Arts, and Signal Fire Arts. Born and raised in Northern Minnesota, she currently lives in Richmond, Virginia, and teaches at the College of William & Mary. This is her first novel.
"This novel has everything: the circa-'99 lesbian indie-rock scene! Zines! Answering machines! . . . Our 90s nostalgia is hella high these days, and this tender, funny story made our aging hipster hearts sing."
— Marie Claire
"Insightful and brilliant, Stray City explores the stickiness of doing what's expected and the strange freedom born of contradiction. I tore through this novel like an orphaned reader seeking a home in its ragtag yet shimmering world."
— Carrie Brownstein, New York Times bestselling author of Hunger Makes Me a Modern Girl
"A winsome novel about love and belonging—and the possibility of discovering both in the most unlikely of places, and among the most unexpected people. Tender and smart, Stray City is a fantastic debut from a huge talent."
— Cristina Henríquez, bestselling author of The Book of Unknown Americans
"Johnson's writing is very funny yet emotionally tender, and ultimately is a heartwarming celebration of found families and our desire to belong."
— Buzzfeed, Exciting New Books You Need To Read This Spring
"Gritty and lively."
— Entertainment Weekly
"This lively first novel features a lesbian reeling from a breakup who begins a befuddling affair with a man. Things don't get any easier when she realizes she's pregnant."
— O magazine
"Diverse and colorful . . . a vibrant portrait of a woman coming into her own, in a city also coming into its own, brimming with music, art and beauty . . . a thoughtful and joyous literary experience that celebrates its characters and liberally rewards its readers."
— New York Times Book Review, Editors' Choice
"Stray City has it all. As funny as it is moving; as joyful, as radically communal, as it is lonesome . . . Honestly, one of the most absorbing, finely-tuned books I've had the pleasure of falling down into. Chelsey Johnson is a wonder."
— Justin Torres, bestselling author of We the Animals
"Written with wit and sensitivity and exquisite emotional intelligence, Stray City is an absolute pleasure to read. Chelsey Johnson is one of the most refreshing new voices in literature."
— Jami Attenberg, New York Times bestselling author of The Middlesteins and All Grown Up
"A humorous and heartfelt exploration of sexual identity and unconventional families."
— The Millions, The Great 2018 Book Preview
"Radically funny and truly insightful . . . a brilliant emotional rollercoaster of a book, exploring what it means to create and sustain a family, and the difficulties of loving people—including yourself."
— Nylon Magazine, 50 Books We Can't Wait to Read in 2018
"A love letter to Portland in the 90s, Stray City is a gorgeous, funny, sharply spot-on tale of growing up and making family again and again and again."
— Michelle Tea, award-winning author of Valencia
"A coming-out and coming-of-age story; a surprise-I'm pregnant story; a will- they-or-won't-they love story; and an ode to a time and place we think we've heard everything about—and it's all utterly fresh. . . . Recommended for Jami Attenberg and Rainbow Rowell fans."
"Both an ode to and critique of the modern American family."
— Harper's Bazaar
"Charming, witty, and perfectly fast-paced, Chelsey Johnson's Stray City examines the modern family through the lens of one extraordinarily quirky family out of Portland, Oregon."
— Pop Sugar
"A propulsive, compassionate, hilarious novel about coming of age at the fraught intersections of Midwestern family norms, punk rock community, and LGBTQ politics."
— Leni Zumas, Tin House
"A love letter to both a city and a community, and in some ways also to a specific moment in our queer history, this novel stole my heart... If I could have willed a book into existence, that book would be Stray City."
— Autostraddle.com
Publisher: Custom House
Fiction / Coming of Age
Fiction / Family Life
Kobo eBook (March 19th, 2018): $9.99
Paperback, Large Print (March 20th, 2018): $28.59
MP3 CD (March 20th, 2018): $72.48


5000+ Wealth Management Investors as on April 2019. Find Wealth Management Investors from 155 countries. Sell or Finance your Wealth Management Business by sending your business proposal to pre-screened Wealth Management Investors with verified contact details and background information and investment requirements. Join our 739,000+ Member Network Today to Sell or Finance your Wealth Management Business.


Executive chef Michael Deremer of Queen's Harbour Yacht and Country Club in Jacksonville, Fla., paves this trendy Floridian fish with toasted nuts and naps it with a rich sauce.
Preheat oven to 400 degrees. Place triggerfish fillets on a heavy baking pan lined with parchment or greased. Lightly brush each fillet with heavy cream and season with salt and pepper. Generously crust fillets with toasted crushed pecans covering all surfaces. Gently press pecans into the fish so they adhere. Bake for 10 to 12 minutes.
To serve, drizzle generously with warm Spiced Rum Butter Sauce and serve immediately.
In a small, deep pan, combine rum and brown sugar and bring to a light simmer over medium-high heat. Allow the sauce to reduce until thickened and frothy, 20 to 25 minutes, stirring occasionally. Add heavy cream and continue to simmer and stir until sauce thickens and is reduced by half, about 15 minutes.
Gradually add soft butter, whisking continuously until creamy and thickened. Store sauce in a warm place to keep it from solidifying. Do not let the sauce get too hot or attempt to reheat on the stove or in the microwave as the sauce will break down.


It's been the subject of many SNL skits as well as Second City-like improvs.
Universal groans are heard when the topic comes up.
Parodies and typologies published in The Wall Street Journal and BloombergBusinessweek (among others) take the different personalities of meeting participants to task, whether their aim is sabotageor boredom relief.
It's clear: Nobody, but nobody likes a work meeting. Ask researchers from the London School of Economics to Epson; most respondents have voted with their clicker: At least 50 percent of all business get-togethers are wasted.
Solutions are many, both serious and fun. "Set a clear agenda" usually tops the list. Another: "Schedule a start and an end time – and stick to it." Others use a combination of carrot and stick to keep meetings on track, on time, on goal.
Use a VERY loud alarm clock, set to stop disruptions and to end meetings.
Finally, track the number of meeting hours against individual, group, and business priorities. See how well you can connect outcomes to time.
Watch what happens when you start to measure: We'll bet you and your colleagues will be spending your work time just a bit differently.


Whatever you call it, Administrative Professionals Week, Secretary's Week or Administrative Assistant's Day, don't forget to show your appreciation for their hard work by sending them a delightful flower arrangement by Bell Flowers, Inc.
You don't need a reason to make someone smile! Surprise someone special with a bouquet from Bell Flowers, Inc. From romantic roses to modern arrangements, we've got it all! We can even deliver your bouquet nationwide or locally to Silver Spring, MD.
You can't send Easter eggs - so send a fresh bouquet of Easter flowers instead! Bell Flowers, Inc has the best and brightest flowers for Easter. Send Easter flowers to Silver Spring, MD or nationwide for a joyful Easter celebration.


text:
Улица Эрисма́на — улица в центре Москвы в Пресненском районе Центрального административного округа от Пресненской набережной до 1-го Красногвардейского проезда.

Происхождение названия
Проектируемый проезд № 3813 получил название в июне 2021 года в память о враче-гигиенисте Фёдоре Фёдоровиче Эрисмане (1842—1915). Фёдор Эрисман был создателем основополагающих принципов общественной гигиены и социально-гигиенического направления медицины в России. Рядом с улицей находится Ботанический сад лекарственных растений Первого московского государственного медицинского университета имени И. М. Сеченова, в котором стоит бывший дом Фёдора Эрисмана — ныне учебно-лабораторный корпус.

Описание
Улица начинается от Пресненской набережной, проходит на север вдоль внешней стороны Третьего транспортного кольца и выходит на 1-й Красногвардейский проезд. Слева от улицы находится Ботанический сад МГМУ.

Примечания

Ссылки

Улицы Москвы, названные в честь людей
Улицы Москвы, появившиеся в 2021 году

redpajama_set_name: RedPajamaWikipedia


text:
Q: Dynamically reading resources from a file I've been using resx files for static strings in order to have a central place for changing them. The problem is that I can't change them after the project is built and deployed.
There are some strings that I would like to change after deployment, without restarting the process (so .config files are out).
It's possible to write code that parses a config file (XML/JSON/YAML/?) efficiently, e.g. caches the result for X seconds or monitors it for changes with FileSystemWatcher, but has something like this already been done?
EDIT: using Json.NET and Rashmi Pandit's pointer to CacheDependency I wrote this JSON parsing class that caches the parsed results until the file is changed:
public class CachingJsonParser
{
    public static CachingJsonParser Create()
    {
        return new CachingJsonParser(
            HttpContext.Current.Server,
            HttpContext.Current.Cache);
    }

    private readonly HttpServerUtility _server;
    private readonly Cache _cache;

    public CachingJsonParser(HttpServerUtility server, Cache cache)
    {
        _server = server;
        _cache = cache;
    }

    public T Parse<T>(string relativePath)
    {
        var cacheKey = "cached_json_file:" + relativePath;
        if (_cache[cacheKey] == null)
        {
            var mappedPath = _server.MapPath(relativePath);
            var json = File.ReadAllText(mappedPath);
            var result = JavaScriptConvert.DeserializeObject(json, typeof(T));
            _cache.Insert(cacheKey, result, new CacheDependency(mappedPath));
        }
        return (T)_cache[cacheKey];
    }
}

Usage
JSON file:
{
    "UserName": "foo",
    "Password": "qwerty"
}

Corresponding data class:
class LoginData
{
    public string UserName { get; set; }
    public string Password { get; set; }
}

Parsing and caching:
var parser = CachingJsonParser.Create();
var data = parser.Parse<LoginData>("~/App_Data/login_data.json");

A: You can use xml files and store it in the Cache. You can use CacheDependency to reload the cache when any change is made to the file.
Links:
CacheDependency: CacheItemUpdateCallback :
In your case your Cache should store an XmlDocument as value
Edit:
This is my sample code
protected void Page_Load(object sender, EventArgs e)
{
        XmlDocument permissionsDoc = null;

        if (Cache["Permissions"] == null)
        {
            string path = Server.MapPath("~/XML/Permissions.xml");
            permissionsDoc = new XmlDocument();
            permissionsDoc.Load(Server.MapPath("~/XML/Permissions.xml"));
            Cache.Add("Permissions", permissionsDoc,
                            new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
                           Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
                    CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
        }
        else
        {
            permissionsDoc = (XmlDocument)Cache["Permissions"];
        }
}

private void ReloadPermissionsCallBack(string key, object value, CacheItemRemovedReason reason)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(Server.MapPath("~/XML/Permissions.xml"));
        Cache.Insert("Permissions", doc ,
                            new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
                           Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
                    CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
    }

redpajama_set_name: RedPajamaStackExchange


Our Leo Mens Matt Stone Bracelet is a beautiful stone design bracelet that is great for an everyday accessory. We have a variety of charms so take a look through our collection! Also available in a smaller size for women!
All our products are hand made and individually made to order so please bare with us while we make your jewellery and expect to receive it in 7-20 days. It will be worth the wait... we promise.


If you are looking for a 10' X 20' display booth as an amazing solution for your next trade show booth, the 10' X 20' Modular Trade Show Booth Display is the right fit for you. Although bigger than a 10' x 10', many displays of this size still look and feel like simple popup stands with very little excitement to them. This leaves the exhibit visitor with little to remember about the exhibitor. The 10' X 20' Modular Trade Show Booth with a wall hanging system gives our customers the ability to have custom built walls that can easily be hung once the 10' X 20' display structure has been assembled. Although 10' X 20' displays are smaller than island or larger inline displays, with this trade show booth, they will still have the show room feel that leaves a lasting impression. Expo Design Pro's patented Modular Trade Show Booth system comes in 10' X 10', 10' X 20', 10' X 30' as well as 10' X 40' solutions all with the custom wall hanging system. Click below to purchase your 10' X 20' Display for your amazing new trade show booth.


Have you figured out your writing process?
Out of curiosity, I've been trying to understand my writing process, particularly for the short story. I seem to do one of two things. Either I jot down a brief outline or list and start writing or I just start writing. Often inspiration comes from a photograph, a painting, a magazine image, an object, or an experience. These motivators tap into a feeling or an emotion or they spark an idea or character.
Other times an idea comes from nowhere. It may evolve slowly or it may hit with a jolt. I'll jot down notes while sitting with a piece of pizza or waiting for a friend for coffee. How very unscientific this writing, inspiration, creativity thing turns out to be. I've learned to keep myself open to all the potential constantly on my radar.
This pre-writing tip from author Joe Bunting is useful no matter your style and helps keep a focus: Before beginning to write, try a screenwriting trick known as a logline. A logline is a one-sentence summary of your short story, its core, its essence. For example, here's a logline for "A Rose for Emily" by William Faulkner: A lonely, Southern woman is found dead and decaying in her home after being abandoned by her lover. The formula is your character + a descriptor (e.g., lonely, Southern woman) followed by an event (e.g., found dead) and followed by a conflict (abandoned by her lover).
The idea and the story begin to flow, meeting rapids and dams and whirlpools and quicksand in the thought river, but I keep going, allowing for change and discovery. Writing craft kicks in while putting the words onto the page and keeping "in flow." If I can, I'll write through to the story's end. The result is the epitome of a rough, rough draft.
The rough draft is a skeleton on which to hang muscles that you sculpt, shape, stretch, and massage. The real fun begins. I start checking for and adding more muscle. The use of the senses. The weaving of description, setting, flashbacks (if any), and character description within the story flow rather than dropping these ingredients in as chunks here and there. I rearrange sentences and paragraphs. I look at the realness of the dialogue, the pace of the rising action, the varying of sentence length and rhythm, and word choice. I try to stay close to my main character and be in the character's head. I look at what the character wants, the obstacles in the way, the tension, the conflict.
As I'm writing, I'll do nuts and bolts research when necessary, keeping the Google page open next to the developing manuscript, as well as a dictionary/thesaurus open in the lower right hand corner of the screen.
I'll experiment, writing a few sentences in present tense or past, using first person POV or third, trying sentences on to see how they feel and assess how I can best tell the story. All the while I'm keeping the reader in mind. Will the reader care about the character, will the reader empathize? I've discovered the character also has to touch me.
At some point I step away. For me, a story needs time to percolate so I understand it more.
When the story feels good, I'll bring out the magnifying glass, looking at individual parts and sentences. Have I strung a bunch of prepositional phrases together? Have I switched tense? Have I written sentences with economy and truth. For example, I had this sentence in a recent story: Henry shifted his gaze to me. Say what? Shifted his gaze? I changed it to read: Henry turned to me. I make sure each sentence reveals character or pushes the story forward.
Finally, there's all that stuff about punctuation and spelling and final proof reading. A recent teacher of mine, Maggie Downs (UC Riverside Palm Desert), suggested putting the manuscript into a different font. Suddenly, a story you've been reading and rereading and can sing in three languages looks different and something you've missed will stand out. From a period to a nuance. For example, I had this sentence and didn't see the error and spell check couldn't make the distinction: He messaged her hand. Whoops. It should read: He massaged her hand. The font change helped me see the word. Lastly, I check for word repetition. On my Mac, under View, I click Sidebar and then Search Pane. I might do a search for the word as and watch the word pop up highlighted in yellow. Or I'll type in "ly" to search for adverbs.
At some point, when I feel a cohesiveness, although I know I could keep diddling with the story forever, I call said story d-o-n-e. F-i-n-i-s-h-e-d. Whew!
You are logged in as Carol Mann.
Welcome to your control panel.
Changed From Pending to Accepted.
Feel like sharing any tips about your writing process? Love to hear from you. Thanks for stopping by.
P.S. I like a short story by Thomas E. Kennedy called "The Author of Things" found in his collection Getting Lucky. In the story we enter the head of fictional author Tom Dunne, who then proceeds to take us on his story writing journey. Writers, I think you will relate.
This entry was posted in Creativity, fiction writing, Finding Ideas: The Creative Process, Inspiration, Looking for Inspiration, Reading, short story, Writing and tagged creativity, editing, ideas - the creative process, inspiration, Joe Bunting, logline, outline, proof reading, rough draft, short story, Thomas E. Kennedy, writing, writing process. Bookmark the permalink.
6 Responses to Have you figured out your writing process?
This was very helpful and insightful. Even when I am doing a straight journalism story, I need to get into another zone, like I am part of the story. Does that make sense.
Sally – I relate to what you're saying. I go into the zone, too, into the scene, and become unaware of time. Glad you stopped by!
Very informative, thanks! This helps even those of us that write non fiction. Appreciate. Sometimes I have an idea but it gets stuck in my brain!
Everyone's process is so different. I'm glad you found something that resonated. Thanks for stopping by!
Enjoyed this because I have no process and my stories can be really disjointed. I also switch between tenses.
This writing thing definitely isn't always a smooth ride! I hit so many bumps in a piece I was working on this morning that I just stopped! Maybe it will unravel itself before my next attempt. Glad you stopped by.


text:
ACCEPTED

#### According to
Index Fungorum

#### Published in
null

#### Original name
Stephanophoron devertens Nyl.

### Remarks
null

redpajama_set_name: RedPajamaGithub


Hey, Siri — Are You Spying On Me?
Recording your voice and storing it on a server sounds alarming —OK, it is alarming— but there's a reason why Amazon Echo and Google Home do it.
If you got an Amazon Echo or Google Home voice assistant for the holidays, welcome to a life of luxurious convenience. You'll be asking for the weather, the news, and your favorite songs without having to poke around on your phone. You'll be turning off lights and requesting videos from bed. The world is yours.
But you know what? That little talking cylinder is always listening to you. And not just listening, but recording and saving many of the things you say. Should you freak out? Not if you're comfortable with Google and Amazon logging your normal web activity, which they've done for years. Hell, many other sites have also done it for years. Echo and Home simply continue the trend of saving a crumb trail of queries, except with snippets of your voice.
Because their brains are located miles away, Echo and Home need an internet connection to work. They do have a very rudimentary education, though: The only spoken commands they understand on their own are "wake words" or "activation phrases," things like "Alexa" or "OK Google." Once you say those magic words, the voice assistants jump to life, capture your voice request, and sling it to their disembodied cloud brains over Wi-Fi.
That means their mics are listening to you even when you're not requesting things from Alexa or Google. But those ambient conversations—the things you say before "Alexa" or "OK Google"—aren't stored or sent over a network. Read more on www.wired.com.
Believe it or not, the Internet we know today didn't even exist 30 years ago, and it wasn't a common part of daily life until the 90s. Check out how computer technology has evolved since Domain Computer Service's founding 20 years ago, in 1997.


text:
8 Davies Street, London W1K 3DW
Mail: london@bastian-gallery.com
Tel: + 44 (0) 20 3940 5009
Bastian – Edin Zenun: Lullaby for Realville
(15 July – 15 August, 2022) BASTIAN London is delighted to present Lullaby for Realville, the first solo exhibition in London by Edin Zenun. The show is comprised of twenty-six small and medium scale abstract paintings which appropriate, distil, riff-on and assimilate music, utopian political philosophy, art history, lavatory graffiti and music.
BASTIAN – Emil Nolde: Anatomy of Light and Water
(6 May – 30 June, 2022) BASTIAN London is delighted to announce, Emil Nolde — Anatomy of Light and Water. The presentation, which runs from 6 May to 30 June 2022, is comprised of 17 seascapes executed in watercolour by the artist between 1920 and 1946 in the region of Seebüll near the German-Danish border, where the artist spent most of his summer months.
BASTIAN – Paul Wallach: T R U T H T H A T
BASTIAN – Ulrich Erben: Spaces of Light and Colour
11 February – 12 March, 2022
BASTIAN – Jeff Koons & Cy Twombly: Primal Gestures
12 October – 18 December, 2021
Bastian – Jean Dubuffet: Sommergäste
13 July – 7 August 2021


text:
Q: Implementation of Android EventSource Using Git REPO https://github.com/streamdataio/eventsource-android/ private onConnect Error I am using a EventSource REPO by  https://github.com/streamdataio/eventsource-android/
and I created an onConnect (); method, however, the eventsource.connect();method is underlined red and says that I cannot access it because it is private? I looked online and everyone uses this REPO with no problem what going on here?
 private void connect() {
    // Create headers: Add the streamdata.io app token
    Map<String, String> headers = new HashMap<String, String>();
    headers.put("X-Sd-Token", streamdataioAppToken);

    // Create the EventSource with API URL & Streamdata.io authentication token
    try {
        eventSource = new EventSource(new URI(streamdataioProxyPrefix), new URI(myApiUrl), new SSEHandler(), headers);
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }

    // Start data receiving
    eventSource.connect();

}

A: I'm Lorie, from streamdata.io. Thanks for looking a our sample projet. Indeed, you are the first user reporting such an issue. Nothing seems wrong with the piece of code you provided. Please make sure that your eventSource object is declared earlier in your code with EventSource type, and that you import the right EventSource class : tylerjroach.com.eventsource_android.EventSource;
If you still encounter the issue, I'd suggest you drop your code on a GitHub public repo and send us the link so that we can help you troubleshoot this.


Since 2010, we've led a team of trainers delivering a suite of half-day and full-day courses on digital and social media skills for central government communications staff.
It's been thrilling to help more than 2000 members of the Government Communications Service to develop their digital skills.
We've delivered courses all around the UK covering social media for PR, digital marketing, agile digital project management, digital engagement for policymaking and crisis communications. Our team brings broad-based experience and credibility earned from years working in and around the public sector. We get strong, positive feedback - and we continue to iterate our course content from delivery to delivery.
Ultimately, our focus is on helping participants to develop practical skills appropriate to their role and experience and embed those skills after they leave. Our mobile IT suite of Chromebooks and independent wifi enable us to incorporate practical exercises and simulations into our sessions, almost regardless of location and IT constraints.
We bring the theory to life, with exercises challenging participants to craft tweets, Facebook and Instagram posts, and planning strategies for social media.


What used to be a relatively simple proposition for broadcasters – delivering a single analogue or digital signal to one type of device – has become a highly complex series of technological tasks.
Broadcasters, pay TV operators and OTT services must deliver video to every type of device now, from big HD and 4K televisions to mobile phones and tablets. The caveat: audiences expect video to look just as good on the smallest device as it does on the largest one.
Today's TV shows are shot at the same quality as feature films, quality that translates into a data rate that could be as high as 5TB an hour or more. Those files are far too large for even the fastest Internet connection to deliver consistently, and most consumer devices aren't designed to play back these video source formats.
So how do you stream premium content to viewers on smart TVs, mobile phones, or tablets – whether those devices are connected to Gigabit Ethernet, a cellular network, or any connection speed in between the two?
The answer: compress video files into smaller sizes and formats. The dilemma: enabling high-quality playback of these files on every possible type of screen.
Codecs are the key to addressing size, format and playback requirements. A codec allows you to take video input and create a compressed digital bit stream (encode) that is then played back (decoded) on the destination device.
There are two types of codecs: lossless and lossy. Lossless compression allows you to reduce file sizes while still maintaining the original or uncompressed video fidelity. Digital cinema files are generally encoded in a lossless format. The video files that you watch on your smart TVs and personal devices are all encoded with a lossy codec, which means taking the original file and reducing as much of the visual information as possible while still allowing the image to look great. All streaming video is encoded using lossy codecs.
There are many different video codecs available – including proprietary ones, algorithms that have been developed by a company and can only be played back on devices made by that company or by licensing its technology. More common are open-source or standards-based codecs. These are typically less expensive to use and don't require content owners to be locked into a closed system.
Today's most popular standards-based codecs for video streaming are AVC/H.264 and HEVC/H.265. Broadcasters and pay TV operators sometimes still use MPEG-2, which is more than 20 years old. The crucial goal in codec development is to achieve lower bitrates and smaller file sizes while maintaining similar quality to the source.
Until fairly recently, most video encoding was performed using specially built hardware chips. AWS Elemental pioneered software-based encoding, which runs on off-the-shelf hardware.
To reduce video size, encoders implement different types of compression schemes. Intra-frame compression algorithms reduce the file size of key frames (also called intra-coded frames or I-frames) using techniques similar to standard digital image compression. Other codec algorithms apply interframe compression schemes to process the frames between key frames.
For standards-based codecs, AWS Elemental builds and maintains its own algorithms that it uses to analyse I-frames and the differences in subsequent frames, storing information on the changes between these frames in predicted frames (P-frames) and processing only the parts of the image that change. Bi-directional predicted frames (B-frames) can look backward and forward at other frames and store the changes.
Once compression has been applied to the pixels in all the frames of a video, the next parameter in video delivery is the bitrate or data rate – the amount of data required to store all the compressed data for each frame over time, usually measured in kilobits or megabits per second (Kbps or Mbps).
Generally speaking, the higher the bitrate, the higher the video quality – and therefore, the more storage required to hold the file and the greater the bandwidth required to deliver the stream.
AWS Elemental compression products are divided into two different categories – live encoders and video-on-demand encoders. Live encoders take in a live video signal and encode it for immediate delivery, in cases such as a live concert or sporting event, or for traditional linear broadcast channels.
While live encoders are limited to analysing and encoding content in real time, VOD encoders that use file-based media sources are not restricted to processing the content in real time. VOD encoders may take multiple passes at the video, analysing it for motion and complexity. For example, explosions in an action movie might require more effort to encode than a talking-head interview.
Constant bitrate (CBR) encoding encodes the video at a more or less consistent bitrate for the duration of a live stream or entire video file. Variation occurs because different frame types will have different data rates, and because buffers on clients allow a small amount of variability in the bitrate during playback. Variable bitrate (VBR) encoding means the video bitrate can vary greatly over the video's duration.
A VBR encode spreads the bits around, using more bits to encode complex parts of content (like action or high-motion scenes) and fewer bits for simpler, more static shots. In either CBR or VBR encoding, the bitrate target is followed as closely as possible, resulting in outputs that are very close in size.
Overall, especially at lower average bitrates, VBR-encoded video is going to look better than CBR-encoded video. Another factor with VBR is that the encoder needs to be configured so that the peak data rate isn't set so high that the viewing device can't process the stream or file.
Quality-defined variable bitrate encoding (QVBR) – a new encoding mode from AWS Elemental – takes VBR one step further. For live or VOD content, QVBR brings sophisticated algorithms to consistently deliver the highest-quality image and the lowest bitrate required for each video. Simply set a quality target and maximum bitrate, and the algorithm determines the optimal results no matter what type of source content you have (high action, talking heads, and everything in between).
For premium content, such as a television series or movie, AWS Elemental Server on-premises or AWS Elemental MediaConvert on the AWS Cloud encodes video files to the highest quality. On-demand services may employ a fleet of AWS Elemental Servers, or just use the auto-scaling MediaConvert service to process VOD assets.
The codec of choice for delivering video evolves every few years and each advance brings with it improved video quality at lower bitrates. At the same time, screen sizes and resolutions get bigger, so it takes considerable computing power to generate compressed files with high video quality.
Until recently, H.264 (also known as AVC) was the best codec for optimising quality and reducing file sizes; many content publishers still use it today. But it's quickly giving way to HEVC: High-Efficiency Video Coding. It's also referred to as H.265; different standards groups employ different designations to refer to the same standard.
HEVC requires more computing power than H.264, but it's more efficient. As AWS Elemental writes its encoding software from scratch, rather than relying on off-the-shelf encoding software, it can take the efficiency gains in each new generation of codec and adjust the software accordingly to get the best quality and/or smallest video file sizes, as well as the shortest encoding times.


WILTON, Conn.–(BUSINESS WIRE)–Altus Capital Partners, Inc. ("Altus"), an investment firm focused on the North American manufacturing sector, today announced it has acquired ChoiceSpine, LP, a leading designer, manufacturer, and marketer of specialized spinal implants, instrumentation and biologics for the surgical treatment of complex spine disorders. Financial terms of the transaction were not disclosed.
Based in Knoxville, TN and founded in 2006, ChoiceSpine, LP and Knox Spine, LLC (collectively, the Company) collaborates with physicians to develop new products which incorporate current medical technology with customized patient solutions. ChoiceSpine™ products include minimally invasive, cervical, thoracolumbar, interbody, lateral, and biologics kits and implants that increase procedural efficiency and efficacy.
"We have built a deep bench of talent that has led the company with an increased focus on product design and engineering which benefit so many patients experiencing spinal injuries," said Rick Henson. "We look forward to working with Altus in further developing our offerings as well as expanding into new product verticals to continue to grow the company and provide patient solutions for the treatment of spinal disorders," added Marty Altshuler.
This is Altus' third acquisition in less than two years and its second in the medical technology space. The firm successfully completed the tender offer for all of the outstanding shares of common stock of MGC Diagnostics Corporation ("MGC"), a global medical technology company dedicated to cardiorespiratory health solutions in December 2017, and the acquisition of Max Environmental Technologies, Inc., an integrated environmental solutions company, in February, 2017.
ChoiceSpine™ is a privately-held spinal device company located in Knoxville, TN. The company prides itself on providing excellent products and exceptional service to meet the needs of their customers. ChoiceSpine offers a breadth of innovative and surgeon-focused systems that are designed to be safe, efficient, and easy-to-use. By working closely with physicians and maintaining a service-focused distribution, ChoiceSpine will continue to bring technically-superior spinal products to market.
Altus Capital Partners is a private equity firm that makes control investments in middle market manufacturing businesses. We believe that our exclusive focus on manufacturing provides us with a unique understanding of the opportunities and challenges faced by companies in the sector. We utilize a patient, thoughtful investment approach and seek to partner with the management teams of our operating companies to achieve growth. With offices in Wilton, CT and Lincolnshire, IL, Altus Capital Partners has completed 18 platform investments and numerous add on acquisitions since 2003. For more information, please visit www.altuscapitalpartners.com/.